Compare commits

...

32 Commits

Author SHA1 Message Date
Chao MENG
fddff3b8ad fix issues 2020-08-07 18:40:43 +08:00
Chao MENG
acdf127890 fix issues 2020-07-24 10:31:37 +08:00
Chao MENG
453ac0377b fix issues 2020-07-17 17:26:15 +08:00
Chao MENG
0d4d9c4940 fix issues 2020-07-07 17:36:04 +08:00
Chao MENG
963f90ad22 fix issues 2020-06-29 15:07:21 +08:00
Chao MENG
0301920131 fix uhg issue 2020-06-16 09:40:04 +08:00
Zhiwei Xue
ab7c0c0833 chore: Remove junit of Mojo version. 2020-05-21 14:20:12 +08:00
vdrokov
4a1e06e010 fix(TESB-29148): Add lines deleted by accident. (#3312) 2020-05-20 21:15:21 +02:00
Chao MENG
8ff0e806cf fix(TUP-27077): NoClassDefFoundException when using "independent process to run subjob" and tAzureAdlsGen2Input 2020-05-19 09:55:35 +08:00
Jane Ding
3149ac1e6b fix(TUP-27003):Should disable the Commit button of Uncommitted files (#3273) (#3307)
found dialog when project is in MERGING state
https://jira.talendforge.org/browse/TUP-27003
2020-05-18 18:49:44 +08:00
Chao MENG
8f513789aa feat(TUP-26569): merge known conflicts automatically
https://jira.talendforge.org/browse/TUP-26569
2020-05-18 17:53:43 +08:00
Mike Yan
b245900000 fix(TCOMP-1681): Adding missing poms for OSGi type build 2020-05-15 17:25:03 +08:00
bhe-talendbj
ad2a22dcc4 fix(TUP-26809): backport 2020-05-14 16:04:36 +08:00
bhe-talendbj
e3f1c84dfd fix(TUP-26728): backport
Conflicts:
	main/plugins/org.talend.core.runtime/src/main/java/org/talend/designer/runprocess/IRunProcessService.java
2020-05-14 11:27:21 +08:00
jiezhang-tlnd
3b04a2f690 fix(TUP-26896)Error create a Sybase connection in metadata and cannot
(#3257)

retrieve tables (#3231)

* fix(TUP-26896)Error create a Sybase connection in metadata and cannot
retrieve tables
https://jira.talendforge.org/browse/TUP-26896

* fix(TUP-26896)retrieve schema on sybase 16 anywhere metadate get empry
value
https://jira.talendforge.org/browse/TUP-26896

* fix(TUP-26896)Error create a Sybase connection in metadata and cannot
retrieve tables

* fix(TUP-26896)Error create a Sybase connection in metadata and cannot
retrieve tables
https://jira.talendforge.org/browse/TUP-26896

* fix(TUP-26896)Error create a Sybase connection in metadata and cannot
retrieve tables

* fix(TUP-26896)Error create a Sybase connection in metadata and cannot
retrieve tables

* fix(TUP-26896)Error create a Sybase connection in metadata and cannot
retrieve tables

* fix(TUP-26896)Error create a Sybase connection in metadata and cannot
retrieve tables

* fix(TUP-26896)Error create a Sybase connection in metadata and cannot
retrieve tables

* fix(TUP-26896)Error create a Sybase connection in metadata and cannot
retrieve tables

* fix(TUP-26896)Error create a Sybase connection in metadata and cannot
retrieve tables
https://jira.talendforge.org/browse/TUP-26896

Conflicts:
	main/plugins/org.talend.metadata.managment/src/main/java/org/talend/metadata/managment/model/DBConnectionFillerImpl.java

Conflicts:
	main/plugins/org.talend.metadata.managment/src/main/java/org/talend/metadata/managment/model/DBConnectionFillerImpl.java

Conflicts:
	main/plugins/org.talend.metadata.managment/src/main/java/org/talend/metadata/managment/model/DBConnectionFillerImpl.java
	main/plugins/org.talend.metadata.managment/src/main/java/org/talend/metadata/managment/utils/MetadataConnectionUtils.java
2020-05-14 10:51:25 +08:00
undx
0c82d7a96b feat(TCOMP-1681): Make ESB Studio job export TaCoKit compliant 2020-05-12 18:29:11 +02:00
sbliu
17110bb1fa TPS-3943 [7.2.1]Talend MDM Connection Errors(TMDM-14505, TMDM-14565)(#3270)
* TMDM-14505 MDM connection in metadata randomly failed with error 'Failed to connect to MDM, please change MDM settings' 

Moved interface IWebServiceHook from mdm bundle and renamed to IMDMWebServiceHook,re-use the implemented webservice hook in mdm for both mdm & di side to establish mdm connection token.
Add unit test to check presence of the required header that containing token.

* TMDM-14565 Check mdm connection cannot work both in mdm and di perspective at same time (#3187)

Switch context class loader for web service created.
2020-05-09 17:55:52 +08:00
hzhao-talendbj
29b1f3a97c fix(TUP-26388)Amazon Redshift Driver class not working with Implicit (#3181)
* fix(TUP-26388)Amazon Redshift Driver class not working with Implicit
Context

* fix(TUP-26388)Amazon Redshift Driver class not working with Implicit
Context
2020-05-07 19:29:04 +08:00
hzhao-talendbj
6af4cbf201 Revert "fix(26752): Merge branch 'bhe/bugfix/TUP-26752_721' into hzhao/TPS-3852-temp"
This reverts commit 41ef59868e.
2020-05-07 19:22:28 +08:00
bhe-talendbj
a3c1d73f36 fix(TUP-26752): backport 2020-05-07 19:10:32 +08:00
bhe-talendbj
41ef59868e fix(26752): Merge branch 'bhe/bugfix/TUP-26752_721' into hzhao/TPS-3852-temp 2020-05-07 18:04:58 +08:00
Jane Ding
ac7c8ff40d fix(TUP-23452)COMPUTE_DEPENDENCIES_FAILED:{path=META-INF/maven/org.ta… (#3250)
* fix(TUP-23452)COMPUTE_DEPENDENCIES_FAILED:{path=META-INF/maven/org.talend.components/components-salesforce-runtime/dependencies.txt
(#2555) (#2561)

https://jira.talendforge.org/browse/TUP-23452

Conflicts:
	main/plugins/org.talend.updates.runtime/src/main/java/org/talend/updates/runtime/nexus/component/ComponentsDeploymentManager.java

* fix(TUP-23452)COMPUTE_DEPENDENCIES_FAILED:{path=META-INF/maven/org.talend.components/components-salesforce-runtime/dependencies.txt
https://jira.talendforge.org/browse/TUP-23452
2020-05-07 17:53:42 +08:00
hwang-talend
7872cf40d8 bugfix(TUP-26059):tELTPostgresqlMap lost its "DB Type" column for which (#3075)
bugfix(TUP-26059):tELTPostgresqlMap lost its "DB Type" column for which the value should be "BPCHAR"
2020-05-07 17:46:32 +08:00
hzhao-talendbj
62997993ee fix missing db value (#3209) (#3211) 2020-05-07 17:27:19 +08:00
hwang-talend
b81bba4311 bugfix(TUP-26758):[7.2.1] Wrong column order when using Schema from (#3198)
* bugfix(TUP-26758):[7.2.1] Wrong column order when using Schema from
Repository

* bugfix(TUP-26758):[7.2.1] Wrong column order when using Schema from
Repository
2020-05-07 17:18:34 +08:00
hwang
6d787c8bb7 Revert "bugfix(TUP-26758):[7.2.1] Wrong column order when using Schema from (#3198)"
This reverts commit 71d4e06163.
2020-04-29 18:28:11 +08:00
hwang
d3edced303 Revert "bugfix(TUP-26059):tELTPostgresqlMap lost its "DB Type" column for which (#3075)"
This reverts commit 0dc85faca3.
2020-04-29 18:27:27 +08:00
hwang-talend
71d4e06163 bugfix(TUP-26758):[7.2.1] Wrong column order when using Schema from (#3198)
* bugfix(TUP-26758):[7.2.1] Wrong column order when using Schema from
Repository

* bugfix(TUP-26758):[7.2.1] Wrong column order when using Schema from
Repository
2020-04-29 18:15:05 +08:00
hwang-talend
0dc85faca3 bugfix(TUP-26059):tELTPostgresqlMap lost its "DB Type" column for which (#3075)
bugfix(TUP-26059):tELTPostgresqlMap lost its "DB Type" column for which the value should be "BPCHAR"
2020-04-29 18:02:11 +08:00
vdrokov
672ac95f1c fix(TESB-28815): Fix bundle name (should include -bundle suffix at the end) (#3218) 2020-04-16 12:54:34 +03:00
jiezhang-tlnd
03fd95bb57 Temp patch tps 3844 (#3206)
* fix(TUP-24310):routines is duplicated in the reactor (#2706)

* fix(TUP-24310):routines is duplicated in the reactor (#2741)

* fix(TUP-24310):routines is duplicated in the reactor

* fix(TUP-24310):routines is duplicated in the reactor.

* TUP-26308 Nexus 2 gets populated by different crypto-utils jar versions
(#3116)

https://jira.talendforge.org/browse/TUP-26308

Conflicts:
	main/plugins/org.talend.librariesmanager/src/main/java/org/talend/librariesmanager/nexus/Nexus2RepositoryHandler.java

* fix(TUP-26229):Dynamic Schema default Mapping can't be changed (#3184)

* Fix TUP-26346 Files from custom component folders are uploaded to
nexus
multiple times
https://jira.talendforge.org/browse/TUP-26346

* Fix TUP-26346 Files from custom component folders are uploaded to
nexus
multiple times
https://jira.talendforge.org/browse/TUP-26346

* bugfix(TUP-26475):Job is referring to the joblet present in the (#3146)

bugfix(TUP-26475):Job is referring to the joblet present in the reference job even after we delete it from the main job

Co-authored-by: Zhiwei Xue <zwxue@talend.com>
Co-authored-by: kjwang <kjwang@talend.com>
Co-authored-by: hcyi <hcyi@talend.com>
Co-authored-by: hwang-talend <hwang@talend.com>
2020-04-13 16:08:56 +08:00
hcyi
38b1a6bbaa TPS-3909:[7.3.1] DI job with Big Data components fail when using the custom hadoop conf file location feature(TUP-26580) (#3171)
* fix(TUP-26155):improve for dataviewer if MongoDB with SSL (#3111) (#3132)

* fix(TUP-26155):fix compilation error (#3140)
2020-03-30 17:15:46 +08:00
56 changed files with 1413 additions and 500 deletions

View File

@@ -21,6 +21,7 @@ import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Shell;
@@ -38,6 +39,8 @@ public class ExceptionMessageDialog extends MessageDialog {
private String exceptionString = null;
private int[] diabledButtonIndex = new int[] {};
public ExceptionMessageDialog(Shell parentShell, String dialogTitle, Image dialogTitleImage, String dialogMessage,
int dialogImageType, String[] dialogButtonLabels, int defaultIndex, Throwable ex) {
super(parentShell, dialogTitle, dialogTitleImage, dialogMessage, dialogImageType, dialogButtonLabels, defaultIndex);
@@ -147,4 +150,21 @@ public class ExceptionMessageDialog extends MessageDialog {
this.exceptionString = exceptionString;
}
public void setDisabledButtons(int[] index) {
this.diabledButtonIndex = index;
}
@Override
protected void createButtonsForButtonBar(Composite parent) {
super.createButtonsForButtonBar(parent);
if (diabledButtonIndex == null) {
return;
}
for (int index : diabledButtonIndex) {
Button button = super.getButton(index);
button.setEnabled(false);
}
}
}

View File

@@ -0,0 +1,121 @@
// ============================================================================
//
// Copyright (C) 2006-2020 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.commons.utils.database;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
import org.apache.commons.lang3.StringUtils;
import org.apache.log4j.Logger;
/**
* created by qiongli on 2013-11-13 Detailled comment
*
*/
public class Sybase16SADatabaseMetaData extends SybaseDatabaseMetaData {
private static Logger log = Logger.getLogger(Sybase16SADatabaseMetaData.class);
/**
* DOC qiongli SybaseIQDatabaseMetaData constructor comment.
*
* @param connection
* @throws SQLException
*/
public Sybase16SADatabaseMetaData(Connection connection) throws SQLException {
super(connection);
}
public ResultSet getCatalogs(String login, String database) throws SQLException {
List<String[]> list = new ArrayList<String[]>();
List<String> catList = new ArrayList<String>();
if (!StringUtils.isEmpty(database)) {
catList.add(database);
}
for (String catalogName : catList) {
String sql = createSqlByLoginAndCatalog(login, catalogName);
ResultSet rs = null;
Statement stmt = null;
try {
stmt = connection.createStatement();
rs = stmt.executeQuery(sql);
while (rs.next()) {
int temp = rs.getInt(1);
if (temp > 0) {
String[] r = new String[] { catalogName };
list.add(r);
}
}
} catch (SQLException e) {
log.error(e);
} finally {
try {
if (rs != null) {
rs.close();
}
if (stmt != null) {
stmt.close();
}
} catch (Exception e) {
log.error(e);
}
}
}
SybaseResultSet tableResultSet = new SybaseResultSet();
tableResultSet.setMetadata(new String[] { "TABLE_CAT" }); //$NON-NLS-1$
tableResultSet.setData(list);
return tableResultSet;
}
@Override
public ResultSet getColumns(String catalog, String schemaPattern, String tableNamePattern, String columnNamePattern)
throws SQLException {
return super.getColumns(null, schemaPattern, tableNamePattern, columnNamePattern);
}
@Override
public ResultSet getPrimaryKeys(String catalog, String schema, String table) throws SQLException {
return super.getPrimaryKeys(null, schema, table);
}
@Override
public ResultSet getTables(String catalog, String schemaPattern, String tableNamePattern, String[] types)
throws SQLException {
return super.getTables(null, schemaPattern, tableNamePattern, types);
}
/**
*
* get a sql query by login name and catalog name.
*
* @param loginName
* @param catalogName
* @return
*/
protected String createSqlByLoginAndCatalog(String loginName, String catalogName) {
String sql = "select count(*) from " + catalogName
+ ".dbo.sysusers where suid in (select suid from "+catalogName+".dbo.syslogins where name = '" + loginName
+ "')";
return sql;
}
}

View File

@@ -14,6 +14,7 @@ package org.talend.core.repository.recyclebin;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.Date;
import java.util.HashMap;
@@ -24,6 +25,7 @@ import java.util.List;
import java.util.Map;
import java.util.Set;
import org.apache.commons.lang3.StringUtils;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.runtime.IPath;
import org.eclipse.emf.common.util.EList;
@@ -106,7 +108,8 @@ public class RecycleBinManager {
List<IRepositoryViewObject> deletedObjects = new ArrayList<IRepositoryViewObject>();
final EList<TalendItem> deletedItems = projectRecyclebins.get(project.getTechnicalLabel()).getDeletedItems();
List<TalendItem> notDeletedItems = new ArrayList<TalendItem>();
for (TalendItem deletedItem : deletedItems) {
List<TalendItem> dup_deletedItems = new ArrayList<>(deletedItems);
for (TalendItem deletedItem : dup_deletedItems) {
try {
final ERepositoryObjectType type = ERepositoryObjectType.getType(deletedItem.getType());
// ignore the generated doc in recycle bin
@@ -274,7 +277,40 @@ public class RecycleBinManager {
resource = createRecycleBinResource(project);
}
resource.getContents().clear();
recycleBin.setLastUpdate(new Date());
EList<String> deletedFolders = recycleBin.getDeletedFolders();
if (deletedFolders != null) {
List<String> folders = new LinkedList<>(deletedFolders);
Collections.sort(folders);
deletedFolders.clear();
deletedFolders.addAll(folders);
}
EList<TalendItem> deletedItems = recycleBin.getDeletedItems();
if (deletedItems != null) {
List<TalendItem> items = new LinkedList<>(deletedItems);
items.sort((l, r) -> {
if (l == null && r == null) {
return 0;
} else if (l == null) {
return -1;
} else if (r == null) {
return 1;
}
int result = StringUtils.compare(l.getType(), r.getType());
if (result != 0) {
return result;
}
result = StringUtils.compare(l.getPath(), r.getPath());
if (result != 0) {
return result;
}
return StringUtils.compare(l.getId(), r.getId());
});
deletedItems.clear();
deletedItems.addAll(items);
}
// set date to null to avoid timezone conflict
recycleBin.setLastUpdate(null);
resource.getContents().add(recycleBin);
EmfHelper.saveResource(resource);
lastSavedRecycleBinMap.put(recycleBin, EcoreUtil.copy(recycleBin));

View File

@@ -120,7 +120,8 @@ Require-Bundle: org.eclipse.jdt.core,
org.talend.components.api,
org.apache.servicemix.bundles.avro,
jackson-core-asl,
org.talend.libraries.jackson
org.talend.libraries.jackson,
org.eclipse.m2e.core
Bundle-Activator: org.talend.core.runtime.CoreRuntimePlugin
Bundle-ActivationPolicy: lazy
Bundle-ClassPath: .,

View File

@@ -53,6 +53,8 @@ public enum EDatabaseTypeName {
"IBM DB2 ZOS", "IBM DB2 ZOS", Boolean.TRUE, "IBM_DB2", "DB2", EDatabaseSchemaOrCatalogMapping.Sid, EDatabaseSchemaOrCatalogMapping.Schema), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
SYBASEASE(
"SybaseASE", "Sybase (ASE and IQ)", Boolean.TRUE, "SYBASE", EDatabaseSchemaOrCatalogMapping.Sid, EDatabaseSchemaOrCatalogMapping.None), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
SYBASEASE_SA(
"SybaseASE", "SQL Anywhere", Boolean.TRUE, "SYBASE", EDatabaseSchemaOrCatalogMapping.Sid, EDatabaseSchemaOrCatalogMapping.None), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
// this Sybase IQ not used.
SYBASEIQ(

View File

@@ -23,6 +23,8 @@ public interface IMultipleComponentConnection {
public String getConnectionType();
public String getConnectorName();
public void setConnectionType(String connectionType);
public String getNameTarget();

View File

@@ -14,6 +14,8 @@ package org.talend.core.model.components;
import java.util.List;
import org.talend.core.model.process.INode;
/**
* DOC nrousseau class global comment. Detailled comment <br/>
*
@@ -33,4 +35,7 @@ public interface IMultipleComponentItem {
public String getComponent();
public void setComponent(String component);
public void updateNode(INode newNode, INode oldNode);
}

View File

@@ -50,4 +50,6 @@ public interface IMultipleComponentManager {
public boolean isLookupMode();
public String getParamSeperator();
}

View File

@@ -68,6 +68,8 @@ public interface IMetadataTable {
public boolean sameMetadataAs(IMetadataTable meta);
public boolean sameMetadataAs(IMetadataTable other, int options);
public boolean sameMetadataAs(IMetadataTable other, int options, boolean order);
public void sortCustomColumns();

View File

@@ -243,6 +243,11 @@ public class MetadataTable implements IMetadataTable, Cloneable {
*/
@Override
public boolean sameMetadataAs(IMetadataTable input, int options) {
return sameMetadataAs(input, options, false);
}
@Override
public boolean sameMetadataAs(IMetadataTable input, int options, boolean order) {
if (this == input) {
return true;
}
@@ -263,7 +268,7 @@ public class MetadataTable implements IMetadataTable, Cloneable {
// test if standard columns (no custom, or same input / output)
for (int i = 0; i < inputColumnListWithUnselected.size(); i++) {
IMetadataColumn otherColumn = inputColumnListWithUnselected.get(i);
if (isRepository) {
if (isRepository && !order) {
boolean exist = false;
for (int j = 0; j < thisColumnListWithUnselected.size(); j++) {
IMetadataColumn myColumn = thisColumnListWithUnselected.get(j);

View File

@@ -76,6 +76,8 @@ public final class MetadataTalendType {
public static final String PROJECT_MAPPING_FOLDER = ".settings/mappings"; //$NON-NLS-1$
public static final String UPDATED_MAPPING_FILES = "updated.mapping.files"; //$NON-NLS-1$
private static ECodeLanguage codeLanguage;
private static final String[] PERL_TYPES = new String[] { PerlTypesManager.BOOLEAN, PerlTypesManager.DATE,
@@ -476,7 +478,7 @@ public final class MetadataTalendType {
if (!mappingFolder.exists() || mappingFolder.listFiles().length < 1) {
ICoreService service = null;
if (GlobalServiceRegister.getDefault().isServiceRegistered(ICoreService.class)) {
service = (ICoreService) GlobalServiceRegister.getDefault().getService(ICoreService.class);
service = GlobalServiceRegister.getDefault().getService(ICoreService.class);
service.syncMappingsFileFromSystemToProject();
}
}

View File

@@ -626,6 +626,7 @@ public final class MetadataToolHelper {
target.getListColumns().addAll(columnsTAdd);
target.sortCustomColumns();
target.setLabel(source.getLabel());
target.setDbms(source.getDbms());
setTargetOriginalColumns(source, target);
// List<String> originalColumnsList = null;
// if (source.getOriginalColumns() != null) {

View File

@@ -427,6 +427,11 @@ public class ERepositoryObjectType extends DynaEnum<ERepositoryObjectType> {
*/
public final static ERepositoryObjectType JOBLET = ERepositoryObjectType.valueOf("JOBLET"); //$NON-NLS-1$
/**
* <font color="red">This value may be <b>null</b> in some products, <b>should add NPE check</b></font>
*/
public final static ERepositoryObjectType SERVICES = ERepositoryObjectType.valueOf("SERVICES"); //$NON-NLS-1$
public final static ERepositoryObjectType JOBLET_DESIGNS = ERepositoryObjectType.valueOf("JOBLET_DESIGNS"); //$NON-NLS-1$
public final static ERepositoryObjectType SPARK_JOBLET = ERepositoryObjectType.valueOf("SPARK_JOBLET"); //$NON-NLS-1$
@@ -439,6 +444,8 @@ public class ERepositoryObjectType extends DynaEnum<ERepositoryObjectType> {
public final static ERepositoryObjectType ROUTINES = ERepositoryObjectType.valueOf("ROUTINES"); //$NON-NLS-1$
public final static ERepositoryObjectType BEANS = ERepositoryObjectType.valueOf("BEANS"); //$NON-NLS-1$
public final static ERepositoryObjectType METADATA_HEADER_FOOTER = ERepositoryObjectType.valueOf("METADATA_HEADER_FOOTER"); //$NON-NLS-1$
public final static ERepositoryObjectType JOB_SCRIPT = ERepositoryObjectType.valueOf("JOB_SCRIPT"); //$NON-NLS-1$

View File

@@ -1785,7 +1785,7 @@ public abstract class RepositoryUpdateManager {
IMetadataManagmentService service = (IMetadataManagmentService) GlobalServiceRegister.getDefault()
.getService(IMetadataManagmentService.class);
IMetadataTable newMetadataTable = service.convertMetadataTable(newTable);
update = !oldMetadataTable.sameMetadataAs(newMetadataTable, IMetadataColumn.OPTIONS_NONE);
update = !oldMetadataTable.sameMetadataAs(newMetadataTable, IMetadataColumn.OPTIONS_NONE, true);
isAddColumn = isAddColumn(newMetadataTable, oldMetadataTable);
}
}

View File

@@ -61,5 +61,7 @@ public interface IRepositoryArtifactHandler {
public IRepositoryArtifactHandler clone();
public String getRepositoryURL(boolean isRelease);
public String resolveRemoteSha1(MavenArtifact artifact, boolean fromRelease) throws Exception;
}

View File

@@ -18,6 +18,7 @@ import java.util.Collection;
import java.util.Dictionary;
import java.util.Hashtable;
import org.eclipse.m2e.core.MavenPlugin;
import org.ops4j.pax.url.mvn.MavenResolver;
import org.osgi.framework.BundleContext;
import org.osgi.framework.ServiceReference;
@@ -47,6 +48,8 @@ public class TalendMavenResolver {
private static MavenResolver mavenResolver = null;
private static final String MVN_USER_SETTING_KEY = "org.ops4j.pax.url.mvn.settings";
/**
*
* DOC wchen TalendMavenResolver constructor comment.
@@ -87,6 +90,15 @@ public class TalendMavenResolver {
if (props == null) {
props = new Hashtable<String, String>();
}
// https://jira.talendforge.org/browse/TUP-26752
String configFile = props.get(MVN_USER_SETTING_KEY);
if (configFile == null || configFile.trim().isEmpty()) {
// set existing user settings file
String studioUserSettingsFile = MavenPlugin.getMavenConfiguration().getUserSettingsFile();
props.put(MVN_USER_SETTING_KEY, studioUserSettingsFile);
}
final BundleContext context = CoreRuntimePlugin.getInstance().getBundle().getBundleContext();
Collection<ServiceReference<ManagedService>> managedServiceRefs = context.getServiceReferences(ManagedService.class,
"(service.pid=org.ops4j.pax.url.mvn)");

View File

@@ -42,6 +42,8 @@ public interface MavenConstants {
static final String POM_FILTER = "POM_FILTER";
static final String USE_PROFILE_MODULE = "USE_PROFILE_MODULE";
/*
* for lib
*/

View File

@@ -16,6 +16,7 @@ import java.util.HashMap;
import java.util.HashSet;
import java.util.LinkedHashSet;
import java.util.Set;
import java.util.stream.Collectors;
import org.talend.core.model.general.ModuleNeeded;
import org.talend.core.model.process.JobInfo;
@@ -34,8 +35,12 @@ public class LastGenerationInfo {
private HashMap<String, Set<ModuleNeeded>> modulesNeededWithSubjobPerJob;
private HashMap<String, Set<ModuleNeeded>> highPriorityModuleNeededPerJob;
private HashMap<String, Set<ModuleNeeded>> highPriorityModuleNeeded;
private HashMap<String, Set<ModuleNeeded>> testcaseModuleNeeded;
private HashMap<String, Set<String>> routinesNeededWithSubjobPerJob;
private HashMap<String, Set<String>> pigudfNeededWithSubjobPerJob;
@@ -56,7 +61,9 @@ public class LastGenerationInfo {
modulesNeededPerJob = new HashMap<String, Set<ModuleNeeded>>();
contextPerJob = new HashMap<String, Set<String>>();
modulesNeededWithSubjobPerJob = new HashMap<String, Set<ModuleNeeded>>();
highPriorityModuleNeededPerJob = new HashMap<>();
highPriorityModuleNeeded = new HashMap<>();
testcaseModuleNeeded = new HashMap<>();
lastGeneratedjobs = new HashSet<JobInfo>();
routinesNeededPerJob = new HashMap<String, Set<String>>();
pigudfNeededPerJob = new HashMap<String, Set<String>>();
@@ -259,6 +266,22 @@ public class LastGenerationInfo {
return routinesNeededPerJob.get(key);
}
public Set<ModuleNeeded> getHighPriorityModuleNeededPerJob(String jobId, String jobVersion) {
String key = getProcessKey(jobId, jobVersion);
if (!highPriorityModuleNeededPerJob.containsKey(key)) {
highPriorityModuleNeededPerJob.put(key, new LinkedHashSet<>());
}
return highPriorityModuleNeededPerJob.get(key);
}
public void setHighPriorityModuleNeededPerJob(String jobId, String jobVersion, Set<ModuleNeeded> moduleNeeded) {
String key = getProcessKey(jobId, jobVersion);
if (!highPriorityModuleNeededPerJob.containsKey(key)) {
highPriorityModuleNeededPerJob.put(key, new LinkedHashSet<>());
}
highPriorityModuleNeededPerJob.get(key).addAll(moduleNeeded);
}
public Set<ModuleNeeded> getHighPriorityModuleNeeded(String jobId, String jobVersion) {
String key = getProcessKey(jobId, jobVersion);
if (!highPriorityModuleNeeded.containsKey(key)) {
@@ -275,7 +298,20 @@ public class LastGenerationInfo {
highPriorityModuleNeeded.get(key).addAll(moduleNeeded);
}
public Set<ModuleNeeded> getTestcaseModuleNeeded(String jobId, String jobVersion) {
String key = getProcessKey(jobId, jobVersion);
if (!testcaseModuleNeeded.containsKey(key)) {
testcaseModuleNeeded.put(key, new HashSet<>());
}
return testcaseModuleNeeded.get(key);
}
public void setTestcaseModuleNeeded(String jobId, String jobVersion, Set<ModuleNeeded> modulesNeeded) {
testcaseModuleNeeded.put(getProcessKey(jobId, jobVersion), new HashSet<>(modulesNeeded));
}
public void clearHighPriorityModuleNeeded() {
highPriorityModuleNeededPerJob.clear();
highPriorityModuleNeeded.clear();
}
@@ -364,10 +400,11 @@ public class LastGenerationInfo {
pigudfNeededWithSubjobPerJob.put(key, new HashSet<String>(modulesNeeded));
}
public void clearModulesNeededWithSubjobPerJob() {
if (!modulesNeededWithSubjobPerJob.isEmpty()) {
modulesNeededWithSubjobPerJob.clear();
}
public void clearCaches() {
clearHighPriorityModuleNeeded();
modulesNeededPerJob.clear();
modulesNeededWithSubjobPerJob.clear();
testcaseModuleNeeded.clear();
}
public void clean() {
@@ -375,7 +412,8 @@ public class LastGenerationInfo {
routinesNeededPerJob.clear();
pigudfNeededPerJob.clear();
modulesNeededWithSubjobPerJob.clear();
highPriorityModuleNeeded.clear();
clearHighPriorityModuleNeeded();
testcaseModuleNeeded.clear();
routinesNeededWithSubjobPerJob.clear();
pigudfNeededWithSubjobPerJob.clear();
contextPerJob.clear();

View File

@@ -76,5 +76,7 @@ public interface IProjectSettingPreferenceConstants {
* docker profile
*/
public static final String TEMPLATE_DOCKER_PROFILE_POM = "template_docker_profile_pom_script"; //$NON-NLS-1$
public static final String USE_STRICT_REFERENCE_JOBLET = "use_strict_reference_joblet"; //$NON-NLS-1$
}

View File

@@ -15,7 +15,9 @@ package org.talend.core.runtime.services;
import java.util.List;
import java.util.Map;
import org.talend.core.GlobalServiceRegister;
import org.talend.core.IService;
import org.talend.core.model.components.IComponent;
import org.talend.core.model.process.IElementParameter;
import org.talend.core.model.process.INode;
@@ -42,4 +44,13 @@ public interface IGenericService extends IService {
public void resetReferenceValue(INode curNode, String oldConnectionName, String newConnectionName);
public boolean isTcompv0(IComponent component);
public static IGenericService getService() {
if (GlobalServiceRegister.getDefault().isServiceRegistered(IGenericService.class)) {
return GlobalServiceRegister.getDefault().getService(IGenericService.class);
}
return null;
}
}

View File

@@ -0,0 +1,30 @@
// ============================================================================
//
// Copyright (C) 2006-2020 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.service;
import java.util.Map;
import org.talend.core.IService;
/**
* created by HHB on 2013-12-23 Detailled comment
*
*/
public interface IMDMWebServiceHook extends IService {
void preRequestSendingHook(Map<String, Object> requestContext, String userName);
String buildStudioToken(String username);
String getTokenKey();
}

View File

@@ -28,6 +28,8 @@ public interface INOSQLService extends IService {
public boolean isUseReplicaSet(Connection connection);
public boolean isUseSSL(Connection connection);
public String getMongoDBReplicaSets(Connection connection);

View File

@@ -0,0 +1,36 @@
/*
* Copyright (C) 2006-2020 Talend Inc. - www.talend.com
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
* specific language governing permissions and limitations under the License.
*
*/
package org.talend.core.service;
import java.nio.file.Path;
import java.util.Set;
import java.util.stream.Stream;
import org.talend.core.IService;
import org.talend.core.model.components.IComponent;
import org.talend.core.model.properties.Item;
/**
* For documentation, see implementation in org.talend.sdk.component.studio-integration plugin
*/
public interface ITaCoKitDependencyService extends IService {
boolean hasTaCoKitComponents(final Stream<IComponent> components);
Set<String> getTaCoKitOnlyDependencies(final Stream<IComponent> components);
Stream<IComponent> getJobComponents(Item item);
Path findM2Path();
}

View File

@@ -25,6 +25,7 @@ import org.eclipse.jdt.core.IJavaProject;
import org.eclipse.jface.action.IAction;
import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.talend.core.GlobalServiceRegister;
import org.talend.core.IService;
import org.talend.core.language.ECodeLanguage;
import org.talend.core.language.ICodeProblemsChecker;
@@ -239,4 +240,12 @@ public interface IRunProcessService extends IService {
public void handleJobDependencyLoop(JobInfo mainJobInfo, List<JobInfo> listJobs, IProgressMonitor progressMonitor)
throws Exception;
public static IRunProcessService get() {
if (GlobalServiceRegister.getDefault().isServiceRegistered(IRunProcessService.class)) {
return GlobalServiceRegister.getDefault().getService(IRunProcessService.class);
}
return null;
}
public boolean isCIMode();
}

View File

@@ -21,6 +21,7 @@ import java.util.Locale;
import java.util.Map;
import java.util.Set;
import org.apache.commons.lang.StringUtils;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.ResourcesPlugin;
@@ -91,11 +92,14 @@ public final class ProjectManager {
private Set<Object> updatedRemoteHandlerRecords;
private Set<Project> tempProjects;
private ProjectManager() {
beforeLogonRecords = new HashSet<String>();
logonRecords = new HashSet<String>();
migrationRecords = new HashSet<String>();
updatedRemoteHandlerRecords = new HashSet<Object>();
tempProjects = new HashSet<>();
initCurrentProject();
}
@@ -106,6 +110,18 @@ public final class ProjectManager {
return singleton;
}
public void clearTempProjects() {
tempProjects.clear();
}
public boolean removeTempProject(Project project) {
return tempProjects.remove(project);
}
public boolean addTempProject(Project project) {
return tempProjects.add(project);
}
public Project getProjectFromProjectLabel(String label) {
if (currentProject == null) {
initCurrentProject();
@@ -119,6 +135,12 @@ public final class ProjectManager {
return project;
}
}
for (Project project : tempProjects) {
if (StringUtils.equals(project.getLabel(), label)) {
return project;
}
}
return null;
}
@@ -136,6 +158,11 @@ public final class ProjectManager {
return project;
}
}
for (Project project : tempProjects) {
if (StringUtils.equals(project.getTechnicalLabel(), label)) {
return project;
}
}
return null;
}

View File

@@ -33,6 +33,8 @@ public class RepositoryConstants {
public static final String PROJECT_BRANCH_ID = "repository.project.branch"; //$NON-NLS-1$
public static final String PROJECT_ID = "repository.project.id";
public static final String IMG_DIRECTORY = "images"; //$NON-NLS-1$
public static final String IMG_DIRECTORY_OF_JOB_OUTLINE = "images/job_outlines"; //$NON-NLS-1$

View File

@@ -12,11 +12,18 @@
// ============================================================================
package org.talend.core.ui.utils;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.URI;
import java.net.URL;
import java.util.Properties;
import org.eclipse.core.runtime.FileLocator;
import org.eclipse.core.runtime.Platform;
import org.eclipse.core.runtime.URIUtil;
import org.eclipse.ui.IEditorPart;
import org.eclipse.ui.IWorkbenchPage;
import org.eclipse.ui.IWorkbenchWindow;
@@ -104,4 +111,28 @@ public class PluginUtil {
}
return part.getEditorSite().getId();
}
public static File getStudioConfigFile() throws Exception {
URL configLocation = new URL("platform:/config/config.ini"); //$NON-NLS-1$
URL fileUrl = FileLocator.toFileURL(configLocation);
return URIUtil.toFile(new URI(fileUrl.getProtocol(), fileUrl.getPath(), fileUrl.getQuery()));
}
public static Properties readProperties(final File config) {
final Properties configuration = new Properties();
try (final InputStream stream = new FileInputStream(config)) {
configuration.load(stream);
} catch (final IOException e) {
throw new IllegalArgumentException(e);
}
return configuration;
}
public static void saveProperties(final File config, Properties prop, String comment) {
try (FileOutputStream oFile = new FileOutputStream(config)) {
prop.store(oFile, comment);
} catch (final IOException e) {
throw new IllegalArgumentException(e);
}
}
}

View File

@@ -95,10 +95,12 @@ import org.talend.core.model.repository.job.JobResource;
import org.talend.core.model.repository.job.JobResourceManager;
import org.talend.core.model.utils.JavaResourcesHelper;
import org.talend.core.repository.model.ProxyRepositoryFactory;
import org.talend.core.runtime.CoreRuntimePlugin;
import org.talend.core.runtime.process.ITalendProcessJavaProject;
import org.talend.core.runtime.process.LastGenerationInfo;
import org.talend.core.runtime.process.TalendProcessArgumentConstant;
import org.talend.core.runtime.process.TalendProcessOptionConstants;
import org.talend.core.runtime.projectsetting.ProjectPreferenceManager;
import org.talend.core.runtime.repository.build.BuildExportManager;
import org.talend.core.service.IResourcesDependenciesService;
import org.talend.core.services.ICoreTisService;
@@ -155,7 +157,7 @@ public class ProcessorUtilities {
private static boolean exportJobAsMicroService = false;
private static IDesignerCoreService designerCoreService =
(IDesignerCoreService) GlobalServiceRegister.getDefault().getService(IDesignerCoreService.class);
GlobalServiceRegister.getDefault().getService(IDesignerCoreService.class);
private static Map<String, Integer> lastGeneratedWithStatsOrTrace = new HashMap<String, Integer>();
@@ -562,7 +564,10 @@ public class ProcessorUtilities {
neededLibraries);
// get all job testcases needed modules
neededLibraries.addAll(getAllJobTestcaseModules(selectedProcessItem));
Set<ModuleNeeded> testcaseModules = getAllJobTestcaseModules(selectedProcessItem);
LastGenerationInfo.getInstance().setTestcaseModuleNeeded(jobInfo.getJobId(), jobInfo.getJobVersion(),
testcaseModules);
neededLibraries.addAll(testcaseModules);
// must install the needed libraries before generate codes with poms.
CorePlugin.getDefault().getRunProcessService().updateLibraries(neededLibraries, currentProcess,
@@ -706,7 +711,7 @@ public class ProcessorUtilities {
List<String> jobletsComponentsList = new ArrayList<String>();
IComponentsFactory componentsFactory = null;
if (GlobalServiceRegister.getDefault().isServiceRegistered(IComponentsService.class)) {
IComponentsService compService = (IComponentsService) GlobalServiceRegister.getDefault()
IComponentsService compService = GlobalServiceRegister.getDefault()
.getService(IComponentsService.class);
if (compService != null) {
componentsFactory = compService.getComponentsFactory();
@@ -779,7 +784,7 @@ public class ProcessorUtilities {
// for joblet
IComponent cc = componentsFactory.get(node.getComponentName(), jobletPaletteType);
if (GlobalServiceRegister.getDefault().isServiceRegistered(IJobletProviderService.class)) {
IJobletProviderService jobletService = (IJobletProviderService) GlobalServiceRegister.getDefault()
IJobletProviderService jobletService = GlobalServiceRegister.getDefault()
.getService(IJobletProviderService.class);
Property property = jobletService.getJobletComponentItem(cc);
if (property != null && StringUtils.isNotBlank(property.getId())) {
@@ -892,11 +897,18 @@ public class ProcessorUtilities {
IFolder xmlMappingFolder = jobInfo.getProcessor().getTalendJavaProject().getResourceSubFolder(null,
JavaUtils.JAVA_XML_MAPPING);
if (xmlMappingFolder.members().length == 0
ProjectPreferenceManager manager = CoreRuntimePlugin.getInstance().getProjectPreferenceManager();
boolean updated = manager.getBoolean(MetadataTalendType.UPDATED_MAPPING_FILES);
if ((xmlMappingFolder.members().length == 0 || updated)
&& GlobalServiceRegister.getDefault().isServiceRegistered(ICoreService.class)) {
ICoreService coreService =
(ICoreService) GlobalServiceRegister.getDefault().getService(ICoreService.class);
GlobalServiceRegister.getDefault().getService(ICoreService.class);
coreService.synchronizeMapptingXML(jobInfo.getProcessor().getTalendJavaProject());
// reset
if (updated) {
manager.setValue(MetadataTalendType.UPDATED_MAPPING_FILES, false);
manager.save();
}
}
}
} catch (Exception e) {
@@ -917,7 +929,7 @@ public class ProcessorUtilities {
boolean hasDynamicMetadata = false;
if (GlobalServiceRegister.getDefault().isServiceRegistered(IDesignerCoreService.class)) {
IDesignerCoreService designerCoreService =
(IDesignerCoreService) GlobalServiceRegister.getDefault().getService(IDesignerCoreService.class);
GlobalServiceRegister.getDefault().getService(IDesignerCoreService.class);
for (INode node : currentProcess.getGraphicalNodes()) {
if (designerCoreService.isDelegateNode(node)) { // for jdbc, currently
return true;
@@ -927,7 +939,7 @@ public class ProcessorUtilities {
ICoreTisService service = null;
if (GlobalServiceRegister.getDefault().isServiceRegistered(ICoreTisService.class)) {
service = (ICoreTisService) GlobalServiceRegister.getDefault().getService(ICoreTisService.class);
service = GlobalServiceRegister.getDefault().getService(ICoreTisService.class);
}
for (INode node : (List<? extends INode>) currentProcess.getGeneratingNodes()) {
if (node.getComponent() != null && node.getComponent().getComponentType() == EComponentType.GENERIC) {
@@ -1100,8 +1112,8 @@ public class ProcessorUtilities {
private static void generateDataSet(IProcess process, IProcessor processor) {
if (GlobalServiceRegister.getDefault().isServiceRegistered(ITestContainerProviderService.class)) {
ITestContainerProviderService testContainerService =
(ITestContainerProviderService) GlobalServiceRegister.getDefault().getService(
ITestContainerProviderService.class);
GlobalServiceRegister.getDefault().getService(
ITestContainerProviderService.class);
if (testContainerService != null) {
if (!testContainerService.isTestContainerProcess(process)) {
return;
@@ -1283,7 +1295,10 @@ public class ProcessorUtilities {
neededLibraries);
// get all job testcases needed modules
neededLibraries.addAll(getAllJobTestcaseModules(selectedProcessItem));
Set<ModuleNeeded> testcaseModules = getAllJobTestcaseModules(selectedProcessItem);
LastGenerationInfo.getInstance().setTestcaseModuleNeeded(jobInfo.getJobId(), jobInfo.getJobVersion(),
testcaseModules);
neededLibraries.addAll(testcaseModules);
// must install the needed libraries before generate codes with poms.
CorePlugin.getDefault().getRunProcessService().updateLibraries(neededLibraries, currentProcess,
@@ -1365,8 +1380,8 @@ public class ProcessorUtilities {
Set<ModuleNeeded> neededLibraries = new HashSet<>();
if (GlobalServiceRegister.getDefault().isServiceRegistered(ITestContainerProviderService.class)) {
ITestContainerProviderService testcontainerService =
(ITestContainerProviderService) GlobalServiceRegister.getDefault().getService(
ITestContainerProviderService.class);
GlobalServiceRegister.getDefault().getService(
ITestContainerProviderService.class);
if (!testcontainerService.isTestContainerItem(selectedProcessItem)) {
try {
neededLibraries.addAll(testcontainerService.getAllJobTestcaseModules(selectedProcessItem));
@@ -1447,7 +1462,7 @@ public class ProcessorUtilities {
// 2.TDQ-14308 current drools file in 'src/resourcesmetadata/survivorship/' should be included to job jar.
if (GlobalServiceRegister.getDefault().isServiceRegistered(ITDQItemService.class)) {
ITDQItemService tdqItemService =
(ITDQItemService) GlobalServiceRegister.getDefault().getService(ITDQItemService.class);
GlobalServiceRegister.getDefault().getService(ITDQItemService.class);
if (tdqItemService == null) {
return;
}
@@ -1501,7 +1516,7 @@ public class ProcessorUtilities {
}
IProcess2 process = (IProcess2) currentProcess;
if (GlobalServiceRegister.getDefault().isServiceRegistered(IResourcesDependenciesService.class)) {
IResourcesDependenciesService resourcesService = (IResourcesDependenciesService) GlobalServiceRegister.getDefault()
IResourcesDependenciesService resourcesService = GlobalServiceRegister.getDefault()
.getService(IResourcesDependenciesService.class);
if (resourcesService == null) {
return;
@@ -1578,8 +1593,8 @@ public class ProcessorUtilities {
if (BitwiseOptionUtils.containOption(option, GENERATE_TESTS) && jobInfo.getProcessItem() != null) {
if (GlobalServiceRegister.getDefault().isServiceRegistered(ITestContainerProviderService.class)) {
ITestContainerProviderService testContainerService =
(ITestContainerProviderService) GlobalServiceRegister.getDefault().getService(
ITestContainerProviderService.class);
GlobalServiceRegister.getDefault().getService(
ITestContainerProviderService.class);
if (testContainerService != null) {
List<ProcessItem> testsItems =
testContainerService.getTestContainersByVersion(jobInfo.getProcessItem());
@@ -1989,7 +2004,7 @@ public class ProcessorUtilities {
boolean contextProperties, boolean applyToChildren) throws ProcessorException {
ISVNProviderService service = null;
if (PluginChecker.isSVNProviderPluginLoaded()) {
service = (ISVNProviderService) GlobalServiceRegister.getDefault().getService(ISVNProviderService.class);
service = GlobalServiceRegister.getDefault().getService(ISVNProviderService.class);
}
if (service != null && service.isProjectInSvnMode()) {
RepositoryManager.syncRoutineAndJoblet(ERepositoryObjectType.ROUTINES);
@@ -2041,7 +2056,7 @@ public class ProcessorUtilities {
// added by nma, to refresh routines when generating code in SVN mode. 10225.
ISVNProviderService service = null;
if (PluginChecker.isSVNProviderPluginLoaded()) {
service = (ISVNProviderService) GlobalServiceRegister.getDefault().getService(ISVNProviderService.class);
service = GlobalServiceRegister.getDefault().getService(ISVNProviderService.class);
}
if (service != null && service.isProjectInSvnMode()) {
RepositoryManager.syncRoutineAndJoblet(ERepositoryObjectType.ROUTINES);
@@ -2078,7 +2093,7 @@ public class ProcessorUtilities {
ISVNProviderService service = null;
if (PluginChecker.isSVNProviderPluginLoaded()) {
service = (ISVNProviderService) GlobalServiceRegister.getDefault().getService(ISVNProviderService.class);
service = GlobalServiceRegister.getDefault().getService(ISVNProviderService.class);
}
if (service != null && service.isProjectInSvnMode()) {
RepositoryManager.syncRoutineAndJoblet(ERepositoryObjectType.ROUTINES);
@@ -2136,7 +2151,7 @@ public class ProcessorUtilities {
// added by nma, to refresh routines when generating code in SVN mode. 10225.
ISVNProviderService service = null;
if (PluginChecker.isSVNProviderPluginLoaded()) {
service = (ISVNProviderService) GlobalServiceRegister.getDefault().getService(ISVNProviderService.class);
service = GlobalServiceRegister.getDefault().getService(ISVNProviderService.class);
}
if (service != null && service.isProjectInSvnMode()) {
RepositoryManager.syncRoutineAndJoblet(ERepositoryObjectType.ROUTINES);
@@ -2415,8 +2430,8 @@ public class ProcessorUtilities {
if (parentJobInfo.isTestContainer()
&& GlobalServiceRegister.getDefault().isServiceRegistered(ITestContainerProviderService.class)) {
ITestContainerProviderService testContainerService =
(ITestContainerProviderService) GlobalServiceRegister.getDefault().getService(
ITestContainerProviderService.class);
GlobalServiceRegister.getDefault().getService(
ITestContainerProviderService.class);
if (testContainerService != null) {
getSubjobInfo(testContainerService.getOriginalNodes(ptype), ptype, parentJobInfo, jobInfos,firstChildOnly);
}
@@ -2425,8 +2440,8 @@ public class ProcessorUtilities {
if (!parentJobInfo.isTestContainer() && !parentJobInfo.isJoblet()
&& GlobalServiceRegister.getDefault().isServiceRegistered(ITestContainerProviderService.class)) {
ITestContainerProviderService testContainerService =
(ITestContainerProviderService) GlobalServiceRegister.getDefault().getService(
ITestContainerProviderService.class);
GlobalServiceRegister.getDefault().getService(
ITestContainerProviderService.class);
if (testContainerService != null) {
List<ProcessItem> testsItems =
testContainerService.getTestContainersByVersion(parentJobInfo.getProcessItem());
@@ -2513,8 +2528,8 @@ public class ProcessorUtilities {
// for joblet node
if (jobletPaletteType != null && PluginChecker.isJobLetPluginLoaded()) {
IJobletProviderService service =
(IJobletProviderService) GlobalServiceRegister.getDefault().getService(
IJobletProviderService.class);
GlobalServiceRegister.getDefault().getService(
IJobletProviderService.class);
if (service != null) {
IComponent jobletComponent = service.getJobletComponent(node, jobletPaletteType);
ProcessType jobletProcess = service.getJobletProcess(jobletComponent);
@@ -2588,8 +2603,8 @@ public class ProcessorUtilities {
} else {
if (GlobalServiceRegister.getDefault().isServiceRegistered(IJobletProviderService.class)) {
IJobletProviderService jobletService =
(IJobletProviderService) GlobalServiceRegister.getDefault().getService(
IJobletProviderService.class);
GlobalServiceRegister.getDefault().getService(
IJobletProviderService.class);
if (jobletService.isJobletItem(processItem)) {
processType = jobletService.getJobletProcess(processItem);
parentJobInfo = new JobInfo(processItem.getProperty(), processType.getDefaultContext());
@@ -2598,8 +2613,8 @@ public class ProcessorUtilities {
}
if (GlobalServiceRegister.getDefault().isServiceRegistered(ITestContainerProviderService.class)) {
ITestContainerProviderService testContainerService =
(ITestContainerProviderService) GlobalServiceRegister.getDefault().getService(
ITestContainerProviderService.class);
GlobalServiceRegister.getDefault().getService(
ITestContainerProviderService.class);
if (testContainerService.isTestContainerItem(processItem)) {
parentJobInfo.setTestContainer(true);
}
@@ -2676,7 +2691,7 @@ public class ProcessorUtilities {
public static File getJavaProjectLibFolder() {
if (GlobalServiceRegister.getDefault().isServiceRegistered(IRunProcessService.class)) {
IRunProcessService processService =
(IRunProcessService) GlobalServiceRegister.getDefault().getService(IRunProcessService.class);
GlobalServiceRegister.getDefault().getService(IRunProcessService.class);
return processService.getJavaProjectLibFolder().getLocation().toFile();
}
return null;
@@ -2685,7 +2700,7 @@ public class ProcessorUtilities {
public static String getJavaProjectLibFolderPath() {
if (GlobalServiceRegister.getDefault().isServiceRegistered(IRunProcessService.class)) {
IRunProcessService processService =
(IRunProcessService) GlobalServiceRegister.getDefault().getService(IRunProcessService.class);
GlobalServiceRegister.getDefault().getService(IRunProcessService.class);
return processService.getJavaProjectLibFolder().getLocation().toPortableString();
}
return null;
@@ -2844,6 +2859,10 @@ public class ProcessorUtilities {
return "tRunJob".equalsIgnoreCase(componentName) || "cTalendJob".equalsIgnoreCase(componentName);
}
public static boolean isCIMode() {
return isCIMode;
}
public static void setCIMode(boolean isCIMode) {
ProcessorUtilities.isCIMode = isCIMode;
}

View File

@@ -91,6 +91,24 @@
<artifactId>slf4j-standard</artifactId>
<version>${tcomp.version}</version>
</dependency>
<dependency>
<groupId>org.talend.sdk.component</groupId>
<artifactId>component-runtime</artifactId>
<type>pom</type>
<version>${tcomp.version}</version>
</dependency>
<dependency>
<groupId>org.talend.sdk.component</groupId>
<artifactId>component-studio</artifactId>
<type>pom</type>
<version>${tcomp.version}</version>
</dependency>
<dependency>
<groupId>org.talend.sdk.component</groupId>
<artifactId>container</artifactId>
<type>pom</type>
<version>${tcomp.version}</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-jdk14</artifactId>

View File

@@ -11,4 +11,5 @@ ProjectPomProjectSettingPage_FilterPomLabel=Filter to use to generate poms:
ProjectPomProjectSettingPage_FilterErrorMessage=Invalid filter: {0}
ProjectPomProjectSettingPage.syncAllPomsButtonText=Force full re-synchronize poms
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=> Generate only the job named "myJob" with version 0.2\n!((label=myJob)and(version=0.1)) \t=> Generate every jobs except the "myJob" version 0.1
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=> Generate only the job named "myJob" with version 0.2\n!((label=myJob)and(version=0.1)) \t=> Generate every jobs except the "myJob" version 0.1
MavenProjectSettingPage.refModuleText=Set reference project modules in profile

View File

@@ -32,6 +32,7 @@ import org.talend.designer.maven.template.AbstractMavenTemplateManager;
import org.talend.designer.maven.template.MavenTemplateManager;
import org.talend.designer.maven.tools.extension.PomExtensionRegistry;
import org.talend.designer.maven.ui.DesignerMavenUiPlugin;
import org.talend.designer.maven.utils.PomUtil;
/**
* DOC ggu class global comment. Detailled comment
@@ -68,6 +69,7 @@ public class MavenScriptsProjectSettingInitializer extends AbstractProjectPrefer
Model model = MavenPlugin.getMavenModelManager().readMavenModel(stream);
PomExtensionRegistry.getInstance().updatePomTemplate(model);
ByteArrayOutputStream out = new ByteArrayOutputStream();
PomUtil.sortModules(model);
MavenPlugin.getMaven().writeModel(model, out);
String content = out.toString(TalendMavenConstants.DEFAULT_ENCODING);
if (content != null) {

View File

@@ -50,6 +50,8 @@ public class MavenProjectSettingPage extends AbstractProjectSettingPage {
private IPreferenceStore preferenceStore;
private Button useProfileModuleCheckbox;
public MavenProjectSettingPage() {
noDefaultAndApplyButton();
}
@@ -84,6 +86,10 @@ public class MavenProjectSettingPage extends AbstractProjectSettingPage {
filterExampleLable.setText(Messages.getString("MavenProjectSettingPage.filterExampleMessage")); //$NON-NLS-1$
filterExampleLable.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));
useProfileModuleCheckbox = new Button(parent, SWT.CHECK);
useProfileModuleCheckbox.setText(Messages.getString("MavenProjectSettingPage.refModuleText")); //$NON-NLS-1$
useProfileModuleCheckbox.setSelection(preferenceStore.getBoolean(MavenConstants.USE_PROFILE_MODULE));
filterText.setText(filter);
filterText.addModifyListener(new ModifyListener() {
@@ -115,6 +121,7 @@ public class MavenProjectSettingPage extends AbstractProjectSettingPage {
public void widgetSelected(SelectionEvent event) {
try {
preferenceStore.setValue(MavenConstants.POM_FILTER, getRealVersionFilter(filter));
preferenceStore.setValue(MavenConstants.USE_PROFILE_MODULE, useProfileModuleCheckbox.getSelection());
new AggregatorPomsHelper().syncAllPoms();
} catch (Exception e) {
ExceptionHandler.process(e);
@@ -133,6 +140,7 @@ public class MavenProjectSettingPage extends AbstractProjectSettingPage {
boolean ok = super.performOk();
if (preferenceStore != null) {
preferenceStore.setValue(MavenConstants.POM_FILTER, getRealVersionFilter(filter));
preferenceStore.setValue(MavenConstants.USE_PROFILE_MODULE, useProfileModuleCheckbox.getSelection());
}
return ok;
}

View File

@@ -12,24 +12,23 @@
// ============================================================================
package org.talend.designer.maven.tools;
import static org.talend.designer.maven.model.TalendJavaProjectConstants.DIR_AGGREGATORS;
import static org.talend.designer.maven.model.TalendJavaProjectConstants.DIR_BEANS;
import static org.talend.designer.maven.model.TalendJavaProjectConstants.DIR_CODES;
import static org.talend.designer.maven.model.TalendJavaProjectConstants.DIR_JOBS;
import static org.talend.designer.maven.model.TalendJavaProjectConstants.DIR_PIGUDFS;
import static org.talend.designer.maven.model.TalendJavaProjectConstants.DIR_POMS;
import static org.talend.designer.maven.model.TalendJavaProjectConstants.DIR_ROUTINES;
import static org.talend.designer.maven.model.TalendJavaProjectConstants.*;
import java.lang.reflect.InvocationTargetException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.ListIterator;
import java.util.Map;
import java.util.Set;
import java.util.function.Function;
import java.util.stream.Collectors;
import org.apache.commons.lang3.StringUtils;
import org.apache.maven.model.Activation;
import org.apache.maven.model.Model;
import org.apache.maven.model.Profile;
import org.eclipse.core.resources.IContainer;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IFolder;
@@ -56,7 +55,6 @@ import org.talend.core.context.Context;
import org.talend.core.context.RepositoryContext;
import org.talend.core.model.general.ILibrariesService;
import org.talend.core.model.general.ModuleNeeded;
import org.talend.core.model.general.Project;
import org.talend.core.model.process.ProcessUtils;
import org.talend.core.model.properties.Item;
import org.talend.core.model.properties.ProjectReference;
@@ -111,27 +109,25 @@ public class AggregatorPomsHelper {
return projectTechName;
}
public void createRootPom(List<String> modules, boolean force, IProgressMonitor monitor) throws Exception {
public void createRootPom(Model model, boolean force, IProgressMonitor monitor)
throws Exception {
IFile pomFile = getProjectRootPom();
if (force || !pomFile.exists()) {
Map<String, Object> parameters = new HashMap<String, Object>();
parameters.put(MavenTemplateManager.KEY_PROJECT_NAME, projectTechName);
Model model = MavenTemplateManager.getCodeProjectTemplateModel(parameters);
if (modules != null && !modules.isEmpty()) {
model.setModules(modules);
}
PomUtil.savePom(monitor, model, pomFile);
}
}
public void createRootPom(IProgressMonitor monitor) throws Exception {
Model newModel = getCodeProjectTemplateModel();
IFile pomFile = getProjectRootPom();
List<String> modules = null;
if (pomFile != null && pomFile.exists()) {
Model model = MavenPlugin.getMavenModelManager().readMavenModel(pomFile);
modules = model.getModules();
Model oldModel = MavenPlugin.getMavenModelManager().readMavenModel(pomFile);
List<Profile> profiles = oldModel.getProfiles().stream()
.filter(profile -> matchModuleProfile(profile.getId(), projectTechName)).collect(Collectors.toList());
newModel.setModules(oldModel.getModules());
newModel.getProfiles().addAll(profiles);
}
createRootPom(modules, true, monitor);
createRootPom(newModel, true, monitor);
}
public void installRootPom(boolean force) throws Exception {
@@ -291,37 +287,40 @@ public class AggregatorPomsHelper {
}
}
public void updateRefProjectModules(List<ProjectReference> references) {
public void updateRefProjectModules(List<ProjectReference> references, IProgressMonitor monitor) {
if (!needUpdateRefProjectModules()) {
return;
}
try {
List<String> modules = new ArrayList<>();
for (ProjectReference reference : references) {
String refProjectTechName = reference.getReferencedProject().getTechnicalLabel();
String modulePath = "../../" + refProjectTechName + "/" + TalendJavaProjectConstants.DIR_POMS; //$NON-NLS-1$ //$NON-NLS-2$
modules.add(modulePath);
}
Project mainProject = ProjectManager.getInstance().getCurrentProject();
IFolder mainPomsFolder = new AggregatorPomsHelper(mainProject.getTechnicalLabel()).getProjectPomsFolder();
IFile mainPomFile = mainPomsFolder.getFile(TalendMavenConstants.POM_FILE_NAME);
Model model = MavenPlugin.getMavenModelManager().readMavenModel(mainPomFile);
List<String> oldModules = model.getModules();
if (oldModules == null) {
oldModules = new ArrayList<>();
}
ListIterator<String> iterator = oldModules.listIterator();
while (iterator.hasNext()) {
String modulePath = iterator.next();
if (modulePath.startsWith("../../")) { //$NON-NLS-1$
iterator.remove();
Model model = MavenPlugin.getMavenModelManager().readMavenModel(getProjectRootPom());
if (PomIdsHelper.useProfileModule()) {
List<Profile> profiles = collectRefProjectProfiles(references);
Iterator<Profile> iterator = model.getProfiles().listIterator();
while (iterator.hasNext()) {
Profile profile = iterator.next();
if (matchModuleProfile(profile.getId(), projectTechName)) {
iterator.remove();
}
}
model.getProfiles().addAll(profiles);
} else {
List<String> refPrjectModules = new ArrayList<>();
references.forEach(reference -> {
String refProjectTechName = reference.getReferencedProject().getTechnicalLabel();
String modulePath = "../../" + refProjectTechName + "/" + TalendJavaProjectConstants.DIR_POMS; //$NON-NLS-1$ //$NON-NLS-2$
refPrjectModules.add(modulePath);
});
List<String> modules = model.getModules();
Iterator<String> iterator = modules.listIterator();
while (iterator.hasNext()) {
String modulePath = iterator.next();
if (modulePath.startsWith("../../")) { //$NON-NLS-1$
iterator.remove();
}
}
modules.addAll(refPrjectModules);
}
oldModules.addAll(modules);
PomUtil.savePom(null, model, mainPomFile);
createRootPom(model, true, monitor);
} catch (Exception e) {
ExceptionHandler.process(e);
}
@@ -715,47 +714,48 @@ public class AggregatorPomsHelper {
return null;
}
private void collectModules(List<String> modules) {
IRunProcessService service = getRunProcessService();
if (service != null) {
modules.add(
getModulePath(service.getTalendCodeJavaProject(ERepositoryObjectType.ROUTINES).getProjectPom()));
if (ProcessUtils.isRequiredPigUDFs(null)) {
modules.add(
getModulePath(service.getTalendCodeJavaProject(ERepositoryObjectType.PIG_UDF).getProjectPom()));
}
if (ProcessUtils.isRequiredBeans(null)) {
modules.add(getModulePath(service
.getTalendCodeJavaProject(ERepositoryObjectType.valueOf("BEANS")) //$NON-NLS-1$
.getProjectPom()));
}
private List<Profile> collectRefProjectProfiles(List<ProjectReference> references) throws CoreException {
if (!needUpdateRefProjectModules()) {
Model model = MavenPlugin.getMavenModelManager().readMavenModel(getProjectRootPom());
List<Profile> profiles = model.getProfiles();
return profiles.stream().filter(profile -> matchModuleProfile(profile.getId(), projectTechName))
.collect(Collectors.toList());
}
if (needUpdateRefProjectModules()) {
List<ProjectReference> references =
ProjectManager.getInstance().getCurrentProject().getProjectReferenceList(true);
for (ProjectReference reference : references) {
String refProjectTechName = reference.getReferencedProject().getTechnicalLabel();
String modulePath = "../../" + refProjectTechName + "/" + TalendJavaProjectConstants.DIR_POMS; //$NON-NLS-1$ //$NON-NLS-2$
modules.add(modulePath);
}
} else {
Project mainProject = ProjectManager.getInstance().getCurrentProject();
IFolder mainPomsFolder = new AggregatorPomsHelper(mainProject.getTechnicalLabel()).getProjectPomsFolder();
IFile mainPomFile = mainPomsFolder.getFile(TalendMavenConstants.POM_FILE_NAME);
try {
Model model = MavenPlugin.getMavenModelManager().readMavenModel(mainPomFile);
List<String> oldModules = model.getModules();
if (oldModules != null) {
for (String modulePath : oldModules) {
if (modulePath.startsWith("../../")) { //$NON-NLS-1$
modules.add(modulePath);
}
}
}
} catch (CoreException e) {
ExceptionHandler.process(e);
}
if (references == null) {
references = ProjectManager.getInstance().getCurrentProject().getProjectReferenceList(true);
}
List<Profile> profiles = new ArrayList<>();
references.forEach(reference -> {
String refProjectTechName = reference.getReferencedProject().getTechnicalLabel();
String modulePath = "../../" + refProjectTechName + "/" + TalendJavaProjectConstants.DIR_POMS; //$NON-NLS-1$ //$NON-NLS-2$
Profile profile = new Profile();
profile.setId((projectTechName + "_" + refProjectTechName).toLowerCase()); //$NON-NLS-1$
Activation activation = new Activation();
activation.setActiveByDefault(true);
profile.setActivation(activation);
profile.getModules().add(modulePath);
profiles.add(profile);
});
return profiles;
}
private List<String> collectRefProjectModules(List<ProjectReference> references) throws CoreException {
if (!needUpdateRefProjectModules()) {
Model model = MavenPlugin.getMavenModelManager().readMavenModel(getProjectRootPom());
return model.getModules().stream().filter(modulePath -> modulePath.startsWith("../../")) //$NON-NLS-1$
.collect(Collectors.toList());
}
if (references == null) {
references = ProjectManager.getInstance().getCurrentProject().getProjectReferenceList(true);
}
List<String> modules = new ArrayList<>();
references.forEach(reference -> {
String refProjectTechName = reference.getReferencedProject().getTechnicalLabel();
String modulePath = "../../" + refProjectTechName + "/" + TalendJavaProjectConstants.DIR_POMS; //$NON-NLS-1$ //$NON-NLS-2$
modules.add(modulePath);
});
return modules;
}
public boolean needUpdateRefProjectModules() {
@@ -793,7 +793,13 @@ public class AggregatorPomsHelper {
monitor.beginTask("", size); //$NON-NLS-1$
// project pom
monitor.subTask("Synchronize project pom"); //$NON-NLS-1$
createRootPom(null, true, monitor);
Model model = getCodeProjectTemplateModel();
if (PomIdsHelper.useProfileModule()) {
model.getProfiles().addAll(collectRefProjectProfiles(null));
} else {
model.getModules().addAll(collectRefProjectModules(null));
}
createRootPom(model, true, monitor);
installRootPom(true);
monitor.worked(1);
if (monitor.isCanceled()) {
@@ -846,8 +852,9 @@ public class AggregatorPomsHelper {
}
// sync project pom again with all modules.
monitor.subTask("Synchronize project pom with modules"); //$NON-NLS-1$
collectModules(modules);
createRootPom(modules, true, monitor);
collectCodeModules(modules);
model.getModules().addAll(modules);
createRootPom(model, true, monitor);
installRootPom(true);
monitor.worked(1);
if (monitor.isCanceled()) {
@@ -856,6 +863,21 @@ public class AggregatorPomsHelper {
monitor.done();
}
private void collectCodeModules(List<String> modules) {
// collect codes modules
IRunProcessService service = getRunProcessService();
if (service != null) {
modules.add(getModulePath(service.getTalendCodeJavaProject(ERepositoryObjectType.ROUTINES).getProjectPom()));
if (ProcessUtils.isRequiredPigUDFs(null)) {
modules.add(getModulePath(service.getTalendCodeJavaProject(ERepositoryObjectType.PIG_UDF).getProjectPom()));
}
if (ProcessUtils.isRequiredBeans(null)) {
modules.add(getModulePath(service.getTalendCodeJavaProject(ERepositoryObjectType.valueOf("BEANS")) //$NON-NLS-1$
.getProjectPom()));
}
}
}
/**
* Check if is a esb data service job
*
@@ -884,6 +906,18 @@ public class AggregatorPomsHelper {
return null;
}
private Model getCodeProjectTemplateModel() {
Map<String, Object> parameters = new HashMap<String, Object>();
parameters.put(MavenTemplateManager.KEY_PROJECT_NAME, projectTechName);
return MavenTemplateManager.getCodeProjectTemplateModel(parameters);
}
public static boolean matchModuleProfile(String profileId, String projectTechName) {
// FIXME get profile id from extension point.
List<String> otherProfiles = Arrays.asList("docker", "cloud-publisher", "nexus"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
return !otherProfiles.contains(profileId) && StringUtils.startsWithIgnoreCase(profileId, projectTechName + "_");
}
private static IRunProcessService getRunProcessService() {
if (GlobalServiceRegister.getDefault().isServiceRegistered(IRunProcessService.class)) {
IRunProcessService runProcessService =

View File

@@ -13,7 +13,7 @@
package org.talend.designer.maven.tools;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.HashSet;
import java.util.LinkedHashMap;
import java.util.List;
@@ -24,16 +24,19 @@ import org.apache.maven.model.Dependency;
import org.apache.maven.model.Exclusion;
import org.apache.maven.model.Model;
import org.eclipse.core.runtime.IProgressMonitor;
import org.talend.commons.exception.ExceptionHandler;
import org.talend.commons.exception.PersistenceException;
import org.talend.core.GlobalServiceRegister;
import org.talend.core.ILibraryManagerService;
import org.talend.core.model.general.ModuleNeeded;
import org.talend.core.model.process.IProcess2;
import org.talend.core.model.properties.ProcessItem;
import org.talend.core.model.properties.Property;
import org.talend.core.runtime.process.LastGenerationInfo;
import org.talend.core.runtime.process.TalendProcessOptionConstants;
import org.talend.core.ui.ITestContainerProviderService;
import org.talend.designer.maven.utils.PomUtil;
import org.talend.designer.maven.utils.SortableDependency;
import org.talend.designer.runprocess.IProcessor;
import org.talend.designer.runprocess.ProcessorException;
@@ -45,44 +48,40 @@ public class ProcessorDependenciesManager {
private final IProcessor processor;
private final Property property;
public ProcessorDependenciesManager(IProcessor processor) {
this.processor = processor;
property = processor.getProperty();
}
/**
* Will add the dependencies to the maven model.
*/
@SuppressWarnings({ "rawtypes", "unchecked" })
public boolean updateDependencies(IProgressMonitor progressMonitor, Model model) throws ProcessorException {
try {
List neededDependencies = new ArrayList<Dependency>();
Set<ModuleNeeded> neededLibraries = getAllModuleNeededWithTestCase();
Set<String> uniquDependenciesSet = new HashSet<>();
for (ModuleNeeded module : neededLibraries) {
Dependency dependency = null;
// if (module.getDeployStatus() == ELibraryInstallStatus.DEPLOYED) {
// }
final String mavenUri = module.getMavenUri();
if (uniquDependenciesSet.contains(mavenUri)) {
continue; // must be same GAV, avoid the different other attrs for modules
}
uniquDependenciesSet.add(mavenUri);
dependency = PomUtil.createModuleDependency(mavenUri);
if (dependency != null) {
if (module.isExcludeDependencies()) {
Exclusion exclusion = new Exclusion();
exclusion.setGroupId("*"); //$NON-NLS-1$
exclusion.setArtifactId("*"); //$NON-NLS-1$
dependency.addExclusion(exclusion);
}
neededDependencies.add(dependency);
Set<ModuleNeeded> neededLibraries = new HashSet<>();
Set<String> uniqueDependencies = new HashSet<>();
Set<ModuleNeeded> jobModules = getProcessNeededModules();
Set<ModuleNeeded> testcaseModules = getTestcaseNeededModules(property);
neededLibraries.addAll(jobModules);
neededLibraries.addAll(testcaseModules);
if (!neededLibraries.isEmpty()) {
if (GlobalServiceRegister.getDefault().isServiceRegistered(ILibraryManagerService.class)) {
ILibraryManagerService repositoryBundleService = GlobalServiceRegister.getDefault()
.getService(ILibraryManagerService.class);
repositoryBundleService.installModules(neededLibraries, null);
}
}
List neededDependencies = new ArrayList<>();
java.util.Collections.sort(neededDependencies);
neededDependencies.addAll(convertToDependency(jobModules, uniqueDependencies, false));
neededDependencies.addAll(convertToDependency(testcaseModules, uniqueDependencies, true));
Collections.sort(neededDependencies);
boolean fresh = false;
if (processor.getProperty() != null && processor.getProperty().getItem() != null
&& processor.getProcess() instanceof IProcess2) {
if (property != null && property.getItem() != null && processor.getProcess() instanceof IProcess2) {
// is standard job.
fresh = true;
}
@@ -93,6 +92,30 @@ public class ProcessorDependenciesManager {
}
}
@SuppressWarnings({ "rawtypes", "unchecked" })
private List convertToDependency(Set<ModuleNeeded> neededLibraries, Set<String> uniqueDependencies, boolean optional) {
List neededDependencies = new ArrayList<>();
for (ModuleNeeded module : neededLibraries) {
final String mavenUri = module.getMavenUri();
if (uniqueDependencies.contains(mavenUri)) {
continue; // must be same GAV, avoid the different other attrs for modules
}
uniqueDependencies.add(mavenUri);
Dependency dependency = PomUtil.createModuleDependency(mavenUri);
if (dependency != null) {
((SortableDependency) dependency).setAssemblyOptional(optional);
if (module.isExcludeDependencies()) {
Exclusion exclusion = new Exclusion();
exclusion.setGroupId("*"); //$NON-NLS-1$
exclusion.setArtifactId("*"); //$NON-NLS-1$
dependency.addExclusion(exclusion);
}
neededDependencies.add(dependency);
}
}
return neededDependencies;
}
/**
*
* DOC ggu Comment method "updateDependencies". add the job Needed Libraries for current model.
@@ -159,35 +182,35 @@ public class ProcessorDependenciesManager {
return changed;
}
private Set<ModuleNeeded> getAllModuleNeededWithTestCase() throws PersistenceException {
// add the job modules.
Set<ModuleNeeded> neededLibraries = new HashSet<>();
Collection<ModuleNeeded> modulesNeeded = LastGenerationInfo.getInstance()
private Set<ModuleNeeded> getProcessNeededModules() {
Set<ModuleNeeded> neededLibraries = LastGenerationInfo.getInstance()
.getModulesNeededPerJob(processor.getProcess().getId(), processor.getProcess().getVersion());
if (modulesNeeded.isEmpty()) {
modulesNeeded = processor.getNeededModules(TalendProcessOptionConstants.MODULES_WITH_JOBLET);
}
neededLibraries.addAll(modulesNeeded);
// add testcase modules
if (GlobalServiceRegister.getDefault().isServiceRegistered(ITestContainerProviderService.class)) {
ITestContainerProviderService testcontainerService = (ITestContainerProviderService) GlobalServiceRegister
.getDefault().getService(ITestContainerProviderService.class);
Set<ModuleNeeded> testcaseModules = null;
if (processor.getProperty() != null && processor.getProperty().getItem() instanceof ProcessItem) {
ProcessItem item = (ProcessItem) processor.getProperty().getItem();
testcaseModules = testcontainerService.getAllJobTestcaseModules(item);
neededLibraries.addAll(testcaseModules);
if (testcaseModules != null) {
if (GlobalServiceRegister.getDefault().isServiceRegistered(ILibraryManagerService.class)) {
ILibraryManagerService repositoryBundleService = (ILibraryManagerService) GlobalServiceRegister
.getDefault().getService(ILibraryManagerService.class);
repositoryBundleService.installModules(neededLibraries, null);
}
}
}
if (neededLibraries.isEmpty()) {
neededLibraries = processor.getNeededModules(TalendProcessOptionConstants.MODULES_DEFAULT);
}
return neededLibraries;
}
public static Set<ModuleNeeded> getTestcaseNeededModules(Property property) {
if (property == null || !(property.getItem() instanceof ProcessItem)) {
return Collections.emptySet();
}
Set<ModuleNeeded> testcaseModules = LastGenerationInfo.getInstance().getTestcaseModuleNeeded(property.getId(),
property.getVersion());
if (testcaseModules.isEmpty()) {
if (GlobalServiceRegister.getDefault().isServiceRegistered(ITestContainerProviderService.class)) {
ITestContainerProviderService testcontainerService = GlobalServiceRegister.getDefault()
.getService(ITestContainerProviderService.class);
try {
testcaseModules = testcontainerService.getAllJobTestcaseModules((ProcessItem) property.getItem());
LastGenerationInfo.getInstance().setTestcaseModuleNeeded(property.getId(), property.getVersion(),
testcaseModules);
} catch (PersistenceException e) {
ExceptionHandler.process(e);
}
}
}
return testcaseModules;
}
}

View File

@@ -69,13 +69,7 @@ public class ProjectPomManager {
if (monitor == null) {
monitor = new NullProgressMonitor();
}
Model projectModel = MODEL_MANAGER.readMavenModel(projectPomFile);
Model templateModel = MavenTemplateManager.getCodeProjectTemplateModel();
for (String module : projectModel.getModules()) {
templateModel.addModule(module);
}
PomUtil.savePom(monitor, templateModel, projectPomFile);
new AggregatorPomsHelper().createRootPom(monitor);
}
/**

View File

@@ -18,18 +18,23 @@ import java.io.IOException;
import java.io.InputStream;
import java.nio.file.Path;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Optional;
import java.util.Properties;
import java.util.Set;
import java.util.stream.Collectors;
import org.apache.commons.lang3.BooleanUtils;
import org.apache.commons.lang3.StringUtils;
import org.talend.core.model.repository.ERepositoryObjectType;
import org.apache.maven.artifact.repository.ArtifactRepository;
import org.apache.maven.artifact.versioning.ComparableVersion;
import org.apache.maven.model.Activation;
import org.apache.maven.model.Dependency;
import org.apache.maven.model.Model;
@@ -59,9 +64,7 @@ import org.talend.core.model.properties.Project;
import org.talend.core.model.properties.Property;
import org.talend.core.model.utils.JavaResourcesHelper;
import org.talend.core.repository.utils.ItemResourceUtil;
import org.talend.core.runtime.maven.MavenArtifact;
import org.talend.core.runtime.maven.MavenConstants;
import org.talend.core.runtime.maven.MavenUrlHelper;
import org.talend.core.runtime.process.ITalendProcessJavaProject;
import org.talend.core.runtime.process.JobInfoProperties;
import org.talend.core.runtime.process.LastGenerationInfo;
@@ -75,6 +78,7 @@ import org.talend.core.utils.TemplateFileUtils;
import org.talend.designer.maven.model.TalendMavenConstants;
import org.talend.designer.maven.template.ETalendMavenVariables;
import org.talend.designer.maven.template.MavenTemplateManager;
import org.talend.designer.maven.tools.ProcessorDependenciesManager;
import org.talend.designer.maven.utils.PomIdsHelper;
import org.talend.designer.maven.utils.PomUtil;
import org.talend.designer.maven.utils.SortableDependency;
@@ -623,139 +627,103 @@ public class CreateMavenJobPom extends AbstractMavenProcessorPom {
}
protected void updateDependencySet(IFile assemblyFile) {
Map<String, Dependency> jobCoordinateMap = new HashMap<String, Dependency>();
Set<JobInfo> childrenJobInfo = new HashSet<>();
if (!hasLoopDependency()) {
childrenJobInfo = getJobProcessor().getBuildChildrenJobs();
}
// add children jobs
for (JobInfo jobInfo : childrenJobInfo) {
Property property = jobInfo.getProcessItem().getProperty();
String coordinate =
getCoordinate(PomIdsHelper.getJobGroupId(property), PomIdsHelper.getJobArtifactId(jobInfo),
MavenConstants.PACKAGING_JAR, PomIdsHelper.getJobVersion(property));
Dependency dependency = getDependencyObject(PomIdsHelper.getJobGroupId(property), PomIdsHelper.getJobArtifactId(jobInfo), PomIdsHelper.getJobVersion(property),
MavenConstants.PACKAGING_JAR, null);
jobCoordinateMap.put(coordinate, dependency);
}
// add parent job
Property parentProperty = this.getJobProcessor().getProperty();
String parentCoordinate =
getCoordinate(PomIdsHelper.getJobGroupId(parentProperty), PomIdsHelper.getJobArtifactId(parentProperty),
MavenConstants.PACKAGING_JAR, PomIdsHelper.getJobVersion(parentProperty));
Dependency parentDependency = getDependencyObject(PomIdsHelper.getJobGroupId(parentProperty), PomIdsHelper.getJobArtifactId(parentProperty), PomIdsHelper.getJobVersion(parentProperty),
MavenConstants.PACKAGING_JAR, null);
jobCoordinateMap.put(parentCoordinate, parentDependency);
// add talend libraries and codes
Map<String, Dependency> talendLibCoordinateMap = new HashMap<String, Dependency>();
String projectTechName = ProjectManager.getInstance().getProject(parentProperty).getTechnicalLabel();
String projectGroupId = PomIdsHelper.getProjectGroupId(projectTechName);
// codes
List<Dependency> dependencies = new ArrayList<>();
addCodesDependencies(dependencies);
for (Dependency dependency : dependencies) {
talendLibCoordinateMap.put(getCoordinate(dependency), dependency);
}
// libraries
dependencies.clear();
Set<ModuleNeeded> modules = getJobProcessor()
.getNeededModules(TalendProcessOptionConstants.MODULES_WITH_JOBLET
| TalendProcessOptionConstants.MODULES_EXCLUDE_SHADED);
for (ModuleNeeded module : modules) {
String mavenUri = module.getMavenUri();
Dependency dependency = PomUtil.createModuleDependency(mavenUri);
dependencies.add(dependency);
}
for (Dependency dependency : dependencies) {
if (MavenConstants.PACKAGING_POM.equals(dependency.getType())) {
continue;
}
String dependencyGroupId = dependency.getGroupId();
String coordinate = getCoordinate(dependency);
if (!jobCoordinateMap.containsKey(coordinate)) {
if (MavenConstants.DEFAULT_LIB_GROUP_ID.equals(dependencyGroupId)) {
talendLibCoordinateMap.put(coordinate, dependency);
}
}
}
// add 3rd party libraries
Map<String, Dependency> _3rdDepLibMap = new HashMap<String, Dependency>();
Set<String> jobCoordinate = new HashSet<>();
Set<String> talendLibCoordinate = new HashSet<>();
Set<String> _3rdLibCoordinate = new HashSet<>();
Map<String, Set<Dependency>> duplicateLibs = new HashMap<>();
for (Dependency dependency : dependencies) {
if (MavenConstants.PACKAGING_POM.equals(dependency.getType())) {
continue;
}
String coordinate = getCoordinate(dependency);
if (!jobCoordinateMap.containsKey(coordinate) && !talendLibCoordinateMap.containsKey(coordinate)) {
_3rdDepLibMap.put(coordinate, dependency);
addToDuplicateLibs(duplicateLibs, dependency);
}
}
IProcessor processor = getJobProcessor();
// add missing modules from the job generation of children
Set<ModuleNeeded> fullModulesList = new HashSet<>();
for (JobInfo jobInfo : childrenJobInfo) {
fullModulesList
.addAll(LastGenerationInfo
.getInstance()
.getModulesNeededWithSubjobPerJob(jobInfo.getJobId(), jobInfo.getJobVersion()));
}
for (ModuleNeeded moduleNeeded : fullModulesList) {
if (moduleNeeded.isExcluded()) {
continue;
// current job
Property currentJobProperty = processor.getProperty();
jobCoordinate.add(getJobCoordinate(currentJobProperty));
// children jobs without test cases
Set<JobInfo> childrenJobInfo = !hasLoopDependency()
? processor.getBuildChildrenJobs().stream().filter(j -> !j.isTestContainer()).collect(Collectors.toSet())
: Collections.emptySet();
childrenJobInfo.forEach(j -> jobCoordinate.add(getJobCoordinate(j.getProcessItem().getProperty())));
// talend libraries and codes
String projectGroupId = PomIdsHelper
.getProjectGroupId(ProjectManager.getInstance().getProject(currentJobProperty).getTechnicalLabel());
List<Dependency> dependencies = new ArrayList<>();
// codes
addCodesDependencies(dependencies);
// codes dependencies (optional)
ERepositoryObjectType.getAllTypesOfCodes().forEach(t -> dependencies.addAll(PomUtil.getCodesDependencies(t)));
// libraries of talend/3rd party
dependencies.addAll(processor.getNeededModules(TalendProcessOptionConstants.MODULES_EXCLUDE_SHADED).stream()
.filter(m -> !m.isExcluded()).map(m -> createDenpendency(m, false)).collect(Collectors.toSet()));
// missing modules from the job generation of children
childrenJobInfo.forEach(j -> dependencies
.addAll(LastGenerationInfo.getInstance().getModulesNeededPerJob(j.getJobId(), j.getJobVersion()).stream()
.filter(m -> !m.isExcluded()).map(m -> createDenpendency(m, false)).collect(Collectors.toSet())));
Set<ModuleNeeded> modules = new HashSet<>();
// testcase modules from current job (optional)
modules.addAll(ProcessorDependenciesManager.getTestcaseNeededModules(currentJobProperty));
// testcase modules from children job (optional)
childrenJobInfo.forEach(
j -> modules.addAll(ProcessorDependenciesManager.getTestcaseNeededModules(j.getProcessItem().getProperty())));
dependencies
.addAll(modules.stream().filter(m -> !m.isExcluded()).map(m -> createDenpendency(m, true))
.collect(Collectors.toSet()));
dependencies.stream().filter(d -> !MavenConstants.PACKAGING_POM.equals(d.getType())).forEach(d -> {
String coordinate = getCoordinate(d);
String groupId = d.getGroupId();
boolean optional = ((SortableDependency) d).isAssemblyOptional();
if (jobCoordinate.contains(coordinate) || talendLibCoordinate.contains(coordinate)
|| _3rdLibCoordinate.contains(coordinate)) {
return;
}
MavenArtifact artifact = MavenUrlHelper.parseMvnUrl(moduleNeeded.getMavenUri());
String coordinate = getCoordinate(artifact.getGroupId(), artifact.getArtifactId(), artifact.getType(),
artifact.getVersion());
if (!jobCoordinateMap.containsKey(coordinate) && !talendLibCoordinateMap.containsKey(coordinate)
&& !_3rdDepLibMap.containsKey(coordinate)) {
Dependency dependencyObject = getDependencyObject(artifact.getGroupId(), artifact.getArtifactId(), artifact.getVersion(), artifact.getType(), artifact.getClassifier());
if (MavenConstants.DEFAULT_LIB_GROUP_ID.equals(artifact.getGroupId())
|| artifact.getGroupId().startsWith(projectGroupId)) {
talendLibCoordinateMap.put(coordinate, dependencyObject);
} else {
_3rdDepLibMap.put(coordinate, dependencyObject);
Dependency dependency = PomUtil
.createDependency(artifact.getGroupId(), artifact.getArtifactId(), artifact.getVersion(),
artifact.getType(), artifact.getClassifier());
addToDuplicateLibs(duplicateLibs, dependency);
if (MavenConstants.DEFAULT_LIB_GROUP_ID.equals(groupId) || groupId.startsWith(projectGroupId)) {
if (!optional) {
talendLibCoordinate.add(coordinate);
}
} else {
if (!optional) {
_3rdLibCoordinate.add(coordinate);
}
addToDuplicateLibs(duplicateLibs, d);
}
}
});
Iterator<String> iterator = duplicateLibs.keySet().iterator();
while (iterator.hasNext()) {
String key = iterator.next();
Set<Dependency> dupDependencies = duplicateLibs.get(key);
if (dupDependencies.size() < 2) {
// remove non-duplicated dependencies
Set<Dependency> dupDependencies = duplicateLibs.get(iterator.next());
if (dupDependencies.size() < 2 // remove unique dependency
/* || dupDependencies.stream().filter(d -> !((SortableDependency) d).isAssemblyOptional()).count() == 1 */) {
// remove when only one required dependencies, means others are from codes/testcase
// don't do this now at least it won't have problem in studio
// in some case, the needed jar is not in main job pom, maven will get the nearest one which could be
// wrong
iterator.remove();
} else {
// remove duplicated dependencies from 3rd lib list
for (Dependency dependency : dupDependencies) {
_3rdDepLibMap.remove(getCoordinate(dependency));
}
// remove duplicate dependencies from 3rd party libs
dupDependencies.stream().map(d -> getCoordinate(d)).forEach(c -> _3rdLibCoordinate.remove(c));
}
}
try {
Document document = PomUtil.loadAssemblyFile(null, assemblyFile);
// add talend libs & codes
setupDependencySetNode(document, talendLibCoordinateMap, "lib", "${artifact.artifactId}.${artifact.extension}",
false, false);
// add 3rd party libs <dependencySet>
setupDependencySetNode(document, _3rdDepLibMap, "lib", null, false, false);
setupDependencySetNode(document, talendLibCoordinate, "lib", "${artifact.artifactId}.${artifact.extension}", false,
false);
// add 3rd party libs
setupDependencySetNode(document, _3rdLibCoordinate, "lib", null, false, false);
// add jobs
setupDependencySetNode(document, jobCoordinateMap, "${talend.job.name}",
setupDependencySetNode(document, jobCoordinate,
"${talend.job.name}",
"${artifact.build.finalName}.${artifact.extension}", true, false);
// add duplicate dependencies if exists
setupFileNode(document, duplicateLibs);
setupFileNode(document, duplicateLibs.values().stream().flatMap(s -> s.stream()).collect(Collectors.toSet()));
PomUtil.saveAssemblyFile(assemblyFile, document);
} catch (Exception e) {
@@ -763,43 +731,85 @@ public class CreateMavenJobPom extends AbstractMavenProcessorPom {
}
}
// remove duplicate job dependencies and only keep the latest one
// keep high priority dependencies if set by tLibraryLoad
// FIXME not used now since tacokit component use specific dependency version. so we must include all job dependencies.
// but problem will remain for CI when need to download jars from nexus, maven will only resolve one of them.
private Set<Dependency> convertToDistinctedJobDependencies(String jobId, String jobVersion, Set<ModuleNeeded> neededModules) {
Set<Dependency> highPriorityDependencies = LastGenerationInfo.getInstance()
.getHighPriorityModuleNeededPerJob(jobId, jobVersion).stream().map(m -> createDenpendency(m, false))
.collect(Collectors.toSet());
Map<String, Dependency> highPriorityDependenciesMap = new HashMap<>();
highPriorityDependencies.forEach(d -> highPriorityDependenciesMap.putIfAbsent(getCheckDupCoordinate(d), d));
Set<Dependency> jobDependencies = neededModules.stream().filter(m -> !m.isExcluded())
.map(m -> createDenpendency(m, false)).collect(Collectors.toSet());
Map<String, Set<Dependency>> jobDependenciesMap = new HashMap<>();
jobDependencies.forEach(d -> {
String coordinate = getCheckDupCoordinate(d);
if (jobDependenciesMap.get(coordinate) == null) {
jobDependenciesMap.put(coordinate, new LinkedHashSet<>());
}
jobDependenciesMap.get(coordinate).add(d);
});
Set<Dependency> filteredDependencies = new HashSet<>();
jobDependenciesMap.forEach((key, value) -> {
Optional<Dependency> target = null;
if (highPriorityDependenciesMap.containsKey(key)) {
Dependency highPriorityDependency = highPriorityDependenciesMap.get(key);
target = value.stream().filter(d -> getCoordinate(highPriorityDependency).equals(getCoordinate(d))).findFirst();
} else {
target = value.stream().sorted(
(d1, d2) -> new ComparableVersion(d2.getVersion()).compareTo(new ComparableVersion(d1.getVersion())))
.findFirst();
}
if (target.isPresent()) {
filteredDependencies.add(target.get());
}
});
return filteredDependencies;
}
private Dependency createDenpendency(ModuleNeeded moduleNeeded, boolean optional) {
SortableDependency dependency = (SortableDependency) PomUtil.createModuleDependency(moduleNeeded.getMavenUri());
dependency.setAssemblyOptional(optional);
return dependency;
}
private String getCoordinate(Dependency dependency) {
return getCoordinate(dependency.getGroupId(), dependency.getArtifactId(), dependency.getType(),
dependency.getVersion());
dependency.getVersion(), dependency.getClassifier());
}
protected String getCoordinate(String groupId, String artifactId, String type, String version) {
private String getCheckDupCoordinate(Dependency dependency) {
return getCoordinate(dependency.getGroupId(), dependency.getArtifactId(), dependency.getType(), null,
dependency.getClassifier());
}
protected String getJobCoordinate(Property property) {
return getCoordinate(PomIdsHelper.getJobGroupId(property), PomIdsHelper.getJobArtifactId(property),
MavenConstants.PACKAGING_JAR, PomIdsHelper.getJobVersion(property), null);
}
protected String getCoordinate(String groupId, String artifactId, String type, String version, String classifier) {
String separator = ":"; //$NON-NLS-1$
String coordinate = groupId + separator;
coordinate += artifactId + separator;
if (type != null) {
coordinate += type;
String coordinate = groupId + separator + artifactId;
if (StringUtils.isNotBlank(type)) {
coordinate += separator + type;
}
if (StringUtils.isNotBlank(classifier)) {
coordinate += separator + classifier;
}
if (version != null) {
if (StringUtils.isNotBlank(version)) {
coordinate += separator + version;
}
return coordinate;
}
protected String getAssemblyCoordinate(Dependency dependency) {
String separator = ":"; //$NON-NLS-1$
String coordinate = dependency.getGroupId() + separator;
coordinate += dependency.getArtifactId() + separator;
if (dependency.getType() != null) {
coordinate += dependency.getType();
}
if (dependency.getClassifier() != null) {
coordinate += separator + "*";
}
if (dependency.getVersion() != null) {
coordinate += separator + dependency.getVersion();
}
return coordinate;
}
protected Dependency getDependencyObject(String groupId, String artifactId, String version, String type, String classifier) {
Dependency object = new SortableDependency();
object.setGroupId(groupId);
@@ -812,17 +822,15 @@ public class CreateMavenJobPom extends AbstractMavenProcessorPom {
}
private void addToDuplicateLibs(Map<String, Set<Dependency>> map, Dependency dependency) {
String coordinate =
getCoordinate(dependency.getGroupId(), dependency.getArtifactId(), dependency.getType(), null);
String coordinate = getCheckDupCoordinate(dependency);
if (!map.containsKey(coordinate)) {
Set<Dependency> set = new HashSet<>();
map.put(coordinate, set);
map.put(coordinate, new HashSet<>());
}
map.get(coordinate).add(dependency);
}
protected void setupDependencySetNode(Document document, Map<String, Dependency> libIncludes, String outputDir,
String fileNameMapping, boolean useProjectArtifact, boolean unpack) {
protected void setupDependencySetNode(Document document, Set<String> libIncludes, String outputDir, String fileNameMapping,
boolean useProjectArtifact, boolean unpack) {
if (libIncludes.isEmpty()) {
return;
}
@@ -842,9 +850,9 @@ public class CreateMavenJobPom extends AbstractMavenProcessorPom {
Node includesNode = document.createElement("includes");
dependencySetNode.appendChild(includesNode);
for (Dependency dependency : libIncludes.values()) {
for (String coodinate : libIncludes) {
Node includeNode = document.createElement("include");
includeNode.setTextContent(getAssemblyCoordinate(dependency));
includeNode.setTextContent(coodinate);
includesNode.appendChild(includeNode);
}
@@ -866,44 +874,40 @@ public class CreateMavenJobPom extends AbstractMavenProcessorPom {
}
private void setupFileNode(Document document, Map<String, Set<Dependency>> duplicateDependencies) {
private void setupFileNode(Document document, Set<Dependency> duplicateDependencies) throws CoreException {
Node filesNode = document.getElementsByTagName("files").item(0);
// TESB-27614:NPE while building a route
if (filesNode == null) {
return;
}
if (duplicateDependencies.isEmpty()) {
return;
}
try {
IMaven maven = MavenPlugin.getMaven();
ArtifactRepository repository = maven.getLocalRepository();
Node filesNode = document.getElementsByTagName("files").item(0);
// TESB-27614:NPE while building a route
if (filesNode != null) {
for (Entry<String, Set<Dependency>> entry : duplicateDependencies.entrySet()) {
Set<Dependency> dependencies = entry.getValue();
for (Dependency dependency : dependencies) {
String sourceLocation = maven
.getArtifactPath(repository, dependency.getGroupId(), dependency.getArtifactId(),
dependency.getVersion(), dependency.getType(), dependency.getClassifier());
Path path = new File(repository.getBasedir()).toPath().resolve(sourceLocation);
sourceLocation = path.toString();
String destName = path.getFileName().toString();
Node fileNode = document.createElement("file");
filesNode.appendChild(fileNode);
Node sourcesNode = document.createElement("source");
sourcesNode.setTextContent(sourceLocation);
fileNode.appendChild(sourcesNode);
Node outputDirNode = document.createElement("outputDirectory");
outputDirNode.setTextContent("lib");
fileNode.appendChild(outputDirNode);
Node destNameNode = document.createElement("destName");
destNameNode.setTextContent(destName);
fileNode.appendChild(destNameNode);
}
}
IMaven maven = MavenPlugin.getMaven();
ArtifactRepository repository = maven.getLocalRepository();
for (Dependency dependency : duplicateDependencies) {
if (((SortableDependency) dependency).isAssemblyOptional()) {
continue;
}
} catch (CoreException e) {
ExceptionHandler.process(e);
String sourceLocation = maven.getArtifactPath(repository, dependency.getGroupId(), dependency.getArtifactId(),
dependency.getVersion(), dependency.getType(), dependency.getClassifier());
Path path = new File(repository.getBasedir()).toPath().resolve(sourceLocation);
sourceLocation = path.toString();
String destName = path.getFileName().toString();
Node fileNode = document.createElement("file");
filesNode.appendChild(fileNode);
Node sourcesNode = document.createElement("source");
sourcesNode.setTextContent(sourceLocation);
fileNode.appendChild(sourcesNode);
Node outputDirNode = document.createElement("outputDirectory");
outputDirNode.setTextContent("lib");
fileNode.appendChild(outputDirNode);
Node destNameNode = document.createElement("destName");
destNameNode.setTextContent(destName);
fileNode.appendChild(destNameNode);
}
}

View File

@@ -18,12 +18,12 @@ import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import org.apache.maven.model.Build;
import org.apache.maven.model.Dependency;
import org.apache.maven.model.Model;
import org.apache.maven.model.Plugin;
import org.apache.maven.model.PluginExecution;
@@ -225,31 +225,41 @@ public class CreateMavenStandardJobOSGiPom extends CreateMavenJobPom {
@Override
protected void updateDependencySet(IFile assemblyFile) {
Map<String, Dependency> jobCoordinateMap = new HashMap<String, Dependency>();
Set<String> jobCoordinate = new HashSet<>();
if (!hasLoopDependency()) {
// add children jobs
Set<JobInfo> childrenJobInfo = getJobProcessor().getBuildChildrenJobs();
for (JobInfo jobInfo : childrenJobInfo) {
Property property = jobInfo.getProcessItem().getProperty();
String coordinate = getCoordinate(PomIdsHelper.getJobGroupId(property), PomIdsHelper.getJobArtifactId(jobInfo),
MavenConstants.PACKAGING_JAR, PomIdsHelper.getJobVersion(property));
Dependency dependency = getDependencyObject(PomIdsHelper.getJobGroupId(property), PomIdsHelper.getJobArtifactId(jobInfo), PomIdsHelper.getJobVersion(property),
MavenConstants.PACKAGING_JAR, null);
jobCoordinateMap.put(coordinate, dependency);
String bundle = "";
if (!jobInfo.isJoblet()) {
property = jobInfo.getProcessItem().getProperty();
if ("OSGI".equals(property.getAdditionalProperties().get(TalendProcessArgumentConstant.ARG_BUILD_TYPE))) {
bundle = "-bundle";
}
}
String coordinate = getCoordinate(
PomIdsHelper.getJobGroupId(property),
PomIdsHelper.getJobArtifactId(jobInfo) + bundle,
MavenConstants.PACKAGING_JAR,
PomIdsHelper.getJobVersion(property),
null);
jobCoordinate.add(coordinate);
}
}
// add parent job
Property parentProperty = this.getJobProcessor().getProperty();
String parentCoordinate = getCoordinate(PomIdsHelper.getJobGroupId(parentProperty),
PomIdsHelper.getJobArtifactId(parentProperty), MavenConstants.PACKAGING_JAR,
PomIdsHelper.getJobVersion(parentProperty));
Dependency parentDependency = getDependencyObject(PomIdsHelper.getJobGroupId(parentProperty), PomIdsHelper.getJobArtifactId(parentProperty), PomIdsHelper.getJobVersion(parentProperty),
MavenConstants.PACKAGING_JAR, null);
jobCoordinateMap.put(parentCoordinate, parentDependency);
// add current job
Property currentJobProperty = getJobProcessor().getProperty();
String parentCoordinate = getJobCoordinate(currentJobProperty);
jobCoordinate.add(parentCoordinate);
try {
Document document = PomUtil.loadAssemblyFile(null, assemblyFile);
// add jobs
setupDependencySetNode(document, jobCoordinateMap, null, "${artifact.build.finalName}.${artifact.extension}", true,
setupDependencySetNode(document, jobCoordinate, null, "${artifact.build.finalName}.${artifact.extension}",
true,
true);
PomUtil.saveAssemblyFile(assemblyFile, document);
} catch (Exception e) {

View File

@@ -260,6 +260,12 @@ public class PomIdsHelper {
return manager.getValue(MavenConstants.POM_FILTER);
}
public static boolean useProfileModule() {
String projectTechName = ProjectManager.getInstance().getCurrentProject().getTechnicalLabel();
ProjectPreferenceManager manager = getPreferenceManager(projectTechName);
return manager.getBoolean(MavenConstants.USE_PROFILE_MODULE);
}
private static String getGroupId(String projectTechName, String baseName, Property property) {
if (projectTechName == null) {
projectTechName = ProjectManager.getInstance().getCurrentProject().getTechnicalLabel();

View File

@@ -25,15 +25,16 @@ import java.io.IOException;
import java.io.InputStreamReader;
import java.security.SecureRandom;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.LinkedHashSet;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Properties;
import java.util.Set;
import java.util.stream.Collectors;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
@@ -81,6 +82,7 @@ import org.talend.core.model.properties.ProcessItem;
import org.talend.core.model.properties.Property;
import org.talend.core.model.relationship.Relation;
import org.talend.core.model.relationship.RelationshipItemBuilder;
import org.talend.core.model.repository.ERepositoryObjectType;
import org.talend.core.model.repository.IRepositoryViewObject;
import org.talend.core.model.utils.JavaResourcesHelper;
import org.talend.core.nexus.TalendMavenResolver;
@@ -96,6 +98,7 @@ import org.talend.designer.maven.template.MavenTemplateManager;
import org.talend.designer.maven.tools.AggregatorPomsHelper;
import org.talend.designer.maven.tools.ProcessorDependenciesManager;
import org.talend.designer.runprocess.IProcessor;
import org.talend.designer.runprocess.IRunProcessService;
import org.talend.repository.ProjectManager;
import org.talend.utils.xml.XmlUtils;
import org.w3c.dom.Attr;
@@ -136,6 +139,7 @@ public class PomUtil {
* copied the codes from createMavenModel of MavenModelManager
*/
ByteArrayOutputStream buf = new ByteArrayOutputStream();
sortModules(model);
MavenPlugin.getMaven().writeModel(model, buf);
ByteArrayInputStream source = new ByteArrayInputStream(buf.toByteArray());
@@ -157,6 +161,7 @@ public class PomUtil {
properties.putAll(model.getProperties());
model.setProperties(properties);
ByteArrayOutputStream buf = new ByteArrayOutputStream();
sortModules(model);
MavenPlugin.getMaven().writeModel(model, buf);
ByteArrayInputStream source = new ByteArrayInputStream(buf.toByteArray());
@@ -178,6 +183,17 @@ public class PomUtil {
}
}
public static void sortModules(Model model) {
if (model != null) {
List<String> modules = model.getModules();
if (modules != null && !modules.isEmpty()) {
List<String> sortedModules = new LinkedList<>(modules);
Collections.sort(sortedModules);
model.setModules(sortedModules);
}
}
}
private static void safeClose(Closeable stream) {
try {
if (stream != null) {
@@ -617,7 +633,9 @@ public class PomUtil {
File pomFile = new File(baseFolder, TalendMavenConstants.POM_FILE_NAME);
ByteArrayOutputStream buf = new ByteArrayOutputStream();
MavenPlugin.getMaven().writeModel(createModel(artifact), buf);
Model model = createModel(artifact);
sortModules(model);
MavenPlugin.getMaven().writeModel(model, buf);
DocumentBuilderFactory documentBuilderFactory = XmlUtils.getSecureDocumentBuilderFactory();
documentBuilderFactory.setNamespaceAware(false);
@@ -680,37 +698,20 @@ public class PomUtil {
*
* in order to make sure no compile error for editor, so add all needed dependencies always.
*/
public static Collection<Dependency> getCodesDependencies(IFile projectPomFile, String projectTechName) throws CoreException {
Map<String, Dependency> codesDependencies = new LinkedHashMap<>();
// routines
addCodeDependencies(codesDependencies, projectPomFile, TalendMavenConstants.DEFAULT_ROUTINES_ARTIFACT_ID,
MavenTemplateManager.getRoutinesTempalteModel(projectTechName));
// beans
addCodeDependencies(codesDependencies, projectPomFile, TalendMavenConstants.DEFAULT_BEANS_ARTIFACT_ID,
MavenTemplateManager.getBeansTempalteModel(projectTechName));
// pigudfs
addCodeDependencies(codesDependencies, projectPomFile, TalendMavenConstants.DEFAULT_PIGUDFS_ARTIFACT_ID,
MavenTemplateManager.getPigUDFsTempalteModel(projectTechName));
return codesDependencies.values();
}
private static void addCodeDependencies(Map<String, Dependency> codesDependencies, IFile projectPomFile, String pomName,
Model defaultModel) throws CoreException {
IFile routinesPomFile = projectPomFile.getProject().getFile(PomUtil.getPomFileName(pomName));
Model model = defaultModel;
if (routinesPomFile.exists()) {
model = MODEL_MANAGER.readMavenModel(routinesPomFile);
}
List<Dependency> dependencies = model.getDependencies();
for (Dependency d : dependencies) {
String mvnUrl = generateMvnUrl(d);
if (!codesDependencies.containsKey(mvnUrl)) {
codesDependencies.put(mvnUrl, d);
public static Set<Dependency> getCodesDependencies(ERepositoryObjectType codeType) {
if (GlobalServiceRegister.getDefault().isServiceRegistered(IRunProcessService.class)) {
IRunProcessService runProcessService = GlobalServiceRegister.getDefault().getService(IRunProcessService.class);
try {
Model model = MODEL_MANAGER.readMavenModel(runProcessService.getTalendCodeJavaProject(codeType).getProjectPom());
return model.getDependencies().stream().map(
d -> createDependency(d.getGroupId(), d.getArtifactId(), d.getVersion(), d.getType(), d.getClassifier()))
.peek(d -> ((SortableDependency) d).setAssemblyOptional(true)).collect(Collectors.toSet());
} catch (CoreException e) {
ExceptionHandler.process(e);
}
}
return Collections.emptySet();
}
public static List<String> getMavenCodesModules(IProcess process) {

View File

@@ -1,13 +1,79 @@
package org.talend.designer.maven.utils;
import org.apache.maven.artifact.versioning.ComparableVersion;
import org.apache.maven.model.Dependency;
public class SortableDependency extends Dependency implements Comparable<SortableDependency> {
private static final long serialVersionUID = -6295226523517981508L;
/**
* dependencies in testcase/routines/beans no need to be assembled in final zip.
*/
private boolean isAssemblyOptional;
@Override
public int compareTo(SortableDependency o) {
return getArtifactId().compareTo(o.getArtifactId());
int compare = getArtifactId().compareTo(o.getArtifactId());
if (compare == 0) {
// FIXME according to Maven official Doc for dependencies:
// https://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html
// when pom has duplicate version of dependencies, Maven should take the first one
// but in practice(maven 3.5.3 embedded), it always take the last one
// we only need job dependencies in final job zip rather than testcase's
// so we always put the latest job dependency at the bottom
// if maven fix it in future, we need to reverse the order as well.
if (isAssemblyOptional && !o.isAssemblyOptional) {
return -1;
}
if (!isAssemblyOptional && o.isAssemblyOptional) {
return 1;
}
return new ComparableVersion(getVersion()).compareTo(new ComparableVersion(o.getVersion()));
}
return compare;
}
public boolean isAssemblyOptional() {
return isAssemblyOptional;
}
public void setAssemblyOptional(boolean isAssemblyOptional) {
this.isAssemblyOptional = isAssemblyOptional;
}
@Override
public int hashCode() {
int result = 17;
result = 31 * result + (getGroupId() == null ? 0 : getGroupId().hashCode());
result = 31 * result + (getArtifactId() == null ? 0 : getArtifactId().hashCode());
result = 31 * result + (getVersion() == null ? 0 : getVersion().hashCode());
result = 31 * result + (getType() == null ? 0 : getType().hashCode());
result = 31 * result + (getClassifier() == null ? 0 : getClassifier().hashCode());
result = 31 * result + (isAssemblyOptional() ? 1231 : 1237);
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
if (obj == null) {
return false;
}
if (!(obj instanceof SortableDependency)) {
return false;
}
SortableDependency caseobj = (SortableDependency) obj;
return (getGroupId() == caseobj.getGroupId() || (getGroupId() != null && getGroupId().equals(caseobj.getGroupId())))
&& (getArtifactId() == caseobj.getArtifactId()
|| (getArtifactId() != null && getArtifactId().equals(caseobj.getArtifactId())))
&& (getVersion() == caseobj.getVersion() || (getVersion() != null && getVersion().equals(caseobj.getVersion())))
&& (getType() == caseobj.getType() || (getType() != null && getType().equals(caseobj.getType())))
&& (getClassifier() == caseobj.getClassifier()
|| (getClassifier() != null && getClassifier().equals(caseobj.getClassifier())))
&& (isAssemblyOptional() == caseobj.isAssemblyOptional());
}
}

View File

@@ -41,6 +41,7 @@ import org.talend.core.nexus.TalendLibsServerManager;
import org.talend.core.runtime.maven.MavenArtifact;
import org.talend.core.runtime.maven.MavenUrlHelper;
import org.talend.librariesmanager.i18n.Messages;
import org.talend.librariesmanager.model.service.LocalLibraryManager;
import org.talend.librariesmanager.nexus.utils.VersionUtil;
/**
@@ -121,6 +122,12 @@ public abstract class ShareLibrareisHelper {
if (artifact == null) {
continue;
}
// If from custom component definition file
if (LocalLibraryManager.isSystemCacheFile(file.getName())
|| (LocalLibraryManager.isComponentDefinitionFileType(file.getName())
&& isTalendLibraryGroupId(artifact))) {
continue;
}
try {
Integer.parseInt(artifact.getType());
// FIXME unexpected type if it's an integer, should fix it in component module definition.
@@ -142,7 +149,7 @@ public abstract class ShareLibrareisHelper {
}
}
if (artifactList != null && artifactList.size() > 0) {
if (isSameFileWithRemote(file, artifactList, customNexusServer)) {
if (isSameFileWithRemote(file, artifactList, customNexusServer, customerRepHandler, isSnapshotVersion)) {
continue;
}
}
@@ -173,6 +180,13 @@ public abstract class ShareLibrareisHelper {
}
private boolean isTalendLibraryGroupId(MavenArtifact artifact) {
if ("org.talend.libraries".equalsIgnoreCase(artifact.getGroupId())) {
return true;
}
return false;
}
public void putArtifactToMap(MavenArtifact artifact, Map<String, List<MavenArtifact>> map, boolean isShapshot) {
String key = getArtifactKey(artifact, isShapshot);
List<MavenArtifact> list = map.get(key);
@@ -199,15 +213,30 @@ public abstract class ShareLibrareisHelper {
}
private boolean isSameFileWithRemote(File localFile, List<MavenArtifact> artifactList,
ArtifactRepositoryBean customNexusServer) throws Exception {
ArtifactRepositoryBean customNexusServer, IRepositoryArtifactHandler customerRepHandler, boolean isSnapshotVersion)
throws Exception {
String localFileShaCode = DigestUtils.shaHex(new FileInputStream(localFile));
MavenArtifact lastUpdatedArtifact = null;
String remoteSha1 = null;
if (ArtifactRepositoryBean.NexusType.ARTIFACTORY.name().equalsIgnoreCase(customNexusServer.getType())) {
lastUpdatedArtifact = getLateUpdatedMavenArtifact(artifactList);
MavenArtifact lastUpdatedArtifact = getLateUpdatedMavenArtifact(artifactList);
if (lastUpdatedArtifact != null) {
remoteSha1 = lastUpdatedArtifact.getSha1();
}
} else if (ArtifactRepositoryBean.NexusType.NEXUS_3.name().equalsIgnoreCase(customNexusServer.getType())) {
MavenArtifact lastUpdatedArtifact = artifactList.stream().max(Comparator.comparing(e -> e.getVersion())).get();
if (lastUpdatedArtifact != null) {
remoteSha1 = lastUpdatedArtifact.getSha1();
}
} else {
lastUpdatedArtifact = artifactList.stream().max(Comparator.comparing(e -> e.getVersion())).get();
if (!isSnapshotVersion && !Boolean.getBoolean("force_libs_release_update")) {
return true;
}
MavenArtifact lastUpdatedArtifact = artifactList.get(0);
if (lastUpdatedArtifact != null) {
remoteSha1 = customerRepHandler.resolveRemoteSha1(lastUpdatedArtifact, !isSnapshotVersion);
}
}
if (lastUpdatedArtifact != null && StringUtils.equals(localFileShaCode, lastUpdatedArtifact.getSha1())) {
if (StringUtils.equals(localFileShaCode, remoteSha1)) {
return true;
}
return false;

View File

@@ -113,6 +113,18 @@ public class LocalLibraryManager implements ILibraryManagerService, IChangedLibr
private MavenArtifactsHandler deployer;
private static final List<String> COMPONENT_DEFINITION_FILE_TYPE_LIST = new ArrayList<String>() {
{
add(".javajet");
add(".png");
add(".jpg");
add("_java.xml");
add(".properties");
add(".txt");
}
};
/**
* DOC nrousseau LocalLibraryManager constructor comment.
*/
@@ -379,6 +391,24 @@ public class LocalLibraryManager implements ILibraryManagerService, IChangedLibr
return false;
}
public static boolean isComponentDefinitionFileType(String fileName) {
if (fileName != null) {
for (String type : COMPONENT_DEFINITION_FILE_TYPE_LIST) {
if (fileName.toLowerCase().endsWith(type)) {
return true;
}
}
}
return false;
}
public static boolean isSystemCacheFile(String fileName) {
if ("Thumbs.db".equals(fileName)) {
return true;
}
return false;
}
private File retrieveJarFromLocal(ModuleNeeded module) {
File jarFile = null;
Set<String> toResolve = guessMavenURI(module);
@@ -1224,7 +1254,10 @@ public class LocalLibraryManager implements ILibraryManagerService, IChangedLibr
saveMavenIndex(mavenURIMap, monitorWrap);
savePlatfromURLIndex(platformURLMap, monitorWrap);
if (service != null) {
deployLibsFromCustomComponents(service, platformURLMap);
}
}
/**
@@ -1293,6 +1326,41 @@ public class LocalLibraryManager implements ILibraryManagerService, IChangedLibr
continue;
}
}
}
private void deployLibsFromCustomComponents(IComponentsService service, Map<String, String> platformURLMap) {
Set<File> needToDeploy = new HashSet<>();
List<ComponentProviderInfo> componentsFolders = service.getComponentsFactory().getComponentsProvidersInfo();
for (ComponentProviderInfo providerInfo : componentsFolders) {
String id = providerInfo.getId();
try {
File file = new File(providerInfo.getLocation());
if ("org.talend.designer.components.model.UserComponentsProvider".equals(id)
|| "org.talend.designer.components.exchange.ExchangeComponentsProvider".equals(id)) {
if (file.isDirectory()) {
List<File> jarFiles = FilesUtils.getJarFilesFromFolder(file, null);
if (jarFiles.size() > 0) {
for (File jarFile : jarFiles) {
String name = jarFile.getName();
if (!canDeployFromCustomComponentFolder(name)
|| platformURLMap.get(name) != null) {
continue;
}
needToDeploy.add(jarFile);
}
}
} else {
if (platformURLMap.get(file.getName()) != null) {
continue;
}
needToDeploy.add(file);
}
}
} catch (Exception e) {
ExceptionHandler.process(e);
continue;
}
}
// deploy needed jars for User and Exchange component providers
if (!needToDeploy.isEmpty()) {
@@ -1328,6 +1396,13 @@ public class LocalLibraryManager implements ILibraryManagerService, IChangedLibr
}
}
private boolean canDeployFromCustomComponentFolder(String fileName) {
if (isSystemCacheFile(fileName) || isComponentDefinitionFileType(fileName)) {
return false;
}
return true;
}
private void warnDuplicated(List<ModuleNeeded> modules, Set<String> duplicates, String type) {
for (String lib : duplicates) {
Set<String> components = new HashSet<>();

View File

@@ -24,6 +24,7 @@ import org.talend.core.nexus.ArtifactRepositoryBean;
import org.talend.core.nexus.IRepositoryArtifactHandler;
import org.talend.core.nexus.NexusConstants;
import org.talend.core.nexus.TalendMavenResolver;
import org.talend.core.runtime.maven.MavenArtifact;
import org.talend.utils.string.StringUtilities;
/**
@@ -177,4 +178,10 @@ public abstract class AbstractArtifactRepositoryHandler implements IRepositoryAr
@Override
public abstract IRepositoryArtifactHandler clone();
@Override
public String resolveRemoteSha1(MavenArtifact artifact, boolean fromRelease) throws Exception {
return artifact.getSha1();
}
}

View File

@@ -137,5 +137,11 @@ public class Nexus2RepositoryHandler extends AbstractArtifactRepositoryHandler {
RepositorySystemFactory.deployWithPOM(content, pomFile, localRepository, repositoryId, repositoryurl,
serverBean.getUserName(), serverBean.getPassword(), groupId, artifactId, classifier, extension, version);
}
@Override
public String resolveRemoteSha1(MavenArtifact artifact, boolean fromRelease) throws Exception {
return NexusServerUtils.resolveSha1(serverBean.getServer(), serverBean.getUserName(), serverBean.getPassword(),
fromRelease ? serverBean.getRepositoryId() : serverBean.getSnapshotRepId(), artifact.getGroupId(),
artifact.getArtifactId(), artifact.getVersion(), artifact.getType());
}
}

View File

@@ -72,6 +72,8 @@ import org.talend.core.model.metadata.MetadataTalendType;
import org.talend.core.model.utils.ResourceModelHelper;
import org.talend.core.model.utils.XSDValidater;
import org.talend.core.repository.model.ProxyRepositoryFactory;
import org.talend.core.runtime.CoreRuntimePlugin;
import org.talend.core.runtime.projectsetting.ProjectPreferenceManager;
import org.talend.metadata.managment.ui.MetadataManagmentUiPlugin;
import org.talend.metadata.managment.ui.dialog.MappingFileCheckViewerDialog;
import org.talend.metadata.managment.ui.i18n.Messages;
@@ -543,12 +545,12 @@ public class MetadataTalendTypeEditor extends FieldEditor {
if (info != null) {
String id = null;
String infoName = info.fileName;
for (int i = 0; i < allDbms.length; i++) {
if (allDbms[i].getLabel().equalsIgnoreCase(infoName.substring(0, infoName.indexOf(".")).replace("_", " "))) { //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
id = allDbms[i].getId();
for (Dbms allDbm : allDbms) {
if (allDbm.getLabel().equalsIgnoreCase(infoName.substring(0, infoName.indexOf(".")).replace("_", " "))) { //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
id = allDbm.getId();
}
}
setSelectId(id); //$NON-NLS-1$
setSelectId(id);
}
}
}
@@ -569,7 +571,7 @@ public class MetadataTalendTypeEditor extends FieldEditor {
if (confirm) {
ICoreService coreService = null;
if (GlobalServiceRegister.getDefault().isServiceRegistered(ICoreService.class)) {
coreService = (ICoreService) GlobalServiceRegister.getDefault().getService(ICoreService.class);
coreService = GlobalServiceRegister.getDefault().getService(ICoreService.class);
coreService.syncMappingsFileFromSystemToProject();
tmpFileManager.reload();
}
@@ -686,6 +688,9 @@ public class MetadataTalendTypeEditor extends FieldEditor {
}
if (needReload) {
tmpFileManager.reload();
ProjectPreferenceManager manager = CoreRuntimePlugin.getInstance().getProjectPreferenceManager();
manager.setValue(MetadataTalendType.UPDATED_MAPPING_FILES, true);
manager.save();
}
}

View File

@@ -42,6 +42,7 @@ import org.talend.commons.utils.workbench.extensions.IExtensionPointLimiter;
import org.talend.core.database.EDatabase4DriverClassName;
import org.talend.core.database.EDatabaseTypeName;
import org.talend.core.database.conn.template.EDatabaseConnTemplate;
import org.talend.core.database.conn.version.EDatabaseVersion4Drivers;
import org.talend.core.model.metadata.IMetadataConnection;
import org.talend.core.model.metadata.IMetadataTable;
import org.talend.core.model.metadata.builder.ConvertionHelper;
@@ -334,12 +335,16 @@ public class ExtractMetaDataFromDataBase {
return connectionStatus;
}
}
if (EDatabaseTypeName.SYBASEASE == EDatabaseTypeName.getTypeFromDisplayName(dbType)) {
boolean exsitedSybaseDB = checkSybaseDB(connection, sidOrDatabase);
if (!exsitedSybaseDB) {
connectionStatus.setMessageException(
Messages.getString("ExtractMetaDataFromDataBase.DatabaseNoPresent", sidOrDatabase)); //$NON-NLS-1$
return connectionStatus;
String property = System.getProperty("disableCheckSybase16");//$NON-NLS-1$
Boolean disableCheckSybase16 = StringUtils.isEmpty(property) ? false : Boolean.valueOf(property);
if (!disableCheckSybase16) {
if (StringUtils.equals(EDatabaseVersion4Drivers.SYBASEIQ_16.getVersionValue(), dbVersionString)) {
boolean exsitedSybaseDB = checkSybaseDB(connection, sidOrDatabase);
if (!exsitedSybaseDB) {
connectionStatus.setMessageException(
Messages.getString("ExtractMetaDataFromDataBase.DatabaseNoPresent", sidOrDatabase)); //$NON-NLS-1$
return connectionStatus;
}
}
}

View File

@@ -50,6 +50,7 @@ import org.talend.commons.utils.database.EXASOLDatabaseMetaData;
import org.talend.commons.utils.database.JtdsDatabaseMetadata;
import org.talend.commons.utils.database.SAPHanaDataBaseMetadata;
import org.talend.commons.utils.database.SASDataBaseMetadata;
import org.talend.commons.utils.database.Sybase16SADatabaseMetaData;
import org.talend.commons.utils.database.SybaseDatabaseMetaData;
import org.talend.commons.utils.database.SybaseIQDatabaseMetaData;
import org.talend.commons.utils.database.TeradataDataBaseMetadata;
@@ -79,6 +80,7 @@ import org.talend.core.utils.TalendQuoteUtils;
import org.talend.designer.core.IDesignerCoreService;
import org.talend.metadata.managment.connection.manager.HiveConnectionManager;
import org.talend.metadata.managment.hive.EmbeddedHiveDataBaseMetadata;
import org.talend.metadata.managment.utils.MetadataConnectionUtils;
import org.talend.repository.ProjectManager;
import org.talend.utils.exceptions.MissingDriverException;
import org.talend.utils.sql.ConnectionUtils;
@@ -271,7 +273,10 @@ public class ExtractMetaDataUtils {
if (dbMetaData != null
&& EDatabaseTypeName.SYBASEIQ.getDisplayName().equals(dbMetaData.getDatabaseProductName())) {
dbMetaData = createSybaseIQFakeDatabaseMetaData(conn);
} else {
} else if(dbMetaData != null
&& EDatabaseTypeName.SYBASEASE_SA.getDisplayName().equals(dbMetaData.getDatabaseProductName())) {
dbMetaData = createSybase16SAFakeDatabaseMetaData(conn);
}else {
dbMetaData = createSybaseFakeDatabaseMetaData(conn);
}
} else if (EDatabaseTypeName.HIVE.getDisplayName().equals(dbType) && isHiveEmbeddedConn(conn)) {
@@ -422,6 +427,11 @@ public class ExtractMetaDataUtils {
SybaseDatabaseMetaData dmd = new SybaseDatabaseMetaData(conn);
return dmd;
}
private DatabaseMetaData createSybase16SAFakeDatabaseMetaData(Connection conn) throws SQLException {
SybaseDatabaseMetaData dmd = new Sybase16SADatabaseMetaData(conn);
return dmd;
}
private DatabaseMetaData createSybaseIQFakeDatabaseMetaData(Connection conn) throws SQLException {
SybaseIQDatabaseMetaData dmd = new SybaseIQDatabaseMetaData(conn);

View File

@@ -24,10 +24,12 @@ import java.util.Map;
import javax.xml.ws.BindingProvider;
import org.talend.core.GlobalServiceRegister;
import org.talend.core.classloader.ClassLoaderFactory;
import org.talend.core.classloader.DynamicClassLoader;
import org.talend.core.model.metadata.builder.connection.MDMConnection;
import org.talend.core.model.metadata.designerproperties.MDMVersions;
import org.talend.core.service.IMDMWebServiceHook;
import org.talend.core.utils.ReflectionUtils;
/**
@@ -36,6 +38,8 @@ import org.talend.core.utils.ReflectionUtils;
*/
public class S60MdmConnectionHelper extends AbsMdmConnectionHelper {
private IMDMWebServiceHook webServceHook;
/*
* (non-Javadoc)
*
@@ -57,18 +61,31 @@ public class S60MdmConnectionHelper extends AbsMdmConnectionHelper {
if (!newUrl.trim().endsWith("?wsdl")) {
newUrl = newUrl + "?wsdl";
}
Object serviceService = ReflectionUtils.newInstance("org.talend.mdm.webservice.TMDMService_Service", classLoader,
new Object[] { new URL(newUrl) });
Object invokeMethod = ReflectionUtils.invokeMethod(serviceService, "getTMDMPort", new Object[0]);
if (invokeMethod instanceof BindingProvider) {
stub = (BindingProvider) invokeMethod;
Map<String, Object> requestContext = stub.getRequestContext();
requestContext.put(javax.xml.ws.BindingProvider.SESSION_MAINTAIN_PROPERTY, false);
requestContext.put(javax.xml.ws.BindingProvider.USERNAME_PROPERTY, userName);
requestContext.put(javax.xml.ws.BindingProvider.PASSWORD_PROPERTY, password);
Object wsping = ReflectionUtils.newInstance("org.talend.mdm.webservice.WSPing", classLoader, new Object[0]);
ReflectionUtils.invokeMethod(stub, "ping", new Object[] { wsping });
ClassLoader oldContextClassLoader = Thread.currentThread().getContextClassLoader();
try {
Class<?> tMDMService_ServiceClass = Class.forName("org.talend.mdm.webservice.TMDMService_Service", true, classLoader);
Thread.currentThread().setContextClassLoader(tMDMService_ServiceClass.getClassLoader());
Object serviceService = ReflectionUtils.newInstance("org.talend.mdm.webservice.TMDMService_Service", classLoader,
new Object[] { new URL(newUrl) });
Object invokeMethod = ReflectionUtils.invokeMethod(serviceService, "getTMDMPort", new Object[0]);
if (invokeMethod instanceof BindingProvider) {
stub = (BindingProvider) invokeMethod;
Map<String, Object> requestContext = stub.getRequestContext();
requestContext.put(javax.xml.ws.BindingProvider.SESSION_MAINTAIN_PROPERTY, false);
requestContext.put(javax.xml.ws.BindingProvider.USERNAME_PROPERTY, userName);
requestContext.put(javax.xml.ws.BindingProvider.PASSWORD_PROPERTY, password);
IMDMWebServiceHook wsHook = getWebServiceHook();
if (wsHook != null) {
wsHook.preRequestSendingHook(requestContext, userName);
}
Object wsping = ReflectionUtils.newInstance("org.talend.mdm.webservice.WSPing", classLoader, new Object[0]);
ReflectionUtils.invokeMethod(stub, "ping", new Object[] { wsping });
}
} finally {
Thread.currentThread().setContextClassLoader(oldContextClassLoader);
}
return stub;
}
@@ -99,6 +116,13 @@ public class S60MdmConnectionHelper extends AbsMdmConnectionHelper {
}
private IMDMWebServiceHook getWebServiceHook() {
if (webServceHook == null && GlobalServiceRegister.getDefault().isServiceRegistered(IMDMWebServiceHook.class)) {
webServceHook = GlobalServiceRegister.getDefault().getService(IMDMWebServiceHook.class);
}
return webServceHook;
}
/*
* (non-Javadoc)
*

View File

@@ -37,11 +37,13 @@ import org.talend.commons.exception.ExceptionHandler;
import org.talend.commons.utils.data.list.ListUtils;
import org.talend.commons.utils.database.AS400DatabaseMetaData;
import org.talend.commons.utils.database.DB2ForZosDataBaseMetadata;
import org.talend.commons.utils.database.Sybase16SADatabaseMetaData;
import org.talend.commons.utils.database.SybaseDatabaseMetaData;
import org.talend.commons.utils.database.TeradataDataBaseMetadata;
import org.talend.core.ICoreService;
import org.talend.core.database.EDatabase4DriverClassName;
import org.talend.core.database.EDatabaseTypeName;
import org.talend.core.database.conn.version.EDatabaseVersion4Drivers;
import org.talend.core.model.metadata.IMetadataConnection;
import org.talend.core.model.metadata.MappingTypeRetriever;
import org.talend.core.model.metadata.MetadataTalendType;
@@ -252,7 +254,7 @@ public class DBConnectionFillerImpl extends MetadataFillerImpl<DatabaseConnectio
IMetadataConnection metaConnection, List<String> schemaFilter) {
List<Schema> returnSchemas = new ArrayList<Schema>();
if (dbJDBCMetadata == null || (dbConn != null && ConnectionHelper.getCatalogs(dbConn).size() > 0)
|| ConnectionUtils.isSybase(dbJDBCMetadata)) {
|| ConnectionUtils.isSybase(dbJDBCMetadata)) {
return null;
}
ResultSet schemas = null;
@@ -443,9 +445,16 @@ public class DBConnectionFillerImpl extends MetadataFillerImpl<DatabaseConnectio
return catalogList;
}
ResultSet catalogNames = null;
if (dbJDBCMetadata instanceof SybaseDatabaseMetaData) {
// Whether in context mode or not, metaConnection can get the correct username always
catalogNames = ((SybaseDatabaseMetaData) dbJDBCMetadata).getCatalogs(metaConnection.getUsername());
if (dbJDBCMetadata instanceof Sybase16SADatabaseMetaData) {
String username = metaConnection == null ? dbConn.getUsername() : metaConnection.getUsername();
String database = metaConnection == null ? dbConn.getSID() : metaConnection.getDatabase();
catalogNames = ((Sybase16SADatabaseMetaData) dbJDBCMetadata).getCatalogs(username, database);
} else if (dbJDBCMetadata instanceof SybaseDatabaseMetaData) {
// Whether in context mode or not, metaConnection can get the correct username
// always
String username = metaConnection == null ? dbConn.getUsername() : metaConnection.getUsername();
catalogNames = ((SybaseDatabaseMetaData) dbJDBCMetadata).getCatalogs(username);
} else {
catalogNames = dbJDBCMetadata.getCatalogs();
}

View File

@@ -576,13 +576,24 @@ public class MetadataConnectionUtils {
return false;
}
public static boolean isSybase16SA(IMetadataConnection connectionMetadata) throws SQLException {
boolean isSybase16SA = false;
if(connectionMetadata!=null) {
String dbVersionString = connectionMetadata.getDbVersionString();
isSybase16SA = StringUtils.equals(EDatabaseVersion4Drivers.SYBASEIQ_16_SA.getVersionValue(),
dbVersionString);
}
return isSybase16SA;
}
/**
* yyi 2010-08-25 for 14851, Sybase DB has several names with different productions and versions. For example the
* Sybase IQ with version 12.6 is called 'Sybase' getting by JDBC but the version 15+ it is changed to 'Sybase IQ'.
* it is user by org.talend.cwm.db.connection.ConnectionUtils.isSybase
* yyi 2010-08-25 for 14851, Sybase DB has several names with different
* productions and versions. For example the Sybase IQ with version 12.6 is
* called 'Sybase' getting by JDBC but the version 15+ it is changed to 'Sybase
* IQ'. it is user by org.talend.cwm.db.connection.ConnectionUtils.isSybase
*
* @return All Sybase DB products name
* ,"Adaptive Server Enterprise","Sybase Adaptive Server IQ","Sybase IQ","Sybase"
* @return All Sybase DB products name ,"Adaptive Server Enterprise","Sybase
* Adaptive Server IQ","Sybase IQ","Sybase"
*/
public static String[] getSybaseDBProductsName() {
if (null == sybaseDBProductsNames) {

View File

@@ -29,6 +29,7 @@ import org.talend.core.PluginChecker;
import org.talend.core.hadoop.IHadoopClusterService;
import org.talend.core.hadoop.repository.HadoopRepositoryUtil;
import org.talend.core.model.properties.Item;
import org.talend.core.model.properties.ItemState;
import org.talend.core.model.properties.Project;
import org.talend.core.model.repository.ERepositoryObjectType;
import org.talend.core.ui.ITestContainerProviderService;
@@ -234,9 +235,12 @@ public class ImportNodesBuilder {
parentImportNode = findAndCreateFolderNode(typeImportNode, path);
parentImportNode.setItemRecord(itemRecord);
} else {
String path = item.getState().getPath();
if (StringUtils.isNotEmpty(path)) { // if has path, will find the real path node.
parentImportNode = findAndCreateFolderNode(typeImportNode, new Path(path));
ItemState state = item.getState();
if (state != null) {
String path = state.getPath();
if (StringUtils.isNotEmpty(path)) { // if has path, will find the real path node.
parentImportNode = findAndCreateFolderNode(typeImportNode, new Path(path));
}
}
ItemImportNode itemNode = new ItemImportNode(itemRecord);
parentImportNode.addChild(itemNode);

View File

@@ -28,6 +28,7 @@ import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.Set;
import org.apache.commons.collections.keyvalue.MultiKey;
@@ -899,6 +900,14 @@ public class LocalRepositoryFactory extends AbstractEMFRepositoryFactory impleme
}
}
/**
* Avoid conflicts between different timezone
*/
Optional.ofNullable(project).map(p -> p.getEmfProject()).ifPresent(p -> {
p.setCreationDate(null);
p.setDeleteDate(null);
});
xmiResourceManager.saveResource(projectResource);
project.getEmfProject().getMigrationTask().addAll(realMigrationTaskList);
ProjectDataJsonProvider.saveProjectData(project.getEmfProject());
@@ -3066,7 +3075,7 @@ public class LocalRepositoryFactory extends AbstractEMFRepositoryFactory impleme
public void createUser(Project project) throws PersistenceException {
Resource projectResource = project.getEmfProject().eResource();
projectResource.getContents().add(getRepositoryContext().getUser());
xmiResourceManager.saveResource(projectResource);
saveProject(project);
}
@Override

View File

@@ -16,6 +16,8 @@ import java.io.File;
import java.io.IOException;
import java.util.Collection;
import java.util.List;
import java.util.Dictionary;
import java.util.Hashtable;
import org.apache.commons.lang3.StringUtils;
import org.eclipse.core.runtime.IProgressMonitor;
@@ -28,6 +30,7 @@ import org.talend.core.nexus.IRepositoryArtifactHandler;
import org.talend.core.nexus.RepositoryArtifactHandlerManager;
import org.talend.core.nexus.TalendMavenResolver;
import org.talend.core.runtime.maven.MavenArtifact;
import org.talend.core.runtime.services.IMavenUIService;
import org.talend.updates.runtime.feature.model.Type;
import org.talend.updates.runtime.model.interfaces.ITaCoKitCarFeature;
import org.talend.updates.runtime.service.ITaCoKitUpdateService;
@@ -217,7 +220,15 @@ public class ComponentsDeploymentManager {
artifactRepisotory.setRepositoryId(repositoryId);
if (repositoryHandler == null) {
repositoryHandler = RepositoryArtifactHandlerManager.getRepositoryHandler(artifactRepisotory);
repositoryHandler.updateMavenResolver(TalendMavenResolver.COMPONENT_MANANGER_RESOLVER, null);
Dictionary<String, String> properties = new Hashtable<String, String>();
if (GlobalServiceRegister.getDefault().isServiceRegistered(IMavenUIService.class)) {
IMavenUIService mavenUIService = (IMavenUIService) GlobalServiceRegister.getDefault()
.getService(IMavenUIService.class);
if (mavenUIService != null) {
properties = mavenUIService.getTalendMavenSetting();
}
}
repositoryHandler.updateMavenResolver(TalendMavenResolver.COMPONENT_MANANGER_RESOLVER, properties);
}
return repositoryHandler;
}

View File

@@ -71,21 +71,6 @@ public class VersionUtilsTest {
assertEquals(talendVersion, VersionUtils.getMojoVersion("ci.builder.version"));
}
@Test
public void testGetPluginVersion__MojoProperties() throws Exception {
String talendVersion = VersionUtils.getTalendVersion();
assertEquals(talendVersion + "-SNAPSHOT", VersionUtils.getMojoVersion("ci.builder.version"));
if (mojo_properties.exists()) {
mojo_properties.delete();
}
mojo_properties.createNewFile();
setPropertiesValue(mojo_properties, "ci.builder.version", talendVersion + "-patch1");
assertEquals(talendVersion + "-patch1", VersionUtils.getMojoVersion("ci.builder.version"));
setPropertiesValue(mojo_properties, "ci.builder.version", "6.0.0");
assertEquals(talendVersion + "-SNAPSHOT", VersionUtils.getMojoVersion("ci.builder.version"));
}
private void setPropertiesValue(File propertiesFile, String key, String value) throws Exception {
Properties properties = new Properties();
properties.setProperty(key, value);

View File

@@ -21,8 +21,10 @@ import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
import org.apache.maven.model.Model;
import org.apache.maven.model.Profile;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IFolder;
import org.eclipse.core.resources.IProject;
@@ -280,9 +282,43 @@ public class AggregatorPomsHelperTest {
}
};
_helper.updateRefProjectModules(references);
validatePomContent(helper.getProjectRootPom().getLocation().toFile(), defaultProjectGroupId, defaultProjectVersion,
modules);
_helper.updateRefProjectModules(references, new NullProgressMonitor());
validatePomContent(helper.getProjectRootPom().getLocation().toFile(), defaultProjectGroupId, null, defaultProjectVersion,
null, model.getModules(), null);
}
@Test
public void testUpdateRefProjectProfile() throws Exception {
needResetPom = true;
List<ProjectReference> references = new ArrayList<>();
{
ProjectReference reference = PropertiesFactory.eINSTANCE.createProjectReference();
Project project = PropertiesFactory.eINSTANCE.createProject();
project.setTechnicalLabel("TESTPROJECT1");
reference.setReferencedProject(project);
references.add(reference);
}
{
ProjectReference reference = PropertiesFactory.eINSTANCE.createProjectReference();
Project project = PropertiesFactory.eINSTANCE.createProject();
project.setTechnicalLabel("TESTPROJECT2");
reference.setReferencedProject(project);
references.add(reference);
}
AggregatorPomsHelper _helper = new AggregatorPomsHelper() {
@Override
public boolean needUpdateRefProjectModules() {
return true;
}
};
ProjectPreferenceManager preferenceManager = new ProjectPreferenceManager(
ProjectManager.getInstance().getCurrentProject(), DesignerMavenPlugin.PLUGIN_ID, false);
preferenceManager.setValue(MavenConstants.USE_PROFILE_MODULE, true);
_helper.updateRefProjectModules(references, new NullProgressMonitor());
validatePomContent(helper.getProjectRootPom().getLocation().toFile(), defaultProjectGroupId, null, defaultProjectVersion,
null, null, references);
}
/**
@@ -310,17 +346,17 @@ public class AggregatorPomsHelperTest {
// check project pom.
IFile projectPomFile = new AggregatorPomsHelper().getProjectRootPom();
validatePomContent(projectPomFile.getLocation().toFile(), projectGroupId, projectVersion, modules);
validatePomContent(projectPomFile.getLocation().toFile(), projectGroupId, null, projectVersion, null, modules, null);
// check project pom install result.
File installedProjectPom = getInstalledFileFromLocalRepo(projectGroupId,
TalendMavenConstants.DEFAULT_CODE_PROJECT_ARTIFACT_ID, projectVersion, MavenConstants.PACKAGING_POM);
validatePomContent(installedProjectPom, projectGroupId, projectVersion, modules);
validatePomContent(installedProjectPom, projectGroupId, null, projectVersion, null, modules, null);
// check routine pom.
IFile routinePomFile = runProcessService.getTalendCodeJavaProject(ERepositoryObjectType.ROUTINES).getProjectPom();
String routineGroupId = PomIdsHelper.getCodesGroupId("code");
String routineVersion = PomIdsHelper.getCodesVersion();
validatePomContent(routinePomFile.getLocation().toFile(), routineGroupId, routineVersion);
validatePomContent(routinePomFile.getLocation().toFile(), routineGroupId, null, routineVersion, null, null, null);
// check routine install result.
File installedRoutinePom = getInstalledFileFromLocalRepo(routineGroupId,
@@ -329,7 +365,7 @@ public class AggregatorPomsHelperTest {
// check job pom.
IFile jobPomFile = runProcessService.getTalendJobJavaProject(jobProperty).getProjectPom();
validatePomContent(jobPomFile.getLocation().toFile(), jobGroupId, projectGroupId, jobVersion, projectVersion, null);
validatePomContent(jobPomFile.getLocation().toFile(), jobGroupId, projectGroupId, jobVersion, projectVersion, null, null);
}
@Test
@@ -347,19 +383,11 @@ public class AggregatorPomsHelperTest {
IFile jobPomFile = runProcessService.getTalendJobJavaProject(jobProperty).getProjectPom();
validatePomContent(jobPomFile.getLocation().toFile(), customJobGroupId, defaultProjectGroupId, customJobVersion,
defaultProjectVersion, null);
}
private void validatePomContent(File pomFile, String groupId, String version) throws CoreException {
validatePomContent(pomFile, groupId, null, version, null, null);
}
private void validatePomContent(File pomFile, String groupId, String version, List<String> modules) throws CoreException {
validatePomContent(pomFile, groupId, null, version, null, modules);
defaultProjectVersion, null, null);
}
private void validatePomContent(File pomFile, String groupId, String parentGroupId, String version, String parentVersion,
List<String> modules)
List<String> modules, List<ProjectReference> references)
throws CoreException {
Model model = MavenPlugin.getMaven().readModel(pomFile);
assertEquals(groupId, model.getGroupId());
@@ -376,6 +404,25 @@ public class AggregatorPomsHelperTest {
for (String module : modules) {
assertTrue(currentModules.contains(module));
}
} else {
assertEquals(0, model.getModules().stream().filter(module -> module.startsWith("../../")).count());
}
if (references != null) {
if (PomIdsHelper.useProfileModule()) {
List<Profile> refProjectProfiles = model.getProfiles().stream()
.filter(profile -> AggregatorPomsHelper.matchModuleProfile(profile.getId(), projectTechName))
.collect(Collectors.toList());
assertEquals(references.size(), refProjectProfiles.size());
references.forEach(reference -> {
String profileId = (projectTechName + "_" + reference.getReferencedProject().getTechnicalLabel())
.toLowerCase();
assertTrue(refProjectProfiles.stream().anyMatch(profile -> profile.getId().equals(profileId)));
});
}
} else {
assertEquals(0, model.getProfiles().stream()
.filter(profile -> AggregatorPomsHelper.matchModuleProfile(profile.getId(), projectTechName)).count());
}
}
@@ -428,6 +475,7 @@ public class AggregatorPomsHelperTest {
projectPreferenceManager.setValue(MavenConstants.PROJECT_VERSION, defaultProjectVersion);
projectPreferenceManager.setValue(MavenConstants.NAME_PUBLISH_AS_SNAPSHOT, defaultUseSnapshot);
projectPreferenceManager.setValue(MavenConstants.POM_FILTER, "");
projectPreferenceManager.setValue(MavenConstants.USE_PROFILE_MODULE, false);
// reset all poms.
if (needResetPom) {
helper.syncAllPomsWithoutProgress(new NullProgressMonitor());

View File

@@ -0,0 +1,79 @@
// ============================================================================
//
// Copyright (C) 2006-2020 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.metadata.managment.mdm;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyString;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.ArgumentMatchers.same;
import static org.mockito.Mockito.times;
import java.net.URL;
import java.util.HashMap;
import java.util.Map;
import javax.xml.ws.BindingProvider;
import org.apache.log4j.Logger;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mockito;
import org.powermock.api.mockito.PowerMockito;
import org.powermock.core.classloader.annotations.PowerMockIgnore;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.junit4.PowerMockRunner;
import org.talend.core.GlobalServiceRegister;
import org.talend.core.service.IMDMWebServiceHook;
import org.talend.core.utils.ReflectionUtils;
@RunWith(PowerMockRunner.class)
@PrepareForTest({ ReflectionUtils.class, Logger.class, GlobalServiceRegister.class })
@PowerMockIgnore({ "javax.crypto.*", "org.eclipse.osgi.*" })
public class S60MdmConnectionHelperTest {
@Test
public void testCheckConnection() throws Exception {
final String username = "username";
final String password = "password";
final String serverUrl = "http://localhost:8180/talendmdm/services?wsdl";
// mock BindingProvider
Map<String, Object> requestContext = new HashMap<>();
BindingProvider mockStub = Mockito.mock(BindingProvider.class);
Mockito.when(mockStub.getRequestContext()).thenReturn(requestContext);
PowerMockito.mockStatic(ReflectionUtils.class);
Object mockServiceService = PowerMockito.mock(Object.class);
PowerMockito
.when(ReflectionUtils.newInstance("org.talend.mdm.webservice.TMDMService_Service",
getClass().getClassLoader(), new Object[] { new URL(serverUrl) }))
.thenReturn(mockServiceService);
PowerMockito.when(ReflectionUtils.class, "invokeMethod", same(mockServiceService), eq("getTMDMPort"), any(Object[].class),
any(Class[].class))
.thenReturn(mockStub);
// mock IMDMWebServiceHook
IMDMWebServiceHook mockWebServiceHook = Mockito.mock(IMDMWebServiceHook.class);
PowerMockito.mockStatic(GlobalServiceRegister.class);
GlobalServiceRegister mockGlobalServiceRegister = PowerMockito.mock(GlobalServiceRegister.class);
PowerMockito.when(GlobalServiceRegister.getDefault()).thenReturn(mockGlobalServiceRegister);
PowerMockito.when(GlobalServiceRegister.getDefault().isServiceRegistered(IMDMWebServiceHook.class)).thenReturn(true);
PowerMockito.when(GlobalServiceRegister.getDefault().getService(IMDMWebServiceHook.class)).thenReturn(mockWebServiceHook);
// call & verify
S60MdmConnectionHelper helper = new S60MdmConnectionHelper();
helper.checkConnection(serverUrl, null, username, password);
Mockito.verify(mockWebServiceHook, times(1)).preRequestSendingHook(any(Map.class), anyString());
}
}