diff --git a/main/plugins/org.talend.commons.runtime/pom_server.xml b/main/plugins/org.talend.commons.runtime/pom_server.xml
index 5efa52deee..1fc94b91ec 100644
--- a/main/plugins/org.talend.commons.runtime/pom_server.xml
+++ b/main/plugins/org.talend.commons.runtime/pom_server.xml
@@ -97,7 +97,7 @@
ch.qos.reload4j
reload4j
- 1.2.19
+ 1.2.22
diff --git a/main/plugins/org.talend.core.repository/src/main/java/org/talend/core/repository/model/PendoItemSignatureManager.java b/main/plugins/org.talend.core.repository/src/main/java/org/talend/core/repository/model/PendoItemSignatureManager.java
index 89bd0f4938..983dc112ca 100644
--- a/main/plugins/org.talend.core.repository/src/main/java/org/talend/core/repository/model/PendoItemSignatureManager.java
+++ b/main/plugins/org.talend.core.repository/src/main/java/org/talend/core/repository/model/PendoItemSignatureManager.java
@@ -27,10 +27,6 @@ import java.util.Set;
import org.apache.commons.lang.StringUtils;
import org.apache.log4j.Level;
-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.ICoreService;
import org.talend.core.PluginChecker;
@@ -39,22 +35,22 @@ import org.talend.core.model.properties.RoutineItem;
import org.talend.core.model.properties.SQLPatternItem;
import org.talend.core.model.repository.ERepositoryObjectType;
import org.talend.core.model.repository.IRepositoryViewObject;
+import org.talend.core.pendo.AbstractPendoTrackManager;
+import org.talend.core.pendo.PendoDataTrackFactory;
import org.talend.core.pendo.PendoItemSignatureUtil;
import org.talend.core.pendo.PendoItemSignatureUtil.SignatureStatus;
import org.talend.core.pendo.PendoItemSignatureUtil.TOSProdNameEnum;
import org.talend.core.pendo.PendoItemSignatureUtil.ValueEnum;
import org.talend.core.pendo.PendoTrackDataUtil;
-import org.talend.core.pendo.PendoTrackDataUtil.TrackEvent;
-import org.talend.core.pendo.PendoTrackSender;
+import org.talend.core.pendo.TrackEvent;
+import org.talend.core.pendo.properties.IPendoDataProperties;
import org.talend.core.pendo.properties.PendoSignLogonProperties;
import org.talend.utils.migration.MigrationTokenUtil;
/**
* DOC jding class global comment. Detailled comment
*/
-public class PendoItemSignatureManager {
-
- private PendoSignLogonProperties itemSignProperties = new PendoSignLogonProperties();
+public class PendoItemSignatureManager extends AbstractPendoTrackManager {
private static PendoItemSignatureManager manager;
@@ -63,7 +59,7 @@ public class PendoItemSignatureManager {
static {
manager = new PendoItemSignatureManager();
try {
- isTrackAvailable = PluginChecker.isTIS() && PendoTrackSender.getInstance().isTrackSendAvailable();
+ isTrackAvailable = PluginChecker.isTIS() && PendoDataTrackFactory.getInstance().isTrackSendAvailable();
} catch (Exception e) {
ExceptionHandler.process(e, Level.WARN);
}
@@ -87,11 +83,12 @@ public class PendoItemSignatureManager {
}
}
- public void collectProperties() {
+ public IPendoDataProperties collectProperties() {
ICoreService coreService = ICoreService.get();
if (coreService == null || !isTrackAvailable) {
- return;
+ return null;
}
+ PendoSignLogonProperties itemSignProperties = new PendoSignLogonProperties();
try {
itemSignProperties.setSignByMigration(signByLoginMigrationItems.size());
@@ -188,6 +185,7 @@ public class PendoItemSignatureManager {
} catch (Exception e) {
ExceptionHandler.process(e, Level.WARN);
}
+ return itemSignProperties;
}
@@ -258,23 +256,12 @@ public class PendoItemSignatureManager {
if (!isTrackAvailable) {
return;
}
- Job job = new Job("send pendo track") {
+ super.sendTrackToPendo();
+ }
- @Override
- protected IStatus run(IProgressMonitor monitor) {
- try {
- collectProperties();
- PendoTrackSender.getInstance().sendTrackData(TrackEvent.ITEM_SIGNATURE, itemSignProperties);
- } catch (Exception e) {
- // warning only
- ExceptionHandler.process(e, Level.WARN);
- }
- return Status.OK_STATUS;
- }
- };
- job.setUser(false);
- job.setPriority(Job.INTERACTIVE);
- job.schedule();
+ @Override
+ public TrackEvent getTrackEvent() {
+ return TrackEvent.ITEM_SIGNATURE;
}
}
diff --git a/main/plugins/org.talend.core.repository/src/main/java/org/talend/core/repository/utils/TalendResourceSet.java b/main/plugins/org.talend.core.repository/src/main/java/org/talend/core/repository/utils/TalendResourceSet.java
index 2cc85ce0d6..0a49617470 100644
--- a/main/plugins/org.talend.core.repository/src/main/java/org/talend/core/repository/utils/TalendResourceSet.java
+++ b/main/plugins/org.talend.core.repository/src/main/java/org/talend/core/repository/utils/TalendResourceSet.java
@@ -48,6 +48,8 @@ import org.talend.commons.runtime.model.emf.provider.EmfResourcesFactoryReader;
*/
public class TalendResourceSet extends ResourceSetImpl {
+ private boolean showLog;
+
public TalendResourceSet() {
super();
@@ -58,6 +60,14 @@ public class TalendResourceSet extends ResourceSetImpl {
getLoadOptions().put(XMLResource.OPTION_USE_DEPRECATED_METHODS, Boolean.FALSE);
}
+ public boolean isShowLog() {
+ return this.showLog;
+ }
+
+ public void setShowLog(boolean showLog) {
+ this.showLog = showLog;
+ }
+
/*
* (non-Javadoc)
*
@@ -83,7 +93,13 @@ public class TalendResourceSet extends ResourceSetImpl {
Resource resource = map.get(uri);
if (resource != null) {
if (loadOnDemand && !resource.isLoaded()) {
- demandLoadHelper(resource);
+ try {
+ demandLoadHelper(resource);
+ } catch (Exception e) {
+ if (showLog) {
+ throw new RuntimeException(e);
+ }
+ }
}
return resource;
}
@@ -99,7 +115,13 @@ public class TalendResourceSet extends ResourceSetImpl {
}
if (theURIConverter.normalize(resource.getURI()).equals(normalizedURI)) {
if (loadOnDemand && !resource.isLoaded()) {
- demandLoadHelper(resource);
+ try {
+ demandLoadHelper(resource);
+ } catch (Exception e) {
+ if (showLog) {
+ throw new RuntimeException(e);
+ }
+ }
}
if (map != null) {
@@ -125,7 +147,13 @@ public class TalendResourceSet extends ResourceSetImpl {
+ "'; a registered resource factory is needed");
}
- demandLoadHelper(resource);
+ try {
+ demandLoadHelper(resource);
+ } catch (Exception e) {
+ if (showLog) {
+ throw new RuntimeException(e);
+ }
+ }
if (map != null) {
map.put(uri, resource);
diff --git a/main/plugins/org.talend.core.repository/src/main/java/org/talend/core/repository/utils/XmiResourceManager.java b/main/plugins/org.talend.core.repository/src/main/java/org/talend/core/repository/utils/XmiResourceManager.java
index a0fa475879..49f626d9f2 100644
--- a/main/plugins/org.talend.core.repository/src/main/java/org/talend/core/repository/utils/XmiResourceManager.java
+++ b/main/plugins/org.talend.core.repository/src/main/java/org/talend/core/repository/utils/XmiResourceManager.java
@@ -390,6 +390,10 @@ public class XmiResourceManager {
}
public Resource getItemResource(ResourceSet resourceSet, Item item, boolean forceLoad) {
+ return getItemResource(getResourceSet(), item, forceLoad, false);
+ }
+
+ public Resource getItemResource(ResourceSet resourceSet, Item item, boolean forceLoad, boolean showLog) {
if (item == null) {
return null;
}
@@ -402,13 +406,23 @@ public class XmiResourceManager {
} else {
itemResourceURI = getItemResourceURI(getItemURI(item));
}
- Resource itemResource = resourceSet.getResource(itemResourceURI, false);
- if (forceLoad && itemResource == null) {
- if (item instanceof FileItem) {
- itemResource = new ByteArrayResource(itemResourceURI);
- resourceSet.getResources().add(itemResource);
+ Resource itemResource = null;
+ try {
+ if (resourceSet instanceof TalendResourceSet) {
+ ((TalendResourceSet) resourceSet).setShowLog(showLog);
+ }
+ itemResource = resourceSet.getResource(itemResourceURI, false);
+ if (forceLoad && itemResource == null) {
+ if (item instanceof FileItem) {
+ itemResource = new ByteArrayResource(itemResourceURI);
+ resourceSet.getResources().add(itemResource);
+ }
+ itemResource = resourceSet.getResource(itemResourceURI, true);
+ }
+ } catch (Exception e) {
+ if (showLog) {
+ throw new RuntimeException(e);
}
- itemResource = resourceSet.getResource(itemResourceURI, true);
}
return itemResource;
}
@@ -628,7 +642,7 @@ public class XmiResourceManager {
boolean isTestContainer = false;
if (GlobalServiceRegister.getDefault().isServiceRegistered(ITestContainerProviderService.class)) {
- ITestContainerProviderService testContainerService = (ITestContainerProviderService) GlobalServiceRegister
+ ITestContainerProviderService testContainerService = GlobalServiceRegister
.getDefault().getService(ITestContainerProviderService.class);
if (testContainerService != null) {
isTestContainer = testContainerService.isTestContainerItem(property.getItem());
diff --git a/main/plugins/org.talend.core.runtime/src/main/java/org/talend/analysistask/AnalysisReportRecorder.java b/main/plugins/org.talend.core.runtime/src/main/java/org/talend/analysistask/AnalysisReportRecorder.java
index c7a3744469..abeeb22d91 100644
--- a/main/plugins/org.talend.core.runtime/src/main/java/org/talend/analysistask/AnalysisReportRecorder.java
+++ b/main/plugins/org.talend.core.runtime/src/main/java/org/talend/analysistask/AnalysisReportRecorder.java
@@ -33,6 +33,13 @@ public class AnalysisReportRecorder extends ItemReportRecorder {
this.detailMessage = detailMessage;
}
+ public AnalysisReportRecorder(IItemAnalysisTask task, SeverityOption severity, String detailMessage) {
+ super();
+ this.task = task;
+ this.severity = severity;
+ this.detailMessage = detailMessage;
+ }
+
public String getTaskName() {
return task.getName();
}
diff --git a/main/plugins/org.talend.core.runtime/src/main/java/org/talend/analysistask/DefaultItemsAnalysisTask.java b/main/plugins/org.talend.core.runtime/src/main/java/org/talend/analysistask/DefaultItemsAnalysisTask.java
new file mode 100644
index 0000000000..a742594e55
--- /dev/null
+++ b/main/plugins/org.talend.core.runtime/src/main/java/org/talend/analysistask/DefaultItemsAnalysisTask.java
@@ -0,0 +1,43 @@
+// ============================================================================
+//
+// Copyright (C) 2006-2022 Talend Inc. - www.talend.com
+//
+// 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 Talend SA
+// 9 rue Pages 92150 Suresnes, France
+//
+// ============================================================================
+package org.talend.analysistask;
+
+import java.util.List;
+import java.util.Set;
+
+import org.talend.core.model.properties.Item;
+import org.talend.core.model.repository.ERepositoryObjectType;
+
+/**
+ * created by hcyi on Oct 26, 2022
+ * Detailled comment
+ *
+ */
+public class DefaultItemsAnalysisTask extends AbstractItemAnalysisTask {
+
+ public DefaultItemsAnalysisTask() {
+ }
+
+
+ @Override
+ public Set getRepositoryObjectTypeScope() {
+ return null;
+ }
+
+ @Override
+ public List execute(Item item) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+}
diff --git a/main/plugins/org.talend.core.runtime/src/main/java/org/talend/analysistask/ItemAnalysisReportManager.java b/main/plugins/org.talend.core.runtime/src/main/java/org/talend/analysistask/ItemAnalysisReportManager.java
index 7cbf365b53..00e15127cd 100644
--- a/main/plugins/org.talend.core.runtime/src/main/java/org/talend/analysistask/ItemAnalysisReportManager.java
+++ b/main/plugins/org.talend.core.runtime/src/main/java/org/talend/analysistask/ItemAnalysisReportManager.java
@@ -20,6 +20,7 @@ import java.util.List;
import java.util.Set;
import java.util.concurrent.atomic.AtomicBoolean;
+import org.apache.commons.lang.StringUtils;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus;
@@ -50,7 +51,9 @@ import org.talend.core.model.general.Project;
import org.talend.core.model.properties.Item;
import org.talend.core.model.repository.ERepositoryObjectType;
import org.talend.core.model.repository.IRepositoryViewObject;
+import org.talend.core.runtime.CoreRuntimePlugin;
import org.talend.core.runtime.i18n.Messages;
+import org.talend.designer.core.IDesignerCoreService;
import org.talend.repository.ProjectManager;
import org.talend.repository.model.IProxyRepositoryFactory;
import org.talend.repository.model.IRepositoryService;
@@ -73,7 +76,7 @@ public class ItemAnalysisReportManager {
private AtomicBoolean inGenerating = new AtomicBoolean(false);
public List executeAnalysisTask(Project project) {
- IRepositoryService service = (IRepositoryService) GlobalServiceRegister.getDefault().getService(IRepositoryService.class);
+ IRepositoryService service = GlobalServiceRegister.getDefault().getService(IRepositoryService.class);
IProxyRepositoryFactory repFactory = service.getProxyRepositoryFactory();
List analysisResultList = new ArrayList();
List analysisTasks = ItemAnalysisTaskRegistryReader.getInstance().getItemAnalysisTasks();
@@ -105,6 +108,16 @@ public class ItemAnalysisReportManager {
}
}
}
+ //
+ ItemAnalysisTaskRegistryReader.getInstance().getAllItemURIsMap().clear();
+ ItemAnalysisTaskRegistryReader.getInstance().getDuplicatedItemURIsMap().clear();
+ IDesignerCoreService designerCoreService = CoreRuntimePlugin.getInstance().getDesignerCoreService();
+ if (designerCoreService != null) {
+ List recorder = designerCoreService.analysis(project);
+ if (recorder != null && !recorder.isEmpty()) {
+ analysisResultList.addAll(recorder);
+ }
+ }
} catch (Exception e) {
ExceptionHandler.process(e);
}
@@ -190,6 +203,42 @@ public class ItemAnalysisReportManager {
inGenerating.set(newValue);
}
+ public String getCompleteObjectTypePath(ERepositoryObjectType itemType) {
+ ERepositoryObjectType rootItemType = itemType;
+ if (ERepositoryObjectType.JDBC != null && ERepositoryObjectType.JDBC.equals(rootItemType)) {
+ rootItemType = ERepositoryObjectType.METADATA_CONNECTIONS;
+ }
+ List typeLabels = new ArrayList();
+ findOutCompleteTypePath(rootItemType, typeLabels);
+ if (ERepositoryObjectType.PROCESS != null && ERepositoryObjectType.PROCESS.equals(rootItemType)) {
+ IRepositoryService repositoryService = IRepositoryService.get();
+ if (repositoryService != null) {
+ String standardNodeLabel = repositoryService.getStandardNodeLabel();
+ if (StringUtils.isNotBlank(standardNodeLabel)) {
+ typeLabels.add(standardNodeLabel);
+ }
+ }
+ }
+ StringBuffer buffer = new StringBuffer();
+ if (!typeLabels.isEmpty()) {
+ for (int i = 0; i < typeLabels.size(); i++) {
+ if (i != 0) {
+ buffer.append("/");
+ }
+ buffer.append(typeLabels.get(i));
+ }
+ }
+ return buffer.toString();
+ }
+
+ public void findOutCompleteTypePath(ERepositoryObjectType type, List typeLabels) {
+ ERepositoryObjectType parentType = ERepositoryObjectType.findParentType(type);
+ if (parentType != null) {
+ findOutCompleteTypePath(parentType, typeLabels);
+ }
+ typeLabels.add(type.getLabel());
+ }
+
}
class AnalysisReportAccessDialog extends Dialog {
diff --git a/main/plugins/org.talend.core.runtime/src/main/java/org/talend/analysistask/ItemAnalysisTaskRegistryReader.java b/main/plugins/org.talend.core.runtime/src/main/java/org/talend/analysistask/ItemAnalysisTaskRegistryReader.java
index 65e9be3233..96ee8a1d95 100644
--- a/main/plugins/org.talend.core.runtime/src/main/java/org/talend/analysistask/ItemAnalysisTaskRegistryReader.java
+++ b/main/plugins/org.talend.core.runtime/src/main/java/org/talend/analysistask/ItemAnalysisTaskRegistryReader.java
@@ -32,6 +32,10 @@ public class ItemAnalysisTaskRegistryReader extends RegistryReader {
private static final ItemAnalysisTaskRegistryReader INSTANCE = new ItemAnalysisTaskRegistryReader();
+ private Map allItemURIsMap = new HashMap();
+
+ private Map> duplicatedItemURIsMap = new HashMap>();
+
public static ItemAnalysisTaskRegistryReader getInstance() {
return INSTANCE;
}
@@ -81,4 +85,17 @@ public class ItemAnalysisTaskRegistryReader extends RegistryReader {
idItemAnalysisTaskMap.clear();
}
+ /**
+ * Getter for allItemURIsMap.
+ *
+ * @return the allItemURIsMap
+ */
+ public Map getAllItemURIsMap() {
+ return this.allItemURIsMap;
+ }
+
+ public Map> getDuplicatedItemURIsMap() {
+ return this.duplicatedItemURIsMap;
+ }
+
}
diff --git a/main/plugins/org.talend.core.runtime/src/main/java/org/talend/commons/report/ItemReportRecorder.java b/main/plugins/org.talend.core.runtime/src/main/java/org/talend/commons/report/ItemReportRecorder.java
index 09145d0471..747a6a8be9 100644
--- a/main/plugins/org.talend.core.runtime/src/main/java/org/talend/commons/report/ItemReportRecorder.java
+++ b/main/plugins/org.talend.core.runtime/src/main/java/org/talend/commons/report/ItemReportRecorder.java
@@ -12,10 +12,8 @@
// ============================================================================
package org.talend.commons.report;
-import java.util.ArrayList;
-import java.util.List;
-
import org.apache.commons.lang.StringUtils;
+import org.talend.analysistask.ItemAnalysisReportManager;
import org.talend.commons.exception.ExceptionHandler;
import org.talend.commons.exception.PersistenceException;
import org.talend.core.GlobalServiceRegister;
@@ -23,7 +21,6 @@ import org.talend.core.model.properties.Item;
import org.talend.core.model.properties.Property;
import org.talend.core.model.repository.ERepositoryObjectType;
import org.talend.core.ui.ITestContainerCoreService;
-import org.talend.repository.model.IRepositoryService;
/**
* DOC jding class global comment. Detailled comment
@@ -34,8 +31,15 @@ public class ItemReportRecorder {
protected String detailMessage;
+ protected String currentItemPath;
+
+ protected String currentItemType;
+
public String getItemType() {
String type = "";
+ if (item == null) {
+ return currentItemType;
+ }
ERepositoryObjectType itemType = ERepositoryObjectType.getItemType(item);
if (itemType != null) {
if (ERepositoryObjectType.getAllTypesOfTestContainer().contains(itemType)) {
@@ -43,7 +47,7 @@ public class ItemReportRecorder {
if (parentJobItem != null) {
ERepositoryObjectType parentJobType = ERepositoryObjectType.getItemType(parentJobItem);
if (parentJobType != null) {
- String parentTypePath = getCompleteObjectTypePath(parentJobType);
+ String parentTypePath = ItemAnalysisReportManager.getInstance().getCompleteObjectTypePath(parentJobType);
if (StringUtils.isNotBlank(parentTypePath)) {
type = parentTypePath + "/";
}
@@ -51,7 +55,7 @@ public class ItemReportRecorder {
}
type += itemType;
} else {
- type = getCompleteObjectTypePath(itemType);
+ type = ItemAnalysisReportManager.getInstance().getCompleteObjectTypePath(itemType);
}
}
return type;
@@ -59,6 +63,9 @@ public class ItemReportRecorder {
public String getItemPath() {
String path = "";
+ if (this.currentItemPath != null) {
+ return this.currentItemPath;
+ }
StringBuffer buffer = new StringBuffer();
ERepositoryObjectType itemType = ERepositoryObjectType.getItemType(item);
@@ -104,42 +111,6 @@ public class ItemReportRecorder {
return parentJobItem;
}
- private String getCompleteObjectTypePath(ERepositoryObjectType itemType) {
- ERepositoryObjectType rootItemType = itemType;
- if (ERepositoryObjectType.JDBC != null && ERepositoryObjectType.JDBC.equals(rootItemType)) {
- rootItemType = ERepositoryObjectType.METADATA_CONNECTIONS;
- }
- List typeLabels = new ArrayList();
- findOutCompleteTypePath(rootItemType, typeLabels);
- if (ERepositoryObjectType.PROCESS != null && ERepositoryObjectType.PROCESS.equals(rootItemType)) {
- IRepositoryService repositoryService = IRepositoryService.get();
- if (repositoryService != null) {
- String standardNodeLabel = repositoryService.getStandardNodeLabel();
- if (StringUtils.isNotBlank(standardNodeLabel)) {
- typeLabels.add(standardNodeLabel);
- }
- }
- }
- StringBuffer buffer = new StringBuffer();
- if (!typeLabels.isEmpty()) {
- for (int i = 0; i < typeLabels.size(); i++) {
- if (i != 0) {
- buffer.append("/");
- }
- buffer.append(typeLabels.get(i));
- }
- }
- return buffer.toString();
- }
-
- private void findOutCompleteTypePath(ERepositoryObjectType type, List typeLabels) {
- ERepositoryObjectType parentType = ERepositoryObjectType.findParentType(type);
- if (parentType != null) {
- findOutCompleteTypePath(parentType, typeLabels);
- }
- typeLabels.add(type.getLabel());
- }
-
public Item getItem() {
return item;
}
@@ -148,6 +119,22 @@ public class ItemReportRecorder {
this.item = item;
}
+ public String getCurrentItemPath() {
+ return this.currentItemPath;
+ }
+
+ public void setCurrentPath(String currentItemPath) {
+ this.currentItemPath = currentItemPath;
+ }
+
+ public String getCurrentItemType() {
+ return this.currentItemType;
+ }
+
+ public void setCurrentItemType(String currentItemType) {
+ this.currentItemType = currentItemType;
+ }
+
public String getDetailMessage() {
return detailMessage;
}
diff --git a/main/plugins/org.talend.core.runtime/src/main/java/org/talend/core/database/conn/version/EDatabaseVersion4Drivers.java b/main/plugins/org.talend.core.runtime/src/main/java/org/talend/core/database/conn/version/EDatabaseVersion4Drivers.java
index d9a4892d02..9834643a7f 100644
--- a/main/plugins/org.talend.core.runtime/src/main/java/org/talend/core/database/conn/version/EDatabaseVersion4Drivers.java
+++ b/main/plugins/org.talend.core.runtime/src/main/java/org/talend/core/database/conn/version/EDatabaseVersion4Drivers.java
@@ -69,9 +69,9 @@ public enum EDatabaseVersion4Drivers {
INFORMIX(new DbVersion4Drivers(EDatabaseTypeName.INFORMIX, "ifxjdbc.jar")), //$NON-NLS-1$
SAS_9_1(new DbVersion4Drivers(EDatabaseTypeName.SAS, "SAS 9.1", "SAS_9.1", new String[] { "sas.core.jar", //$NON-NLS-1$
- "sas.intrnet.javatools.jar", "sas.svc.connection.jar", "reload4j-1.2.19.jar" })), //$NON-NLS-1$ //$NON-NLS-2$
+ "sas.intrnet.javatools.jar", "sas.svc.connection.jar", "reload4j-1.2.22.jar" })), //$NON-NLS-1$ //$NON-NLS-2$
SAS_9_2(new DbVersion4Drivers(EDatabaseTypeName.SAS,
- "SAS 9.2", "SAS_9.2", new String[] { "sas.core.jar", "sas.security.sspi.jar", "sas.svc.connection.jar", "reload4j-1.2.19.jar" })), //$NON-NLS-1$ //$NON-NLS-2$
+ "SAS 9.2", "SAS_9.2", new String[] { "sas.core.jar", "sas.security.sspi.jar", "sas.svc.connection.jar", "reload4j-1.2.22.jar" })), //$NON-NLS-1$ //$NON-NLS-2$
SAPHana(new DbVersion4Drivers(EDatabaseTypeName.SAPHana, "HDB 1.0", "HDB_1_0", "ngdbc.jar")), //$NON-NLS-1$
// MYSQL, add for 9594
MYSQL_8(new DbVersion4Drivers(EDatabaseTypeName.MYSQL, "MySQL 8", "MYSQL_8", "mysql-connector-java-8.0.18.jar")), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
@@ -84,7 +84,7 @@ public enum EDatabaseVersion4Drivers {
MSSQL_PROP(new DbVersion4Drivers(EDatabaseTypeName.MSSQL,
"Microsoft", "MSSQL_PROP", //$NON-NLS-1$ //$NON-NLS-2$
new String[] { "mssql-jdbc.jar", "slf4j-api-1.7.29.jar", "slf4j-log4j12-1.7.29.jar", "msal4j-1.11.0.jar", //$NON-NLS-1$
- "oauth2-oidc-sdk-9.7.jar", "reload4j-1.2.19.jar", "jackson-core-2.13.4.jar",
+ "oauth2-oidc-sdk-9.7.jar", "reload4j-1.2.22.jar", "jackson-core-2.13.4.jar",
"jackson-databind-2.13.4.2.jar", "jackson-annotations-2.13.4.jar", "jcip-annotations-1.0-1.jar",
"json-smart-2.4.7.jar", "nimbus-jose-jwt-9.22.jar", "accessors-smart-2.4.7.jar", "asm-9.1.jar",
"content-type-2.1.jar", "lang-tag-1.5.jar" })),
diff --git a/main/plugins/org.talend.core.runtime/src/main/java/org/talend/core/model/general/ConnectionBean.java b/main/plugins/org.talend.core.runtime/src/main/java/org/talend/core/model/general/ConnectionBean.java
index 2d1f94f81f..7f524611fd 100644
--- a/main/plugins/org.talend.core.runtime/src/main/java/org/talend/core/model/general/ConnectionBean.java
+++ b/main/plugins/org.talend.core.runtime/src/main/java/org/talend/core/model/general/ConnectionBean.java
@@ -20,7 +20,7 @@ import org.apache.commons.lang.StringUtils;
import org.eclipse.core.runtime.Path;
import org.eclipse.core.runtime.Platform;
import org.talend.commons.exception.ExceptionHandler;
-import org.talend.core.pendo.PendoTrackSender;
+import org.talend.core.pendo.PendoDataTrackFactory;
import org.talend.core.runtime.i18n.Messages;
import org.talend.core.service.ICloudSignOnService;
import org.talend.repository.model.RepositoryConstants;
@@ -254,7 +254,7 @@ public class ConnectionBean implements Cloneable {
String user = conDetails.getString(USER);
if (isToken()) {
String url = getDynamicFields().get(RepositoryConstants.REPOSITORY_URL);
- user = PendoTrackSender.getInstance().getTmcUser(url, getPassword());
+ user = PendoDataTrackFactory.getInstance().getTmcUser(url, getPassword());
if (StringUtils.isNotBlank(user)) {
setUser(user);
}
diff --git a/main/plugins/org.talend.core.runtime/src/main/java/org/talend/core/pendo/mapper/AbstractPendoTMapManager.java b/main/plugins/org.talend.core.runtime/src/main/java/org/talend/core/pendo/AbstractPendoTrackManager.java
similarity index 62%
rename from main/plugins/org.talend.core.runtime/src/main/java/org/talend/core/pendo/mapper/AbstractPendoTMapManager.java
rename to main/plugins/org.talend.core.runtime/src/main/java/org/talend/core/pendo/AbstractPendoTrackManager.java
index 4082226463..c551ba9a0f 100644
--- a/main/plugins/org.talend.core.runtime/src/main/java/org/talend/core/pendo/mapper/AbstractPendoTMapManager.java
+++ b/main/plugins/org.talend.core.runtime/src/main/java/org/talend/core/pendo/AbstractPendoTrackManager.java
@@ -10,7 +10,7 @@
// 9 rue Pages 92150 Suresnes, France
//
// ============================================================================
-package org.talend.core.pendo.mapper;
+package org.talend.core.pendo;
import org.apache.log4j.Level;
import org.eclipse.core.runtime.IProgressMonitor;
@@ -18,16 +18,24 @@ 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.pendo.PendoTrackDataUtil.TrackEvent;
-import org.talend.core.pendo.PendoTrackSender;
-import org.talend.core.pendo.properties.PendoTMapProperties;
+import org.talend.core.pendo.properties.IPendoDataProperties;
/**
* DOC jding class global comment. Detailled comment
*/
-public abstract class AbstractPendoTMapManager {
+public abstract class AbstractPendoTrackManager {
- protected abstract PendoTMapProperties calculateProperties();
+ public abstract TrackEvent getTrackEvent();
+
+ public abstract IPendoDataProperties collectProperties();
+
+ public boolean isTrackSendAvailable() throws Exception {
+ return PendoDataTrackFactory.getInstance().isTrackSendAvailable();
+ }
+
+ public void sendTrackData(TrackEvent event, IPendoDataProperties properties) throws Exception {
+ PendoDataTrackFactory.getInstance().sendTrackData(event, properties);
+ }
public void sendTrackToPendo() {
Job job = new Job("send pendo track") {
@@ -35,9 +43,9 @@ public abstract class AbstractPendoTMapManager {
@Override
protected IStatus run(IProgressMonitor monitor) {
try {
- if (PendoTrackSender.getInstance().isTrackSendAvailable()) {
- PendoTMapProperties properties = calculateProperties();
- PendoTrackSender.getInstance().sendTrackData(TrackEvent.TMAP, properties);
+ if (isTrackSendAvailable()) {
+ IPendoDataProperties properties = collectProperties();
+ sendTrackData(getTrackEvent(), properties);
}
} catch (Exception e) {
// warning only
diff --git a/main/plugins/org.talend.core.runtime/src/main/java/org/talend/core/pendo/PendoDataTrackFactory.java b/main/plugins/org.talend.core.runtime/src/main/java/org/talend/core/pendo/PendoDataTrackFactory.java
new file mode 100644
index 0000000000..2c41de07ab
--- /dev/null
+++ b/main/plugins/org.talend.core.runtime/src/main/java/org/talend/core/pendo/PendoDataTrackFactory.java
@@ -0,0 +1,73 @@
+// ============================================================================
+//
+// Copyright (C) 2006-2022 Talend Inc. - www.talend.com
+//
+// 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 Talend SA
+// 9 rue Pages 92150 Suresnes, France
+//
+// ============================================================================
+package org.talend.core.pendo;
+
+import org.talend.core.pendo.properties.IPendoDataProperties;
+import org.talend.core.service.IRemoteService;
+
+/**
+ * DOC jding class global comment. Detailled comment
+ */
+public class PendoDataTrackFactory {
+
+ private static PendoDataTrackFactory instance;
+
+ private static IRemoteService remoteService;
+
+ static {
+ instance = new PendoDataTrackFactory();
+ remoteService = IRemoteService.get();
+ }
+
+ private PendoDataTrackFactory() {
+ }
+
+ public static PendoDataTrackFactory getInstance() {
+ return instance;
+ }
+
+ public boolean isTrackSendAvailable() throws Exception {
+ if (remoteService != null) {
+ return remoteService.isPendoTrackAvailable();
+ }
+ return false;
+ }
+
+ public void sendTrackData(TrackEvent event, IPendoDataProperties properties) throws Exception {
+ if (remoteService != null) {
+ remoteService.sendPendoTrackData(event, properties);
+ }
+ }
+
+ public void sendProjectLoginTrack() {
+ if (remoteService != null) {
+ AbstractPendoTrackManager pendoProjectLoginManager = remoteService.getPendoProjectLoginManager();
+ pendoProjectLoginManager.sendTrackToPendo();
+ }
+ }
+
+ public void sendGenericTrack(TrackEvent event, IPendoDataProperties properties) {
+ if (remoteService != null) {
+ AbstractPendoTrackManager genericManager = remoteService.getPendoGenericManager(event, properties);
+ genericManager.sendTrackToPendo();
+ }
+ }
+
+ public String getTmcUser(String url, String token) {
+ if (remoteService != null) {
+ return remoteService.getTmcUser(url, token);
+ }
+ return "";
+ }
+
+}
diff --git a/main/plugins/org.talend.core.runtime/src/main/java/org/talend/core/pendo/PendoTrackDataUtil.java b/main/plugins/org.talend.core.runtime/src/main/java/org/talend/core/pendo/PendoTrackDataUtil.java
index cd77a164bf..284ac87266 100644
--- a/main/plugins/org.talend.core.runtime/src/main/java/org/talend/core/pendo/PendoTrackDataUtil.java
+++ b/main/plugins/org.talend.core.runtime/src/main/java/org/talend/core/pendo/PendoTrackDataUtil.java
@@ -12,26 +12,12 @@
// ============================================================================
package org.talend.core.pendo;
-import java.util.ArrayList;
import java.util.Date;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
import org.apache.commons.lang3.StringUtils;
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.core.runtime.NullProgressMonitor;
import org.talend.commons.exception.ExceptionHandler;
-import org.talend.commons.utils.VersionUtils;
-import org.talend.core.model.general.Project;
-import org.talend.core.model.properties.ProjectReference;
import org.talend.core.pendo.properties.IPendoDataProperties;
-import org.talend.core.pendo.properties.PendoLoginProperties;
-import org.talend.core.service.ICloudSignOnService;
-import org.talend.core.service.IStudioLiteP2Service;
-import org.talend.core.service.IStudioLiteP2Service.UpdateSiteConfig;
import org.talend.core.ui.IInstalledPatchService;
-import org.talend.repository.ProjectManager;
import org.talend.utils.json.JSONObject;
import com.fasterxml.jackson.core.JsonProcessingException;
@@ -64,47 +50,6 @@ public class PendoTrackDataUtil {
return content;
}
- public static IPendoDataProperties getLoginEventProperties() {
- String studioPatch = getLatestPatchInstalledVersion();
- PendoLoginProperties loginEvent = new PendoLoginProperties();
- IStudioLiteP2Service studioLiteP2Service = IStudioLiteP2Service.get();
- try {
- if (studioLiteP2Service != null) {
- List enabledFeatures = new ArrayList();
- List enabledFeaturesList = studioLiteP2Service.getCurrentProjectEnabledFeatures();
- enabledFeaturesList.stream().forEach(feature -> {
- String result = feature;
- if (result.startsWith(FEATURE_PREFIX)) {
- result = result.substring(FEATURE_PREFIX.toCharArray().length);
- }
- if (result.endsWith(FEATURE_TAIL)) {
- result = result.substring(0, result.lastIndexOf(FEATURE_TAIL));
- }
- enabledFeatures.add(result);
- });
- loginEvent.setEnabledFeatures(enabledFeatures);
- }
- setUpRefProjectsStructure(loginEvent);
- loginEvent.setIsOneClickLogin(Boolean.FALSE.toString());
- if (ICloudSignOnService.get() != null && ICloudSignOnService.get().isSignViaCloud()) {
- loginEvent.setIsOneClickLogin(Boolean.TRUE.toString());
- }
- loginEvent.setManagedUpdate(Boolean.FALSE.toString());
- if (IStudioLiteP2Service.get() != null) {
- IProgressMonitor monitor = new NullProgressMonitor();
- UpdateSiteConfig config = IStudioLiteP2Service.get().getUpdateSiteConfig(monitor);
- if (config.isEnableTmcUpdateSettings(monitor) && !config.isOverwriteTmcUpdateSettings(monitor)) {
- loginEvent.setManagedUpdate(Boolean.TRUE.toString());
- }
- }
- } catch (Exception e) {
- ExceptionHandler.process(e);
- }
- loginEvent.setStudioVersion(VersionUtils.getInternalMajorVersion());
- loginEvent.setStudioPatch(studioPatch);
- return loginEvent;
- }
-
public static String getLatestPatchInstalledVersion() {
String studioPatch = "";
IInstalledPatchService installedPatchService = IInstalledPatchService.get();
@@ -114,52 +59,6 @@ public class PendoTrackDataUtil {
return studioPatch;
}
- private static void setUpRefProjectsStructure(PendoLoginProperties loginEvent) {
- ProjectManager projectManager = ProjectManager.getInstance();
- Project currentProject = projectManager.getCurrentProject();
- Map teclabelProjectMap = new HashMap();
- List allReferencedProjects = projectManager.getAllReferencedProjects();
- allReferencedProjects.forEach(refProject -> {
- String technicalLabel = refProject.getTechnicalLabel();
- if (StringUtils.isNotBlank(technicalLabel)) {
- teclabelProjectMap.put(technicalLabel, refProject);
- }
- });
-
- int[] refCount = new int[] {0};
- List resultList = new ArrayList();
- Map desensitiveLabelMap = new HashMap();
- findReferencePorjectPath(currentProject, "Main", resultList, refCount, desensitiveLabelMap, teclabelProjectMap);
- loginEvent.setRefProjectList(resultList);
- loginEvent.setRefProjectCount(String.valueOf(desensitiveLabelMap.keySet().size()));
- }
-
- public static void findReferencePorjectPath(Project currentProject, String path, List resultList, int[] refCount,
- Map desensitiveLabelMap, Map teclabelProjectMap) {
- List projectReferenceList = currentProject.getProjectReferenceList();
- for (ProjectReference projectReference : projectReferenceList) {
- String structPath = path;
- if (projectReference.getReferencedProject() == null) {
- continue;
- }
- String technicalLabel = projectReference.getReferencedProject().getTechnicalLabel();
- Project refProject = teclabelProjectMap.get(technicalLabel);
- if (StringUtils.isBlank(technicalLabel) || refProject == null) {
- continue;
- }
- String desensitiveLabel = desensitiveLabelMap.get(technicalLabel);
- if (StringUtils.isBlank(desensitiveLabel)) {
- refCount[0] = refCount[0] + 1;
- desensitiveLabel = "Ref" + refCount[0];
- desensitiveLabelMap.put(technicalLabel, desensitiveLabel);
- }
- structPath = structPath + "/" + desensitiveLabel;
- resultList.add(structPath);
- findReferencePorjectPath(refProject, structPath, resultList, refCount, desensitiveLabelMap, teclabelProjectMap);
- }
-
- }
-
public static String convertEntityJsonString(Object entity) {
ObjectMapper mapper = new ObjectMapper();
try {
@@ -173,30 +72,4 @@ public class PendoTrackDataUtil {
return "";
}
- public enum TrackEvent {
-
- PROJECT_LOGIN("Project Login"),
- IMPORT_API_DEF("Import API Definition"),
- UPDATE_API_DEF("Update API Definition"),
- USE_API_DEF("Use API Definition"),
- OPEN_IN_APIDesigner("Open in API Designer"),
- OPEN_IN_APITester("Open in API Tester"),
- OPEN_API_DOCUMENTATION("Open API Documentation"),
- AUTOMAP("tMap Automap"),
- TMAP("tMap"),
- ITEM_IMPORT("Import items"),
- ITEM_SIGNATURE("Item Signature");
-
- private String event;
-
- TrackEvent(String event) {
- this.event = event;
- }
-
- public String getEvent() {
- return event;
- }
-
- }
-
}
diff --git a/main/plugins/org.talend.core.runtime/src/main/java/org/talend/core/pendo/PendoTrackSender.java b/main/plugins/org.talend.core.runtime/src/main/java/org/talend/core/pendo/PendoTrackSender.java
deleted file mode 100644
index 7fec106874..0000000000
--- a/main/plugins/org.talend.core.runtime/src/main/java/org/talend/core/pendo/PendoTrackSender.java
+++ /dev/null
@@ -1,325 +0,0 @@
-// ============================================================================
-//
-// Copyright (C) 2006-2021 Talend Inc. - www.talend.com
-//
-// 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 Talend SA
-// 9 rue Pages 92150 Suresnes, France
-//
-// ============================================================================
-package org.talend.core.pendo;
-
-import java.net.HttpURLConnection;
-import java.net.MalformedURLException;
-import java.net.URI;
-import java.net.URL;
-import java.nio.charset.StandardCharsets;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
-import org.apache.commons.lang3.StringUtils;
-import org.apache.http.HttpEntity;
-import org.apache.http.StatusLine;
-import org.apache.http.client.entity.EntityBuilder;
-import org.apache.http.client.methods.CloseableHttpResponse;
-import org.apache.http.client.methods.HttpGet;
-import org.apache.http.client.methods.HttpPost;
-import org.apache.http.client.protocol.HttpClientContext;
-import org.apache.http.entity.ContentType;
-import org.apache.http.impl.client.DefaultHttpClient;
-import org.apache.http.util.EntityUtils;
-import org.apache.log4j.Level;
-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.commons.utils.network.IProxySelectorProvider;
-import org.talend.commons.utils.network.NetworkUtil;
-import org.talend.core.GlobalServiceRegister;
-import org.talend.core.context.Context;
-import org.talend.core.context.RepositoryContext;
-import org.talend.core.nexus.HttpClientTransport;
-import org.talend.core.pendo.PendoTrackDataUtil.TrackEvent;
-import org.talend.core.pendo.properties.IPendoDataProperties;
-import org.talend.core.runtime.CoreRuntimePlugin;
-import org.talend.core.service.IRemoteService;
-import org.talend.repository.model.RepositoryConstants;
-import org.talend.utils.json.JSONObject;
-
-/**
- * DOC jding class global comment. Detailled comment
- */
-public class PendoTrackSender {
-
- public static final String PROP_PENDO_LOCAL_CHECK = "talend.pendo.localDebug";
-
- public static final String PROP_PENDO_LOG_DATA = "talend.pendo.logRuntimeData";
-
- private static final String PREFIX_API = "api";
-
- private static final String PENDO_INFO = "/monitoring/pendo/info";
-
- private static final String PENDO_TRACK = "/monitoring/pendo/track";
-
- private static final String HEAD_AUTHORIZATION = "Authorization";
-
- private static final String HEAD_CONTENT_TYPE = "Content-Type";
-
- private static final String HEAD_PENDO_KEY = "x-pendo-integration-key";
-
- private static PendoTrackSender instance;
-
- private static String adminUrl;
-
- private static String apiBaseUrl;
-
- private static String pendoInfo;
-
- private PendoTrackSender() {
- }
-
- static {
- instance = new PendoTrackSender();
- RepositoryContext repositoryContext = getRepositoryContext();
- if (repositoryContext != null) {
- adminUrl = repositoryContext.getFields().get(RepositoryConstants.REPOSITORY_URL);
- }
- }
-
- public static PendoTrackSender getInstance() {
- if (StringUtils.isBlank(adminUrl)) {
- RepositoryContext repositoryContext = getRepositoryContext();
- if (repositoryContext != null) {
- adminUrl = repositoryContext.getFields().get(RepositoryConstants.REPOSITORY_URL);
- }
- }
- return instance;
- }
-
- public void sendToPendo(TrackEvent event, IPendoDataProperties properties) {
- Job job = new Job("send pendo track") {
-
- @Override
- protected IStatus run(IProgressMonitor monitor) {
- try {
- if (isTrackSendAvailable()) {
- sendTrackData(event, properties);
- }
- } catch (Exception e) {
- // warning only
- ExceptionHandler.process(e, Level.WARN);
- }
- return Status.OK_STATUS;
- }
- };
- job.setUser(false);
- job.setPriority(Job.INTERACTIVE);
- job.schedule();
- }
-
- public void sendTrackData(TrackEvent event, IPendoDataProperties properties) throws Exception {
- if (isPendoLocalDebug()) {
- ExceptionHandler.log(event.getEvent() + ":" + PendoTrackDataUtil.convertEntityJsonString(properties));
- return;
- }
- DefaultHttpClient client = null;
- CloseableHttpResponse response = null;
- IProxySelectorProvider proxySelectorProvider = null;
- try {
- String pendoInfo = getPendoInfo();
- if (StringUtils.isBlank(pendoInfo)) {
- throw new Exception("Pendo information is empty");
- }
- String pendoKey = getPendoKeyFromLicense();
- if (StringUtils.isBlank(pendoKey)) {
- throw new Exception("Pendo key is empty");
- }
-
- client = new DefaultHttpClient();
- String url = getBaseUrl() + PENDO_TRACK;
- HttpPost httpPost = new HttpPost(url);
- httpPost.setHeader(HEAD_CONTENT_TYPE, ContentType.APPLICATION_JSON.getMimeType());
- httpPost.setHeader(HEAD_PENDO_KEY, pendoKey);
-
- proxySelectorProvider = HttpClientTransport.addProxy(client, new URI(url));
-
- EntityBuilder entityBuilder = EntityBuilder.create();
- String trackData = PendoTrackDataUtil.generateTrackData(pendoInfo, event, properties);
- entityBuilder.setText(trackData).setContentType(ContentType.APPLICATION_JSON);
- HttpEntity entity = entityBuilder.build();
- httpPost.setEntity(entity);
- response = client.execute(httpPost, HttpClientContext.create());
- StatusLine statusLine = response.getStatusLine();
- String responseStr = EntityUtils.toString(response.getEntity(), StandardCharsets.UTF_8);
- if (isLogPendoData()) {
- ExceptionHandler.log(trackData);
- }
- if (HttpURLConnection.HTTP_OK != statusLine.getStatusCode()) {
- throw new Exception(statusLine.toString() + ", server message: [" + responseStr + "]");
- }
- } finally {
- HttpClientTransport.removeProxy(proxySelectorProvider);
- client.getConnectionManager().shutdown();
- if (response != null) {
- try {
- response.close();
- } catch (Throwable e) {
- ExceptionHandler.process(e);
- }
- }
- if (client != null) {
- try {
- client.close();
- } catch (Throwable e) {
- ExceptionHandler.process(e);
- }
- }
- }
- }
-
- public boolean isTrackSendAvailable() throws Exception {
- if (isPendoLocalDebug() || checkTokenUsed(adminUrl) && NetworkUtil.isNetworkValid()) {
- return true;
- }
- return false;
- }
-
- public boolean isPendoLocalDebug() {
- return Boolean.TRUE.toString().equals(System.getProperty(PROP_PENDO_LOCAL_CHECK));
- }
-
- public boolean isLogPendoData() {
- return Boolean.TRUE.toString().equals(System.getProperty(PROP_PENDO_LOG_DATA));
- }
-
- private String getPendoInfo() throws Exception {
- if (StringUtils.isBlank(pendoInfo)) {
- pendoInfo = getPendoInfo(getBaseUrl(), getToken());
- }
- return pendoInfo;
- }
-
- private String getPendoInfo(String baseUrl, String token) throws Exception {
- DefaultHttpClient client = null;
- CloseableHttpResponse response = null;
- IProxySelectorProvider proxySelectorProvider = null;
- try {
- client = new DefaultHttpClient();
-
- String url = baseUrl + PENDO_INFO;
-
- HttpGet httpGet = new HttpGet(url);
- httpGet.setHeader(HEAD_AUTHORIZATION, "Bearer " + token);
- proxySelectorProvider = HttpClientTransport.addProxy(client, new URI(url));
-
- response = client.execute(httpGet, HttpClientContext.create());
- StatusLine statusLine = response.getStatusLine();
- String responseStr = EntityUtils.toString(response.getEntity(), StandardCharsets.UTF_8);
- if (HttpURLConnection.HTTP_OK != statusLine.getStatusCode()) {
- throw new Exception(statusLine.toString() + ", server message: [" + responseStr + "]");
- }
- return responseStr;
- } finally {
- HttpClientTransport.removeProxy(proxySelectorProvider);
- client.getConnectionManager().shutdown();
- if (response != null) {
- try {
- response.close();
- } catch (Throwable e) {
- ExceptionHandler.process(e);
- }
- }
- if (client != null) {
- try {
- client.close();
- } catch (Throwable e) {
- ExceptionHandler.process(e);
- }
- }
- }
- }
-
- private boolean checkTokenUsed(String adminUrl) throws Exception {
- if (StringUtils.isNotBlank(adminUrl) && GlobalServiceRegister.getDefault().isServiceRegistered(IRemoteService.class)) {
- IRemoteService service = GlobalServiceRegister.getDefault().getService(IRemoteService.class);
- return service.isTokenUsed(adminUrl);
- }
- return false;
- }
-
- public String getBaseUrl() throws Exception {
- return getBaseUrl(adminUrl, false);
- }
-
- public String getBaseUrl(String adminUrl, boolean token) throws Exception {
- if (StringUtils.isNotBlank(apiBaseUrl) && !token) {
- return apiBaseUrl;
- }
-
- try {
- URL url = new URL(adminUrl);
- // tmc.int.cloud.talend.com
- String authority = url.getAuthority();
- String regex = "(\\w*\\-*\\w*\\.?){2}\\.(talend.com)";
- Pattern pattern= Pattern.compile(regex);
- Matcher match = pattern.matcher(authority);
- if (match.find()) {
- // int.cloud.talend.com
- authority = match.group(0);
- URL apiURL = new URL(url.getProtocol(), PREFIX_API + "." + authority, "");
- // https://api.int.cloud.talend.com
- apiBaseUrl = apiURL.toString();
- } else {
- throw new Exception("Can't match pendo url from " + adminUrl);
- }
- } catch (MalformedURLException e) {
- throw new Exception("Invalid url " + adminUrl, e.getCause());
- }
-
- return apiBaseUrl;
- }
-
- private String getToken() {
- return getRepositoryContext().getClearPassword();
- }
-
- public String getTmcUser(String url, String token) {
- try {
- String pendoInfo = getPendoInfo(getBaseUrl(url, true), token);
- if (StringUtils.isNotBlank(pendoInfo)) {
- JSONObject infoJson = new JSONObject(pendoInfo);
- return ((JSONObject) infoJson.get("visitor")).getString("id"); //$NON-NLS-1$ //$NON-NLS-2$
- }
- } catch (Exception e) {
- ExceptionHandler.process(e);
- }
- return ""; //$NON-NLS-1$
- }
-
- private String getPendoKeyFromLicense() throws Exception {
- if (GlobalServiceRegister.getDefault().isServiceRegistered(IRemoteService.class)) {
- IRemoteService service = GlobalServiceRegister.getDefault().getService(IRemoteService.class);
- return service.getPendoKeyFromLicense();
- }
- return null;
- }
-
- private static RepositoryContext getRepositoryContext() {
- RepositoryContext repositoryContext = (RepositoryContext) CoreRuntimePlugin.getInstance().getContext()
- .getProperty(Context.REPOSITORY_CONTEXT_KEY);
- return repositoryContext;
- }
-
- public void setAdminUrl(String adminUrl) {
- PendoTrackSender.adminUrl = adminUrl;
- }
-
- public void setApiBaseUrl(String apiBaseUrl) {
- PendoTrackSender.apiBaseUrl = apiBaseUrl;
- }
-
-}
diff --git a/main/plugins/org.talend.core.runtime/src/main/java/org/talend/core/pendo/TrackEvent.java b/main/plugins/org.talend.core.runtime/src/main/java/org/talend/core/pendo/TrackEvent.java
new file mode 100644
index 0000000000..852958b9df
--- /dev/null
+++ b/main/plugins/org.talend.core.runtime/src/main/java/org/talend/core/pendo/TrackEvent.java
@@ -0,0 +1,79 @@
+// ============================================================================
+//
+// Copyright (C) 2006-2022 Talend Inc. - www.talend.com
+//
+// 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 Talend SA
+// 9 rue Pages 92150 Suresnes, France
+//
+// ============================================================================
+package org.talend.core.pendo;
+
+
+/**
+ * DOC jding class global comment. Detailled comment
+ */
+public enum TrackEvent {
+
+ /**
+ * create by TUP-33421 update by TUP-34791, TUP-35523, TUP-36780
+ */
+ PROJECT_LOGIN("Project Login"),
+
+ /**
+ * create by TUP-33990
+ */
+ IMPORT_API_DEF("Import API Definition"),
+ /**
+ * create by TUP-33990
+ */
+ UPDATE_API_DEF("Update API Definition"),
+ /**
+ * create by TUP-33990
+ */
+ USE_API_DEF("Use API Definition"),
+ /**
+ * create by TUP-33990
+ */
+ OPEN_IN_APIDesigner("Open in API Designer"),
+ /**
+ * create by TUP-33990
+ */
+ OPEN_IN_APITester("Open in API Tester"),
+ /**
+ * create by TUP-33990
+ */
+ OPEN_API_DOCUMENTATION("Open API Documentation"),
+
+ /**
+ * create by TUP-35644
+ */
+ AUTOMAP("tMap Automap"),
+ /**
+ * create by TUP-35644 update by TUP-36710
+ */
+ TMAP("tMap"),
+
+ /**
+ * create by TUP-35712 update by TUP-36893
+ */
+ ITEM_IMPORT("Import items"),
+ /**
+ * create by TUP-35712
+ */
+ ITEM_SIGNATURE("Item Signature");
+
+ private String event;
+
+ TrackEvent(String event) {
+ this.event = event;
+ }
+
+ public String getEvent() {
+ return event;
+ }
+
+}
diff --git a/main/plugins/org.talend.core.runtime/src/main/java/org/talend/core/pendo/mapper/PendoAutoMapManager.java b/main/plugins/org.talend.core.runtime/src/main/java/org/talend/core/pendo/mapper/PendoAutoMapManager.java
index 05746f1fff..edf6a68b96 100644
--- a/main/plugins/org.talend.core.runtime/src/main/java/org/talend/core/pendo/mapper/PendoAutoMapManager.java
+++ b/main/plugins/org.talend.core.runtime/src/main/java/org/talend/core/pendo/mapper/PendoAutoMapManager.java
@@ -12,8 +12,9 @@
// ============================================================================
package org.talend.core.pendo.mapper;
-import org.talend.core.pendo.PendoTrackDataUtil.TrackEvent;
-import org.talend.core.pendo.PendoTrackSender;
+import org.talend.core.pendo.AbstractPendoTrackManager;
+import org.talend.core.pendo.TrackEvent;
+import org.talend.core.pendo.properties.IPendoDataProperties;
import org.talend.core.pendo.properties.PendoAutoMapProperties;
/**
@@ -21,7 +22,7 @@ import org.talend.core.pendo.properties.PendoAutoMapProperties;
*
* DOC jding class global comment. Detailled comment
*/
-public class PendoAutoMapManager {
+public class PendoAutoMapManager extends AbstractPendoTrackManager {
private int mappingChangeCount = 0;
@@ -45,9 +46,18 @@ public class PendoAutoMapManager {
if (mappingChangeCount < 1) {
return;
}
- PendoAutoMapProperties properties = new PendoAutoMapProperties();
- properties.setAutoMappings(mappingChangeCount);
- PendoTrackSender.getInstance().sendToPendo(TrackEvent.AUTOMAP, properties);
+ super.sendTrackToPendo();
}
+ @Override
+ public TrackEvent getTrackEvent() {
+ return TrackEvent.AUTOMAP;
+ }
+
+ @Override
+ public IPendoDataProperties collectProperties() {
+ PendoAutoMapProperties properties = new PendoAutoMapProperties();
+ properties.setAutoMappings(mappingChangeCount);
+ return properties;
+ }
}
diff --git a/main/plugins/org.talend.core.runtime/src/main/java/org/talend/core/pendo/properties/PendoLoginProperties.java b/main/plugins/org.talend.core.runtime/src/main/java/org/talend/core/pendo/properties/PendoLoginProperties.java
deleted file mode 100644
index 34c8ba88a0..0000000000
--- a/main/plugins/org.talend.core.runtime/src/main/java/org/talend/core/pendo/properties/PendoLoginProperties.java
+++ /dev/null
@@ -1,171 +0,0 @@
-// ============================================================================
-//
-// Copyright (C) 2006-2022 Talend Inc. - www.talend.com
-//
-// 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 Talend SA
-// 9 rue Pages 92150 Suresnes, France
-//
-// ============================================================================
-package org.talend.core.pendo.properties;
-
-import java.util.List;
-
-import com.fasterxml.jackson.annotation.JsonProperty;
-
-/**
- * DOC jding class global comment. Detailled comment
- */
-public class PendoLoginProperties implements IPendoDataProperties {
-
- @JsonProperty("studio_version")
- private String studioVersion;
-
- @JsonProperty("studio_patch")
- private String studioPatch;
-
- @JsonProperty("enabled_features")
- private List enabledFeatures;
-
- @JsonProperty("referenced_project_number")
- private String refProjectCount;
-
- @JsonProperty("referenced_projects")
- private List refProjectList;
-
- @JsonProperty("one_click_login")
- private String isOneClickLogin;
-
- @JsonProperty("managed_update")
- private String managedUpdate;
-
- /**
- * Getter for studio_version.
- *
- * @return the studio_version
- */
- public String getStudioVersion() {
- return studioVersion;
- }
-
- /**
- * Sets the studio_version.
- *
- * @param studio_version the studio_version to set
- */
- public void setStudioVersion(String studioVersion) {
- this.studioVersion = studioVersion;
- }
-
- /**
- * Getter for studio_patch.
- *
- * @return the studio_patch
- */
- public String getStudioPatch() {
- return studioPatch;
- }
-
- /**
- * Sets the studio_patch.
- *
- * @param studio_patch the studio_patch to set
- */
- public void setStudioPatch(String studioPatch) {
- this.studioPatch = studioPatch;
- }
-
- /**
- * Getter for enabled_features.
- *
- * @return the enabled_features
- */
- public List getEnabledFeatures() {
- return enabledFeatures;
- }
-
- /**
- * Sets the enabled_features.
- *
- * @param enabled_features the enabled_features to set
- */
- public void setEnabledFeatures(List enabledFeatures) {
- this.enabledFeatures = enabledFeatures;
- }
-
- /**
- * Getter for refProjectCount.
- *
- * @return the refProjectCount
- */
- public String getRefProjectCount() {
- return refProjectCount;
- }
-
- /**
- * Sets the refProjectCount.
- *
- * @param refProjectCount the refProjectCount to set
- */
- public void setRefProjectCount(String refProjectCount) {
- this.refProjectCount = refProjectCount;
- }
-
- /**
- * Getter for refProjectList.
- *
- * @return the refProjectList
- */
- public List getRefProjectList() {
- return refProjectList;
- }
-
- /**
- * Sets the refProjectList.
- *
- * @param refProjectList the refProjectList to set
- */
- public void setRefProjectList(List refProjectList) {
- this.refProjectList = refProjectList;
- }
-
- /**
- * Getter for isOneClickLogin.
- *
- * @return the isOneClickLogin
- */
- public String getIsOneClickLogin() {
- return isOneClickLogin;
- }
-
- /**
- * Sets the isOneClickLogin.
- *
- * @param isOneClickLogin the isOneClickLogin to set
- */
- public void setIsOneClickLogin(String isOneClickLogin) {
- this.isOneClickLogin = isOneClickLogin;
- }
-
- /**
- * Getter for managedUpdate.
- *
- * @return the managedUpdate
- */
- public String getManagedUpdate() {
- return managedUpdate;
- }
-
- /**
- * Sets the managedUpdate.
- *
- * @param managedUpdate the managedUpdate to set
- */
- public void setManagedUpdate(String managedUpdate) {
- this.managedUpdate = managedUpdate;
- }
-
-}
diff --git a/main/plugins/org.talend.core.runtime/src/main/java/org/talend/core/service/IRemoteService.java b/main/plugins/org.talend.core.runtime/src/main/java/org/talend/core/service/IRemoteService.java
index 22e6f8795b..34462a52d6 100644
--- a/main/plugins/org.talend.core.runtime/src/main/java/org/talend/core/service/IRemoteService.java
+++ b/main/plugins/org.talend.core.runtime/src/main/java/org/talend/core/service/IRemoteService.java
@@ -17,6 +17,9 @@ import org.talend.commons.exception.PersistenceException;
import org.talend.core.GlobalServiceRegister;
import org.talend.core.IService;
import org.talend.core.nexus.ArtifactRepositoryBean;
+import org.talend.core.pendo.AbstractPendoTrackManager;
+import org.talend.core.pendo.TrackEvent;
+import org.talend.core.pendo.properties.IPendoDataProperties;
import org.talend.utils.json.JSONException;
import org.talend.utils.json.JSONObject;
@@ -35,11 +38,17 @@ public interface IRemoteService extends IService {
LoginException, JSONException;
boolean isAuthorized(String value);
-
- boolean isTokenUsed(String adminUrl) throws Exception;
-
- String getPendoKeyFromLicense() throws Exception;
+ boolean isPendoTrackAvailable() throws Exception;
+
+ void sendPendoTrackData(TrackEvent event, IPendoDataProperties properties) throws Exception;
+
+ AbstractPendoTrackManager getPendoProjectLoginManager();
+
+ AbstractPendoTrackManager getPendoGenericManager(TrackEvent event, IPendoDataProperties peoperties);
+
+ String getTmcUser(String url, String token);
+
public boolean isCloudConnection();
public static IRemoteService get() {
diff --git a/main/plugins/org.talend.core.runtime/src/main/java/org/talend/designer/core/IDesignerCoreService.java b/main/plugins/org.talend.core.runtime/src/main/java/org/talend/designer/core/IDesignerCoreService.java
index edb24702d2..7996716559 100644
--- a/main/plugins/org.talend.core.runtime/src/main/java/org/talend/designer/core/IDesignerCoreService.java
+++ b/main/plugins/org.talend.core.runtime/src/main/java/org/talend/designer/core/IDesignerCoreService.java
@@ -26,6 +26,8 @@ import org.eclipse.jface.viewers.ILabelProvider;
import org.eclipse.ui.IEditorPart;
import org.eclipse.ui.IEditorReference;
import org.eclipse.ui.part.MultiPageEditorPart;
+import org.talend.analysistask.AnalysisReportRecorder;
+import org.talend.commons.exception.PersistenceException;
import org.talend.core.IService;
import org.talend.core.model.components.IComponent;
import org.talend.core.model.general.ModuleNeeded;
@@ -206,4 +208,6 @@ public interface IDesignerCoreService extends IService {
public IProcess getJobletProcessByItem(Item item);
+ public List analysis(Project project) throws PersistenceException;
+
}
diff --git a/main/plugins/org.talend.designer.maven.repo.tcksdk/pom.xml b/main/plugins/org.talend.designer.maven.repo.tcksdk/pom.xml
index f2228e9714..63543de905 100644
--- a/main/plugins/org.talend.designer.maven.repo.tcksdk/pom.xml
+++ b/main/plugins/org.talend.designer.maven.repo.tcksdk/pom.xml
@@ -394,11 +394,10 @@
commons-cli
1.4
-
org.apache.commons
commons-text
- 1.4
+ 1.10.0
diff --git a/main/plugins/org.talend.designer.maven.tos/resources/tcompv1/pom.xml b/main/plugins/org.talend.designer.maven.tos/resources/tcompv1/pom.xml
index f0762d28de..da5264c986 100644
--- a/main/plugins/org.talend.designer.maven.tos/resources/tcompv1/pom.xml
+++ b/main/plugins/org.talend.designer.maven.tos/resources/tcompv1/pom.xml
@@ -13,7 +13,7 @@
1.49.1
1.7.34
- 1.2.19
+ 1.2.22
diff --git a/main/plugins/org.talend.designer.maven.tos/resources/unzip/pom.xml b/main/plugins/org.talend.designer.maven.tos/resources/unzip/pom.xml
index aa27ec5f0a..96cbd30c4c 100644
--- a/main/plugins/org.talend.designer.maven.tos/resources/unzip/pom.xml
+++ b/main/plugins/org.talend.designer.maven.tos/resources/unzip/pom.xml
@@ -109,6 +109,7 @@
+
diff --git a/main/plugins/org.talend.designer.maven.ui/src/main/java/messages.properties b/main/plugins/org.talend.designer.maven.ui/src/main/java/messages.properties
index c7a05d29d4..2abe13509a 100644
--- a/main/plugins/org.talend.designer.maven.ui/src/main/java/messages.properties
+++ b/main/plugins/org.talend.designer.maven.ui/src/main/java/messages.properties
@@ -10,6 +10,7 @@ ProjectPomProjectSettingPage_ConfirmMessage=Will apply and update for project PO
ProjectPomProjectSettingPage_FilterPomLabel=Filter to use to generate poms:
ProjectPomProjectSettingPage_FilterErrorMessage=Filter is invalid.
ProjectPomProjectSettingPage.syncAllPomsButtonText=Force full re-synchronize POMs
+ProjectPomProjectSettingPage.syncBuildTypesButtonText=Force full re-synchronize build types
AbstractPersistentProjectSettingPage.syncAllPoms=Do you want to update all poms? \n This operation might take long time depends on your project size.
MavenProjectSettingPage.filterExampleMessage=Filter examples:\nlabel=myJob \t\t\t\t=> Generate only the job named "myJob"\n!(label=myJob) \t\t\t\t=> Generate any job except the one named "myJob"\n(path=folder1/folder2) \t\t\t=> Generate any job in the folder "folder1/folder2"\n(path=folder1/folder2)or(label=myJob)\t=> Generate any job in the folder "folder1/folder2" or named "myJob"\n(label=myJob)and(version=0.2)\t\t=> Generate only the job named "myJob" with version 0.2\n!((label=myJob)and(version=0.1))\t\t=> Generate every jobs except the "myJob" version 0.1
MavenProjectSettingPage.refModuleText=Set reference project modules in profile
@@ -17,3 +18,4 @@ MavenProjectSettingPage.excludeDeletedItems=Exclude deleted items
MavenProjectSettingPage.syncAllPomsWarning=Click the Force full re-synchronize POMs button to apply the new settings.
MavenProjectSettingPage.skipFolders=Skip folders
BuildProjectSettingPage.allowRecursiveJobsJoblets=Allow recursive Jobs and Joblets (not supported - for compatibility only)
+BuildProjectSettingPage.allowRecursiveJobs=Allow recursive jobs (Not recommended)
diff --git a/main/plugins/org.talend.designer.maven.ui/src/main/java/org/talend/designer/maven/ui/setting/project/page/MavenProjectSettingPage.java b/main/plugins/org.talend.designer.maven.ui/src/main/java/org/talend/designer/maven/ui/setting/project/page/MavenProjectSettingPage.java
index 36217c9285..13217f0f14 100644
--- a/main/plugins/org.talend.designer.maven.ui/src/main/java/org/talend/designer/maven/ui/setting/project/page/MavenProjectSettingPage.java
+++ b/main/plugins/org.talend.designer.maven.ui/src/main/java/org/talend/designer/maven/ui/setting/project/page/MavenProjectSettingPage.java
@@ -26,6 +26,7 @@ import org.talend.core.runtime.maven.MavenConstants;
import org.talend.core.runtime.projectsetting.AbstractProjectSettingPage;
import org.talend.designer.maven.DesignerMavenPlugin;
import org.talend.designer.maven.tools.AggregatorPomsHelper;
+import org.talend.designer.maven.tools.BuildTypeManager;
import org.talend.designer.maven.ui.i18n.Messages;
/**
@@ -85,7 +86,25 @@ public class MavenProjectSettingPage extends AbstractProjectSettingPage {
});
- }
+ if (isSyncBuildTypeAllowed()) {
+ Button syncBuildTypes = new Button(parent, SWT.NONE);
+ syncBuildTypes.setText(Messages.getString("ProjectPomProjectSettingPage.syncBuildTypesButtonText")); //$NON-NLS-1$
+
+ syncBuildTypes.addSelectionListener(new SelectionAdapter() {
+
+ @Override
+ public void widgetSelected(SelectionEvent event) {
+ try {
+ new BuildTypeManager().syncBuildTypes(getCurrentPage());
+ } catch (Exception e) {
+ ExceptionHandler.process(e);
+ }
+ }
+
+ });
+ }
+
+ }
private void addSyncWarning() {
setMessage(Messages.getString("MavenProjectSettingPage.syncAllPomsWarning"), IMessage.WARNING); //$NON-NLS-1$
@@ -100,4 +119,12 @@ public class MavenProjectSettingPage extends AbstractProjectSettingPage {
return ok;
}
+ private static boolean isSyncBuildTypeAllowed() {
+ return Boolean.getBoolean("talend.builtype.syncallowed");
+ }
+
+ private MavenProjectSettingPage getCurrentPage() {
+ return this;
+ }
+
}
diff --git a/main/plugins/org.talend.designer.maven/src/main/java/org/talend/designer/maven/common/ItemReportRecorder.java b/main/plugins/org.talend.designer.maven/src/main/java/org/talend/designer/maven/common/ItemReportRecorder.java
new file mode 100644
index 0000000000..e9821610bc
--- /dev/null
+++ b/main/plugins/org.talend.designer.maven/src/main/java/org/talend/designer/maven/common/ItemReportRecorder.java
@@ -0,0 +1,149 @@
+// ============================================================================
+//
+// Copyright (C) 2006-2021 Talend Inc. - www.talend.com
+//
+// 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 Talend SA
+// 9 rue Pages 92150 Suresnes, France
+//
+// ============================================================================
+package org.talend.designer.maven.migration.common;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.commons.lang.StringUtils;
+import org.talend.commons.exception.ExceptionHandler;
+import org.talend.commons.exception.PersistenceException;
+import org.talend.core.GlobalServiceRegister;
+import org.talend.core.model.properties.Item;
+import org.talend.core.model.properties.Property;
+import org.talend.core.model.repository.ERepositoryObjectType;
+import org.talend.core.ui.ITestContainerCoreService;
+
+/**
+ * DOC jding class global comment. Detailled comment
+ */
+public class ItemReportRecorder {
+
+ protected Item item;
+
+ protected String detailMessage;
+
+ public String getItemType() {
+ String type = "";
+ ERepositoryObjectType itemType = ERepositoryObjectType.getItemType(item);
+ if (itemType != null) {
+ if (ERepositoryObjectType.getAllTypesOfTestContainer().contains(itemType)) {
+ Item parentJobItem = getTestCaseParentJobItem(item);
+ if (parentJobItem != null) {
+ ERepositoryObjectType parentJobType = ERepositoryObjectType.getItemType(parentJobItem);
+ if (parentJobType != null) {
+ String parentTypePath = getCompleteObjectTypePath(parentJobType);
+ if (StringUtils.isNotBlank(parentTypePath)) {
+ type = parentTypePath + "/";
+ }
+ }
+ }
+ type += itemType;
+ } else {
+ type = getCompleteObjectTypePath(itemType);
+ }
+ }
+ return type;
+ }
+
+ public String getItemPath() {
+ String path = "";
+ StringBuffer buffer = new StringBuffer();
+ ERepositoryObjectType itemType = ERepositoryObjectType.getItemType(item);
+
+ if (ERepositoryObjectType.getAllTypesOfTestContainer().contains(itemType)) {
+ StringBuffer testcaseBuffer = new StringBuffer();
+ Item parentJobItem = getTestCaseParentJobItem(item);
+ if (parentJobItem != null) {
+ if (parentJobItem.getState() != null && StringUtils.isNotBlank(parentJobItem.getState().getPath())) {
+ testcaseBuffer.append(parentJobItem.getState().getPath()).append("/");
+ }
+ testcaseBuffer.append(parentJobItem.getProperty() != null ? parentJobItem.getProperty().getLabel() : "");
+ if (StringUtils.isNotBlank(testcaseBuffer.toString())) {
+ buffer.append(testcaseBuffer.toString()).append("/");
+ }
+ }
+ } else {
+ if (item.getState() != null && StringUtils.isNotBlank(item.getState().getPath())) {
+ buffer.append(item.getState().getPath()).append("/");
+ }
+ }
+
+ Property property = item.getProperty();
+ if (property != null) {
+ buffer.append(property.getLabel() + "_" + property.getVersion());
+ }
+ path = buffer.toString();
+ return path;
+ }
+
+ private Item getTestCaseParentJobItem(Item testcaseItem) {
+ Item parentJobItem = null;
+ if (GlobalServiceRegister.getDefault().isServiceRegistered(ITestContainerCoreService.class)) {
+ ITestContainerCoreService testcaseService = GlobalServiceRegister.getDefault()
+ .getService(ITestContainerCoreService.class);
+ if (testcaseService != null) {
+ try {
+ parentJobItem = testcaseService.getParentJobItem(item);
+ } catch (PersistenceException e) {
+ ExceptionHandler.process(e);
+ }
+ }
+ }
+ return parentJobItem;
+ }
+
+ private String getCompleteObjectTypePath(ERepositoryObjectType itemType) {
+ ERepositoryObjectType rootItemType = itemType;
+ if (ERepositoryObjectType.JDBC != null && ERepositoryObjectType.JDBC.equals(rootItemType)) {
+ rootItemType = ERepositoryObjectType.METADATA_CONNECTIONS;
+ }
+ List typeLabels = new ArrayList();
+ findOutCompleteTypePath(rootItemType, typeLabels);
+ StringBuffer buffer = new StringBuffer();
+ if (!typeLabels.isEmpty()) {
+ for (int i = 0; i < typeLabels.size(); i++) {
+ if (i != 0) {
+ buffer.append("/");
+ }
+ buffer.append(typeLabels.get(i));
+ }
+ }
+ return buffer.toString();
+ }
+
+ private void findOutCompleteTypePath(ERepositoryObjectType type, List typeLabels) {
+ ERepositoryObjectType parentType = ERepositoryObjectType.findParentType(type);
+ if (parentType != null) {
+ findOutCompleteTypePath(parentType, typeLabels);
+ }
+ typeLabels.add(type.getLabel());
+ }
+
+ public Item getItem() {
+ return item;
+ }
+
+ public void setItem(Item item) {
+ this.item = item;
+ }
+
+ public String getDetailMessage() {
+ return detailMessage;
+ }
+
+ public void setDetailMessage(String detailMessage) {
+ this.detailMessage = detailMessage;
+ }
+
+}
diff --git a/main/plugins/org.talend.designer.maven/src/main/java/org/talend/designer/maven/common/ItemsReportUtil.java b/main/plugins/org.talend.designer.maven/src/main/java/org/talend/designer/maven/common/ItemsReportUtil.java
new file mode 100644
index 0000000000..a8f6f152f5
--- /dev/null
+++ b/main/plugins/org.talend.designer.maven/src/main/java/org/talend/designer/maven/common/ItemsReportUtil.java
@@ -0,0 +1,81 @@
+// ============================================================================
+//
+// Copyright (C) 2006-2021 Talend Inc. - www.talend.com
+//
+// 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 Talend SA
+// 9 rue Pages 92150 Suresnes, France
+//
+// ============================================================================
+package org.talend.designer.maven.migration.common;
+
+import java.io.BufferedWriter;
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.OutputStreamWriter;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.List;
+
+import org.apache.commons.lang.StringUtils;
+import org.eclipse.core.runtime.Path;
+import org.talend.core.utils.TalendQuoteUtils;
+
+/**
+ * DOC jding class global comment. Detailled comment
+ */
+public class ItemsReportUtil {
+
+
+ public static boolean generateReportFile(File reportFile, String header, List records) throws Exception {
+ boolean generateDone = false;
+ BufferedWriter printWriter = null;
+ try {
+ File parentFolder = new Path(reportFile.getAbsolutePath()).removeLastSegments(1).toFile();
+ // File parentFolder = new File(parentPath);
+ if (!parentFolder.exists()) {
+ parentFolder.mkdirs();
+ }
+ if (!reportFile.exists()) {
+ reportFile.createNewFile();
+ }
+ FileOutputStream fos = new FileOutputStream(reportFile);
+ fos.write(new byte[] { (byte) 0xEF, (byte) 0xBB, (byte) 0xBF });
+ OutputStreamWriter outputWriter = new OutputStreamWriter(fos, "UTF-8");
+ printWriter = new BufferedWriter(outputWriter);
+ printWriter.write(header);
+ printWriter.newLine();
+ for (String recordStr : records) {
+ printWriter.write(recordStr);
+ printWriter.newLine();
+ }
+ printWriter.flush();
+ generateDone = true;
+ } finally {
+ if (printWriter != null) {
+ printWriter.close();
+ }
+ }
+ return generateDone;
+ }
+
+ public static String handleColumnQuotes(String text) {
+ String quoteMark = TalendQuoteUtils.QUOTATION_MARK;
+ text = StringUtils.isBlank(text) ? "" : text;
+ if (text.contains(quoteMark)) {
+ // replace to double quote surround
+ text = text.replace(quoteMark, quoteMark + quoteMark);
+ }
+ return quoteMark + text + quoteMark;
+ }
+
+ public static String getCurrentTimeString() {
+ SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMddHHmmss");
+ String time = dateFormat.format(new Date());
+ return time;
+ }
+
+}
diff --git a/main/plugins/org.talend.designer.maven/src/main/java/org/talend/designer/maven/common/MigrationReportHelper.java b/main/plugins/org.talend.designer.maven/src/main/java/org/talend/designer/maven/common/MigrationReportHelper.java
new file mode 100644
index 0000000000..aa3058283a
--- /dev/null
+++ b/main/plugins/org.talend.designer.maven/src/main/java/org/talend/designer/maven/common/MigrationReportHelper.java
@@ -0,0 +1,177 @@
+// ============================================================================
+//
+// Copyright (C) 2006-2021 Talend Inc. - www.talend.com
+//
+// 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 Talend SA
+// 9 rue Pages 92150 Suresnes, France
+//
+// ============================================================================
+package org.talend.designer.maven.migration.common;
+
+import java.io.File;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.preferences.ConfigurationScope;
+import org.eclipse.core.runtime.preferences.IEclipsePreferences;
+import org.eclipse.core.runtime.preferences.IScopeContext;
+import org.osgi.service.prefs.BackingStoreException;
+import org.talend.commons.exception.ExceptionHandler;
+import org.talend.core.PluginChecker;
+import org.talend.core.model.properties.Item;
+import org.talend.core.model.properties.Property;
+import org.talend.migration.IProjectMigrationTask;
+
+/**
+ * DOC jding class global comment. Detailled comment
+ */
+public class MigrationReportHelper {
+
+ private static final String COMMA = ",";
+
+ private static final String PLUGIN_ID = "org.talend.designer.maven";
+
+ private static final String DO_NOT_SHOW_PREF_KEY = "talend.migrationReportDialog.doNotShowAgain";
+
+ private static final String MIGRATION_REPORT_HEAD = "Task name,Task description,Item type,Path to migrated item,Migration details";
+
+ private static final MigrationReportHelper instance = new MigrationReportHelper();
+
+ public static MigrationReportHelper getInstance() {
+ return instance;
+ }
+
+ private String reportGeneratedPath = "";
+
+ private Set taskItemRecords = new HashSet();
+
+ private List migrationReportRecorders = new ArrayList();
+
+ public void generateMigrationReport(String projectTecName) {
+ if (migrationReportRecorders == null || migrationReportRecorders.isEmpty()) {
+ return;
+ }
+
+ if (!PluginChecker.isTIS()) {
+ clearRecorders();
+ return;
+ }
+
+ File exportFolder = null;
+ File reportFile = null;
+ try {
+ String currentTime = getCurrentTime();
+ String filePath = getReportExportFolder(currentTime) + "/" + getReportFileName(currentTime, projectTecName);
+ reportGeneratedPath = filePath;
+ reportFile = new File(filePath);
+ List recordLines = new ArrayList();
+ for (MigrationReportRecorder record : migrationReportRecorders) {
+ StringBuffer buffer = new StringBuffer();
+ buffer.append(ItemsReportUtil.handleColumnQuotes(record.getTaskClassName())).append(COMMA);
+ buffer.append(ItemsReportUtil.handleColumnQuotes(record.getTaskDescription())).append(COMMA);
+ buffer.append(ItemsReportUtil.handleColumnQuotes(record.getItemType())).append(COMMA);
+ buffer.append(ItemsReportUtil.handleColumnQuotes(record.getItemPath())).append(COMMA);
+ buffer.append(ItemsReportUtil.handleColumnQuotes(record.getDetailMessage()));
+ recordLines.add(buffer.toString());
+ }
+ ItemsReportUtil.generateReportFile(reportFile, MIGRATION_REPORT_HEAD, recordLines);
+ } catch (Exception e) {
+ ExceptionHandler.process(e);
+ if (reportFile != null && reportFile.exists()) {
+ reportFile.delete();
+ }
+ if (exportFolder != null && exportFolder.exists()) {
+ exportFolder.delete();
+ }
+ } finally {
+ migrationReportRecorders.clear();
+ taskItemRecords.clear();
+ }
+
+ }
+
+ public boolean isRequireDefaultRecord(IProjectMigrationTask task, Item item) {
+ boolean require = true;
+ if (task.getOrder() != null) {
+ Calendar calendar = Calendar.getInstance();
+ calendar.setTime(task.getOrder());
+ int year = calendar.get(Calendar.YEAR);
+ if (year <= 2016) {
+ return false;
+ }
+ }
+ if (item.getProperty() != null) {
+ Property property = item.getProperty();
+ String key = task.getId() + "_" + property.getId() + "_" + property.getVersion();
+ if (taskItemRecords.contains(key)) {
+ return false;
+ }
+ }
+ return require;
+ }
+
+ private String getCurrentTime() {
+ SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMddHHmmss");
+ String time = dateFormat.format(new Date());
+ return time;
+ }
+
+ private String getReportExportFolder(String time) {
+ String folderName = "migrationReport" + "_" + time;
+ String path = ResourcesPlugin.getWorkspace().getRoot().getLocation().toString() + "/report/" + folderName;
+ return path;
+ }
+
+ private String getReportFileName(String time, String projectTecName) {
+ String fileName = time + "_" + projectTecName + "_" + "Migration" + "_" + "Report.csv";
+ return fileName;
+ }
+
+ public static void storeDoNotShowAgainPref(boolean selected) {
+ IScopeContext scopeContext = ConfigurationScope.INSTANCE;
+ IEclipsePreferences pref = scopeContext.getNode(PLUGIN_ID);
+ pref.putBoolean(DO_NOT_SHOW_PREF_KEY, selected);
+ try {
+ pref.flush();
+ } catch (BackingStoreException e) {
+ ExceptionHandler.process(e);
+ }
+ }
+
+ public static boolean isReportDialogDisable() {
+ IScopeContext scopeContext = ConfigurationScope.INSTANCE;
+ IEclipsePreferences pref = scopeContext.getNode(PLUGIN_ID);
+ return pref.getBoolean(DO_NOT_SHOW_PREF_KEY, false);
+ }
+
+ public void addRecorder(MigrationReportRecorder recorder) {
+ if (recorder != null) {
+ migrationReportRecorders.add(recorder);
+ if (recorder.getItem() != null && recorder.getItem().getProperty() != null) {
+ Property property = recorder.getItem().getProperty();
+ taskItemRecords.add(recorder.getTask().getId() + "_" + property.getId() + "_" + property.getVersion());
+ }
+ }
+ }
+
+ public void clearRecorders() {
+ reportGeneratedPath = "";
+ migrationReportRecorders.clear();
+ taskItemRecords.clear();
+ }
+
+ public String getReportGeneratedPath() {
+ return reportGeneratedPath;
+ }
+
+}
diff --git a/main/plugins/org.talend.designer.maven/src/main/java/org/talend/designer/maven/common/MigrationReportRecorder.java b/main/plugins/org.talend.designer.maven/src/main/java/org/talend/designer/maven/common/MigrationReportRecorder.java
new file mode 100644
index 0000000000..be9c1cd57e
--- /dev/null
+++ b/main/plugins/org.talend.designer.maven/src/main/java/org/talend/designer/maven/common/MigrationReportRecorder.java
@@ -0,0 +1,197 @@
+// ============================================================================
+//
+// Copyright (C) 2006-2021 Talend Inc. - www.talend.com
+//
+// 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 Talend SA
+// 9 rue Pages 92150 Suresnes, France
+//
+// ============================================================================
+package org.talend.designer.maven.migration.common;
+
+import org.apache.commons.lang.StringUtils;
+import org.talend.core.model.components.ComponentUtilities;
+import org.talend.core.model.properties.Item;
+import org.talend.core.utils.TalendQuoteUtils;
+import org.talend.designer.core.model.utils.emf.talendfile.ElementParameterType;
+import org.talend.designer.core.model.utils.emf.talendfile.NodeType;
+import org.talend.migration.IProjectMigrationTask;
+
+/**
+ * DOC jding class global comment. Detailled comment
+ */
+public class MigrationReportRecorder extends ItemReportRecorder {
+
+ private IProjectMigrationTask task;
+
+ private MigrationOperationType operationType;
+
+ private NodeType node;
+
+ private String paramName;
+
+ private String oldValue;
+
+ private String newValue;
+
+ public enum MigrationOperationType {
+ ADD,
+ MODIFY,
+ DELETE
+ }
+
+ public MigrationReportRecorder(IProjectMigrationTask task, Item item) {
+ super();
+ this.task = task;
+ this.item = item;
+ }
+
+ public MigrationReportRecorder(IProjectMigrationTask task, MigrationOperationType operationType, Item item, NodeType node,
+ String paramName, String oldValue, String newValue) {
+ super();
+ this.task = task;
+ this.operationType = operationType;
+ this.item = item;
+ this.node = node;
+ this.paramName = paramName;
+ this.oldValue = oldValue;
+ this.newValue = newValue;
+ }
+
+ public MigrationReportRecorder(IProjectMigrationTask task, Item item, String detailMessage) {
+ super();
+ this.task = task;
+ this.item = item;
+ this.detailMessage = detailMessage;
+ }
+
+ public String getTaskClassName() {
+ return task.getClass().getSimpleName();
+ }
+
+ public String getTaskDescription() {
+ String description = "";
+ if (StringUtils.isNotBlank(task.getDescription())) {
+ description = task.getDescription();
+ }
+ return description;
+ }
+
+ public String getDetailMessage() {
+ String details = detailMessage;
+ if (StringUtils.isNotBlank(detailMessage)) {
+ return details;
+ }
+
+ if (operationType == null || StringUtils.isBlank(paramName)) {
+ details = getTaskClassName() + " task is applied";
+ return details;
+ }
+
+ StringBuffer detailBuffer = new StringBuffer();
+ if (node != null) {
+ // migration for node, e.g. tRESTClient component "tRESTClient_2":
+ detailBuffer.append(node.getComponentName()).append(" component ");
+ ElementParameterType uniqueName = ComponentUtilities.getNodeProperty(node, "UNIQUE_NAME");
+ detailBuffer.append(TalendQuoteUtils.addQuotes(uniqueName.getValue())).append(":");
+ } else {
+ // migration for item, e.g. context item "testContext":
+ detailBuffer.append(getItemType() + " item ")
+ .append(TalendQuoteUtils.addQuotes(item.getProperty().getLabel())).append(":");
+ }
+
+ detailBuffer.append(paramName).append(" was ");
+ switch (operationType) {
+ case ADD:
+ detailBuffer.append("added");
+ if (StringUtils.isNotBlank(newValue)) {
+ detailBuffer.append(" with ").append(newValue);
+ }
+ break;
+ case MODIFY:
+ detailBuffer.append("changed");
+ if (StringUtils.isNotBlank(oldValue)) {
+ detailBuffer.append(" from ").append(oldValue);
+ }
+ if (StringUtils.isNotBlank(newValue)) {
+ detailBuffer.append(" to ").append(newValue);
+ }
+ break;
+ case DELETE:
+ detailBuffer.append("deleted");
+ break;
+ default:
+ break;
+ }
+ details = detailBuffer.toString();
+
+ return details;
+ }
+
+ /**
+ * Getter for task.
+ *
+ * @return the task
+ */
+ public IProjectMigrationTask getTask() {
+ return task;
+ }
+
+ /**
+ * Sets the task.
+ *
+ * @param task the task to set
+ */
+ public void setTask(IProjectMigrationTask task) {
+ this.task = task;
+ }
+
+ /**
+ * Sets the operationType.
+ *
+ * @param operationType the operationType to set
+ */
+ public void setOperationType(MigrationOperationType operationType) {
+ this.operationType = operationType;
+ }
+
+ /**
+ * Sets the node.
+ *
+ * @param node the node to set
+ */
+ public void setNode(NodeType node) {
+ this.node = node;
+ }
+
+ /**
+ * Sets the paramName.
+ *
+ * @param paramName the paramName to set
+ */
+ public void setParamName(String paramName) {
+ this.paramName = paramName;
+ }
+
+ /**
+ * Sets the oldValue.
+ *
+ * @param oldValue the oldValue to set
+ */
+ public void setOldValue(String oldValue) {
+ this.oldValue = oldValue;
+ }
+
+ /**
+ * Sets the newValue.
+ *
+ * @param newValue the newValue to set
+ */
+ public void setNewValue(String newValue) {
+ this.newValue = newValue;
+ }
+
+}
diff --git a/main/plugins/org.talend.designer.maven/src/main/java/org/talend/designer/maven/tasks/AbstractCorrectBuildItemMigrationTask.java b/main/plugins/org.talend.designer.maven/src/main/java/org/talend/designer/maven/tasks/AbstractCorrectBuildItemMigrationTask.java
new file mode 100644
index 0000000000..627ab320f1
--- /dev/null
+++ b/main/plugins/org.talend.designer.maven/src/main/java/org/talend/designer/maven/tasks/AbstractCorrectBuildItemMigrationTask.java
@@ -0,0 +1,121 @@
+package org.talend.designer.maven.migration.tasks;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.talend.commons.exception.PersistenceException;
+import org.talend.commons.runtime.model.emf.EmfHelper;
+import org.talend.core.GlobalServiceRegister;
+import org.talend.core.model.components.filters.IComponentFilter;
+import org.talend.core.model.migration.AbstractItemMigrationTask;
+import org.talend.core.model.properties.Item;
+import org.talend.core.model.properties.JobletProcessItem;
+import org.talend.core.model.properties.ProcessItem;
+import org.talend.core.model.repository.ERepositoryObjectType;
+import org.talend.core.repository.utils.ConvertJobsUtil;
+import org.talend.designer.core.model.utils.emf.talendfile.ElementParameterType;
+import org.talend.designer.core.model.utils.emf.talendfile.NodeType;
+import org.talend.designer.core.model.utils.emf.talendfile.ProcessType;
+import org.talend.designer.maven.migration.common.MigrationReportHelper;
+import org.talend.designer.maven.migration.common.MigrationReportRecorder;
+import org.talend.repository.model.IProxyRepositoryFactory;
+import org.talend.repository.model.IRepositoryService;
+
+public abstract class AbstractCorrectBuildItemMigrationTask extends AbstractItemMigrationTask implements ICorrectBuildTypeMigrationTask {
+
+ protected static final String BUILD_TYPE_PROPERTY = "BUILD_TYPE";
+ protected static final String BUILD_TYPE_STANDALONE = "STANDALONE";
+ protected static final String BUILD_TYPE_OSGI = "OSGI";
+ protected static final String BUILD_TYPE_ROUTE = "ROUTE";
+ protected static final String BUILD_TYPE_ROUTE_MICROSERVICE = "ROUTE_MICROSERVICE";
+ protected static final String REST_MS = "REST_MS";
+
+
+ protected static Map migratedJobs = new HashMap();
+
+ protected static void clearMigratedJobs () {
+ migratedJobs.clear();
+ }
+
+ protected static void skipMigrationForJob (String jobName, String migrationTask) {
+ migratedJobs.put(jobName, migrationTask);
+ }
+
+ protected static void storeMigratedJob (String jobName, String migrationTask) {
+ migratedJobs.put(jobName, migrationTask);
+ }
+
+ protected static boolean isJobMigrated (String jobName) {
+ return migratedJobs.containsKey(jobName);
+ }
+
+ protected static String getStoredJobMigraionTask (String jobName) {
+ return migratedJobs.get(jobName);
+ }
+
+ public void generateReportRecord(MigrationReportRecorder recorder) {
+ MigrationReportHelper.getInstance().addRecorder(recorder);
+ }
+
+ public static List searchComponent(ProcessType processType, IComponentFilter filter) {
+ List list = new ArrayList();
+ if (filter == null || processType == null) {
+ return list;
+ }
+
+ for (Object o : processType.getNode()) {
+ if (filter.accept((NodeType) o)) {
+ list.add((NodeType) o);
+ }
+ }
+ return list;
+ }
+
+ public void save(Item item) throws PersistenceException {
+ IRepositoryService service = (IRepositoryService) GlobalServiceRegister.getDefault()
+ .getService(IRepositoryService.class);
+ IProxyRepositoryFactory factory = service.getProxyRepositoryFactory();
+ factory.save(item, true);
+ }
+
+ public ProcessType getProcessType(Item item) {
+ ProcessType processType = null;
+ if (item instanceof ProcessItem) {
+ processType = ((ProcessItem) item).getProcess();
+ }
+ if (item instanceof JobletProcessItem) {
+ processType = ((JobletProcessItem) item).getJobletProcess();
+ }
+ if (processType != null) {
+ EmfHelper.visitChilds(processType);
+ ERepositoryObjectType itemType = ERepositoryObjectType.getItemType(item);
+ if (itemType == ERepositoryObjectType.TEST_CONTAINER
+ && !ConvertJobsUtil.JobType.STANDARD.getDisplayName().equalsIgnoreCase(processType.getJobType())) {
+ return null;
+ }
+
+ }
+ return processType;
+ }
+
+ /**
+ * Find element parameter with a given parameter name
+ *
+ * @param paramName
+ * @param elementParameterTypes
+ * @return
+ */
+ public static final ElementParameterType findElementParameterByName(String paramName, NodeType node) {
+ for (Object obj : node.getElementParameter()) {
+ ElementParameterType cpType = (ElementParameterType) obj;
+ if (paramName.equals(cpType.getName())) {
+ return cpType;
+ }
+ }
+ return null;
+ }
+
+ abstract public void clear ();
+}
diff --git a/main/plugins/org.talend.designer.maven/src/main/java/org/talend/designer/maven/tasks/AbstractDataServiceJobMigrationTask.java b/main/plugins/org.talend.designer.maven/src/main/java/org/talend/designer/maven/tasks/AbstractDataServiceJobMigrationTask.java
new file mode 100644
index 0000000000..fb2a4a702a
--- /dev/null
+++ b/main/plugins/org.talend.designer.maven/src/main/java/org/talend/designer/maven/tasks/AbstractDataServiceJobMigrationTask.java
@@ -0,0 +1,17 @@
+package org.talend.designer.maven.migration.tasks;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.talend.core.model.repository.ERepositoryObjectType;
+
+public abstract class AbstractDataServiceJobMigrationTask extends AbstractCorrectBuildItemMigrationTask {
+
+ @Override
+ public List getTypes() {
+ List toReturn = new ArrayList();
+ toReturn.add(ERepositoryObjectType.PROCESS);
+ return toReturn;
+ }
+
+}
diff --git a/main/plugins/org.talend.designer.maven/src/main/java/org/talend/designer/maven/tasks/AbstractRouteMigrationTask.java b/main/plugins/org.talend.designer.maven/src/main/java/org/talend/designer/maven/tasks/AbstractRouteMigrationTask.java
new file mode 100644
index 0000000000..aeda38de2e
--- /dev/null
+++ b/main/plugins/org.talend.designer.maven/src/main/java/org/talend/designer/maven/tasks/AbstractRouteMigrationTask.java
@@ -0,0 +1,18 @@
+package org.talend.designer.maven.migration.tasks;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.talend.core.model.repository.ERepositoryObjectType;
+
+public abstract class AbstractRouteMigrationTask extends AbstractCorrectBuildItemMigrationTask {
+
+ @Override
+ public List getTypes() {
+ List toReturn = new ArrayList();
+ toReturn.add(ERepositoryObjectType.PROCESS_ROUTE);
+ toReturn.add(ERepositoryObjectType.PROCESS_ROUTE_MICROSERVICE);
+ return toReturn;
+ }
+
+}
diff --git a/main/plugins/org.talend.designer.maven/src/main/java/org/talend/designer/maven/tasks/CorrectBuildTypeForDIJobMigrationTask.java b/main/plugins/org.talend.designer.maven/src/main/java/org/talend/designer/maven/tasks/CorrectBuildTypeForDIJobMigrationTask.java
new file mode 100644
index 0000000000..41ee7846d4
--- /dev/null
+++ b/main/plugins/org.talend.designer.maven/src/main/java/org/talend/designer/maven/tasks/CorrectBuildTypeForDIJobMigrationTask.java
@@ -0,0 +1,268 @@
+package org.talend.designer.maven.migration.tasks;
+
+import java.util.Date;
+import java.util.GregorianCalendar;
+import java.util.List;
+
+import org.talend.commons.exception.ExceptionHandler;
+import org.talend.commons.exception.PersistenceException;
+import org.talend.core.model.components.filters.IComponentFilter;
+import org.talend.core.model.components.filters.NameComponentFilter;
+import org.talend.core.model.general.Project;
+import org.talend.core.model.properties.Item;
+import org.talend.core.model.properties.ProcessItem;
+import org.talend.designer.core.model.utils.emf.talendfile.NodeType;
+import org.talend.designer.core.model.utils.emf.talendfile.ProcessType;
+import org.talend.designer.maven.migration.common.MigrationReportRecorder;
+import org.talend.designer.runprocess.ItemCacheManager;
+import org.talend.repository.ProjectManager;
+
+/*
+ * If Job does not contain any of the following components: "tRouteInput", "tRESTClient", "tESBConsumer"
+ * then BUILD_TYPE must be STANDALONE
+ * Else (job contains one of "tRouteInput", "tRESTClient" or "tESBConsumer")
+ * If no BUILD_TYPE is set then default BUILD_TYPE must be STANDALONE
+ * Manage child jobs for jobs ( parent, target BUILD_TYPE = STANDALONE )
+ * If BUILD_TYPE is STANDALONE
+ * Manage child jobs for jobs ( parent, target BUILD_TYPE = STANDALONE )
+ * If BUILD_TYPE is ROUTE > EXCEPTION: need warning message! BUILD_TYPE was wrongly set to ROUTE from a previous migration task and has to be manually updated (all subjobs have to be checked manually). Value should be either STANDALONE (in most cases) or OSGI.
+ */
+
+public class CorrectBuildTypeForDIJobMigrationTask extends AbstractDataServiceJobMigrationTask {
+
+ private static final String[] ESB_COMPONENTS = { "tRouteInput", "tRESTClient", "tESBConsumer" };
+
+ private static final String T_RUB_JOB_COMPONENT = "tRunJob";
+
+ boolean failure = false;
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.talend.migration.IMigrationTask#getOrder()
+ */
+ @Override
+ public Date getOrder() {
+ GregorianCalendar gc = new GregorianCalendar(2021, 7, 25, 12, 0, 0);
+ return gc.getTime();
+ }
+
+ @SuppressWarnings("unchecked")
+ @Override
+ public ExecutionResult execute(Item item) {
+
+ final ProcessType processType = getProcessType(item);
+ String jobName = item.getProperty().getLabel();
+
+ /*
+ * Migrating remaining jobs only (which was not migrated previously)
+ */
+ if (isJobMigrated(jobName)) {
+ return ExecutionResult.NOTHING_TO_DO;
+ }
+
+
+ Object originalBuildType = item.getProperty().getAdditionalProperties().get(BUILD_TYPE_PROPERTY);
+
+ /*
+ * If BUILD_TYPE is ROUTE > EXCEPTION: need warning message! BUILD_TYPE was
+ * wrongly set to ROUTE from a previous migration task and has to be manually
+ * updated (all subjobs have to be checked manually). Value should be either
+ * STANDALONE (in most cases) or OSGI.
+ */
+
+ if (originalBuildType != null && BUILD_TYPE_ROUTE.equalsIgnoreCase((String) originalBuildType)) {
+ ExceptionHandler.process(new RuntimeException("Job [" + jobName + "] has incorrect BUILD_TYPE ["
+ + BUILD_TYPE_ROUTE
+ + "] which has to be manually updated (all subjobs have to be checked manually). Value should be either STANDALONE (in most cases) or OSGI"));
+ return ExecutionResult.FAILURE;
+ }
+
+ for (String name : ESB_COMPONENTS) {
+
+ boolean modified = false;
+
+ IComponentFilter filter = new NameComponentFilter(name);
+
+ List c = searchComponent(processType, filter);
+
+ if (!c.isEmpty()) {
+
+ /*
+ * job contains one of "tRouteInput", "tRESTClient" or "tESBConsumer") If no
+ * BUILD_TYPE is set then default BUILD_TYPE must be STANDALONE
+ */
+
+ if (null == originalBuildType) {
+ item.getProperty().getAdditionalProperties().put(BUILD_TYPE_PROPERTY, BUILD_TYPE_STANDALONE);
+ try {
+ save(item);
+ modified |= true;
+ generateReportRecord(
+ new MigrationReportRecorder(this, MigrationReportRecorder.MigrationOperationType.MODIFY,
+ item, null, "Build Type", null, BUILD_TYPE_STANDALONE));
+ } catch (PersistenceException e) {
+ ExceptionHandler.process(e);
+ return ExecutionResult.FAILURE;
+ }
+ }
+
+ /*
+ * Manage child jobs for jobs ( parent, target BUILD_TYPE = STANDALONE )
+ */
+ String currentParentJobBuildType = (String) item.getProperty().getAdditionalProperties()
+ .get(BUILD_TYPE_PROPERTY);
+
+ if (BUILD_TYPE_STANDALONE.equalsIgnoreCase(currentParentJobBuildType)) {
+ updateBuildTypeForSubJobs(item, currentParentJobBuildType);
+ }
+
+ if (failure) {
+ return ExecutionResult.FAILURE;
+ }
+
+ if (modified) {
+ return ExecutionResult.SUCCESS_NO_ALERT;
+ }
+
+ return ExecutionResult.NOTHING_TO_DO;
+ }
+ }
+
+ /*
+ * If Job does not contain any of the following components: "tRouteInput",
+ * "tRESTClient", "tESBConsumer" then BUILD_TYPE must be STANDALONE
+ * Manage child jobs for jobs ( parent, target BUILD_TYPE = STANDALONE )
+ */
+
+ if (null == originalBuildType || !BUILD_TYPE_STANDALONE.equalsIgnoreCase(originalBuildType.toString())) {
+ item.getProperty().getAdditionalProperties().put(BUILD_TYPE_PROPERTY, BUILD_TYPE_STANDALONE);
+ boolean modified = false;
+ try {
+ save(item);
+ modified |= true;
+ generateReportRecord(new MigrationReportRecorder(this,
+ MigrationReportRecorder.MigrationOperationType.MODIFY, item, null, "Build Type",
+ (null == originalBuildType) ? null : originalBuildType.toString(), BUILD_TYPE_STANDALONE));
+ updateBuildTypeForSubJobs(item, BUILD_TYPE_STANDALONE);
+ } catch (PersistenceException e) {
+ ExceptionHandler.process(e);
+ return ExecutionResult.FAILURE;
+ }
+
+ if (failure) {
+ return ExecutionResult.FAILURE;
+ }
+
+ if (modified) {
+ return ExecutionResult.SUCCESS_NO_ALERT;
+ }
+ }
+
+ /*
+ * If Job does not contain any of the following components: "tRouteInput",
+ * "tRESTClient", "tESBConsumer" and BUILD_TYPE is STANDALONE
+ * Manage child jobs for jobs ( parent, target BUILD_TYPE = STANDALONE )
+ */
+ if (BUILD_TYPE_STANDALONE.equalsIgnoreCase(originalBuildType.toString())) {
+ updateBuildTypeForSubJobs(item, BUILD_TYPE_STANDALONE);
+ if (failure) {
+ return ExecutionResult.FAILURE;
+ }
+ }
+
+ return ExecutionResult.NOTHING_TO_DO;
+ }
+
+ @Override
+ public String getDescription() {
+ return "Synchronize build types for DI jobs";
+ }
+
+ @Override
+ public void clear() {
+ clearMigratedJobs();
+ }
+
+ @SuppressWarnings("unchecked")
+ private void updateBuildTypeForSubJobs(Item parentJobItem, String parentJobBuiltType) {
+ IComponentFilter filter = new NameComponentFilter(T_RUB_JOB_COMPONENT);
+
+ ProcessType processType = getProcessType(parentJobItem);
+
+ List c = searchComponent(processType, filter);
+
+ if (!c.isEmpty()) {
+
+ for (NodeType tRunJobComponent : c) {
+ String processID = findElementParameterByName("SELECTED_JOB_NAME:PROCESS_TYPE_PROCESS",
+ tRunJobComponent) == null ? null
+ : findElementParameterByName("SELECTED_JOB_NAME:PROCESS_TYPE_PROCESS", tRunJobComponent)
+ .getValue();
+ if (processID == null) {
+ processID = findElementParameterByName("PROCESS:PROCESS_TYPE_PROCESS",
+ tRunJobComponent) == null ? null
+ : findElementParameterByName("PROCESS:PROCESS_TYPE_PROCESS", tRunJobComponent)
+ .getValue();
+ }
+
+ String processVersion = findElementParameterByName("SELECTED_JOB_NAME:PROCESS_TYPE_VERSION",
+ tRunJobComponent) == null ? null
+ : findElementParameterByName("SELECTED_JOB_NAME:PROCESS_TYPE_VERSION", tRunJobComponent)
+ .getValue();
+
+ if (processVersion == null) {
+ processVersion = findElementParameterByName("PROCESS:PROCESS_TYPE_VERSION",
+ tRunJobComponent) == null ? null
+ : findElementParameterByName("PROCESS:PROCESS_TYPE_VERSION", tRunJobComponent)
+ .getValue();
+ }
+
+ if (processID != null && processVersion != null) {
+ ProcessItem childItem = ItemCacheManager.getProcessItem(processID, processVersion);
+ Project childItemProject = ProjectManager.getInstance().getCurrentProject();
+
+ if (childItem == null) {
+ for (Project refProject : ProjectManager.getInstance().getAllReferencedProjects()) {
+ childItem = ItemCacheManager.getRefProcessItem(getProject(), processID);
+ if (childItem != null) {
+ childItemProject = refProject;
+ break;
+ }
+ }
+ }
+
+ if (childItem != null) {
+
+ Object currentChildBuildType = childItem.getProperty().getAdditionalProperties()
+ .get(BUILD_TYPE_PROPERTY);
+
+// String jobID = childItem.getProperty().getLabel();
+
+ String currentChildBuildTypeStr = (null == currentChildBuildType) ? null
+ : (String) currentChildBuildType;
+
+ if (BUILD_TYPE_STANDALONE.equalsIgnoreCase(parentJobBuiltType)
+ && !BUILD_TYPE_STANDALONE.equalsIgnoreCase(currentChildBuildTypeStr)) {
+
+ childItem.getProperty().getAdditionalProperties().put(BUILD_TYPE_PROPERTY,
+ BUILD_TYPE_STANDALONE);
+
+ try {
+ save(childItem);
+ generateReportRecord(new MigrationReportRecorder(this,
+ MigrationReportRecorder.MigrationOperationType.MODIFY, childItem, null,
+ "Build Type", currentChildBuildTypeStr, BUILD_TYPE_STANDALONE));
+ } catch (PersistenceException e) {
+ ExceptionHandler.process(e);
+ failure = true;
+ }
+ }
+
+ updateBuildTypeForSubJobs(childItem, parentJobBuiltType);
+ }
+ }
+ }
+ }
+ }
+}
diff --git a/main/plugins/org.talend.designer.maven/src/main/java/org/talend/designer/maven/tasks/CorrectBuildTypeForDsRestMigrationTask.java b/main/plugins/org.talend.designer.maven/src/main/java/org/talend/designer/maven/tasks/CorrectBuildTypeForDsRestMigrationTask.java
new file mode 100644
index 0000000000..60e6691e8a
--- /dev/null
+++ b/main/plugins/org.talend.designer.maven/src/main/java/org/talend/designer/maven/tasks/CorrectBuildTypeForDsRestMigrationTask.java
@@ -0,0 +1,107 @@
+package org.talend.designer.maven.migration.tasks;
+
+import java.util.Date;
+import java.util.GregorianCalendar;
+import java.util.List;
+
+import org.talend.commons.exception.ExceptionHandler;
+import org.talend.commons.exception.PersistenceException;
+import org.talend.core.model.components.filters.IComponentFilter;
+import org.talend.core.model.components.filters.NameComponentFilter;
+import org.talend.core.model.properties.Item;
+import org.talend.designer.core.model.utils.emf.talendfile.NodeType;
+import org.talend.designer.core.model.utils.emf.talendfile.ProcessType;
+import org.talend.designer.maven.migration.common.MigrationReportRecorder;
+
+/*
+* (non-Javadoc)
+* Data service REST (process) = Job with "tRESTRequest"
+* If no BUILD_TYPE is set then default BUILD_TYPE must be OSGI
+* If Job does not contain any of the following components: "tRouteInput", "tRESTClient", "tESBConsumer" then BUILD_TYPE must be STANDALONE
+*/
+
+public class CorrectBuildTypeForDsRestMigrationTask extends AbstractDataServiceJobMigrationTask {
+
+ private static final String T_REST_REQUEST = "tRESTRequest";
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.talend.migration.IMigrationTask#getOrder()
+ */
+ @Override
+ public Date getOrder() {
+ GregorianCalendar gc = new GregorianCalendar(2021, 7, 25, 12, 0, 0);
+ return gc.getTime();
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * org.talend.core.model.migration.AbstractDataserviceMigrationTask#execute(org
+ * .talend.core.model.properties.Item)
+ */
+ @SuppressWarnings("unchecked")
+ @Override
+ public ExecutionResult execute(Item item) {
+ final ProcessType processType = getProcessType(item);
+
+ boolean modified = false;
+
+ /*
+ * If no BUILD_TYPE is set then default BUILD_TYPE must be OSGI
+ */
+
+ IComponentFilter filter = new NameComponentFilter(T_REST_REQUEST);
+
+ List c = searchComponent(processType, filter);
+
+ if (!c.isEmpty()) {
+ Object buildType = item.getProperty().getAdditionalProperties().get(BUILD_TYPE_PROPERTY);
+ if (null == buildType) {
+ item.getProperty().getAdditionalProperties().put(BUILD_TYPE_PROPERTY, BUILD_TYPE_OSGI);
+ try {
+ save(item);
+ modified |= true;
+ generateReportRecord(
+ new MigrationReportRecorder(this, MigrationReportRecorder.MigrationOperationType.MODIFY,
+ item, null, "Build Type", null, BUILD_TYPE_OSGI));
+ storeMigratedJob(item.getProperty().getLabel(), this.getClass().getName());
+ } catch (PersistenceException e) {
+ ExceptionHandler.process(e);
+ return ExecutionResult.FAILURE;
+ }
+ return ExecutionResult.SUCCESS_NO_ALERT;
+ } else if (BUILD_TYPE_OSGI.equalsIgnoreCase((String)buildType)){
+ // current job has correct build type
+ // skip this job during next migrations
+ skipMigrationForJob(item.getProperty().getLabel(), this.getClass().getName());
+ } else if (REST_MS.equalsIgnoreCase((String)buildType)){
+ // current job has correct build type
+ // skip this job during next migrations
+ skipMigrationForJob(item.getProperty().getLabel(), this.getClass().getName());
+ }
+
+
+
+ }
+
+ if (modified) {
+ return ExecutionResult.SUCCESS_NO_ALERT;
+ } else {
+ return ExecutionResult.NOTHING_TO_DO;
+ }
+ }
+
+ @Override
+ public String getDescription() {
+ return "Synchronize build types for DS Rest jobs";
+ }
+
+ @Override
+ public void clear () {
+ clearMigratedJobs();
+ }
+
+}
diff --git a/main/plugins/org.talend.designer.maven/src/main/java/org/talend/designer/maven/tasks/CorrectBuildTypeForRoutesMigrationTask.java b/main/plugins/org.talend.designer.maven/src/main/java/org/talend/designer/maven/tasks/CorrectBuildTypeForRoutesMigrationTask.java
new file mode 100644
index 0000000000..8c443d1cba
--- /dev/null
+++ b/main/plugins/org.talend.designer.maven/src/main/java/org/talend/designer/maven/tasks/CorrectBuildTypeForRoutesMigrationTask.java
@@ -0,0 +1,255 @@
+package org.talend.designer.maven.migration.tasks;
+
+import java.util.Date;
+import java.util.GregorianCalendar;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.talend.commons.exception.ExceptionHandler;
+import org.talend.commons.exception.PersistenceException;
+import org.talend.core.model.components.filters.IComponentFilter;
+import org.talend.core.model.components.filters.NameComponentFilter;
+import org.talend.core.model.general.Project;
+import org.talend.core.model.properties.Item;
+import org.talend.core.model.properties.ProcessItem;
+import org.talend.core.repository.model.ProxyRepositoryFactory;
+import org.talend.core.runtime.process.TalendProcessArgumentConstant;
+import org.talend.designer.core.model.utils.emf.talendfile.NodeType;
+import org.talend.designer.core.model.utils.emf.talendfile.ProcessType;
+import org.talend.designer.maven.migration.common.MigrationReportRecorder;
+import org.talend.designer.runprocess.ItemCacheManager;
+import org.talend.repository.ProjectManager;
+
+/*
+ * Routes
+ * If no BUILD_TYPE is set then Default BUILD_TYPE must be ROUTE
+ * - Manage child jobs for routes ( parent, target BUILD_TYPE = OSGI )
+ * Else if BUILD_TYPE is ROUTE
+ * - Manage child jobs for routes ( parent, target BUILD_TYPE = OSGI )
+ * Else if BUILD_TYPE is ROUTE_MICROSERVICE
+ * -Manage child jobs for jobs ( parent, target BUILD_TYPE = STANDALONE )
+ */
+
+public class CorrectBuildTypeForRoutesMigrationTask extends AbstractRouteMigrationTask {
+
+ private static final String C_TALEND_JOB = "cTalendJob";
+
+ protected Map migratedChildJobs = new HashMap();
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.talend.migration.IMigrationTask#getOrder()
+ */
+ @Override
+ public Date getOrder() {
+ GregorianCalendar gc = new GregorianCalendar(2021, 7, 25, 12, 0, 0);
+ return gc.getTime();
+ }
+
+ @SuppressWarnings("unchecked")
+ @Override
+ public ExecutionResult execute(Item item) {
+
+ final ProcessType processType = getProcessType(item);
+
+ boolean modified = false;
+ boolean migrationFailure = false;
+ /*
+ * If no BUILD_TYPE is set then default BUILD_TYPE must be ROUTE
+ */
+
+ Object buildType = item.getProperty().getAdditionalProperties().get(BUILD_TYPE_PROPERTY);
+ if (null == buildType) {
+ item.getProperty().getAdditionalProperties().put(BUILD_TYPE_PROPERTY, BUILD_TYPE_ROUTE);
+ try {
+ save(item);
+ modified |= true;
+ generateReportRecord(
+ new MigrationReportRecorder(this, MigrationReportRecorder.MigrationOperationType.MODIFY, item,
+ null, "Build Type", "null", BUILD_TYPE_OSGI));
+ } catch (PersistenceException e) {
+ ExceptionHandler.process(e);
+ return ExecutionResult.FAILURE;
+ }
+ }
+
+ /*
+ * If no BUILD_TYPE is set then Default BUILD_TYPE must be ROUTE - Manage child
+ * jobs for routes ( parent, target BUILD_TYPE = OSGI ) Else if BUILD_TYPE is
+ * ROUTE - Manage child jobs for routes ( parent, target BUILD_TYPE = OSGI )
+ * Else if BUILD_TYPE is ROUTE_MICROSERVICE -Manage child jobs for jobs (
+ * parent, target BUILD_TYPE = STANDALONE )
+ */
+
+ String currentRouteBuildType = (String) item.getProperty().getAdditionalProperties().get(BUILD_TYPE_PROPERTY);
+
+ String currentRouteID = item.getProperty().getLabel();
+
+ IComponentFilter filter = new NameComponentFilter(C_TALEND_JOB);
+
+ List c = searchComponent(processType, filter);
+
+ if (!c.isEmpty()) {
+
+ for (NodeType cTalendJobComponent : c) {
+
+ String processID = findElementParameterByName("SELECTED_JOB_NAME:PROCESS_TYPE_PROCESS",
+ cTalendJobComponent) == null ? null
+ : findElementParameterByName("SELECTED_JOB_NAME:PROCESS_TYPE_PROCESS",
+ cTalendJobComponent).getValue();
+ String processVersion = findElementParameterByName("SELECTED_JOB_NAME:PROCESS_TYPE_VERSION",
+ cTalendJobComponent) == null ? null
+ : findElementParameterByName("SELECTED_JOB_NAME:PROCESS_TYPE_VERSION",
+ cTalendJobComponent).getValue();
+
+ if (processID != null && processVersion != null) {
+ ProcessItem childItem = ItemCacheManager.getProcessItem(processID, processVersion);
+ Project childItemProject = ProjectManager.getInstance().getCurrentProject();
+
+ if (childItem == null) {
+ for (Project refProject : ProjectManager.getInstance().getAllReferencedProjects()) {
+ childItem = ItemCacheManager.getRefProcessItem(getProject(), processID);
+ if (childItem != null) {
+ childItemProject = refProject;
+ break;
+ }
+ }
+ }
+ if (childItem != null) {
+
+ Object currentChildBuildType = childItem.getProperty().getAdditionalProperties()
+ .get(BUILD_TYPE_PROPERTY);
+
+ String jobID = childItem.getProperty().getLabel();
+
+ String currentChildBuildTypeStr = (null == currentChildBuildType) ? null
+ : (String) currentChildBuildType;
+
+ if (BUILD_TYPE_ROUTE.equalsIgnoreCase(currentRouteBuildType)
+ && BUILD_TYPE_OSGI.equalsIgnoreCase(currentChildBuildTypeStr)) {
+ storeMigratedModel(jobID, currentRouteID);
+ }
+
+ if (BUILD_TYPE_ROUTE.equalsIgnoreCase(currentRouteBuildType)
+ && !BUILD_TYPE_OSGI.equalsIgnoreCase(currentChildBuildTypeStr)) {
+
+ try {
+ if (isModelMigrated(jobID)) {
+ ExceptionHandler.process(new RuntimeException(
+ "Child Job is called by 2 or more different Routes which have different build types. Build type for child Job ["
+ + jobID + "] was previously updated to [" + currentChildBuildTypeStr
+ + "] to be compatible with parent Route ["
+ + getStoredMigratedModelParentRoute(jobID)
+ + "] which is not compatible with current parent Route ["
+ + currentRouteID + "] with build type [" + currentRouteBuildType
+ + "]. "));
+ migrationFailure = true;
+ continue;
+ } else {
+
+ childItem.getProperty().getAdditionalProperties()
+ .put(TalendProcessArgumentConstant.ARG_BUILD_TYPE, BUILD_TYPE_OSGI);
+
+ generateReportRecord(new MigrationReportRecorder(this,
+ MigrationReportRecorder.MigrationOperationType.MODIFY, childItem, null,
+ "Build Type", currentChildBuildTypeStr, BUILD_TYPE_OSGI));
+
+
+ ProxyRepositoryFactory.getInstance().save(childItemProject, childItem, true);
+ }
+
+ } catch (PersistenceException e) {
+ ExceptionHandler.process(e);
+ return ExecutionResult.FAILURE;
+ }
+ }
+
+
+
+ if (BUILD_TYPE_ROUTE_MICROSERVICE.equalsIgnoreCase(currentRouteBuildType)
+ && !BUILD_TYPE_STANDALONE.equalsIgnoreCase(currentChildBuildTypeStr)) {
+
+ try {
+
+ if (isModelMigrated(jobID)) {
+ ExceptionHandler.process(new RuntimeException(
+ "Child Job is called by 2 or more different Routes which have different build types. Build type for child Job ["
+ + jobID + "] was previously updated to [" + currentChildBuildTypeStr
+ + "] to be compatible with parent Route ["
+ + getStoredMigratedModelParentRoute(jobID)
+ + "] which is not compatible with current parent Route ["
+ + currentRouteID + "] with build type [" + currentRouteBuildType
+ + "]. "));
+ migrationFailure = true;
+ continue;
+ } else {
+
+ childItem.getProperty().getAdditionalProperties()
+ .put(TalendProcessArgumentConstant.ARG_BUILD_TYPE, BUILD_TYPE_STANDALONE);
+
+ generateReportRecord(new MigrationReportRecorder(this,
+ MigrationReportRecorder.MigrationOperationType.MODIFY, childItem, null,
+ "Build Type", currentChildBuildTypeStr, BUILD_TYPE_STANDALONE));
+
+ ProxyRepositoryFactory.getInstance().save(childItemProject, childItem, true);
+ }
+ } catch (PersistenceException e) {
+ ExceptionHandler.process(e);
+ return ExecutionResult.FAILURE;
+ }
+ }
+
+
+ if(!isModelMigrated(jobID)) {
+ storeMigratedModel(jobID, currentRouteID);
+ }
+
+ }
+ }
+
+ }
+
+ }
+
+ if (migrationFailure) {
+ return ExecutionResult.FAILURE;
+ }
+
+ if (modified) {
+ return ExecutionResult.SUCCESS_NO_ALERT;
+ }
+
+ return ExecutionResult.NOTHING_TO_DO;
+
+ }
+
+ protected void clearMigratedChildJobs() {
+ migratedChildJobs.clear();
+ }
+
+ protected void storeMigratedModel(String jobName, String parentRouteName) {
+ migratedChildJobs.put(jobName, parentRouteName);
+ }
+
+ protected boolean isModelMigrated(String jobName) {
+ return migratedChildJobs.containsKey(jobName);
+ }
+
+ protected String getStoredMigratedModelParentRoute(String jobName) {
+ return migratedChildJobs.get(jobName);
+ }
+
+ @Override
+ public String getDescription() {
+ return "Synchronize build types for Routes (incuding child jobs)";
+ }
+
+ @Override
+ public void clear() {
+ clearMigratedChildJobs();
+ clearMigratedJobs();
+ }
+
+}
diff --git a/main/plugins/org.talend.designer.maven/src/main/java/org/talend/designer/maven/tasks/CorrectBuildTypeForSOAPServiceJobMigrationTask.java b/main/plugins/org.talend.designer.maven/src/main/java/org/talend/designer/maven/tasks/CorrectBuildTypeForSOAPServiceJobMigrationTask.java
new file mode 100644
index 0000000000..2f53c6b1df
--- /dev/null
+++ b/main/plugins/org.talend.designer.maven/src/main/java/org/talend/designer/maven/tasks/CorrectBuildTypeForSOAPServiceJobMigrationTask.java
@@ -0,0 +1,103 @@
+package org.talend.designer.maven.migration.tasks;
+
+import java.util.Date;
+import java.util.GregorianCalendar;
+import java.util.List;
+
+import org.talend.commons.exception.ExceptionHandler;
+import org.talend.commons.exception.PersistenceException;
+import org.talend.core.model.components.filters.IComponentFilter;
+import org.talend.core.model.components.filters.NameComponentFilter;
+import org.talend.core.model.properties.Item;
+import org.talend.designer.core.model.utils.emf.talendfile.NodeType;
+import org.talend.designer.core.model.utils.emf.talendfile.ProcessType;
+import org.talend.designer.maven.migration.common.MigrationReportRecorder;
+
+/*
+ * Data service SOAP = Job with "tESBProviderRequest"
+ * Set BUILD_TYPE as OSGI
+ * Manage child jobs for jobs ( parent job, target BUILD_TYPE = OSGI )
+ */
+
+public class CorrectBuildTypeForSOAPServiceJobMigrationTask extends AbstractDataServiceJobMigrationTask {
+
+ private static final String T_ESB_PROVIDER_REQUEST = "tESBProviderRequest";
+ private static final String BUILD_TYPE_PROPERTY = "BUILD_TYPE";
+
+ private static final String BUILD_TYPE_OSGI = "OSGI";
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.talend.migration.IMigrationTask#getOrder()
+ */
+ @Override
+ public Date getOrder() {
+ GregorianCalendar gc = new GregorianCalendar(2021, 7, 25, 12, 0, 0);
+ return gc.getTime();
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * org.talend.core.model.migration.AbstractDataserviceMigrationTask#execute(org
+ * .talend.core.model.properties.Item)
+ */
+ @SuppressWarnings("unchecked")
+ @Override
+ public ExecutionResult execute(Item item) {
+ final ProcessType processType = getProcessType(item);
+
+ boolean modified = false;
+
+ /*
+ * If no BUILD_TYPE is set then default BUILD_TYPE must be OSGI
+ */
+
+ IComponentFilter filter = new NameComponentFilter(T_ESB_PROVIDER_REQUEST);
+
+ List c = searchComponent(processType, filter);
+
+ if (!c.isEmpty()) {
+ Object originalBuildType = item.getProperty().getAdditionalProperties().get(BUILD_TYPE_PROPERTY);
+
+ if (null == originalBuildType || !BUILD_TYPE_OSGI.equalsIgnoreCase(originalBuildType.toString())) {
+ item.getProperty().getAdditionalProperties().put(BUILD_TYPE_PROPERTY, BUILD_TYPE_OSGI);
+ try {
+ save(item);
+ modified |= true;
+ generateReportRecord(new MigrationReportRecorder(this,
+ MigrationReportRecorder.MigrationOperationType.MODIFY, item, null, "Build Type",
+ (null == originalBuildType) ? null : originalBuildType.toString(), BUILD_TYPE_OSGI));
+ storeMigratedJob(item.getProperty().getLabel(), this.getClass().getName());
+ } catch (PersistenceException e) {
+ ExceptionHandler.process(e);
+ return ExecutionResult.FAILURE;
+ }
+ return ExecutionResult.SUCCESS_NO_ALERT;
+ } else if (BUILD_TYPE_OSGI.equalsIgnoreCase((String)originalBuildType)){
+ // current job has correct build type
+ // skip this job during next migrations
+ skipMigrationForJob(item.getProperty().getLabel(), this.getClass().getName());
+ }
+ }
+
+ if (modified) {
+ return ExecutionResult.SUCCESS_NO_ALERT;
+ }
+
+ return ExecutionResult.NOTHING_TO_DO;
+ }
+
+ @Override
+ public String getDescription() {
+ return "Synchronize build types for SOAP service Jobs";
+ }
+
+ @Override
+ public void clear () {
+ clearMigratedJobs();
+ }
+
+}
diff --git a/main/plugins/org.talend.designer.maven/src/main/java/org/talend/designer/maven/tasks/ICorrectBuildTypeMigrationTask.java b/main/plugins/org.talend.designer.maven/src/main/java/org/talend/designer/maven/tasks/ICorrectBuildTypeMigrationTask.java
new file mode 100644
index 0000000000..9131e066b6
--- /dev/null
+++ b/main/plugins/org.talend.designer.maven/src/main/java/org/talend/designer/maven/tasks/ICorrectBuildTypeMigrationTask.java
@@ -0,0 +1,7 @@
+package org.talend.designer.maven.migration.tasks;
+
+import org.talend.migration.IProjectMigrationTask;
+
+public interface ICorrectBuildTypeMigrationTask extends IProjectMigrationTask {
+ public void clear ();
+}
diff --git a/main/plugins/org.talend.designer.maven/src/main/java/org/talend/designer/maven/tools/BuildTypeManager.java b/main/plugins/org.talend.designer.maven/src/main/java/org/talend/designer/maven/tools/BuildTypeManager.java
new file mode 100644
index 0000000000..4470210f0e
--- /dev/null
+++ b/main/plugins/org.talend.designer.maven/src/main/java/org/talend/designer/maven/tools/BuildTypeManager.java
@@ -0,0 +1,118 @@
+package org.talend.designer.maven.tools;
+
+import java.lang.reflect.InvocationTargetException;
+import org.eclipse.core.resources.IWorkspace;
+import org.eclipse.core.resources.IWorkspaceRunnable;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.SubMonitor;
+import org.eclipse.core.runtime.jobs.ISchedulingRule;
+import org.eclipse.jface.dialogs.ProgressMonitorDialog;
+import org.eclipse.jface.operation.IRunnableWithProgress;
+import org.eclipse.jface.preference.FieldEditorPreferencePage;
+import org.eclipse.swt.widgets.Display;
+import org.talend.commons.exception.ExceptionHandler;
+import org.talend.core.model.general.Project;
+import org.talend.core.repository.model.ProxyRepositoryFactory;
+import org.talend.designer.maven.migration.common.MigrationReportHelper;
+import org.talend.designer.maven.migration.tasks.CorrectBuildTypeForDIJobMigrationTask;
+import org.talend.designer.maven.migration.tasks.CorrectBuildTypeForDsRestMigrationTask;
+import org.talend.designer.maven.migration.tasks.CorrectBuildTypeForRoutesMigrationTask;
+import org.talend.designer.maven.migration.tasks.CorrectBuildTypeForSOAPServiceJobMigrationTask;
+import org.talend.designer.maven.migration.tasks.ICorrectBuildTypeMigrationTask;
+import org.talend.migration.IMigrationTask;
+import org.talend.migration.IProjectMigrationTask;
+import org.talend.repository.ProjectManager;
+import org.talend.repository.RepositoryWorkUnit;
+
+public class BuildTypeManager {
+
+ private ICorrectBuildTypeMigrationTask[] syncBuildTypeMigrationTasks = {
+ new CorrectBuildTypeForRoutesMigrationTask(), new CorrectBuildTypeForSOAPServiceJobMigrationTask(),
+ new CorrectBuildTypeForDsRestMigrationTask(), new CorrectBuildTypeForDIJobMigrationTask() };
+
+
+ private boolean hasErrors = false;
+
+ public void syncBuildTypes(FieldEditorPreferencePage page) throws Exception {
+
+ IRunnableWithProgress runnableWithProgress = new IRunnableWithProgress() {
+
+ @Override
+ public void run(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException {
+
+ RepositoryWorkUnit