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 workUnit = new RepositoryWorkUnit("Synchronize all build types") { //$NON-NLS-1$ + + @Override + protected void run() { + final IWorkspaceRunnable op = new IWorkspaceRunnable() { + + @Override + public void run(final IProgressMonitor monitor) throws CoreException { + try { + syncAllBuildTypesWithProgress(monitor, page); + } catch (Exception e) { + ExceptionHandler.process(e); + } + } + + }; + IWorkspace workspace = ResourcesPlugin.getWorkspace(); + try { + ISchedulingRule schedulingRule = workspace.getRoot(); + workspace.run(op, schedulingRule, IWorkspace.AVOID_UPDATE, monitor); + } catch (CoreException e) { + ExceptionHandler.process(e); + } + } + + }; + workUnit.setAvoidUnloadResources(true); + ProxyRepositoryFactory.getInstance().executeRepositoryWorkUnit(workUnit); + } + }; + + hasErrors = false; + + new ProgressMonitorDialog(Display.getDefault().getActiveShell()).run(true, true, runnableWithProgress); + + if (hasErrors) { + page.setErrorMessage("Build types synchronization finished with errors. Check workspace logs for details."); + } else { + page.setErrorMessage(null); + } + } + + public void syncAllBuildTypesWithProgress(IProgressMonitor monitor, FieldEditorPreferencePage page) + throws Exception { + + Project project = ProjectManager.getInstance().getCurrentProject(); + + SubMonitor subMonitor = SubMonitor.convert(monitor, syncBuildTypeMigrationTasks.length); + + for (ICorrectBuildTypeMigrationTask task : syncBuildTypeMigrationTasks) { + task.clear(); + + } + + + for (ICorrectBuildTypeMigrationTask task : syncBuildTypeMigrationTasks) { + subMonitor.beginTask(task.getDescription(), syncBuildTypeMigrationTasks.length); + IMigrationTask.ExecutionResult result = task.execute(project); + if (IMigrationTask.ExecutionResult.FAILURE.equals(result)) { + hasErrors = true; + } + subMonitor.worked(1); + + } + + subMonitor.beginTask("Generate migration report", syncBuildTypeMigrationTasks.length); + MigrationReportHelper.getInstance().generateMigrationReport(project.getTechnicalLabel()); + + monitor.done(); + + + + } +} diff --git a/main/plugins/org.talend.designer.maven/src/main/java/org/talend/designer/maven/utils/PomIdsHelper.java b/main/plugins/org.talend.designer.maven/src/main/java/org/talend/designer/maven/utils/PomIdsHelper.java index c050246111..42a99f2ebf 100644 --- a/main/plugins/org.talend.designer.maven/src/main/java/org/talend/designer/maven/utils/PomIdsHelper.java +++ b/main/plugins/org.talend.designer.maven/src/main/java/org/talend/designer/maven/utils/PomIdsHelper.java @@ -302,8 +302,11 @@ public class PomIdsHelper { private static String getPublishCloudVersion(String latestVersion) { if (null == latestVersion) { - return "0.1.0"; + return null; + } else if (latestVersion.contains(MavenConstants.SNAPSHOT)) { + return latestVersion; } else { + latestVersion = VersionUtils.getPublishVersion(latestVersion); int i = latestVersion.lastIndexOf('.') + 1; return latestVersion.substring(0, i) + (Long.parseLong(latestVersion.substring(i)) + 1); } @@ -321,12 +324,12 @@ public class PomIdsHelper { useSnapshot = property.getAdditionalProperties().containsKey(MavenConstants.NAME_PUBLISH_AS_SNAPSHOT); } if(version == null) { - version = bundleVersion; + version = VersionUtils.getPublishVersion(bundleVersion); } if (version == null) { version = VersionUtils.getPublishVersion(property.getVersion()); } - if (useSnapshot) { + if (useSnapshot && version != null && !version.contains(MavenConstants.SNAPSHOT)) { version += MavenConstants.SNAPSHOT; } } @@ -345,12 +348,12 @@ public class PomIdsHelper { useSnapshot = property.getAdditionalProperties().containsKey(MavenConstants.NAME_PUBLISH_AS_SNAPSHOT); } if(version == null) { - version = featureVersion; + version = VersionUtils.getPublishVersion(featureVersion); } if (version == null) { version = VersionUtils.getPublishVersion(property.getVersion()); } - if (useSnapshot) { + if (useSnapshot && version != null && !version.contains(MavenConstants.SNAPSHOT)) { version += MavenConstants.SNAPSHOT; } } @@ -374,7 +377,7 @@ public class PomIdsHelper { if (version == null) { version = VersionUtils.getPublishVersion(property.getVersion()); } - if (useSnapshot) { + if (useSnapshot && version != null && !version.contains(MavenConstants.SNAPSHOT)) { version += MavenConstants.SNAPSHOT; } } @@ -398,7 +401,7 @@ public class PomIdsHelper { if (version == null) { version = VersionUtils.getPublishVersion(property.getVersion()); } - if (useSnapshot) { + if (useSnapshot && version != null && !version.contains(MavenConstants.SNAPSHOT)) { version += MavenConstants.SNAPSHOT; } } diff --git a/main/plugins/org.talend.libraries.apache/pom.xml b/main/plugins/org.talend.libraries.apache/pom.xml index 3557587d6a..38ce0a3792 100644 --- a/main/plugins/org.talend.libraries.apache/pom.xml +++ b/main/plugins/org.talend.libraries.apache/pom.xml @@ -10,7 +10,7 @@ org.talend.libraries.apache eclipse-plugin - 1.2.19 + 1.2.22 1.7.29 2.17.1 diff --git a/main/plugins/org.talend.metadata.managment/plugin.xml b/main/plugins/org.talend.metadata.managment/plugin.xml index bb8f67598b..bb5152be0c 100644 --- a/main/plugins/org.talend.metadata.managment/plugin.xml +++ b/main/plugins/org.talend.metadata.managment/plugin.xml @@ -14,11 +14,11 @@ + libraries="hive-hbase-handler-0.9.0.jar;hbase-0.92.0.jar;hadoop-core-1.0.3.jar;commons-logging-1.0.4.jar;datanucleus-api-jdo-3.0.7.jar;datanucleus-core-3.0.9.jar;datanucleus-rdbms-3.0.8.jar;hive-builtins-0.9.0.jar;hive-exec-0.9.0_hdp.jar;hive-jdbc-0.9.0_hdp.jar;hive-metastore-0.9.0_hdp.jar;hive-service-0.9.0_hdp.jar;libfb303-0.7.0.jar;libthrift-0.7.0.jar;commons-lang-2.4.jar;antlr-runtime-3.0.1.jar;commons-dbcp-1.4.jar;commons-pool-1.5.4.jar;derby-10.4.2.0.jar;commons-configuration2-2.8.0.jar;jdo2-api-2.3-ec.jar;reload4j-1.2.22.jar;slf4j-api-1.6.1.jar;slf4j-log4j12-1.6.1.jar;jackson-core-asl-1.8.8.jar;jackson-mapper-asl-1.8.8.jar"> + libraries="hadoop-core-0.20.203.0.jar;reload4j-1.2.22.jar;hive-exec-0.7.1.jar;hive-jdbc-0.7.1.jar;hive-metastore-0.7.1.jar;hive-service-0.7.1.jar;libfb303.jar;slf4j-api-1.6.1.jar;slf4j-log4j12-1.6.1.jar;commons-logging-1.1.1.jar;commons-logging-api-1.0.4.jar"> tosUnsignItemMap) { @@ -240,27 +239,13 @@ public class PendoImportManager { if (!isTrackRequired()) { return; } - Job job = new Job("send pendo track") { + super.sendTrackToPendo(); + } - @Override - protected IStatus run(IProgressMonitor monitor) { - try { - if (isTrackAvailable) { - collectProperties(); - PendoTrackSender.getInstance().sendTrackData(TrackEvent.ITEM_IMPORT, importProperties); - } - } 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_IMPORT; } - } diff --git a/main/plugins/org.talend.updates.runtime/src/main/java/org/talend/updates/runtime/WorkbenchStartup.java b/main/plugins/org.talend.updates.runtime/src/main/java/org/talend/updates/runtime/WorkbenchStartup.java index 55fb319d56..ceddf14f57 100644 --- a/main/plugins/org.talend.updates.runtime/src/main/java/org/talend/updates/runtime/WorkbenchStartup.java +++ b/main/plugins/org.talend.updates.runtime/src/main/java/org/talend/updates/runtime/WorkbenchStartup.java @@ -2,9 +2,7 @@ package org.talend.updates.runtime; import org.eclipse.ui.IStartup; import org.talend.core.PluginChecker; -import org.talend.core.pendo.PendoTrackDataUtil; -import org.talend.core.pendo.PendoTrackDataUtil.TrackEvent; -import org.talend.core.pendo.PendoTrackSender; +import org.talend.core.pendo.PendoDataTrackFactory; import org.talend.migration.MigrationReportHelper; import org.talend.updates.runtime.ui.CheckExtraFeaturesToInstallJob; @@ -13,7 +11,7 @@ public class WorkbenchStartup implements IStartup { @Override public void earlyStartup() { MigrationReportHelper.getInstance().checkMigrationReport(true); - PendoTrackSender.getInstance().sendToPendo(TrackEvent.PROJECT_LOGIN, PendoTrackDataUtil.getLoginEventProperties()); + PendoDataTrackFactory.getInstance().sendProjectLoginTrack(); if (!PluginChecker.isTIS() && !PluginChecker.isStudioLite()) { CheckExtraFeaturesToInstallJob checkExtraFeaturesToInstallJob = new CheckExtraFeaturesToInstallJob(); checkExtraFeaturesToInstallJob.schedule(); diff --git a/test/plugins/org.talend.core.runtime.test/src/org/talend/core/pendo/PendoTrackDataUtilTest.java b/test/plugins/org.talend.core.runtime.test/src/org/talend/core/pendo/PendoTrackDataUtilTest.java index 090710be28..09bf3d52ee 100644 --- a/test/plugins/org.talend.core.runtime.test/src/org/talend/core/pendo/PendoTrackDataUtilTest.java +++ b/test/plugins/org.talend.core.runtime.test/src/org/talend/core/pendo/PendoTrackDataUtilTest.java @@ -13,22 +13,10 @@ package org.talend.core.pendo; import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertTrue; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; import org.junit.Test; -import org.mockito.Mockito; -import org.talend.core.model.properties.Project; -import org.talend.core.model.properties.ProjectReference; -import org.talend.core.model.properties.PropertiesFactory; -import org.talend.core.pendo.PendoTrackDataUtil.TrackEvent; import org.talend.core.pendo.properties.PendoImportAPIproperties; import org.talend.core.pendo.properties.PendoUseAPIProperties; -import org.talend.repository.ProjectManager; import org.talend.utils.json.JSONObject; /** @@ -131,93 +119,4 @@ public class PendoTrackDataUtilTest { } - @Test - public void testFindReferencePorjectPath() { - Project mainEmfProj = createTestProject("testMain"); - org.talend.core.model.general.Project mainProj = Mockito.mock(org.talend.core.model.general.Project.class); - mainProj.setEmfProject(mainEmfProj); - - // Main -> Ref1 -> Ref2 -> Ref3 - Project refEmfProj1 = createTestProject("ref_project1"); - Project refEmfProj2 = createTestProject("ref_project2"); - Project refEmfProj3 = createTestProject("ref_project3"); - Map teclabelProjectMap = new HashMap(); - org.talend.core.model.general.Project refProj1 = Mockito.mock(org.talend.core.model.general.Project.class); - mainProj.setEmfProject(refEmfProj1); - org.talend.core.model.general.Project refProj2 = Mockito.mock(org.talend.core.model.general.Project.class); - mainProj.setEmfProject(refEmfProj2); - org.talend.core.model.general.Project refProj3 = Mockito.mock(org.talend.core.model.general.Project.class); - mainProj.setEmfProject(refEmfProj3); - teclabelProjectMap.put(refEmfProj1.getTechnicalLabel(), refProj1); - teclabelProjectMap.put(refEmfProj2.getTechnicalLabel(), refProj2); - teclabelProjectMap.put(refEmfProj3.getTechnicalLabel(), refProj3); - - ProjectReference projRef1 = createTestProjectReference(refEmfProj1); - ProjectReference projRef2 = createTestProjectReference(refEmfProj2); - ProjectReference projRef3 = createTestProjectReference(refEmfProj3); - List refList4Main = new ArrayList(); - refList4Main.add(projRef1); - List refList4Ref1 = new ArrayList(); - refList4Ref1.add(projRef2); - List refList4Ref2 = new ArrayList(); - refList4Ref2.add(projRef3); - Mockito.when(mainProj.getProjectReferenceList()).thenReturn(refList4Main); - Mockito.when(refProj1.getProjectReferenceList()).thenReturn(refList4Ref1); - Mockito.when(refProj2.getProjectReferenceList()).thenReturn(refList4Ref2); - - int[] refCount = new int[] {0}; - List resultList = new ArrayList(); - Map desensitiveLabelMap = new HashMap(); - PendoTrackDataUtil.findReferencePorjectPath(mainProj, "Main", resultList, refCount, desensitiveLabelMap, - teclabelProjectMap); - String[] expect = new String[] { "Main/Ref1", "Main/Ref1/Ref2", "Main/Ref1/Ref2/Ref3" }; - assertTrue(isResultMatch(expect, resultList)); - - // Main -> Ref1 -> Ref2 -> Ref3 - // Main -> Ref4 -> Ref3 - Project refEmfProj4 = createTestProject("ref_project4"); - org.talend.core.model.general.Project refProj4 = Mockito.mock(org.talend.core.model.general.Project.class); - mainProj.setEmfProject(refEmfProj4); - teclabelProjectMap.put(refEmfProj4.getTechnicalLabel(), refProj4); - ProjectReference projRef4 = createTestProjectReference(refEmfProj4); - List refList4Ref4 = new ArrayList(); - refList4Ref4.add(projRef3); - Mockito.when(refProj4.getProjectReferenceList()).thenReturn(refList4Ref4); - refList4Main.add(projRef4); - Mockito.when(mainProj.getProjectReferenceList()).thenReturn(refList4Main); - - int[] refCount1 = new int[] { 0 }; - List resultList1 = new ArrayList(); - Map desensitiveLabelMap1 = new HashMap(); - PendoTrackDataUtil.findReferencePorjectPath(mainProj, "Main", resultList1, refCount1, desensitiveLabelMap1, - teclabelProjectMap); - String[] expect1 = new String[] { "Main/Ref1", "Main/Ref1/Ref2", "Main/Ref1/Ref2/Ref3", "Main/Ref4", "Main/Ref4/Ref3" }; - assertTrue(isResultMatch(expect1, resultList1)); - } - - private boolean isResultMatch(String[] expect, List resultList) { - boolean match = expect.length == resultList.size(); - for (int i = 0; i < expect.length; i++) { - String exp = expect[i]; - if (!resultList.contains(exp)) { - match = false; - } - } - return match; - } - - private Project createTestProject(String label) { - Project project = PropertiesFactory.eINSTANCE.createProject(); - project.setLabel(label); - project.setTechnicalLabel(ProjectManager.getLocalTechnicalProjectName(project.getLabel())); - return project; - } - - private ProjectReference createTestProjectReference(Project project) { - ProjectReference projReference = PropertiesFactory.eINSTANCE.createProjectReference(); - projReference.setReferencedBranch("master"); - projReference.setReferencedProject(project); - return projReference; - } - } diff --git a/test/plugins/org.talend.core.runtime.test/src/org/talend/core/pendo/PendoTrackSenderTest.java b/test/plugins/org.talend.core.runtime.test/src/org/talend/core/pendo/PendoTrackSenderTest.java deleted file mode 100644 index d90076e3aa..0000000000 --- a/test/plugins/org.talend.core.runtime.test/src/org/talend/core/pendo/PendoTrackSenderTest.java +++ /dev/null @@ -1,65 +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 static org.junit.Assert.assertEquals; - -import org.junit.Test; - -/** - * DOC jding class global comment. Detailled comment - */ -public class PendoTrackSenderTest { - - @Test - public void testGetBaseUrl() throws Exception { - PendoTrackSender sender = PendoTrackSender.getInstance(); - String adminUrl = "https://tmc.int.cloud.talend.com/studio_cloud_connection"; - String expectBaseUrl = "https://api.int.cloud.talend.com"; - sender.setAdminUrl(adminUrl); - assertEquals(expectBaseUrl, sender.getBaseUrl()); - sender.setApiBaseUrl(null); - - adminUrl = "https://tmc.us.cloud.talend.com/studio_cloud_connection"; - expectBaseUrl = "https://api.us.cloud.talend.com"; - sender.setAdminUrl(adminUrl); - assertEquals(expectBaseUrl, sender.getBaseUrl()); - sender.setApiBaseUrl(null); - - adminUrl = "https://tmc.eu.cloud.talend.com/studio_cloud_connection"; - expectBaseUrl = "https://api.eu.cloud.talend.com"; - sender.setAdminUrl(adminUrl); - assertEquals(expectBaseUrl, sender.getBaseUrl()); - sender.setApiBaseUrl(null); - - adminUrl = "https://tmc.ap.cloud.talend.com/studio_cloud_connection"; - expectBaseUrl = "https://api.ap.cloud.talend.com"; - sender.setAdminUrl(adminUrl); - assertEquals(expectBaseUrl, sender.getBaseUrl()); - sender.setApiBaseUrl(null); - - adminUrl = "https://tmc.au.cloud.talend.com/studio_cloud_connection"; - expectBaseUrl = "https://api.au.cloud.talend.com"; - sender.setAdminUrl(adminUrl); - assertEquals(expectBaseUrl, sender.getBaseUrl()); - sender.setApiBaseUrl(null); - - adminUrl = "https://tmc.us-west.cloud.talend.com/studio_cloud_connection"; - expectBaseUrl = "https://api.us-west.cloud.talend.com"; - sender.setAdminUrl(adminUrl); - assertEquals(expectBaseUrl, sender.getBaseUrl()); - sender.setApiBaseUrl(null); - sender.setAdminUrl(null); - } - -}