Compare commits

...

48 Commits

Author SHA1 Message Date
zyuan-talend
c7fb9616ff Revert "fix(TUP-39924): upgrade org.codehaus.plexus:plexus-archiver to 4.8.0,plexus-io to 3.4.1 , maven-assembly-plugin to 3.6.0 and plexus-util to 4.0.0 for incompatibility.. (#6356)" (#6458)
This reverts commit 6665603efc.
2023-10-12 15:57:03 +08:00
apoltavtsev
74944201c7 APPINT-35122: Incorrect routelet module inside root pom is corrected (#6457) 2023-10-11 16:19:17 +02:00
apoltavtsev
f1ba902b6e APPINT-35949: [731] Compile error for CI+route+routelet (#6450)
* APPINT-35949: [731] Compile error for CI+route+routelet

* Update SyncChildrenSourceCodeProvider.java

* Update SyncChildrenTestReportsProvider.java

* Update SyncChildrenContextsResourcesProvider.java

* Update SyncChildrenSourceCodeProvider.java

* Update SyncChildrenContextsResourcesProvider.java

* Update SyncChildrenSourceCodeProvider.java

* Update SyncChildrenTestReportsProvider.java
2023-10-09 17:31:26 +02:00
apoltavtsev
984814d620 APPINT-35418: Refer to wrong route in blueprint.xml when two routes use same routelet and deploy by CI (#6433) 2023-10-05 16:06:31 +02:00
Fabien Désiles
bbc6e17412 chore(TDI-50354): Bump Connectors 1.27.26 in Studio 7.3 (#6438)
https://jira.talendforge.org/browse/TDI-50354
2023-10-02 17:35:54 +02:00
zyuan-talend
6665603efc fix(TUP-39924): upgrade org.codehaus.plexus:plexus-archiver to 4.8.0,plexus-io to 3.4.1 , maven-assembly-plugin to 3.6.0 and plexus-util to 4.0.0 for incompatibility.. (#6356)
* fix(TUP-39924): upgrade org.codehaus.plexus:plexus-archiver to 4.8.0,
plexus-io to 3.4.1 , maven-assembly-plugin to 3.6.0 and plexus-util to
4.0.0 for incompatibility.

* fix(TUP-39924): plexus-archiver:3.6.0/4.2.0/4.2.1/4.2.2 |
CVE-2023-37460.
2023-09-21 16:30:44 +08:00
Emmanuel GALLOIS
ae1b013c5f feat(TDI-50266): bump component-runtime to 1.38.11 (#6409) 2023-09-20 10:54:58 +02:00
Emmanuel GALLOIS
8b0ea868e9 feat(TDI-48822): bump component-runtime to 1.38.10 (#6381) 2023-09-12 10:59:26 +02:00
pyzhou
1a24f07710 fix(TDI-50189) Upgrade tck in studio 7.3 (#6359) 2023-08-16 14:58:20 +08:00
jiezhang-tlnd
43cdc97d1e fix junit (#6331)
* fix junit

* fix junit
2023-07-31 23:13:08 +08:00
jiezhang-tlnd
f1c40a3920 fix auto test (#6319) 2023-07-26 16:12:30 +08:00
jiezhang-tlnd
b47a7b2067 chore(TUP-39647)CVE-2017-1000487,plexus-utils-3.0.8 (#6305)
* chore(TUP-39647)CVE-2017-1000487,plexus-utils-3.0.8
https://jira.talendforge.org/browse/TUP-39647

* update to 2.22.2

* add surefire-api and surefire-booter

* keep 2.12.4

* update to 2.22.2

* update m2 from plugin

* code format

* code format

* rename pom

* code format

* add resouce module

* change to tos

* add repository

* remvoe resourse folder

* remove source folder

* install dependency

* code format

* code format
2023-07-24 16:26:44 +08:00
zyuan-talend
7c8614b4ac fix(TUP-39467): CVE-2022-29599,maven-shared-utils:0.9.0. (#6272) 2023-06-29 14:38:41 +08:00
jzhao
baacc284fd chore(TDI-49988):bump TCK connector 1.27.24 for R2023-07 (#6263) 2023-06-25 19:22:28 +08:00
sbliu
9d0fdc4532 chore(TUP-39233) upgrade json-smart, accessors-smart to 2.4.11 (#6217) 2023-06-20 16:19:35 +08:00
Zhiwei Xue
f3ad09604f fix(TUP-38235):Job in a project that references other projects load very (#6240)
slowly in Studio
2023-06-20 09:47:52 +08:00
jzhao
4615ebdb75 chore(TDI-49841):bump TCK connector 1.27.23 for R2023-06 (#6198) 2023-05-22 11:37:34 +08:00
msjian
5616d65272 fix(TDQ-21121): upgrade snowflake connection driver (#6141) 2023-05-11 15:09:00 +08:00
Abdulhamid Rashankar
ca85dd4b73 APPINT-35490:App & API Integration - Studio Metrics gathering: build types & APIs usage (#6159) 2023-05-02 14:07:02 +02:00
sbliu
11d3c32066 chore(TUP-38551) json-smart:2.4.7 ( CVE-2023-1370) (#6097)
* chore(TUP-38551) json-smart:2.4.7 ( CVE-2023-1370)

* update json-smart version 2.4.10 to 2.4.9

* update maven url index for upgrade json-smart
2023-04-26 10:28:20 +08:00
wang wei
a866707aae fix(TDI-49452): CVE-2022-45143,org.apache.tomcat:tomcat-catalina:9.0.68 (#6122) 2023-04-24 15:35:21 +08:00
wang wei
53e052989f fix(TDI-49546): CVE-2022-45688, org.json:json:(<=20220924) (#6065) 2023-04-24 14:08:06 +08:00
jzhao
f52c747409 chore(TDI-49727):Bump TCK connector 1.27.22 for R2023-05 (#6139) 2023-04-23 12:04:10 +08:00
Zhiwei Xue
6d36ff79bb fix(TUP-38316):[801 CI/CD] Duplicate Parameter error in the artifact and (#6081)
creating the task
2023-04-20 18:33:36 +08:00
Jane Ding
c362aa776c fix(TUP-37227):Issue building when items names too long (#6067)
https://jira.talendforge.org/browse/TUP-37227
2023-03-30 18:15:46 +08:00
vyu-talend
318724d32c chore(TDI-49458):bump file enhanced. (#6077) 2023-03-30 16:21:46 +08:00
Oleksandr Zhelezniak
4b377af1aa chore(TDI-49600): bump connectors 1.27.21 2023-03-24 15:09:35 +02:00
Jane Ding
695dcba405 Revert "fix(TUP-37227):Issue building when items names too long (#5941)" (#6019)
This reverts commit 8d3832fdfb.
2023-03-02 09:44:55 +08:00
jiezhang-tlnd
4dc7e4e82f fix(TUP-37874)SQL inject risk (#6009) 2023-02-23 15:13:01 +08:00
jiezhang-tlnd
4c819add92 fix(TUP-37874)SQL inject risk (#5970)
* fix(TUP-37874)SQL inject risk

* SQL inject risk
2023-02-22 18:18:23 +08:00
zyuan-talend
9c0f5e966d fix(TUP-35060): tWarn does not show the TalendDate.TO_CHAR method. (#5969) 2023-02-21 17:45:05 +08:00
Oleksandr Zhelezniak
da5b7979fd chore(TDI-49419): bump connectors 1.27.20 2023-02-16 17:14:14 +02:00
Jane Ding
8d3832fdfb fix(TUP-37227):Issue building when items names too long (#5941)
* fix(TUP-37227):Issue building when items names too long
https://jira.talendforge.org/browse/TUP-37227

* fix(TUP-37227):Issue building when items names too long
https://jira.talendforge.org/browse/TUP-37227

* fix(TUP-37227):Issue building when items names too long
https://jira.talendforge.org/browse/TUP-37227

* fix(TUP-37227):Issue building when items names too long
https://jira.talendforge.org/browse/TUP-37227
2023-02-15 18:01:04 +08:00
bhe-talendbj
cd8ff90b5b fix(TUP-37920): fix sqllite retrieve tables (#5960) 2023-02-06 17:23:42 +08:00
bhe-talendbj
d98e5ea43c fix(TUP-37425): Performance: Not Responding while Retrieving schema and the database contains many tables (#5948)
* fix(TUP-37425): fix retrieve schema

* fix(TUP-37425): check NPE
2023-01-30 19:38:12 +08:00
AlixMetivier
13b57c8823 fix(TBD-14720): fix hadoop conf jar not found with context metadata (#5932) 2023-01-18 09:30:58 +01:00
bhe-talendbj
0436bc8dd2 chore: fix junit exe resolve (#5936) (#5939)
* chore: fix exe resolve

* chore: revert unnecessay changes

* chore: remove exe dependency test
2023-01-17 18:04:28 +08:00
pyzhou
091de02e75 fix(TDI-49256) Upgrade tck in studio 7.3 (#5933) 2023-01-16 21:21:40 +08:00
bhe-talendbj
eb84dfe75d bugfix(TUP-37425): Performance: Not Responding while Retrieving schema and the database contains many tables (#5929)
* fix(TUP-37425): retrieve table comment once

* fix(TUP-37425): add busy indicator

* fix(TUP-37425): fix UI responsiveness
2023-01-16 19:26:41 +08:00
bhe-talendbj
a7dd89cc3a fix(TUP-37723): Patch Installation: Need restart to generate correct jar version in pom after new patch has been installed (#5914)
* fix(TUP-37723): do not load dropped extensions

* fix(TUP-37723): fix dependencies
2023-01-16 11:19:55 +08:00
pyzhou
211abcac09 fix(TDI-49150) Upgrade tck in studio 7.3 (#5901) 2022-12-30 15:09:18 +08:00
jiezhang-tlnd
089f43ccd4 chore(TUP-37524)CVE-2022-46364,org.apache.cxf:cxf-core:3.4.4,3.5.2 (#5877) 2022-12-29 11:09:38 +08:00
Jane Ding
d008463ef1 fix(TUP-37467):[8.0.1&7.3.1] custom component are no more build as (#5882)
* fix(TUP-37467):[8.0.1&7.3.1] custom component are no more build as
snapshot but releases since june/july patch
https://jira.talendforge.org/browse/TUP-37467

* fix(TUP-37467):[8.0.1&7.3.1] custom component are no more build as
snapshot but releases since june/july patch
https://jira.talendforge.org/browse/TUP-37467
2022-12-28 17:40:50 +08:00
wang wei
d7ed643621 fix(TDI-48822): Bump component-runtime to 1.38.8 in Studio 7.3.1 (#5896) 2022-12-28 13:58:56 +08:00
pyzhou
0972593afd fix(TDI-49113) Upgrade tck in studio 7.3 (#5894) 2022-12-26 16:22:24 +08:00
pyzhou
c50c5c2e46 fix(TDI-49004): backport tmap java17 7.3
* fix(TDI-46572): tMap support Java17 (#4659)

* fix(TDI-46572):add jboss dependency to routines

* add to .m2

* fix(TDI-46572):advancedPersistentLookup lib upgrade

* replace advancedPersistentLookupLib jar

* change name

* format

* upgrade jar

* add back dependency

* remove LGPL dependency

* Remove binary jar and copy during build

* fix NPE

* test remove jboss from build
# Conflicts:
#	main/plugins/org.talend.libraries.persist.lookup/META-INF/MANIFEST.MF
#	main/plugins/org.talend.librariesmanager/META-INF/MANIFEST.MF
#	main/plugins/org.talend.librariesmanager/build.properties

* fix(TDI-46923):add back jboss marshalling (#4711)

# Conflicts:
#	main/plugins/org.talend.designer.maven.tos/resources/build/pom.xml

* fix(TDI-46937): fix tmap tuj (#4723)

* fix(TDI-46937): fix tmap tuj

* fix(TDI-46937):fix tuj

* fix(TDI-47147):tMap TUJ fix (#4817)

* Revert "fix(TDI-46937): fix tmap tuj (#4723)"

This reverts commit aacc14f92b.

* delete middle version
2022-12-26 14:38:14 +08:00
Jane Ding
0b7b156f22 Revert "fix(TUP-37227):Issue building when items names too long (#5837)" (#5890)
This reverts commit 30aa2d25a6.
2022-12-23 11:43:03 +08:00
Jane Ding
30aa2d25a6 fix(TUP-37227):Issue building when items names too long (#5837)
* fix(TUP-37227):Issue building when items names too long
https://jira.talendforge.org/browse/TUP-37227

* fix(TUP-37227):Issue building when items names too long
https://jira.talendforge.org/browse/TUP-37227
2022-12-19 12:00:44 +08:00
76 changed files with 2277 additions and 441 deletions

View File

@@ -12,16 +12,28 @@
// ============================================================================
package org.talend.commons.utils.workbench.extensions;
import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import org.apache.commons.lang3.StringUtils;
import org.eclipse.core.runtime.IConfigurationElement;
import org.eclipse.core.runtime.IExtension;
import org.eclipse.core.runtime.IExtensionPoint;
import org.eclipse.core.runtime.IExtensionRegistry;
import org.eclipse.core.runtime.Platform;
import org.eclipse.core.runtime.preferences.ConfigurationScope;
import org.talend.commons.exception.ExceptionHandler;
import org.talend.commons.exception.IllegalPluginConfigurationException;
import org.talend.commons.i18n.internal.Messages;
import org.talend.utils.json.JSONException;
import org.talend.utils.json.JSONObject;
/**
* Utilities class uses to get implementation of extension points defined by plug-ins. <br/>
@@ -36,6 +48,10 @@ public abstract class ExtensionImplementationProvider<I> {
private String plugInId;
public final static String FILE_FEATURES_INDEX = "extra_feature.index";
public final static String DROP_BUNDLE_INFO = "drop.bundle.info";
/**
* Default Constructor. Must not be used.
*/
@@ -166,9 +182,17 @@ public abstract class ExtensionImplementationProvider<I> {
}
IExtension[] extensions = pt.getExtensions();
Map<String, String> dropBundles = null;
try {
dropBundles = getDropBundleInfo();
} catch (IOException e) {
ExceptionHandler.process(e);
}
for (IExtension extension : extensions) {
if (dropBundles != null && dropBundles.containsKey(extension.getNamespaceIdentifier())
&& StringUtils.isEmpty(dropBundles.get(extension.getNamespaceIdentifier()))) {
continue;
}
if (plugInId == null || extension.getNamespaceIdentifier().equals(plugInId)) {
String configurationElementName = extensionPointLimiter.getConfigurationElementName();
if (configurationElementName != null) {
@@ -196,6 +220,32 @@ public abstract class ExtensionImplementationProvider<I> {
return toReturn;
}
/**********************************************************
* Copied from org.talend.commons.configurator
**********************************************************/
public Map<String, String> getDropBundleInfo() throws IOException {
File indexFile = new File(ConfigurationScope.INSTANCE.getLocation().toFile(), FILE_FEATURES_INDEX);
if (!indexFile.exists()) {
return Collections.emptyMap();
}
Map<String, String> dropInfoMap = new HashMap<>();
try {
String jsonStr = new String(Files.readAllBytes(indexFile.toPath()));
if (!jsonStr.isEmpty()) {
JSONObject obj = new JSONObject(jsonStr);
JSONObject dropInfo = obj.getJSONObject(DROP_BUNDLE_INFO);
Iterator<String> iterator = dropInfo.keys();
while (iterator.hasNext()) {
String key = iterator.next();
dropInfoMap.put(key, dropInfo.getString(key));
}
}
} catch (JSONException e) {
throw new IOException(e);
}
return dropInfoMap;
}
/**
* DOC amaumont Comment method "createAndAddImplementation".
*

View File

@@ -872,25 +872,38 @@ public abstract class AbstractEMFRepositoryFactory extends AbstractRepositoryFac
@Override
public IRepositoryViewObject getLastVersion(Project project, String id, String relativeFolder, ERepositoryObjectType type)
throws PersistenceException {
List<IRepositoryViewObject> serializableAllVersion = null;
Object fullFolder = getFullFolder(project, type, relativeFolder);
serializableAllVersion = getSerializableFromFolder(project, fullFolder, id, type, false, false, true, true);
List<IRepositoryViewObject> serializableAllVersion = new ArrayList<>();
if (lastFolderForItemMap.containsKey(id)) {
ERepositoryObjectType itemType = lastRepositoryTypeForItemMap.get(id);
String currentPath = lastFolderForItemMap.get(id);
Object fullFolder = getFullFolder(project, itemType, currentPath);
try {
if (fullFolder != null && (fullFolder instanceof FolderItem || ((IFolder) fullFolder).exists())) {
serializableAllVersion.addAll(getSerializableFromFolder(project, fullFolder, id, itemType, false, false, true, true));
}
} catch (PersistenceException e) {
// do nothing.
// if any exception happen or can't find the item, just try to look for it everywhere.
}
}
if (serializableAllVersion.isEmpty()) {
// look in all folders for this item type
serializableAllVersion = getSerializableFromFolder(project, fullFolder, id, type, false, true, true, true, true);
Object fullFolder = getFullFolder(project, type, relativeFolder);
serializableAllVersion = getSerializableFromFolder(project, fullFolder, id, type, false, false, true, true);
if (serializableAllVersion.isEmpty()) {
// look in all folders for this item type
serializableAllVersion = getSerializableFromFolder(project, fullFolder, id, type, false, true, true, true, true);
}
}
int size = serializableAllVersion.size();
if (size > 1) {
String message = getItemsMessages(serializableAllVersion, size);
throw new PersistenceException(Messages.getString(
"AbstractEMFRepositoryFactory.presistenceException.OnlyOneOccurenceMustbeFound", message)); //$NON-NLS-1$
} else if (size == 1) {
return serializableAllVersion.get(0);
} else {
return null;
}
if (size == 1) {
return serializableAllVersion.get(0);
}
return null;
}
protected void computePropertyMaxInformationLevel(Property property) {

View File

@@ -2199,6 +2199,7 @@ public final class ProxyRepositoryFactory implements IProxyRepositoryFactory {
if (GlobalServiceRegister.getDefault().isServiceRegistered(IUpdateService.class)) {
IUpdateService updateService = GlobalServiceRegister.getDefault().getService(IUpdateService.class);
updateService.syncComponentM2Jars(currentMonitor);
updateService.installComponents(currentMonitor);
}
// init sdk component

View File

@@ -16,6 +16,7 @@ import java.io.File;
import java.io.IOException;
import java.net.URI;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.Set;
@@ -154,6 +155,8 @@ public interface ILibraryManagerService extends IService {
public boolean contains(String jarName);
public void clearCache();
public void deployLibsFromCustomComponents(File componentFolder, List<ModuleNeeded> modulesNeeded);
@Deprecated
public Set<String> list(boolean withComponent, IProgressMonitor... monitorWrap);

View File

@@ -88,8 +88,8 @@ public enum EDatabaseVersion4Drivers {
"Microsoft", "MSSQL_PROP", //$NON-NLS-1$ //$NON-NLS-2$
new String[] { "mssql-jdbc.jar", "slf4j-api-1.7.25.jar", "slf4j-log4j12-1.7.25.jar", "adal4j-1.6.7.jar", //$NON-NLS-1$
"commons-lang3-3.10.jar", "commons-codec-1.14.jar", "gson-2.8.9.jar", "oauth2-oidc-sdk-9.7.jar",
"json-smart-2.4.7.jar", "nimbus-jose-jwt-9.22.jar", "javax.mail-1.6.2.jar", "reload4j-1.2.19.jar",
"accessors-smart-2.4.7.jar", "asm-9.1.jar", "content-type-2.1.jar" })),
"json-smart-2.4.11.jar", "nimbus-jose-jwt-9.22.jar", "javax.mail-1.6.2.jar", "reload4j-1.2.19.jar",
"accessors-smart-2.4.11.jar", "asm-9.5.jar", "content-type-2.1.jar" })),
VERTICA_9(new DbVersion4Drivers(EDatabaseTypeName.VERTICA, "VERTICA 9.X", "VERTICA_9_0", "vertica-jdbc-9.3.1-0.jar")), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
VERTICA_7_1_X(new DbVersion4Drivers(EDatabaseTypeName.VERTICA, "VERTICA 7.1.X (Deprecated)", "VERTICA_7_1_X", "vertica-jdbc-7.1.2-0.jar")), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$

View File

@@ -495,11 +495,16 @@ public class ContextUtils {
}
return itemMap;
}
private static Set<String> missingContexts = new HashSet<>();
public static void clearMissingContextCache() {
missingContexts.clear();
}
/**
*
* get the repository context item,now contextId can be either joblet node or context node.
*/
* get the repository context item, now contextId can be either joblet node or context node.
*/
public static Item getRepositoryContextItemById(String contextId) {
if (IContextParameter.BUILT_IN.equals(contextId)) {
return null;
@@ -507,6 +512,9 @@ public class ContextUtils {
if (checkObject(contextId)) {
return null;
}
if (missingContexts.contains(contextId)) {
return null;
}
List<ERepositoryObjectType> possibleTypes = new ArrayList<ERepositoryObjectType>();
possibleTypes.add(ERepositoryObjectType.CONTEXT);
@@ -521,6 +529,8 @@ public class ContextUtils {
return item;
}
}
missingContexts.add(contextId);
ExceptionHandler.log("Can't find Context item[id=" + contextId + "].");
} catch (PersistenceException e) {
ExceptionHandler.process(e);
}
@@ -831,6 +841,7 @@ public class ContextUtils {
ItemContextLink itemContextLink) {
Map<String, String> renamedMap = new HashMap<String, String>();
Map<String, Item> tempItemMap = new HashMap<String, Item>();
clearMissingContextCache();
for (ContextType contextType : contextTypeList) {
for (Object obj : contextType.getContextParameter()) {
if (obj instanceof ContextParameterType) {
@@ -893,6 +904,7 @@ public class ContextUtils {
*/
public static Map<String, String> calculateRenamedMapFromLinkFile(String projectLabel, String itemId,
List<IContext> contextList) {
clearMissingContextCache();
Map<String, String> renamedMap = new HashMap<String, String>();
Map<String, Item> idToItemMap = new HashMap<String, Item>();
try {
@@ -951,6 +963,14 @@ public class ContextUtils {
params.add(param);
}
public boolean remove(Item item, String param) {
Set<String> params = map.get(item);
if (params != null && params.contains(param)) {
return params.remove(param);
}
return false;
}
@SuppressWarnings("unchecked")
public Set<String> get(Item item) {
Set<String> params = map.get(item);

View File

@@ -299,6 +299,7 @@ public class JobContextManager implements IContextManager {
}
List<ContextItem> contextItemList = ContextUtils.getAllContextItem();
boolean setDefault = false;
ContextUtils.clearMissingContextCache();
for (int i = 0; i < contextTypeList.size(); i++) {
contextType = (ContextType) contextTypeList.get(i);
String name = contextType.getName();
@@ -526,6 +527,7 @@ public class JobContextManager implements IContextManager {
EList newcontextTypeList = new BasicEList();
Map<String, Item> idToItemMap = new HashMap<String, Item>();
ContextUtils.clearMissingContextCache();
for (int i = 0; i < listContext.size(); i++) {
IContext context = listContext.get(i);
String contextGroupName = renameGroupContext.get(context);

View File

@@ -51,6 +51,7 @@ public abstract class AbstractItemContextLinkService implements IItemContextLink
itemContextLink.setItemId(itemId);
Map<String, Item> tempCache = new HashMap<String, Item>();
if (contextTypeList != null && contextTypeList.size() > 0) {
ContextUtils.clearMissingContextCache();
for (Object object : contextTypeList) {
if (object instanceof ContextType) {
ContextType jobContextType = (ContextType) object;

View File

@@ -206,6 +206,7 @@ public class ContextLinkService {
Map<String, Map<String, String>> changedContextParameterId) throws PersistenceException {
List<Relation> relationList = RelationshipItemBuilder.getInstance()
.getItemsHaveRelationWith(sourceId, RelationshipItemBuilder.LATEST_VERSION, false);
ContextUtils.clearMissingContextCache();
for (Relation relation : relationList) {
String id = relation.getId();
IFile linkFile = calContextLinkFile(ProjectManager.getInstance().getCurrentProject().getTechnicalLabel(), id);

View File

@@ -728,8 +728,8 @@ public final class ProcessUtils {
}
return null;
}
private static boolean isRoute(Property property) {
public static boolean isRoute(Property property) {
return property!= null && (ERepositoryObjectType.getType(property).equals(ERepositoryObjectType.PROCESS_ROUTE) ||
ERepositoryObjectType.getType(property).equals(ERepositoryObjectType.PROCESS_ROUTE_MICROSERVICE));
}
@@ -768,6 +768,39 @@ public final class ProcessUtils {
return false;
}
public static boolean isRouteWithRoutelets(Item item) {
if (item!= null && item instanceof ProcessItem) {
for (Object obj : ((ProcessItem) item).getProcess().getNode()) {
if (obj instanceof NodeType) {
if (isRouteletNode((NodeType) obj)) {
return true;
}
}
}
}
return false;
}
public static boolean isRouteletNode(NodeType node) {
String jobIds = getParameterValue(node.getElementParameter(), "PROCESS_TYPE:PROCESS_TYPE_PROCESS");
String jobVersion = getParameterValue(node.getElementParameter(), "PROCESS_TYPE:PROCESS_TYPE_VERSION"); //$NON-NLS-1$
ProcessItem processItem = ItemCacheManager.getProcessItem(jobIds, jobVersion);
if (processItem != null) {
return ERepositoryObjectType.getType(processItem.getProperty()).equals(
ERepositoryObjectType.PROCESS_ROUTELET);
}
return false;
}
public static String getParameterValue(EList<ElementParameterType> listParamType, String paramName) {
for (ElementParameterType pType : listParamType) {
if (pType != null && paramName.equals(pType.getName())) {
return pType.getValue();
}
}
return null;
}
public static int getAssertAmount(IProcess process) {
int count = 0;
@@ -1058,6 +1091,28 @@ public final class ProcessUtils {
}
return false;
}
public static boolean isChildRouteProcess(Item item) {
if (item!= null && item instanceof ProcessItem) {
for (Object obj : ((ProcessItem) item).getProcess().getNode()) {
if (obj instanceof NodeType) {
if (((NodeType) obj).getComponentName().equals("tRouteInput")) {
return true;
}
}
}
}
return false;
}
public static boolean isRoutelet(Property p) {
if (p != null) {
return ERepositoryObjectType.getType(p).equals(ERepositoryObjectType.PROCESS_ROUTELET);
}
return false;
}
public static String escapeJava(String input) {
return StringEscapeUtils.escapeJava(input);

View File

@@ -79,4 +79,8 @@ public final class TalendPropertiesUtil {
public static String getProductApp() {
return System.getProperty(PROD_APP);
}
public static boolean isEnabledUseShortJobletName() {
return isEnabled("talend.job.build.useShortJobletName"); //$NON-NLS-1$
}
}

View File

@@ -42,6 +42,8 @@ public class JobInfoProperties extends Properties {
public static final String PROJECT_NAME = "project"; //$NON-NLS-1$
public static final String JOB_ID = "jobId"; //$NON-NLS-1$
public static final String JOB_PARENT_ID = "jobParentId"; //$NON-NLS-1$
public static final String JOB_NAME = "job"; //$NON-NLS-1$
@@ -92,6 +94,10 @@ public class JobInfoProperties extends Properties {
setProperty(BRANCH, branchSelection);
}
if (processItem.getProperty() != null && processItem.getProperty().getParentItem() != null) {
setProperty(JOB_PARENT_ID, processItem.getProperty().getParentItem().getProperty().getId());
}
setProperty(JOB_ID, jobInfo.getJobId());
setProperty(JOB_NAME, jobInfo.getJobName());
String jobType = processItem.getProcess().getJobType();

View File

@@ -22,6 +22,8 @@ public interface IBuildParametes {
static final String SERVICE = "Service"; //$NON-NLS-1$
static final String ITEM = "Item"; //$NON-NLS-1$
static final String PARENT_ITEM = "ParentItem"; //$NON-NLS-1$
static final String VERSION = "Version"; //$NON-NLS-1$

View File

@@ -26,5 +26,7 @@ public interface IUpdateService extends IService {
public String getSharedStudioMissingPatchVersion();
public boolean updateArtifactsFileSha256Hex(IProgressMonitor monitor, String studioArtifactsFileShaCodeHex);
public void installComponents(IProgressMonitor monitor);
}

View File

@@ -648,6 +648,7 @@ public class ContextNebulaGridComposite extends AbstractContextTabEditComposite
helper.initHelper(contextManager);
Map<String, Item> items = new HashMap<String, Item>();
boolean needRefresh = false;
ContextUtils.clearMissingContextCache();
for (IContextParameter param : contextManager.getDefaultContext().getContextParameterList()) {
if (!param.isBuiltIn()) {
String source = param.getSource();

View File

@@ -522,6 +522,7 @@ public class SelectRepositoryContextDialog extends SelectionDialog {
// remove the params which is unchecked
Set<String> jobletIds = new HashSet<String>();
Set<String> chekedIds = new HashSet<String>();
ContextUtils.clearMissingContextCache();
for (IContextParameter param : existParas) {
if (param.isBuiltIn()) {
continue;

View File

@@ -185,6 +185,7 @@ public class AddRepositoryContextGroupCommand extends Command {
// remove the params which is unchecked
Set<String> jobletIds = new HashSet<String>();
Set<String> chekedIds = new HashSet<String>();
ContextUtils.clearMissingContextCache();
for (IContextParameter param : existParas) {
if (param.isBuiltIn()) {
continue;

View File

@@ -92,6 +92,7 @@ public class ContextNatTableUtils {
List<ContextTableTabParentModel> output = new ArrayList<ContextTableTabParentModel>();
if (!contextDatas.isEmpty()) {
int i = 0;
ContextUtils.clearMissingContextCache();
for (IContextParameter para : contextDatas) {
String sourceId = para.getSource();
if (IContextParameter.BUILT_IN.equals(sourceId)) {

View File

@@ -21,6 +21,7 @@ import org.eclipse.ui.IViewPart;
import org.eclipse.ui.IWorkbenchPage;
import org.eclipse.ui.IWorkbenchPart;
import org.eclipse.ui.PlatformUI;
import org.talend.core.model.context.ContextUtils;
import org.talend.core.ui.branding.IBrandingConfiguration;
/**
@@ -51,6 +52,7 @@ public class Contexts {
public void run() {
if (cxtView != null) {
updateTitle(cxtView);
ContextUtils.clearMissingContextCache();
cxtView.refresh(part);
}
}

View File

@@ -78,6 +78,7 @@ public class RoutinesFunctionProposal implements IContentProposal {
message += Messages.getString("RoutinesFunctionProposal.CreatedBy");
message += Messages.getString("RoutinesFunctionProposal.ReturnType");
message += Messages.getString("RoutinesFunctionProposal.VariableName");
message = message.replaceAll("\n", System.getProperty("line.separator", "\n")); // for display on Windows platform
MessageFormat format = new MessageFormat(message);
Object[] args = new Object[] { function.getDescription(),

View File

@@ -134,7 +134,7 @@ public final class TokenInforUtil {
targetArray = new JSONArray();
Map<String,List<JSONObject>> objectMap = new HashMap<String,List<JSONObject>>();
for (Object obj : data) {
if((obj instanceof JSONObject) && ((JSONObject)obj).get("component_name")!=null){//$NON-NLS-1$
if((obj instanceof JSONObject) && ((JSONObject)obj).has("component_name") && ((JSONObject)obj).get("component_name")!=null){//$NON-NLS-1$
List<JSONObject> dataList = new ArrayList<JSONObject>();
String componentName = (String) ((JSONObject)obj).get("component_name");//$NON-NLS-1$
if(objectMap.containsKey(componentName)){

View File

@@ -54,7 +54,9 @@ Export-Package: org.talend.core,
org.talend.core.services.resource,
org.talend.core.views,
org.talend.designer.runprocess
Import-Package: org.apache.commons.collections4.map
Import-Package: org.apache.commons.collections4.map,
org.eclipse.m2e.core,
org.eclipse.m2e.core.embedder
Bundle-ClassPath: .,
lib/log4j-api-2.17.1.jar,
lib/log4j-core-2.17.1.jar

View File

@@ -0,0 +1,255 @@
// ============================================================================
//
// Copyright (C) 2006-2023 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.model.utils;
import java.io.File;
import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
import java.net.URL;
import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;
import java.util.stream.Collectors;
import java.util.stream.Stream;
import org.apache.commons.lang.StringUtils;
import org.apache.log4j.Logger;
import org.apache.log4j.spi.LoggerFactory;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.FileLocator;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.NullProgressMonitor;
import org.eclipse.core.runtime.Path;
import org.eclipse.m2e.core.MavenPlugin;
import org.eclipse.m2e.core.embedder.IMaven;
import org.osgi.framework.FrameworkUtil;
import org.talend.commons.exception.ExceptionHandler;
import org.talend.core.GlobalServiceRegister;
import org.talend.core.ILibraryManagerService;
import org.talend.core.i18n.Messages;
import org.talend.utils.io.FilesUtils;
abstract public class BaseComponentInstallerTask implements IComponentInstallerTask {
private static final String SYS_PROP_TCOMPV0 = "tcompv0.update";
private static final String SYS_PROP_OVERWRITE = "m2.overwrite";
private static final String SYS_PROP_OVERWRITE_DEFAULT = Boolean.FALSE.toString();
private static final String SYS_CUSTOM_MAVEN_REPO = "maven.local.repository";
private int order;
private int componentType = -1;
private Set<ComponentGAV> gavs = new HashSet<ComponentGAV>();
protected boolean overWriteM2() {
/**
* force to overwrite, since need to sync maven-metadata-local.xml
*/
String prop = System.getProperty(SYS_PROP_OVERWRITE, Boolean.TRUE.toString());
return Boolean.valueOf(prop);
}
protected boolean updateTcompv0() {
String prop = System.getProperty(SYS_PROP_TCOMPV0, SYS_PROP_OVERWRITE_DEFAULT);
return Boolean.valueOf(prop);
}
@Override
public int getComponentType() {
return componentType;
}
@Override
public void setComponentType(int componentType) {
this.componentType = componentType;
}
@Override
public int getOrder() {
return this.order;
}
@Override
public void setOrder(int order) {
this.order = order;
}
@Override
public Set<ComponentGAV> getComponentGAV() {
return gavs;
}
@Override
public void addComponentGAV(ComponentGAV gav) {
gavs.add(gav);
}
@Override
public Set<ComponentGAV> getComponentGAV(int componentType) {
return this.gavs.stream().filter(gav -> (gav.getComponentType() & componentType) > 0)
.collect(Collectors.toSet());
}
/**
* Get implementation class of installer
*
* @return implementation class of installer
*/
abstract protected Class<? extends BaseComponentInstallerTask> getInstallerClass();
/**
* Get jar file directory
*
* @return jar file directory
*/
protected File getJarFileDir() {
URL jarFolder = FileLocator.find(FrameworkUtil.getBundle(getInstallerClass()), new Path("repository"), null);
File jarFileDir = null;
if (jarFolder != null) {
try {
jarFileDir = new File(FileLocator.toFileURL(jarFolder).getPath());
if (jarFileDir.isDirectory()) {
return jarFileDir;
}
} catch (IOException e) {
ExceptionHandler.process(e);
}
}
return null;
}
/**
* <pre>
*Implementation of unzipping files into studio local m2 directory
*
* </pre>
*/
@Override
public boolean needInstall() {
if (this.updateTcompv0()) {
return true;
}
boolean toInstall = false;
Set<ComponentGAV> tcompv0Gavs = this.getComponentGAV(COMPONENT_TYPE_TCOMPV0);
ILibraryManagerService librairesManagerService = (ILibraryManagerService) GlobalServiceRegister.getDefault()
.getService(ILibraryManagerService.class);
if (librairesManagerService != null) {
for (ComponentGAV gav : tcompv0Gavs) {
File jarFile = librairesManagerService.resolveStatusLocally(gav.toMavenUri());
if (jarFile == null) {
toInstall = true;
break;
}
}
}
if (toInstall) {
}
return toInstall;
}
@Override
public boolean install(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException {
if (monitor == null) {
monitor = new NullProgressMonitor();
}
if (!this.needInstall()) {
return false;
}
File jarDir = getJarFileDir();
if (jarDir == null) {
return false;
}
File m2Dir = getM2RepositoryPath();
if (m2Dir == null) {
return false;
}
File[] files = jarDir.listFiles();
Set<File> zipFiles = Stream.of(files).filter(f -> f.getName().endsWith(".zip")).collect(Collectors.toSet());
boolean installed = true;
monitor.beginTask(Messages.getString("BaseComponentInstallerTask.installComponent", getMonitorText()),
zipFiles.size());
for (File zf : zipFiles) {
try {
FilesUtils.unzip(zf.getAbsolutePath(), m2Dir.getAbsolutePath(), this.overWriteM2());
} catch (Exception e) {
installed = false;
}
monitor.worked(1);
}
return installed;
}
/**
* Get studio local maven repository path
*
* @return local maven repository path
*/
protected File getM2RepositoryPath() {
String mavenRepo = System.getProperty(SYS_CUSTOM_MAVEN_REPO);
File m2Repo = null;
if (StringUtils.isEmpty(mavenRepo)) {
final IMaven maven = MavenPlugin.getMaven();
try {
maven.reloadSettings();
} catch (CoreException e) {
ExceptionHandler.process(e);
}
String localRepository = maven.getLocalRepositoryPath();
if (!StringUtils.isEmpty(localRepository)) {
m2Repo = new File(localRepository);
}
} else {
m2Repo = new File(mavenRepo);
}
if (m2Repo != null && !m2Repo.exists()) {
m2Repo.mkdirs();
}
return m2Repo;
}
protected String getMonitorText() {
Set<ComponentGAV> tcompv0Gavs = this.getComponentGAV(COMPONENT_TYPE_TCOMPV0);
final StringBuilder sb = new StringBuilder();
tcompv0Gavs.forEach(gav -> {
if (sb.length() > 0) {
sb.append(",");
}
sb.append(gav.getArtifactId());
});
return sb.toString();
}
}

View File

@@ -0,0 +1,208 @@
// ============================================================================
//
// Copyright (C) 2006-2023 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.model.utils;
import org.apache.commons.lang.StringUtils;
public class ComponentGAV {
private String groupId;
private String artifactId;
private String version;
private String classifier;
private String type;
private int componentType;
/**
* @return the groupId
*/
public String getGroupId() {
return groupId;
}
/**
* @param groupId the groupId to set
*/
public void setGroupId(String groupId) {
this.groupId = groupId;
}
/**
* @return the artifactId
*/
public String getArtifactId() {
return artifactId;
}
/**
* @param artifactId the artifactId to set
*/
public void setArtifactId(String artifactId) {
this.artifactId = artifactId;
}
/**
* @return the version
*/
public String getVersion() {
return version;
}
/**
* @param version the version to set
*/
public void setVersion(String version) {
this.version = version;
}
/**
* @return the classifier
*/
public String getClassifier() {
return classifier;
}
/**
* @param classifier the classifier to set
*/
public void setClassifier(String classifier) {
this.classifier = classifier;
}
/**
* @return the type
*/
public String getType() {
return type;
}
/**
* @param type the type to set
*/
public void setType(String type) {
this.type = type;
}
/**
* @return the componentType
*/
public int getComponentType() {
return componentType;
}
/**
* @param componentType the componentType to set
*/
public void setComponentType(int componentType) {
this.componentType = componentType;
}
public String toMavenUri() {
StringBuffer sb = new StringBuffer();
sb.append("mvn:");
sb.append(toStr("/"));
sb.append("/");
if (!StringUtils.isEmpty(type)) {
sb.append(type);
}
return sb.toString();
}
public String toCoordinateStr() {
return toStr(":");
}
private String toStr(String sep) {
StringBuffer sb = new StringBuffer();
if (!StringUtils.isEmpty(groupId)) {
sb.append(this.groupId);
}
if (!StringUtils.isEmpty(artifactId)) {
if (sb.length() > 0) {
sb.append(sep);
}
sb.append(this.artifactId);
}
if (!StringUtils.isEmpty(version)) {
sb.append(sep);
sb.append(this.version);
}
if (!StringUtils.isEmpty(classifier)) {
sb.append(sep);
sb.append(this.classifier);
}
return sb.toString();
}
@Override
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
if (!(obj instanceof ComponentGAV)) {
return false;
}
ComponentGAV thatObj = (ComponentGAV) obj;
if (!StringUtils.equals(this.getGroupId(), thatObj.getGroupId())) {
return false;
}
if (!StringUtils.equals(this.getArtifactId(), thatObj.getArtifactId())) {
return false;
}
if (!StringUtils.equals(this.getVersion(), thatObj.getVersion())) {
return false;
}
if (!StringUtils.equals(this.getType(), thatObj.getType())) {
return false;
}
if (!StringUtils.equals(this.getClassifier(), thatObj.getClassifier())) {
return false;
}
return this.getComponentType() == thatObj.getComponentType();
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + (this.getGroupId() == null ? 0 : this.getGroupId().hashCode());
result = prime * result + (this.getArtifactId() == null ? 0 : this.getArtifactId().hashCode());
result = prime * result + (this.getVersion() == null ? 0 : this.getVersion().hashCode());
result = prime * result + (this.getType() == null ? 0 : this.getType().hashCode());
result = prime * result + (this.getClassifier() == null ? 0 : this.getClassifier().hashCode());
result = prime * result + this.getComponentType();
return result;
}
@Override
public String toString() {
return "GAV [groupId=" + this.groupId + ", artifactId=" + this.artifactId + ", version=" + this.version + ", classifier=" + this.classifier + ", type=" + this.type + ", componentType="
+ this.componentType + "]";
}
}

View File

@@ -0,0 +1,88 @@
// ============================================================================
//
// Copyright (C) 2006-2023 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.model.utils;
import java.lang.reflect.InvocationTargetException;
import java.util.Set;
import org.eclipse.core.runtime.IProgressMonitor;
public interface IComponentInstallerTask {
int COMPONENT_TYPE_TCOMPV0 = 1;
int COMPONENT_TYPE_TCOMPV1 = 2;
int COMPONENT_TYPE_MAVEN_REPO = 4;
/**
* Order of the task, smaller means higher priority
*
* @return Order of the task
*/
int getOrder();
/**
* Set order of the task
*
* @param order
*/
void setOrder(int order);
/**
* Get all component gavs
*
* @return Set<ComponentGAV>
*/
Set<ComponentGAV> getComponentGAV();
/**
* @param componentType 1 - tcompv0, 2 - tcompv1
* @return Set<ComponentGAV>
*/
Set<ComponentGAV> getComponentGAV(int componentType);
/**
* Add component gav
*
* @param gav
*/
void addComponentGAV(ComponentGAV gav);
/**
* Whether it is necessary to install the component
*
* @return
*/
boolean needInstall();
/**
* Install the component
*
* @param monitor
* @throws InvocationTargetException
* @throws InterruptedException
*/
boolean install(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException;
/**
* @return the componentType
*/
int getComponentType();
/**
* @param componentType the componentType to set
*/
void setComponentType(int componentType);
}

View File

@@ -1608,6 +1608,11 @@ public class ProcessorUtilities {
}
}
// if (isCIMode() && "Routelets".equals(node.getComponent().getOriginalFamilyName())) {
if ("Routelets".equals(node.getComponent().getOriginalFamilyName())) {
processItem.getProperty().setParentItem(ItemCacheManager.getProcessItem(currentProcess.getId(), currentProcess.getVersion()));
}
int subJobOption = GENERATE_ALL_CHILDS;
if (BitwiseOptionUtils.containOption(option, GENERATE_WITH_FIRST_CHILD)) {
subJobOption = GENERATE_MAIN_ONLY;
@@ -2547,7 +2552,7 @@ public class ProcessorUtilities {
return jobInfos;
}
private static boolean isRouteletNode(NodeType node) {
public static boolean isRouteletNode(NodeType node) {
String jobIds = getParameterValue(node.getElementParameter(), "PROCESS_TYPE:PROCESS_TYPE_PROCESS");
String jobVersion = getParameterValue(node.getElementParameter(), "PROCESS_TYPE:PROCESS_TYPE_VERSION"); //$NON-NLS-1$
ProcessItem processItem = ItemCacheManager.getProcessItem(jobIds, jobVersion);
@@ -2945,4 +2950,12 @@ public class ProcessorUtilities {
public static boolean isNeedExportItemsForDQ() {
return needExportItemsForDQ;
}
public static boolean isMicroservice(Item item) {
if (item == null || item.getProperty() == null || item.getProperty().getAdditionalProperties() == null) {
return false;
}
return "ROUTE_MICROSERVICE".equals(item.getProperty().getAdditionalProperties()
.get(TalendProcessArgumentConstant.ARG_BUILD_TYPE));
}
}

View File

@@ -126,7 +126,42 @@
<dependency>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.20</version>
<version>2.22.2</version>
<exclusions>
<exclusion>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
</exclusion>
<exclusion>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.11</version>
</dependency>
<dependency>
<groupId>org.codehaus.plexus</groupId>
<artifactId>plexus-component-annotations</artifactId>
<version>1.7.1</version>
</dependency>
<dependency>
<groupId>org.apache.maven.surefire</groupId>
<artifactId>surefire-api</artifactId>
<version>2.22.2</version>
</dependency>
<dependency>
<groupId>org.apache.maven.surefire</groupId>
<artifactId>surefire-booter</artifactId>
<version>2.22.2</version>
</dependency>
<dependency>
<groupId>org.apache.maven.surefire</groupId>
<artifactId>surefire-junit4</artifactId>
<version>2.22.2</version>
</dependency>
<dependency>
<groupId>org.apache.maven</groupId>
@@ -139,10 +174,15 @@
<version>1.21</version>
</dependency>
<dependency>
<groupId>org.apache-extras.beanshell</groupId>
<artifactId>bsh</artifactId>
<version>2.0b6</version>
</dependency>
<groupId>org.apache-extras.beanshell</groupId>
<artifactId>bsh</artifactId>
<version>2.0b6</version>
</dependency>
<dependency>
<groupId>org.jboss.marshalling</groupId>
<artifactId>jboss-marshalling</artifactId>
<version>2.0.12.Final</version>
</dependency>
</dependencies>
<build>
<plugins>

View File

@@ -42,7 +42,7 @@
<dependency>
<groupId>org.json</groupId>
<artifactId>json</artifactId>
<version>20140107</version>
<version>20230227</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.dataformat</groupId>

View File

@@ -10,7 +10,7 @@
<artifactId>studio-tacokit-dependencies</artifactId>
<packaging>pom</packaging>
<properties>
<tacokit.components.version>1.27.16</tacokit.components.version>
<tacokit.components.version>1.27.26</tacokit.components.version>
</properties>
<repositories>
<repository>

View File

@@ -11,7 +11,7 @@
<packaging>pom</packaging>
<properties>
<tcomp.version>1.38.6</tcomp.version>
<tcomp.version>1.38.11</tcomp.version>
<slf4j.version>1.7.32</slf4j.version>
<log4j2.version>2.17.1</log4j2.version>
<reload4j.version>1.2.19</reload4j.version>

View File

@@ -182,7 +182,7 @@
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.12.4</version>
<version>2.22.2</version>
<dependencies>
<dependency>
<groupId>org.codehaus.plexus</groupId>
@@ -190,6 +190,16 @@
<version>3.0.24</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13.2</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.11</version>
</dependency>
<dependency>
<groupId>org.apache.maven.shared</groupId>
<artifactId>maven-shared-utils</artifactId>
<version>3.3.3</version>

View File

@@ -45,6 +45,7 @@ public enum ETalendMavenVariables {
JobletName,
JobId,
JobParentId,
JobName,
JobType,
JobFinalName,

View File

@@ -25,7 +25,6 @@ import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.Set;
import java.util.function.Function;
import java.util.stream.Collectors;
@@ -35,7 +34,6 @@ import org.apache.maven.artifact.versioning.DefaultArtifactVersion;
import org.apache.maven.model.Activation;
import org.apache.maven.model.Dependency;
import org.apache.maven.model.Model;
import org.apache.maven.model.Plugin;
import org.apache.maven.model.Profile;
import org.eclipse.core.resources.IContainer;
import org.eclipse.core.resources.IFile;
@@ -58,6 +56,7 @@ import org.eclipse.swt.widgets.Display;
import org.talend.commons.exception.ExceptionHandler;
import org.talend.commons.exception.PersistenceException;
import org.talend.commons.utils.MojoType;
import org.talend.commons.utils.VersionUtils;
import org.talend.core.GlobalServiceRegister;
import org.talend.core.IESBService;
import org.talend.core.ILibraryManagerService;
@@ -67,6 +66,7 @@ import org.talend.core.model.general.ILibrariesService;
import org.talend.core.model.general.ModuleNeeded;
import org.talend.core.model.general.ModuleNeeded.ELibraryInstallStatus;
import org.talend.core.model.general.Project;
import org.talend.core.model.process.JobInfo;
import org.talend.core.model.process.ProcessUtils;
import org.talend.core.model.properties.Item;
import org.talend.core.model.properties.ProjectReference;
@@ -99,6 +99,7 @@ import org.talend.designer.maven.utils.MavenProjectUtils;
import org.talend.designer.maven.utils.PomIdsHelper;
import org.talend.designer.maven.utils.PomUtil;
import org.talend.designer.runprocess.IRunProcessService;
import org.talend.designer.runprocess.ProcessorUtilities;
import org.talend.repository.ProjectManager;
import org.talend.repository.RepositoryWorkUnit;
import org.talend.repository.model.RepositoryConstants;
@@ -631,9 +632,37 @@ public class AggregatorPomsHelper {
public String getJobProjectName(Property property) {
return projectTechName + "_" + getJobProjectFolderName(property).toUpperCase(); //$NON-NLS-1$
}
public static String getJobLabel(Property property) {
if (property == null) {
return "";
}
if (property.getParentItem() != null) {
Property parentProperty = property.getParentItem().getProperty();
return parentProperty.getLabel() + "_" + parentProperty.getVersion().replace(".", "_") + "_" + property.getLabel();
}
return property.getLabel();
}
public static String getJobId(Property property) {
if (property == null) {
return "";
}
if (property.getParentItem() != null) {
Property parentProperty = property.getParentItem().getProperty();
return property.getId() + "_" + parentProperty.getId() + "_" + parentProperty.getVersion().replace(".", "_");
}
return property.getId();
}
public static String getJobProjectFolderName(Property property) {
return getJobProjectFolderName(property.getLabel(), property.getVersion());
return getJobProjectFolderName(getJobLabel(property), property.getVersion());
}
public static String getJobProjectFolderName(String label, String version) {
@@ -642,7 +671,7 @@ public class AggregatorPomsHelper {
public static String getJobProjectId(Property property) {
String _projectTechName = ProjectManager.getInstance().getProject(property).getTechnicalLabel();
return getJobProjectId(_projectTechName, property.getId(), property.getVersion());
return getJobProjectId(_projectTechName, getJobId(property), property.getVersion());
}
public static String getJobProjectId(String projectTechName, String id, String version) {
@@ -683,7 +712,7 @@ public class AggregatorPomsHelper {
AggregatorPomsHelper helper = new AggregatorPomsHelper(projectTechName);
IPath itemRelativePath = getItemRelativePath.apply(property);
String version = realVersion == null ? property.getVersion() : realVersion;
String jobFolderName = getJobProjectFolderName(property.getLabel(), version);
String jobFolderName = getJobProjectFolderName(getJobLabel(property), version);
ERepositoryObjectType type = ERepositoryObjectType.getItemType(property.getItem());
IFolder jobFolder = null;
if (PomIdsHelper.skipFolders()) {
@@ -978,6 +1007,12 @@ public class AggregatorPomsHelper {
}
Item item = object.getProperty().getItem();
if (ProjectManager.getInstance().isInCurrentMainProject(item)) {
// remove original child routelets projects as they will be created during parent Route generation
if (ProcessUtils.isRoutelet(item.getProperty())) {
continue;
}
monitor.subTask("Synchronize job pom: " + item.getProperty().getLabel() //$NON-NLS-1$
+ "_" + item.getProperty().getVersion()); //$NON-NLS-1$
if (runProcessService != null) {
@@ -993,11 +1028,92 @@ public class AggregatorPomsHelper {
modules.add(getModulePath(pomFile));
}
}
}
monitor.worked(1);
if (monitor.isCanceled()) {
return;
}
monitor.worked(1);
if (monitor.isCanceled()) {
return;
}
// Generate individual routelet projects/poms for each Route (CI mode only)
if (ProcessUtils.isRoute(item.getProperty()) && ProcessUtils.isRouteWithRoutelets(item)) {
Set<JobInfo> allJobInfos = ProcessorUtilities.getChildrenJobInfo(item, true, true);
for (JobInfo childJob : allJobInfos) {
if (childJob.getProcessItem() != null && childJob.getProcessItem().getProperty() != null ) {
if (!ProcessUtils.isRoutelet(childJob.getProcessItem().getProperty())) {
continue;
}
Property childJobProperty = childJob.getProcessItem().getProperty();
String jobGroupID = (String) childJob.getProcessItem().getProperty().getAdditionalProperties().get(MavenConstants.NAME_GROUP_ID);
String jobCustomVersion = (String) childJob.getProcessItem().getProperty().getAdditionalProperties().get(MavenConstants.NAME_USER_VERSION);
boolean jobUseSnapshot = childJob.getProcessItem().getProperty().getAdditionalProperties().containsKey(MavenConstants.NAME_PUBLISH_AS_SNAPSHOT);
Property routeProperty = item.getProperty();
String routeGroupID = PomIdsHelper.getJobGroupId(routeProperty);
String routeVersion = VersionUtils.getPublishVersion(routeProperty.getVersion());
String routeCustomVersion = (String) routeProperty.getAdditionalProperties().get(MavenConstants.NAME_USER_VERSION);
boolean routeUseSnapshot = routeProperty.getAdditionalProperties().containsKey(MavenConstants.NAME_PUBLISH_AS_SNAPSHOT);
IFile routePomFile = getItemPomFolder(item.getProperty()).getFile(TalendMavenConstants.POM_FILE_NAME);
// Inherit child job parameters from parent route
childJobProperty.setParentItem(item);
childJobProperty.getAdditionalProperties().put(MavenConstants.NAME_GROUP_ID, routeGroupID);
if (routeCustomVersion != null) {
childJobProperty.getAdditionalProperties().put(MavenConstants.NAME_USER_VERSION, routeCustomVersion);
} else {
childJobProperty.getAdditionalProperties().put(MavenConstants.NAME_USER_VERSION, routeVersion);
}
if (routeUseSnapshot) {
childJobProperty.getAdditionalProperties().put(MavenConstants.NAME_PUBLISH_AS_SNAPSHOT, "true");
} else {
childJobProperty.getAdditionalProperties().remove(MavenConstants.NAME_PUBLISH_AS_SNAPSHOT);
}
runProcessService.generatePom(childJob.getProcessItem(), TalendProcessOptionConstants.GENERATE_POM_NO_FILTER);
IFile childPomFile = getItemPomFolder(childJobProperty).getFile(TalendMavenConstants.POM_FILE_NAME);
if (childPomFile.getProject().getName().equalsIgnoreCase(routePomFile.getProject().getName())) {
modules.add(getModulePath(childPomFile));
}
// restore original Job parameters
childJobProperty.setParentItem(null);
if ( jobGroupID!= null) {
childJobProperty.getAdditionalProperties().put(MavenConstants.NAME_GROUP_ID, jobGroupID);
}else {
childJobProperty.getAdditionalProperties().remove(MavenConstants.NAME_GROUP_ID);
}
if (jobUseSnapshot) {
childJobProperty.getAdditionalProperties().put(MavenConstants.NAME_PUBLISH_AS_SNAPSHOT, "true");
}else {
childJobProperty.getAdditionalProperties().remove(MavenConstants.NAME_PUBLISH_AS_SNAPSHOT);
}
if (jobCustomVersion!=null) {
childJobProperty.getAdditionalProperties().put(MavenConstants.NAME_USER_VERSION, jobCustomVersion);
} else {
childJobProperty.getAdditionalProperties().remove(MavenConstants.NAME_USER_VERSION);
}
}
}
}
}
monitor.worked(1);
if (monitor.isCanceled()) {
return;
}
}
// sync project pom again with all modules.
monitor.subTask("Synchronize project pom with modules"); //$NON-NLS-1$

View File

@@ -149,10 +149,30 @@ public abstract class AbstractMavenProcessorPom extends CreateMavenBundleTemplat
variablesValuesMap.put(ETalendMavenVariables.JobGroupId, PomIdsHelper.getJobGroupId(property));
variablesValuesMap.put(ETalendMavenVariables.JobVersion, PomIdsHelper.getJobVersion(property));
}
variablesValuesMap.put(ETalendMavenVariables.JobArtifactId, PomIdsHelper.getJobArtifactId(property));
variablesValuesMap.put(ETalendMavenVariables.TalendJobVersion, property.getVersion());
final String jobName = JavaResourcesHelper.escapeFileName(process.getName());
variablesValuesMap.put(ETalendMavenVariables.JobName, jobName);
if(ProcessUtils.isRoutelet(property)) {
if(property.getParentItem() != null) {
String routeArtifactID = PomIdsHelper.getJobArtifactId(property.getParentItem().getProperty());
String jobArtifactID = PomIdsHelper.getJobArtifactId(property);
String routeVersion = property.getParentItem().getProperty().getVersion().replace(".", "_");
String jobName = (jobArtifactID.startsWith(routeArtifactID))? jobArtifactID :
routeArtifactID + "_" + routeVersion + "_" + jobArtifactID;
variablesValuesMap.put(ETalendMavenVariables.JobGroupId, PomIdsHelper.getJobGroupId(property.getParentItem().getProperty()));
variablesValuesMap.put(ETalendMavenVariables.JobArtifactId, jobName);
variablesValuesMap.put(ETalendMavenVariables.JobName, jobName);
variablesValuesMap.put(ETalendMavenVariables.JobVersion, PomIdsHelper.getJobVersion(property.getParentItem().getProperty()));
} else {
variablesValuesMap.put(ETalendMavenVariables.JobArtifactId, PomIdsHelper.getJobArtifactId(property));
final String jobName = JavaResourcesHelper.escapeFileName(process.getName());
variablesValuesMap.put(ETalendMavenVariables.JobName, jobName);
}
} else {
variablesValuesMap.put(ETalendMavenVariables.JobArtifactId, PomIdsHelper.getJobArtifactId(property));
final String jobName = JavaResourcesHelper.escapeFileName(process.getName());
variablesValuesMap.put(ETalendMavenVariables.JobName, jobName);
}
if (property != null) {
Project currentProject = ProjectManager.getInstance().getProject(property);

View File

@@ -267,6 +267,8 @@ public class CreateMavenJobPom extends AbstractMavenProcessorPom {
jobInfoProp.getProperty(JobInfoProperties.CONTEXT_NAME, context.getName()));
checkPomProperty(properties, "talend.job.id", ETalendMavenVariables.JobId,
jobInfoProp.getProperty(JobInfoProperties.JOB_ID, process.getId()));
checkPomProperty(properties, "talend.job.parent.id", ETalendMavenVariables.JobParentId,
jobInfoProp.getProperty(JobInfoProperties.JOB_PARENT_ID, ""));
checkPomProperty(properties, "talend.job.type", ETalendMavenVariables.JobType,
jobInfoProp.getProperty(JobInfoProperties.JOB_TYPE));

View File

@@ -6,23 +6,23 @@
<classpathentry exported="true" kind="lib" path="lib/wsdl4j-1.6.3.jar"/>
<classpathentry exported="true" kind="lib" path="lib/istack-commons-runtime-3.0.12.jar"/>
<classpathentry exported="true" kind="lib" path="lib/jaxb-runtime-2.3.4.jar"/>
<classpathentry exported="true" kind="lib" path="lib/woodstox-core-6.2.6.jar"/>
<classpathentry exported="true" kind="lib" path="lib/cxf-core-3.4.7.jar"/>
<classpathentry exported="true" kind="lib" path="lib/cxf-rt-bindings-soap-3.4.7.jar"/>
<classpathentry exported="true" kind="lib" path="lib/cxf-rt-bindings-xml-3.4.7.jar"/>
<classpathentry exported="true" kind="lib" path="lib/cxf-rt-databinding-jaxb-3.4.7.jar"/>
<classpathentry exported="true" kind="lib" path="lib/cxf-rt-features-clustering-3.4.7.jar"/>
<classpathentry exported="true" kind="lib" path="lib/cxf-rt-frontend-jaxrs-3.4.7.jar"/>
<classpathentry exported="true" kind="lib" path="lib/cxf-rt-frontend-jaxws-3.4.7.jar"/>
<classpathentry exported="true" kind="lib" path="lib/cxf-rt-frontend-simple-3.4.7.jar"/>
<classpathentry exported="true" kind="lib" path="lib/cxf-rt-rs-client-3.4.7.jar"/>
<classpathentry exported="true" kind="lib" path="lib/cxf-rt-security-3.4.7.jar"/>
<classpathentry exported="true" kind="lib" path="lib/cxf-rt-security-saml-3.4.7.jar"/>
<classpathentry exported="true" kind="lib" path="lib/cxf-rt-transports-http-3.4.7.jar"/>
<classpathentry exported="true" kind="lib" path="lib/cxf-rt-ws-addr-3.4.7.jar"/>
<classpathentry exported="true" kind="lib" path="lib/cxf-rt-wsdl-3.4.7.jar"/>
<classpathentry exported="true" kind="lib" path="lib/cxf-rt-ws-policy-3.4.7.jar"/>
<classpathentry exported="true" kind="lib" path="lib/cxf-rt-ws-security-3.4.7.jar"/>
<classpathentry exported="true" kind="lib" path="lib/woodstox-core-6.4.0.jar"/>
<classpathentry exported="true" kind="lib" path="lib/cxf-core-3.5.5.jar"/>
<classpathentry exported="true" kind="lib" path="lib/cxf-rt-bindings-soap-3.5.5.jar"/>
<classpathentry exported="true" kind="lib" path="lib/cxf-rt-bindings-xml-3.5.5.jar"/>
<classpathentry exported="true" kind="lib" path="lib/cxf-rt-databinding-jaxb-3.5.5.jar"/>
<classpathentry exported="true" kind="lib" path="lib/cxf-rt-features-clustering-3.5.5.jar"/>
<classpathentry exported="true" kind="lib" path="lib/cxf-rt-frontend-jaxrs-3.5.5.jar"/>
<classpathentry exported="true" kind="lib" path="lib/cxf-rt-frontend-jaxws-3.5.5.jar"/>
<classpathentry exported="true" kind="lib" path="lib/cxf-rt-frontend-simple-3.5.5.jar"/>
<classpathentry exported="true" kind="lib" path="lib/cxf-rt-rs-client-3.5.5.jar"/>
<classpathentry exported="true" kind="lib" path="lib/cxf-rt-security-3.5.5.jar"/>
<classpathentry exported="true" kind="lib" path="lib/cxf-rt-security-saml-3.5.5.jar"/>
<classpathentry exported="true" kind="lib" path="lib/cxf-rt-transports-http-3.5.5.jar"/>
<classpathentry exported="true" kind="lib" path="lib/cxf-rt-ws-addr-3.5.5.jar"/>
<classpathentry exported="true" kind="lib" path="lib/cxf-rt-wsdl-3.5.5.jar"/>
<classpathentry exported="true" kind="lib" path="lib/cxf-rt-ws-policy-3.5.5.jar"/>
<classpathentry exported="true" kind="lib" path="lib/cxf-rt-ws-security-3.5.5.jar"/>
<classpathentry exported="true" kind="lib" path="lib/jakarta.activation-1.2.2.jar"/>
<classpathentry exported="true" kind="lib" path="lib/jakarta.activation-api-1.2.2.jar"/>
<classpathentry exported="true" kind="lib" path="lib/jakarta.annotation-api-1.3.5.jar"/>

View File

@@ -5,22 +5,22 @@ Bundle-SymbolicName: org.talend.libraries.apache.cxf;singleton:=true
Bundle-Version: 7.3.1.qualifier
Bundle-ActivationPolicy: lazy
Bundle-ClassPath: .,
lib/cxf-core-3.4.7.jar,
lib/cxf-rt-bindings-soap-3.4.7.jar,
lib/cxf-rt-bindings-xml-3.4.7.jar,
lib/cxf-rt-databinding-jaxb-3.4.7.jar,
lib/cxf-rt-features-clustering-3.4.7.jar,
lib/cxf-rt-frontend-jaxrs-3.4.7.jar,
lib/cxf-rt-frontend-jaxws-3.4.7.jar,
lib/cxf-rt-frontend-simple-3.4.7.jar,
lib/cxf-rt-rs-client-3.4.7.jar,
lib/cxf-rt-security-3.4.7.jar,
lib/cxf-rt-security-saml-3.4.7.jar,
lib/cxf-rt-transports-http-3.4.7.jar,
lib/cxf-rt-ws-addr-3.4.7.jar,
lib/cxf-rt-wsdl-3.4.7.jar,
lib/cxf-rt-ws-security-3.4.7.jar,
lib/cxf-rt-ws-policy-3.4.7.jar,
lib/cxf-core-3.5.5.jar,
lib/cxf-rt-bindings-soap-3.5.5.jar,
lib/cxf-rt-bindings-xml-3.5.5.jar,
lib/cxf-rt-databinding-jaxb-3.5.5.jar,
lib/cxf-rt-features-clustering-3.5.5.jar,
lib/cxf-rt-frontend-jaxrs-3.5.5.jar,
lib/cxf-rt-frontend-jaxws-3.5.5.jar,
lib/cxf-rt-frontend-simple-3.5.5.jar,
lib/cxf-rt-rs-client-3.5.5.jar,
lib/cxf-rt-security-3.5.5.jar,
lib/cxf-rt-security-saml-3.5.5.jar,
lib/cxf-rt-transports-http-3.5.5.jar,
lib/cxf-rt-ws-addr-3.5.5.jar,
lib/cxf-rt-wsdl-3.5.5.jar,
lib/cxf-rt-ws-security-3.5.5.jar,
lib/cxf-rt-ws-policy-3.5.5.jar,
lib/istack-commons-runtime-3.0.12.jar,
lib/jakarta.activation-1.2.2.jar,
lib/jakarta.activation-api-1.2.2.jar,
@@ -35,7 +35,7 @@ Bundle-ClassPath: .,
lib/stax2-api-4.2.1.jar,
lib/txw2-2.3.4.jar,
lib/xmlschema-core-2.2.5.jar,
lib/woodstox-core-6.2.6.jar,
lib/woodstox-core-6.4.0.jar,
lib/wsdl4j-1.6.3.jar
Export-Package: javax.jws,
javax.ws.rs,

View File

@@ -11,7 +11,7 @@
<packaging>eclipse-plugin</packaging>
<properties>
<cxf.version>3.4.7</cxf.version>
<cxf.version>3.5.5</cxf.version>
</properties>
<repositories>
@@ -170,7 +170,7 @@
<dependency>
<groupId>com.fasterxml.woodstox</groupId>
<artifactId>woodstox-core</artifactId>
<version>6.2.6</version>
<version>6.4.0</version>
</dependency>
<dependency>
<groupId>org.apache.ws.xmlschema</groupId>

View File

@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry exported="true" kind="lib" path="lib/advancedPersistentLookupLib-1.2.jar"/>
<classpathentry exported="true" kind="lib" path="lib/advancedPersistentLookupLib-1.4.jar"/>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
<classpathentry kind="output" path="bin"/>

View File

@@ -3,8 +3,8 @@ Bundle-ManifestVersion: 2
Bundle-Name: org.talend.libraries.persist.lookup
Bundle-SymbolicName: org.talend.libraries.persist.lookup
Bundle-Version: 7.3.1.qualifier
Bundle-ClassPath: lib/advancedPersistentLookupLib-1.2.jar,
.
Bundle-ClassPath: .,
lib/advancedPersistentLookupLib-1.4.jar
Export-Package: org.talend.commons.utils.data.map,
org.talend.commons.utils.time,
org.talend.core.model.process,

View File

@@ -2,4 +2,6 @@ source.. = src/
output.. = bin/
bin.includes = META-INF/,\
.,\
lib/advancedPersistentLookupLib-1.4.jar,\
lib/advancedPersistentLookupLib-1.3.jar,\
lib/advancedPersistentLookupLib-1.2.jar

View File

@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<jardesc>
<jar path="D:/studio_code/tcommon-studio-se/main/plugins/org.talend.libraries.persist.lookup/lib/advancedPersistentLookupLib-1.2.jar"/>
<jar path="D:/studio_code/tcommon-studio-se/main/plugins/org.talend.libraries.persist.lookup/lib/advancedPersistentLookupLib-1.4.jar"/>
<options buildIfNeeded="true" compress="true" descriptionLocation="/org.talend.libraries.persist.lookup/export_advancedPersistentLookupLib.jardesc" exportErrors="true" exportWarnings="true" includeDirectoryEntries="false" overwrite="true" saveDescription="false" storeRefactorings="false" useSourceFolders="false"/>
<storedRefactorings deprecationInfo="true" structuralOnly="false"/>
<selectedProjects/>

View File

@@ -2,6 +2,7 @@
<classpath>
<classpathentry kind="src" path="src/main/java"/>
<classpathentry kind="src" path="resources/java"/>
<classpathentry exported="true" kind="lib" path="lib/jboss-marshalling-2.0.12.Final.jar"/>
<classpathentry kind="lib" path="lib/crypto-utils.jar"/>
<classpathentry kind="lib" path="lib/slf4j-api-1.7.25.jar"/>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>

View File

@@ -28,7 +28,8 @@ Eclipse-LazyStart: true
Bundle-ClassPath: .,
lib/crypto-utils.jar,
lib/slf4j-api-1.7.25.jar
Export-Package: org.talend.librariesmanager.emf.librariesindex,
Export-Package: org.jboss.marshalling,
org.talend.librariesmanager.emf.librariesindex,
org.talend.librariesmanager.librarydata,
org.talend.librariesmanager.maven,
org.talend.librariesmanager.model,
@@ -40,3 +41,5 @@ Export-Package: org.talend.librariesmanager.emf.librariesindex,
Import-Package: org.eclipse.emf.ecore.xmi.impl,
org.talend.osgi.hook.notification
Eclipse-BundleShape: dir
Bundle-ClassPath: lib/jboss-marshalling-2.0.12.Final.jar,
.

View File

@@ -69,6 +69,12 @@
name="crypto-utils-0.31.12.jar">
</library>
</systemRoutine>
<systemRoutine
name="IPersistableLookupRow">
<library
name="mvn:org.jboss.marshalling/jboss-marshalling/2.0.12.Final">
</library>
</systemRoutine>
</extension>
<extension
point="org.talend.core.runtime.artifact_handler">

View File

@@ -51,6 +51,11 @@
<version>1.7.25</version>
<overWrite>true</overWrite>
</artifactItem>
<artifactItem>
<groupId>org.jboss.marshalling</groupId>
<artifactId>jboss-marshalling</artifactId>
<version>2.0.12.Final</version>
</artifactItem>
</artifactItems>
</configuration>
</execution>

View File

@@ -467,13 +467,13 @@ public class TalendDate {
*
* {Category} TalendDate
*
* {param} String("") string : date represent in string
* {param} String("2008/11/24 12:15:25") string : date represent in string
*
* {param} String("yyyy-MM-dd") pattern : date pattern
* {param} String("yyyy/MM/dd HH:mm:ss") pattern : date pattern
*
* {param} int(addValue) nb : the added value
* {param} int(5) nb : the added value
*
* {param} date("MM") dateType : the part to add
* {param} String("dd") dateType : the part to add
*
* {examples}
*
@@ -1216,8 +1216,19 @@ public class TalendDate {
}
/**
* format date to mssql 2008 type datetimeoffset ISO 8601 string with local time zone format string : yyyy-MM-dd
* HH:mm:ss.SSSXXX(JDK7 support it)
* Format date to mssql 2008 type datetimeoffset ISO 8601 string with local time zone format string : yyyy-MM-dd
* HH:mm:ss.SSSXXX (JDK7 support it)
*
* @param date the time value to be formatted into a time string.
* @return the formatted time string.
*
* {talendTypes} String
*
* {Category} TalendDate
*
* {param} date(new Date()) date : the time value to be formatted into a time string
*
* {example} formatDatetimeoffset(new Date()) #
*/
public static String formatDatetimeoffset(Date date) {
String dateString = formatDate("yyyy-MM-dd HH:mm:ss.SSSZ", date);// keep the max precision in java
@@ -1346,14 +1357,28 @@ public class TalendDate {
}
/**
*
* Convert a formatted string to date
*
* @param string Must be a string datatype. Passes the values that you want to convert.
* @param format Enter a valid TO_DATE format string. The format string must match the parts of the string argument
* default formate is "MM/DD/yyyy HH:mm:ss.sss" if not specified.
* default format is "MM/DD/yyyy HH:mm:ss.sss" if not specified.
*
* @return Date
* @throws ParseException
* {example} TO_DATE("1464576463231", "J") #Mon May 30 10:47:43 CST 2016
* {example} TO_DATE("2015-11-21 13:23:45","yyyy-MM-dd HH:mm:ss") #Sat Nov 21 13:23:45 CST 2015
*
* {talendTypes} Date
*
* {Category} TalendDate
*
* {param} String("2015-11-21 13:23:45") string : string Must be a string datatype. Passes the values that you want
* to convert.
*
* {param} String("yyyy-MM-dd HH:mm:ss") format : Enter a valid TO_DATE format string. The format string must match
* the parts of the string argument default format is "MM/DD/yyyy HH:mm:ss.sss" if not specified.
*
*
* {example} TO_DATE("1464576463231", "J") #Mon May 30 10:47:43 CST 2016 {example} TO_DATE("2015-11-21
* 13:23:45","yyyy-MM-dd HH:mm:ss") #Sat Nov 21 13:23:45 CST 2015
*
*/
public static Date TO_DATE(String string, String format) throws ParseException {
@@ -1374,6 +1399,24 @@ public class TalendDate {
}
/**
* Convert a formatted string to date with default format as ""MM/DD/yyyy HH:mm:ss.sss"
*
* @param string Must be a string datatype. Passes the values that you want to convert.
* @return Date
* @throws ParseException
*
* {talendTypes} Date
*
* {Category} TalendDate
*
* {param} String("11/21/2015 13:23:45.111") string : string Must be a string datatype. Passes the values that you
* want to convert.
*
* {example} TO_DATE("11/21/2015 13:23:45.111") #Sat Nov 21 13:23:45.111 CST 2015
*
*/
public static Date TO_DATE(String string) throws ParseException {
return TO_DATE(string, null);
}
@@ -1410,13 +1453,25 @@ public class TalendDate {
}
/**
*
* @param date Passes the values you want to change
* Add values to the specified portion of the date
*
* @param date Passes the values you want to change
* @param format A format string specifying the portion of the date value you want to change.For example, 'mm'.
* @param amount An integer value specifying the amount of years, months, days, hours,
* and so on by which you want to change the date value.
* @return Date NULL if a null value is passed as an argument to the function.
* @param amount An integer value specifying the amount of years, months, days, hours, and so on by which you want
* to change the date value.
* @return Date NULL if a null value is passed as an argument to the function.
* @throws ParseException
*
* {talendTypes} Date
*
* {Category} TalendDate
*
* {param} Date(new Date()) date :
*
* {param} String("HH") format :
*
* {param} int(2) amount :
*
* {example} ADD_TO_DATE(new Date(1464576463231l), "HH",2) #Mon May 30 12:47:43 CST 2016
*/
public static Date ADD_TO_DATE(Date date, String format, int amount) throws ParseException{
@@ -1485,10 +1540,21 @@ public class TalendDate {
}
/**
* Convert a Date to a formatted character string.
*
* @param date Date/Time datatype. Passes the date values you want to convert to character strings.
* @param format Enter a valid TO_CHAR format string. The format string defines the format of the return value,
* @return String. NULL if a value passed to the function is NULL.
* @param date the date value you want to convert to character strings.
* @param format the format of the return value,
* @return String. NULL if a value passed to the function is NULL.
*
* {talendTypes} String
*
* {Category} TalendDate
*
* {param} Date(new Date()) date : the date value you want to convert to character strings.
*
* {param} String("MM/DD/YYYY HH24:MI:SS") format : the format of the return value,
*
* {example} TO_CHAR(new Date(),"MM/DD/YYYY HH24:MI:SS") #
*/
public static String TO_CHAR(Date date, String format) {

View File

@@ -1,6 +1,6 @@
// ============================================================================
//
// Copyright (C) 2006-2019 Talend Inc. - www.talend.com
// Copyright (C) 2006-2021 Talend Inc. - www.talend.com
//
// This source code is available under agreement available at
// %InstallDIR%\features\org.talend.rcp.branding.%PRODUCTNAME%\%PRODUCTNAME%license.txt
@@ -14,7 +14,6 @@ package routines.system;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.util.HashMap;
import java.util.List;
import org.dom4j.Element;
@@ -110,26 +109,31 @@ public class GetJarsToRegister {
private String addLibsPath(String line, java.util.Map<String, String> crcMap) {
for (java.util.Map.Entry<String, String> entry : crcMap.entrySet()) {
line = adaptLibPaths(line, entry);
if (new java.io.File(line).exists()) {
break;
}
}
return line;
}
private String adaptLibPaths(String line, java.util.Map.Entry<String, String> entry) {
line = line.replace("\\", "/");
String jarName = entry.getValue();
String crc = entry.getKey();
String libStringFinder = "../lib/" + jarName;
String libStringFinder2 = "./" + jarName; // for the job jar itself.
String replacement = "../../../cache/lib/" + crc + "/" + jarName;
if (line.contains(libStringFinder)) {
line = line.replace(libStringFinder, "../../../cache/lib/" + crc + "/" + jarName);
line = line.replace(libStringFinder, replacement);
} else if (line.toLowerCase().contains(libStringFinder2)) {
line = line.toLowerCase().replace(libStringFinder2, "../../../cache/lib/" + crc + "/" + jarName);
} else if (line.toLowerCase().equals(jarName)) {
line = "../../../cache/lib/" + crc + "/" + jarName;
line = line.toLowerCase().replace(libStringFinder2, replacement);
} else if (line.equalsIgnoreCase(jarName)) {
line = replacement;
} else if (line.contains(":$ROOT_PATH/" + jarName + ":")) {
line = line.replace(":$ROOT_PATH/" + jarName + ":", ":$ROOT_PATH/../../../cache/lib/" + crc + "/" + jarName + ":");
line = line.replace(":$ROOT_PATH/" + jarName + ":", ":$ROOT_PATH/" + replacement + ":");
} else if (line.contains(";" + jarName + ";")) {
line = line.replace(";" + jarName + ";", ";../../../cache/lib/" + crc + "/" + jarName + ";");
line = line.replace(";" + jarName + ";", ";" + replacement + ";");
}
return line;
}

View File

@@ -5,6 +5,9 @@ import java.io.DataOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import org.jboss.marshalling.Marshaller;
import org.jboss.marshalling.Unmarshaller;
public interface IPersistableLookupRow<R> {
public void writeKeysData(ObjectOutputStream out);
@@ -19,4 +22,25 @@ public interface IPersistableLookupRow<R> {
public void copyKeysDataTo(R other);
default public void writeKeysData(Marshaller marshaller){
//sub-class need to override this method
throw new UnsupportedOperationException("Method need to be override");
}
default public void readKeysData(Unmarshaller in){
throw new UnsupportedOperationException("Method need to be override");
}
default public void writeValuesData(DataOutputStream dataOut, Marshaller objectOut){
throw new UnsupportedOperationException("Method need to be override");
}
default public void readValuesData(DataInputStream dataIn, Unmarshaller objectIn){
throw new UnsupportedOperationException("Method need to be override");
}
default public boolean supportMarshaller(){
//Override this method to return true after implement the Jboss methods above
return false;
}
}

View File

@@ -3,10 +3,28 @@ package routines.system;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import org.jboss.marshalling.Marshaller;
import org.jboss.marshalling.Unmarshaller;
public interface IPersistableRow<R> {
public void writeData(ObjectOutputStream out);
public void readData(ObjectInputStream in);
default public void writeData(Marshaller marshaller){
//sub-class need to override this method
throw new UnsupportedOperationException("Method need to be override");
}
default public void readData(Unmarshaller in){
throw new UnsupportedOperationException("Method need to be override");
}
default public boolean supportJboss(){
//Override this method to return true after implement the Jboss methods above
return false;
}
}

View File

@@ -1319,11 +1319,81 @@ public class LocalLibraryManager implements ILibraryManagerService, IChangedLibr
saveMavenIndex(mavenURIMap, monitorWrap);
savePlatfromURLIndex(platformURLMap, monitorWrap);
if (service != null) {
deployLibsFromCustomComponents(service, platformURLMap);
}
return mavenURIMap;
}
public void deployLibsFromCustomComponents(File componentFolder, List<ModuleNeeded> modulesNeeded) {
if (modulesNeeded == null || modulesNeeded.isEmpty()) {
return;
}
Map<File, Set<MavenArtifact>> needToDeploy = new HashMap<File, Set<MavenArtifact>>();
modulesNeeded.forEach(module -> {
if (module != null) {
boolean needDeploy = false;
String mvnUri = module.getMavenUri();
String jarPathFromMaven = getJarPathFromMaven(StringUtils.isNotBlank(mvnUri) ? mvnUri : module.getModuleName());
if (StringUtils.isBlank(jarPathFromMaven)) {
needDeploy = true;
} else {
File jarFromMaven = new File(jarPathFromMaven);
if (!jarFromMaven.exists()) {
needDeploy = true;
}
}
if (needDeploy) {
File deployFile = getDeployJarFileByModule(componentFolder, module);
if (deployFile != null) {
install(deployFile, mvnUri, false, true, null);
if (needToDeploy.get(deployFile) == null) {
needToDeploy.put(deployFile, new HashSet<MavenArtifact>());
}
if (StringUtils.isNotBlank(mvnUri)) {
MavenArtifact mavenArtifact = MavenUrlHelper.parseMvnUrl(mvnUri);
needToDeploy.get(deployFile).add(mavenArtifact);
} else {
Map<String, String> sourceAndMavenUri = new HashMap<>();
guessMavenRUIFromIndex(deployFile, true, sourceAndMavenUri);
Set<MavenArtifact> MavenArtifactSet = new HashSet<MavenArtifact>();
sourceAndMavenUri.keySet().forEach(mavenUri -> {
if (StringUtils.isNotBlank(mvnUri)) {
MavenArtifactSet.add(MavenUrlHelper.parseMvnUrl(mavenUri));
}
});
needToDeploy.get(deployFile).addAll(MavenArtifactSet);
}
}
}
}
});
if (!needToDeploy.isEmpty()) {
ShareComponentsLibsJob shareJob = new ShareComponentsLibsJob(
Messages.getString("LocalLibraryManager.shareLibsForCustomponents"), needToDeploy, deployer);
shareJob.schedule();
}
}
private File getDeployJarFileByModule(File componentFolder, ModuleNeeded module) {
String mvnUri = module.getMavenUri();
if (StringUtils.isNotBlank(mvnUri)) {
MavenArtifact mavenArtifact = MavenUrlHelper.parseMvnUrl(mvnUri);
String fileName = mavenArtifact.getFileName();
File jarFile = new File(componentFolder, fileName);
if (jarFile.exists()) {
return jarFile;
}
}
// try module name
File jarFile = new File(componentFolder, module.getModuleName());
if (jarFile.exists()) {
return jarFile;
}
return null;
}
/**
*
@@ -1382,86 +1452,6 @@ public class LocalLibraryManager implements ILibraryManagerService, IChangedLibr
return false;
}
private void deployLibsFromCustomComponents(IComponentsService service, Map<String, String> platformURLMap) {
boolean deployToRemote = true;
if (!LibrariesManagerUtils.shareLibsAtStartup()) {
log.info("Skip deploying libs from custom components");
deployToRemote = false;
}
Map<File, Set<MavenArtifact>> needToDeploy = new HashMap<File, Set<MavenArtifact>>();
List<ComponentProviderInfo> componentsFolders = service.getComponentsFactory().getComponentsProvidersInfo();
for (ComponentProviderInfo providerInfo : componentsFolders) {
String id = providerInfo.getId();
try {
File file = new File(providerInfo.getLocation());
if (isExtComponentProvider(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;
}
collectLibModules(jarFile, needToDeploy);
}
}
} else {
if (!canDeployFromCustomComponentFolder(file.getName()) || platformURLMap.get(file.getName()) != null) {
continue;
}
collectLibModules(file, needToDeploy);
}
}
} catch (Exception e) {
ExceptionHandler.process(e);
continue;
}
}
// first install them locally
needToDeploy.forEach((k, v) -> {
try {
// install as release version if can't find mvn url from index
install(k, null, false, true);
} catch (Exception e) {
ExceptionHandler.process(e);
}
});
if (!deployToRemote) {
return;
}
ShareComponentsLibsJob shareJob = new ShareComponentsLibsJob(
Messages.getString("LocalLibraryManager.shareLibsForCustomponents"), needToDeploy, deployer);
shareJob.schedule();
}
private void collectLibModules(File jarFile, Map<File, Set<MavenArtifact>> needToDeploy) {
Map<String,String> mavenUris = new HashMap<String,String>();
guessMavenRUIFromIndex(jarFile, true, mavenUris);
Set<MavenArtifact> artifacts = new HashSet<MavenArtifact>();
for(String uri: mavenUris.keySet()) {
MavenArtifact art = MavenUrlHelper.parseMvnUrl(uri);
if(art!=null) {
artifacts.add(art);
}
}
needToDeploy.put(jarFile, artifacts);
}
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

@@ -48,9 +48,9 @@
context="plugin:org.talend.metadata.managment"
language="java"
message="Needed for create snowflake connection"
mvn_uri="mvn:net.snowflake/snowflake-jdbc/3.11.0"
name="snowflake-jdbc-3.11.0.jar"
required="false">
mvn_uri="mvn:net.snowflake/snowflake-jdbc/3.13.29"
name="snowflake-jdbc-3.13.29.jar"
required="true">
</libraryNeeded>
<libraryNeeded
context="plugin:org.talend.metadata.managment"
@@ -148,6 +148,33 @@
required="true"
uripath="platform:/plugin/org.talend.libraries.jdbc.hsql/lib/hsqldb.jar">
</libraryNeeded>
<libraryNeeded
context="plugin:org.talend.metadata.managment"
language="java"
message="Needed for create Microsoft SQL Server db connection"
mvn_uri="mvn:net.minidev/json-smart/2.4.11"
name="json-smart-2.4.11.jar"
required="true"
uripath="platform:/plugin/org.talend.libraries.tis.custom/lib/json-smart-2.4.11.jar">
</libraryNeeded>
<libraryNeeded
context="plugin:org.talend.metadata.managment"
language="java"
message="Needed for create Microsoft SQL Server db connection"
mvn_uri="mvn:net.minidev/accessors-smart/2.4.11"
name="accessors-smart-2.4.11.jar"
required="true"
uripath="platform:/plugin/org.talend.libraries.tis.custom/lib/accessors-smart-2.4.11.jar">
</libraryNeeded>
<libraryNeeded
context="plugin:org.talend.metadata.managment"
language="java"
message="Needed for create Microsoft SQL Server db connection"
mvn_uri="mvn:org.ow2.asm/asm/9.5"
name="asm-9.5.jar"
required="true"
uripath="platform:/plugin/org.talend.libraries.tis.custom/lib/asm-9.5.jar">
</libraryNeeded>
</extension>
<extension
point="org.talend.core.migrationTask">

View File

@@ -19,8 +19,6 @@ import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import metadata.managment.i18n.Messages;
import org.apache.commons.lang.StringUtils;
import org.apache.log4j.Logger;
import org.talend.cwm.helper.ColumnSetHelper;
@@ -29,6 +27,7 @@ import org.talend.metadata.managment.utils.MetadataConnectionUtils;
import org.talend.utils.sql.metadata.constants.GetTable;
import org.talend.utils.sql.metadata.constants.TableType;
import metadata.managment.i18n.Messages;
import orgomg.cwm.resource.relational.NamedColumnSet;
/**
@@ -177,9 +176,9 @@ public abstract class AbstractTableBuilder<T extends NamedColumnSet> extends Cwm
String tableComment = tablesSet.getString(GetTable.REMARKS.name());
if (StringUtils.isBlank(tableComment)) {
String dbProductName = getConnectionMetadata(connection).getDatabaseProductName();
String selectRemarkOnTable = MetadataConnectionUtils.getCommonQueryStr(dbProductName, tableName);
String selectRemarkOnTable = MetadataConnectionUtils.getCommonQueryStr(dbProductName);
if (selectRemarkOnTable != null) {
tableComment = executeGetCommentStatement(selectRemarkOnTable);
tableComment = executeGetCommentStatement(selectRemarkOnTable, tableName);
}
}
return tableComment;

View File

@@ -14,14 +14,14 @@ package org.talend.core.model.metadata.builder.database;
import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import metadata.managment.i18n.Messages;
import org.apache.log4j.Logger;
import metadata.managment.i18n.Messages;
/**
* @author scorreia
*
@@ -73,14 +73,48 @@ abstract class CwmBuilder {
*/
protected String executeGetCommentStatement(String queryStmt) {
String comment = null;
Statement statement = null;
PreparedStatement statement = null;
ResultSet resultSet = null;
try {
statement = connection.createStatement();
statement.execute(queryStmt);
statement = connection.prepareStatement(queryStmt);
resultSet = statement.executeQuery();
if (resultSet != null) {
while (resultSet.next()) {
comment = (String) resultSet.getObject(1);
}
}
} catch (SQLException e) {
// do nothing here
} finally {
// -- release resources
if (resultSet != null) {
try {
resultSet.close();
} catch (SQLException e) {
log.error(e, e);
}
}
if (statement != null) {
try {
statement.close();
} catch (SQLException e) {
log.error(e, e);
}
}
}
return comment;
}
protected String executeGetCommentStatement(String queryStmt, String tableName) {
String comment = null;
PreparedStatement statement = null;
ResultSet resultSet = null;
try {
statement = connection.prepareStatement(queryStmt);
statement.setString(1, tableName);
resultSet = statement.executeQuery();
// get the results
resultSet = statement.getResultSet();
if (resultSet != null) {
while (resultSet.next()) {
comment = (String) resultSet.getObject(1);

View File

@@ -126,7 +126,7 @@ public class ExtractMetaDataUtils {
public static final String SNOWFLAKE = "Snowflake"; //$NON-NLS-1$
public static final String SNOWFLAKE_DRIVER_JAR = "snowflake-jdbc-3.11.0.jar"; //$NON-NLS-1$
public static final String SNOWFLAKE_DRIVER_JAR = "snowflake-jdbc-3.13.29.jar"; //$NON-NLS-1$
private ExtractMetaDataUtils() {
}

View File

@@ -83,6 +83,7 @@ import org.talend.metadata.managment.connection.manager.HiveConnectionManager;
import org.talend.metadata.managment.hive.EmbeddedHiveDataBaseMetadata;
import org.talend.metadata.managment.repository.ManagerConnection;
import org.talend.metadata.managment.utils.DatabaseConstant;
import org.talend.metadata.managment.utils.EDataBaseType;
import org.talend.metadata.managment.utils.ManagementTextUtils;
import org.talend.metadata.managment.utils.MetadataConnectionUtils;
import org.talend.utils.sql.ConnectionUtils;
@@ -1038,8 +1039,12 @@ public class DBConnectionFillerImpl extends MetadataFillerImpl<DatabaseConnectio
// for CDH4 HIVE2 , the table type are MANAGED_TABLE and EXTERNAL_TABLE ......
// tableType = null;
}
Map<String,String> tableComments = null;
if (!isOracle8i) {
tableComments = this.getTableComments(dbJDBCMetadata, catalogName, schemaPattern);
}
ResultSet tables = dbJDBCMetadata.getTables(catalogName, schemaPattern, tablePattern, tableType);
boolean hasRemarksCol = hasRemarksColumn(tables);
while (tables.next()) {
String coloumnName = GetTable.TABLE_SCHEM.name();
if (schemaPattern != null) {
@@ -1064,8 +1069,13 @@ public class DBConnectionFillerImpl extends MetadataFillerImpl<DatabaseConnectio
// if (!isOracle && !isOracle8i && !isOracleJdbc && tableName.startsWith("/")) { //$NON-NLS-1$
// continue;
// }
if (!isOracle8i) {
tableComment = getTableComment(dbJDBCMetadata, tables, tableName, catalogName, schemaPattern);
if (hasRemarksCol) {
tableComment = getRemarksFromResultSet(tables);
}
if (tableComments != null) {
if (StringUtils.isEmpty(tableComment)) {
tableComment = tableComments.get(tableName);
}
}
MetadataTable metadatatable = null;
if (TableType.VIEW.toString().equals(temptableType) || ETableTypes.VIRTUAL_VIEW.getName().equals(temptableType)) {
@@ -1209,6 +1219,69 @@ public class DBConnectionFillerImpl extends MetadataFillerImpl<DatabaseConnectio
}
return tableComment;
}
private Map<String, String> getTableComments(DatabaseMetaData dbJDBCMetadata, String catalogName, String schemaPattern) {
Map<String, String> ret = new HashMap<String, String>();
PreparedStatement ps = null;
ResultSet rs = null;
try {
String productName = dbJDBCMetadata.getDatabaseProductName();
if (StringUtils.isEmpty(productName)) {
return ret;
}
productName = productName.replaceAll(" ", "_"); //$NON-NLS-1$ //$NON-NLS-2$
EDataBaseType eDataBaseType = null;
try {
eDataBaseType = EDataBaseType.valueOf(productName);
} catch (Exception e) {
eDataBaseType = EDataBaseType.Microsoft_SQL_Server;
}
String sqlStr = ""; //$NON-NLS-1$
switch (eDataBaseType) {
case Oracle:
sqlStr = "SELECT TABLE_NAME,COMMENTS FROM ALL_TAB_COMMENTS WHERE OWNER=?";
ps = dbJDBCMetadata.getConnection().prepareStatement(sqlStr);
ps.setString(1, schemaPattern.toUpperCase());
break;
case MySQL:
sqlStr = "SELECT TABLE_NAME,TABLE_COMMENT FROM information_schema.TABLES WHERE TABLE_SCHEMA=?";
ps = dbJDBCMetadata.getConnection().prepareStatement(sqlStr);
ps.setString(1, catalogName);
break;
default:
break;
}
if (ps != null) {
rs = ps.executeQuery();
while (rs != null && rs.next()) {
String comment = rs.getString(2);
if (!StringUtils.isEmpty(comment)) {
ret.put(rs.getString(1), comment);
}
}
}
} catch (SQLException e) {
log.error(e, e);
} finally {
if (ps != null) {
try {
ps.close();
} catch (SQLException e) {
CommonExceptionHandler.process(e);
}
}
if (rs != null) {
try {
rs.close();
} catch (SQLException e) {
CommonExceptionHandler.process(e);
}
}
}
return ret;
}
/**
* get the Column Comment especially for oracle type.
@@ -1295,9 +1368,12 @@ public class DBConnectionFillerImpl extends MetadataFillerImpl<DatabaseConnectio
}
}
}
Map<String, String> tableComments = null;
if (!flag) {
tableComments = this.getTableComments(dbJDBCMetadata, catalogName, schemaPattern);
}
ResultSet tables = dbJDBCMetadata.getTables(catalogName, schemaPattern, tablePattern, tableType);
boolean hasRemarksCol = hasRemarksColumn(tables);
while (tables.next()) {
String tableName = getStringFromResultSet(tables, GetTable.TABLE_NAME.name());
String temptableType = getStringFromResultSet(tables, GetTable.TABLE_TYPE.name());
@@ -1316,8 +1392,13 @@ public class DBConnectionFillerImpl extends MetadataFillerImpl<DatabaseConnectio
if (tableName == null || tablesToFilter.contains(tableName) || tableName.startsWith("/")) { //$NON-NLS-1$
continue;
}
if (!flag) {
tableComment = getTableComment(dbJDBCMetadata, tables, tableName, catalogName, schemaPattern);
if (hasRemarksCol) {
tableComment = getRemarksFromResultSet(tables);
}
if (tableComments != null) {
if (StringUtils.isEmpty(tableComment)) {
tableComment = tableComments.get(tableName);
}
}
// create table
TdTable table = RelationalFactory.eINSTANCE.createTdTable();
@@ -1367,8 +1448,17 @@ public class DBConnectionFillerImpl extends MetadataFillerImpl<DatabaseConnectio
}
}
try {
boolean flag = true;
if (pack != null) {
Connection c = ConnectionHelper.getConnection(pack);
flag = MetadataConnectionUtils.isOracle8i(c);
}
Map<String, String> tableComments = null;
if (!flag) {
tableComments = this.getTableComments(dbJDBCMetadata, catalogName, schemaPattern);
}
ResultSet tables = dbJDBCMetadata.getTables(catalogName, schemaPattern, viewPattern, tableType);
boolean hasRemarksCol = hasRemarksColumn(tables);
while (tables.next()) {
String tableName = getStringFromResultSet(tables, GetTable.TABLE_NAME.name());
@@ -1379,14 +1469,14 @@ public class DBConnectionFillerImpl extends MetadataFillerImpl<DatabaseConnectio
continue;
}
// common
boolean flag = true;
String tableComment = null;
if (pack != null) {
Connection c = ConnectionHelper.getConnection(pack);
flag = MetadataConnectionUtils.isOracle8i(c);
if (hasRemarksCol) {
tableComment = getRemarksFromResultSet(tables);
}
if (!flag) {
tableComment = getTableComment(dbJDBCMetadata, tables, tableName, catalogName, schemaPattern);
if (tableComments != null) {
if (StringUtils.isEmpty(tableComment)) {
tableComment = tableComments.get(tableName);
}
}
// create table
TdView table = RelationalFactory.eINSTANCE.createTdView();
@@ -1425,6 +1515,24 @@ public class DBConnectionFillerImpl extends MetadataFillerImpl<DatabaseConnectio
return valueOfString;
}
private boolean hasRemarksColumn(ResultSet resultSet) {
try {
if (resultSet == null || resultSet.getMetaData() == null) {
return false;
}
int numOfCols = resultSet.getMetaData().getColumnCount();
for (int i = 1; i < numOfCols + 1; i++) {
String colName = resultSet.getMetaData().getColumnLabel(i);
if (StringUtils.equals(colName, GetColumn.REMARKS.name())) {
return true;
}
}
} catch (SQLException e) {
CommonExceptionHandler.process(e);
}
return false;
}
private String getRemarksFromResultSet(ResultSet resultSet) {
String valueOfString = null;
try {

View File

@@ -805,6 +805,33 @@ public class MetadataConnectionUtils {
}
public static String getCommonQueryStr(String productName) {
if (productName == null) {
return null;
}
productName = productName.replaceAll(" ", "_"); //$NON-NLS-1$ //$NON-NLS-2$
EDataBaseType eDataBaseType = null;
try {
eDataBaseType = EDataBaseType.valueOf(productName);
} catch (Exception e) {
eDataBaseType = EDataBaseType.Microsoft_SQL_Server;
}
String sqlStr = ""; //$NON-NLS-1$
switch (eDataBaseType) {
case Oracle:
sqlStr = "SELECT COMMENTS FROM USER_TAB_COMMENTS WHERE TABLE_NAME= ? "; //$NON-NLS-1$
break;
case MySQL:
sqlStr = "SELECT TABLE_COMMENT FROM information_schema.TABLES WHERE TABLE_NAME= ? "; //$NON-NLS-1$
break;
default:
sqlStr = null;
}
return sqlStr;
}
/**
* get Comment Query Str.
*

View File

@@ -23,6 +23,7 @@ import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import java.util.Optional;
import java.util.stream.Stream;
import org.apache.commons.lang.StringUtils;
import org.apache.log4j.Logger;
@@ -240,20 +241,14 @@ public class MigrationToolService implements IMigrationToolService {
sortMigrationTasks(toExecute);
final List<MigrationTask> done = new ArrayList<MigrationTask>(storedMigrations);
int nbMigrationsToDo = 0;
for (IProjectMigrationTask task : toExecute) {
MigrationTask mgTask = MigrationUtil.findMigrationTask(done, task);
if (mgTask == null && !task.isDeprecated()) {
nbMigrationsToDo++;
}
}
boolean hasTaskToExecute = toExecute.stream()
.anyMatch(task -> !task.isDeprecated() && MigrationUtil.findMigrationTask(done, task) == null);
// force to redo the migration task for the relations only if user ask for "clean" or if relations is empty
// or if there is at least another migration to do.
if (!beforeLogon
&& (!RelationshipItemBuilder.INDEX_VERSION.equals(project.getEmfProject().getItemsRelationVersion()) || nbMigrationsToDo > 0)) {
if (!beforeLogon && (!RelationshipItemBuilder.INDEX_VERSION.equals(project.getEmfProject().getItemsRelationVersion())
|| hasTaskToExecute)) {
// force to redo this migration task, to make sure the relationship is done correctly
// done.remove(RELATION_TASK);
MigrationUtil.removeMigrationTaskById(done, RELATION_TASK);
RelationshipItemBuilder.getInstance().unloadRelations();
@@ -264,41 +259,37 @@ public class MigrationToolService implements IMigrationToolService {
RelationshipItemBuilder.JOBLET_RELATION, true);
// reset
RelationshipItemBuilder.getInstance().unloadRelations();
nbMigrationsToDo++;
hasTaskToExecute = true;
}
if (nbMigrationsToDo == 0) {
boolean checkDupContext = !beforeLogon && Boolean.getBoolean("duplicate.context.reference.check");
if (!hasTaskToExecute && !checkDupContext) {
return;
}
// force execute migration in case user copy-past items with diffrent path on the file system and refresh
// the studio,it may cause bug TDI-19229
MigrationUtil.removeMigrationTaskById(done, "org.talend.repository.model.migration.FixProjectResourceLink");
// force to re-generate all job poms
MigrationUtil.removeMigrationTaskById(done, "org.talend.repository.model.migration.GenerateJobPomMigrationTask");
if (beforeLogon) {
// for every migration, force reset to default maven template
MigrationUtil.removeMigrationTaskById(done, "org.talend.repository.model.migration.ResetMavenTemplateMigrationTask");
if (checkDupContext) {
MigrationUtil.removeMigrationTaskById(done,
"org.talend.repository.model.migration.RemoveDuplicateContextReferencesMigrationTask");
}
if (hasTaskToExecute) {
// force execute migration in case user copy-past items with diffrent path on the file system and refresh
// the studio,it may cause bug TDI-19229
MigrationUtil.removeMigrationTaskById(done, "org.talend.repository.model.migration.FixProjectResourceLink");
// force to re-generate all job poms
MigrationUtil.removeMigrationTaskById(done, "org.talend.repository.model.migration.GenerateJobPomMigrationTask");
boolean haveAnyBinFolder = false; // to avoid some problems of migration, sometimes
for (ERepositoryObjectType type : (ERepositoryObjectType[]) ERepositoryObjectType.values()) {
if (!type.hasFolder()) {
continue;
if (beforeLogon) {
// for every migration, force reset to default maven template
MigrationUtil.removeMigrationTaskById(done,
"org.talend.repository.model.migration.ResetMavenTemplateMigrationTask");
}
String folderName = ERepositoryObjectType.getFolderName(type);
if (folderName == null || "".equals(folderName)) {
continue;
boolean hasBinFolder = Stream.of((ERepositoryObjectType[]) ERepositoryObjectType.values())
.filter(type -> type.hasFolder()).map(ERepositoryObjectType::getFolderName).filter(StringUtils::isNotBlank)
.map(folderName -> fsProject.getFolder(folderName))
.anyMatch(folder -> folder.exists() && folder.getFolder("bin").exists());
if (hasBinFolder) {
MigrationUtil.removeMigrationTaskById(done, "org.talend.repository.model.migration.RemoveBinFolderMigrationTask");
}
IFolder folder = fsProject.getFolder(folderName);
if (folder.exists() && folder.getFolder("bin").exists()) { //$NON-NLS-1$
haveAnyBinFolder = true;
break;
}
}
if (haveAnyBinFolder) {
MigrationUtil.removeMigrationTaskById(done, "org.talend.repository.model.migration.RemoveBinFolderMigrationTask");
}
final SubProgressMonitor subProgressMonitor = new SubProgressMonitor(monitorWrap, toExecute.size());

View File

@@ -400,6 +400,36 @@ public interface PropertiesPackage extends EPackage {
*/
int ITEM = 6;
/**
* The meta object id for the parent '{@link org.talend.core.model.properties.impl.ItemImpl <em>Item</em>}' class. <!--
* begin-user-doc --> <!-- end-user-doc -->
*
* @see org.talend.core.model.properties.impl.ItemImpl
* @see org.talend.core.model.properties.impl.PropertiesPackageImpl#getParentItem()
* @generated
*/
int PARENT_ITEM = 109;
/**
* The meta object id for the '{@link org.talend.core.model.properties.impl.ItemImpl <em>Item</em>}' class. <!--
* begin-user-doc --> <!-- end-user-doc -->
*
* @see org.talend.core.model.properties.impl.ItemImpl
* @see org.talend.core.model.properties.impl.PropertiesPackageImpl#getParentItem()
* @generated
*/
int PARENT_ITEM__PROPERTY = 110;
/**
* The feature id for the parent '<em><b>Item</b></em>' reference.
* <!-- begin-user-doc --> <!-- end-user-doc -->
* @generated
* @ordered
*/
int PROPERTY__PARENT_ITEM = 111;
/**
* The meta object id for the '{@link org.talend.core.model.properties.impl.BusinessProcessItemImpl <em>Business Process Item</em>}' class.
* <!-- begin-user-doc --> <!-- end-user-doc -->

View File

@@ -419,5 +419,33 @@ public interface Property extends EObject {
* @generated
*/
void setItem(Item value);
/**
* Returns the value of the parent '<em><b>Item</b></em>' reference. It is bidirectional and its opposite is '
* {@link org.talend.core.model.properties.Item#getProperty <em>Property</em>}'. <!-- begin-user-doc -->
* <p>
* If the meaning of the parent '<em>Item</em>' reference isn't clear, there really should be more of a description here...
* </p>
* <!-- end-user-doc -->
*
* @return the value of the parent'<em>Item</em>' reference.
* @see #setParentItem(Item)
* @see org.talend.core.model.properties.PropertiesPackage#getProperty_Item()
* @see org.talend.core.model.properties.Item#getProperty
* @model opposite="property"
* @generated
*/
Item getParentItem();
/**
* Sets the value of the parent '{@link org.talend.core.model.properties.Property#getItem <em>Item</em>}' reference. <!--
* begin-user-doc --> <!-- end-user-doc -->
*
* @param value the new value of the parent '<em>Item</em>' reference.
* @see #getParentItem()
* @generated
*/
void setParentItem(Item value);
} // Property

View File

@@ -227,6 +227,17 @@ public class PropertyImpl extends EObjectImpl implements Property {
* @ordered
*/
protected Item item;
/**
* The cached value of the parent '{@link #getParentItem() <em>Item</em>}' reference.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @see #getParentItem()
* @generated
* @ordered
*/
protected Item parentItem;
/**
* The cached value of the '{@link #getAuthor() <em>Author</em>}' reference.
@@ -542,6 +553,23 @@ public class PropertyImpl extends EObjectImpl implements Property {
}
return item;
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public Item getParentItem() {
if (parentItem != null && parentItem.eIsProxy()) {
InternalEObject oldItem = (InternalEObject)parentItem;
parentItem = (Item)eResolveProxy(oldItem);
if (parentItem != oldItem) {
if (eNotificationRequired())
eNotify(new ENotificationImpl(this, Notification.RESOLVE, PropertiesPackage.PROPERTY__PARENT_ITEM, oldItem, parentItem));
}
}
return parentItem;
}
/**
* <!-- begin-user-doc -->
@@ -551,6 +579,15 @@ public class PropertyImpl extends EObjectImpl implements Property {
public Item basicGetItem() {
return item;
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public Item basicGetParentItem() {
return parentItem;
}
/**
* <!-- begin-user-doc -->
@@ -585,6 +622,13 @@ public class PropertyImpl extends EObjectImpl implements Property {
else if (eNotificationRequired())
eNotify(new ENotificationImpl(this, Notification.SET, PropertiesPackage.PROPERTY__ITEM, newItem, newItem));
}
public void setParentItem(Item newItem) {
Item oldItem = parentItem;
parentItem = newItem;
if (eNotificationRequired())
eNotify(new ENotificationImpl(this, Notification.SET, PropertiesPackage.PROPERTY__PARENT_ITEM, oldItem, newItem));
}
/**
* <!-- begin-user-doc -->

View File

@@ -22,6 +22,7 @@ import org.eclipse.core.runtime.IProgressMonitor;
import org.talend.commons.runtime.utils.io.FileCopyUtils;
import org.talend.core.GlobalServiceRegister;
import org.talend.core.model.process.JobInfo;
import org.talend.core.model.process.ProcessUtils;
import org.talend.core.model.properties.ProcessItem;
import org.talend.core.runtime.process.ITalendProcessJavaProject;
import org.talend.core.runtime.repository.build.IBuildResourcesProvider;
@@ -70,6 +71,9 @@ public class SyncChildrenContextsResourcesProvider implements IBuildResourcesPro
final IFolder mainResourcesFolder = processJavaProject.getExternalResourcesFolder();
final File targetFolder = mainResourcesFolder.getLocation().toFile();
dependenciesItems.stream().filter(jobInfo -> !jobInfo.isJoblet()).map(JobInfo::getProcessItem).forEach(item -> {
if (ProcessUtils.isRoutelet(item.getProperty())) {
item.getProperty().setParentItem(processItem);
}
ITalendProcessJavaProject childJavaProject = runProcessService.getTalendJobJavaProject(item.getProperty());
if (childJavaProject != null) {
final IFolder childResourcesFolder = childJavaProject.getExternalResourcesFolder();

View File

@@ -22,6 +22,7 @@ import org.eclipse.core.runtime.IProgressMonitor;
import org.talend.commons.runtime.utils.io.FileCopyUtils;
import org.talend.core.GlobalServiceRegister;
import org.talend.core.model.process.JobInfo;
import org.talend.core.model.process.ProcessUtils;
import org.talend.core.model.properties.ProcessItem;
import org.talend.core.runtime.process.ITalendProcessJavaProject;
import org.talend.core.runtime.repository.build.IBuildResourcesProvider;
@@ -67,6 +68,9 @@ public class SyncChildrenSourceCodeProvider implements IBuildResourcesProvider {
final File targetFolder = mainSrcFolder.getLocation().toFile();
dependenciesItems.stream().filter(jobInfo -> !jobInfo.isJoblet()).map(JobInfo::getProcessItem).forEach(item -> {
if (ProcessUtils.isRoutelet(item.getProperty())) {
item.getProperty().setParentItem(processItem);
}
ITalendProcessJavaProject childJavaProject = runProcessService.getTalendJobJavaProject(item.getProperty());
if (childJavaProject != null) {
final IFolder childSrcFolder = childJavaProject.getSrcFolder();

View File

@@ -22,6 +22,7 @@ import org.eclipse.core.runtime.IProgressMonitor;
import org.talend.commons.runtime.utils.io.FileCopyUtils;
import org.talend.core.GlobalServiceRegister;
import org.talend.core.model.process.JobInfo;
import org.talend.core.model.process.ProcessUtils;
import org.talend.core.model.properties.ProcessItem;
import org.talend.core.runtime.process.ITalendProcessJavaProject;
import org.talend.core.runtime.repository.build.IBuildResourcesProvider;
@@ -65,6 +66,9 @@ public class SyncChildrenTestReportsProvider implements IBuildResourcesProvider
if (jobInfo.isJoblet()) {
continue;
}
if (ProcessUtils.isRoutelet(jobInfo.getProcessItem().getProperty())) {
jobInfo.getProcessItem().getProperty().setParentItem(processItem);
}
ITalendProcessJavaProject childJavaProject = runProcessService
.getTalendJobJavaProject(jobInfo.getProcessItem().getProperty());
if (childJavaProject != null) {

View File

@@ -17,11 +17,6 @@ import java.util.Collection;
import java.util.List;
import org.apache.log4j.Logger;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
import org.eclipse.core.runtime.jobs.IJobChangeEvent;
import org.eclipse.core.runtime.jobs.JobChangeAdapter;
import org.eclipse.emf.common.util.EList;
import org.eclipse.emf.ecore.util.EcoreUtil;
import org.eclipse.jface.dialogs.MessageDialog;
@@ -29,7 +24,6 @@ import org.eclipse.jface.wizard.IWizard;
import org.eclipse.jface.wizard.WizardDialog;
import org.eclipse.swt.widgets.Display;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.progress.UIJob;
import org.talend.commons.exception.LoginException;
import org.talend.commons.exception.PersistenceException;
import org.talend.core.GlobalServiceRegister;
@@ -830,177 +824,145 @@ public abstract class AbstractCreateTableAction extends AbstractCreateAction {
private void openDatabaseTableWizard(final DatabaseConnectionItem item, final MetadataTable metadataTable,
final boolean forceReadOnly, final RepositoryNode node, final boolean creation) {
UIJob job = new UIJob(Messages.getString("CreateTableAction.action.createTitle")) { //$NON-NLS-1$
String name = "User action : " + getText(); //$NON-NLS-1$
RepositoryWorkUnit<Object> repositoryWorkUnit = new RepositoryWorkUnit<Object>(name, this) {
@Override
public IStatus runInUIThread(final IProgressMonitor monitor) {
String name = "User action : " + getText(); //$NON-NLS-1$
RepositoryWorkUnit<Object> repositoryWorkUnit = new RepositoryWorkUnit<Object>(name, this) {
@Override
protected void run() throws LoginException, PersistenceException {
monitor.beginTask(Messages.getString("CreateTableAction.action.createTitle"), IProgressMonitor.UNKNOWN); //$NON-NLS-1$
if (!monitor.isCanceled()) {
final ManagerConnection managerConnection = new ManagerConnection();
DatabaseConnection connection = (DatabaseConnection) item.getConnection();
boolean useKrb = Boolean.valueOf(connection.getParameters().get(
ConnParameterKeys.CONN_PARA_KEY_USE_KRB));
// TUP-596 : Update the context name in connection when the user does a context switch in DI
String oldContextName = connection.getContextName();
IMetadataConnection metadataConnection = ConvertionHelper.convert(connection, false, null);
String newContextName = connection.getContextName();
if (oldContextName != null && newContextName != null && !oldContextName.equals(newContextName)) {
if (node != null && node.getObject() != null && node.getObject().getProperty() != null) {
Item itemTemp = node.getObject().getProperty().getItem();
if (itemTemp != null && itemTemp instanceof ConnectionItem) {
ConnectionItem connItem = (ConnectionItem) itemTemp;
SwitchContextGroupNameImpl.getInstance().updateContextGroup(connItem, newContextName);
}
}
}
boolean isTcomDB = false;
IGenericDBService dbService = null;
if (GlobalServiceRegister.getDefault().isServiceRegistered(IGenericDBService.class)) {
dbService = (IGenericDBService) GlobalServiceRegister.getDefault().getService(
IGenericDBService.class);
}
if(dbService != null){
for(ERepositoryObjectType type : dbService.getExtraTypes()){
if(type.getLabel().equals(metadataConnection.getDbType())){
isTcomDB = true;
}
}
}
if (!metadataConnection.getDbType().equals(EDatabaseConnTemplate.GODBC.getDBDisplayName())
&& !metadataConnection.getDbType().equals(EDatabaseConnTemplate.ACCESS.getDBDisplayName())
&& !metadataConnection.getDbType().equals(
EDatabaseConnTemplate.GENERAL_JDBC.getDBDisplayName())
&& !isTcomDB) {
// TODO 1. To identify if it is hive connection.
String hiveMode = (String) metadataConnection
.getParameter(ConnParameterKeys.CONN_PARA_KEY_HIVE_MODE);
if (EDatabaseTypeName.HIVE.getDisplayName().equals(metadataConnection.getDbType())) {
// metadataConnection.setDriverJarPath((String)metadataConnection
// .getParameter(ConnParameterKeys.CONN_PARA_KEY_METASTORE_CONN_DRIVER_JAR));
if (HiveModeInfo.get(hiveMode) == HiveModeInfo.EMBEDDED) {
JavaSqlFactory.doHivePreSetup((DatabaseConnection) metadataConnection
.getCurrentConnection());
}
} else if (EDatabaseTypeName.IMPALA.getDisplayName().equals(metadataConnection.getDbType())) {
DatabaseConnection originalValueConnection = null;
IRepositoryContextService repositoryContextService = CoreRuntimePlugin.getInstance()
.getRepositoryContextService();
if (repositoryContextService != null) {
originalValueConnection = repositoryContextService
.cloneOriginalValueConnection(connection, false, null);
}
if (originalValueConnection != null) {
metadataConnection.setUrl(originalValueConnection.getURL());
}
} else {
String genUrl = DatabaseConnStrUtil.getURLString(metadataConnection.getDbType(),
metadataConnection.getDbVersionString(), metadataConnection.getServerName(),
metadataConnection.getUsername(), metadataConnection.getPassword(),
metadataConnection.getPort(), metadataConnection.getDatabase(),
metadataConnection.getFileFieldName(), metadataConnection.getDataSourceName(),
metadataConnection.getDbRootPath(), metadataConnection.getAdditionalParams());
if (!(metadataConnection.getDbType().equals(EDatabaseConnTemplate.IMPALA.getDBDisplayName()) && useKrb)) {
metadataConnection.setUrl(genUrl);
}
}
}
// bug 23508:even open type is metaTable,not connection,we always need the connection's
// datapackage to find the table schema when click the retrieve schema button
if (connection != null) {
EList<orgomg.cwm.objectmodel.core.Package> dp = connection.getDataPackage();
Collection<Package> newDataPackage = EcoreUtil.copyAll(dp);
ConnectionHelper.addPackages(newDataPackage,
(DatabaseConnection) metadataConnection.getCurrentConnection());
}
if (creation) {
String hiveMode = (String) metadataConnection
.getParameter(ConnParameterKeys.CONN_PARA_KEY_HIVE_MODE);
if (EDatabaseTypeName.HIVE.getDisplayName().equals(metadataConnection.getDbType())) {
try {
HiveConnectionManager.getInstance().checkConnection(metadataConnection);
} catch (Exception e) {
e.printStackTrace();
}
} else {
managerConnection.check(metadataConnection);
}
// ExtractMetaDataUtils.metadataCon = metadataConnection;
// when open,set use synonyms false.
ExtractMetaDataUtils.getInstance().setUseAllSynonyms(false);
IProxyRepositoryFactory factory = ProxyRepositoryFactory.getInstance();
boolean repositoryObjectEditable = factory.isEditableAndLockIfPossible(node.getObject());
if (!repositoryObjectEditable) {
boolean flag = MessageDialog.openConfirm(PlatformUI.getWorkbench().getActiveWorkbenchWindow()
.getShell(), Messages.getString("CreateTableAction.action.Warning"),
Messages.getString("CreateTableAction.action.NotLockMessage"));
if (flag) {
DatabaseTableWizard databaseTableWizard = new DatabaseTableWizard(
PlatformUI.getWorkbench(), creation, node.getObject(), metadataTable,
getExistingNames(), forceReadOnly, managerConnection, metadataConnection);
WizardDialog wizardDialog = new WizardDialog(PlatformUI.getWorkbench()
.getActiveWorkbenchWindow().getShell(), databaseTableWizard);
wizardDialog.setBlockOnOpen(true);
handleWizard(node, wizardDialog);
}
} else {
DatabaseTableWizard databaseTableWizard = new DatabaseTableWizard(PlatformUI.getWorkbench(),
creation, node.getObject(), metadataTable, getExistingNames(), forceReadOnly,
managerConnection, metadataConnection);
WizardDialog wizardDialog = new WizardDialog(PlatformUI.getWorkbench()
.getActiveWorkbenchWindow().getShell(), databaseTableWizard);
wizardDialog.setBlockOnOpen(true);
handleWizard(node, wizardDialog);
}
} else {
// added for bug 16595
// no need connect to database when double click one schema.
final boolean skipStep = true;
DatabaseTableWizard databaseTableWizard = new DatabaseTableWizard(PlatformUI.getWorkbench(),
creation, node.getObject(), metadataTable, getExistingNames(), forceReadOnly,
managerConnection, metadataConnection);
databaseTableWizard.setSkipStep(skipStep);
WizardDialog wizardDialog = new WizardDialog(PlatformUI.getWorkbench().getActiveWorkbenchWindow()
.getShell(), databaseTableWizard);
handleWizard(node, wizardDialog);
}
protected void run() throws LoginException, PersistenceException {
final ManagerConnection managerConnection = new ManagerConnection();
DatabaseConnection connection = (DatabaseConnection) item.getConnection();
boolean useKrb = Boolean.valueOf(connection.getParameters().get(ConnParameterKeys.CONN_PARA_KEY_USE_KRB));
// TUP-596 : Update the context name in connection when the user does a context switch in DI
String oldContextName = connection.getContextName();
IMetadataConnection metadataConnection = ConvertionHelper.convert(connection, false, null);
String newContextName = connection.getContextName();
if (oldContextName != null && newContextName != null && !oldContextName.equals(newContextName)) {
if (node != null && node.getObject() != null && node.getObject().getProperty() != null) {
Item itemTemp = node.getObject().getProperty().getItem();
if (itemTemp != null && itemTemp instanceof ConnectionItem) {
ConnectionItem connItem = (ConnectionItem) itemTemp;
SwitchContextGroupNameImpl.getInstance().updateContextGroup(connItem, newContextName);
}
}
}
boolean isTcomDB = false;
IGenericDBService dbService = null;
if (GlobalServiceRegister.getDefault().isServiceRegistered(IGenericDBService.class)) {
dbService = (IGenericDBService) GlobalServiceRegister.getDefault().getService(IGenericDBService.class);
}
if (dbService != null) {
for (ERepositoryObjectType type : dbService.getExtraTypes()) {
if (type.getLabel().equals(metadataConnection.getDbType())) {
isTcomDB = true;
}
}
}
if (!metadataConnection.getDbType().equals(EDatabaseConnTemplate.GODBC.getDBDisplayName())
&& !metadataConnection.getDbType().equals(EDatabaseConnTemplate.ACCESS.getDBDisplayName())
&& !metadataConnection.getDbType().equals(EDatabaseConnTemplate.GENERAL_JDBC.getDBDisplayName())
&& !isTcomDB) {
// TODO 1. To identify if it is hive connection.
String hiveMode = (String) metadataConnection.getParameter(ConnParameterKeys.CONN_PARA_KEY_HIVE_MODE);
if (EDatabaseTypeName.HIVE.getDisplayName().equals(metadataConnection.getDbType())) {
// metadataConnection.setDriverJarPath((String)metadataConnection
// .getParameter(ConnParameterKeys.CONN_PARA_KEY_METASTORE_CONN_DRIVER_JAR));
if (HiveModeInfo.get(hiveMode) == HiveModeInfo.EMBEDDED) {
JavaSqlFactory.doHivePreSetup((DatabaseConnection) metadataConnection.getCurrentConnection());
}
} else if (EDatabaseTypeName.IMPALA.getDisplayName().equals(metadataConnection.getDbType())) {
DatabaseConnection originalValueConnection = null;
IRepositoryContextService repositoryContextService = CoreRuntimePlugin.getInstance()
.getRepositoryContextService();
if (repositoryContextService != null) {
originalValueConnection = repositoryContextService.cloneOriginalValueConnection(connection, false,
null);
}
if (originalValueConnection != null) {
metadataConnection.setUrl(originalValueConnection.getURL());
}
} else {
String genUrl = DatabaseConnStrUtil.getURLString(metadataConnection.getDbType(),
metadataConnection.getDbVersionString(), metadataConnection.getServerName(),
metadataConnection.getUsername(), metadataConnection.getPassword(), metadataConnection.getPort(),
metadataConnection.getDatabase(), metadataConnection.getFileFieldName(),
metadataConnection.getDataSourceName(), metadataConnection.getDbRootPath(),
metadataConnection.getAdditionalParams());
if (!(metadataConnection.getDbType().equals(EDatabaseConnTemplate.IMPALA.getDBDisplayName()) && useKrb)) {
metadataConnection.setUrl(genUrl);
}
}
};
repositoryWorkUnit.setAvoidUnloadResources(isAvoidUnloadResources());
IRepositoryService repositoryService = (IRepositoryService) GlobalServiceRegister.getDefault().getService(
IRepositoryService.class);
repositoryService.getProxyRepositoryFactory().executeRepositoryWorkUnit(repositoryWorkUnit);
monitor.done();
return Status.OK_STATUS;
};
};
job.setUser(true);
job.addJobChangeListener(new JobChangeAdapter() {
@Override
public void done(IJobChangeEvent event) {
if (!event.getResult().isOK()) {
log.error(event.getResult().getMessage(), event.getResult().getException());
} // else eveything is fine so do not log anything
}
// bug 23508:even open type is metaTable,not connection,we always need the connection's
// datapackage to find the table schema when click the retrieve schema button
if (connection != null) {
EList<orgomg.cwm.objectmodel.core.Package> dp = connection.getDataPackage();
Collection<Package> newDataPackage = EcoreUtil.copyAll(dp);
ConnectionHelper.addPackages(newDataPackage, (DatabaseConnection) metadataConnection.getCurrentConnection());
}
if (creation) {
String hiveMode = (String) metadataConnection.getParameter(ConnParameterKeys.CONN_PARA_KEY_HIVE_MODE);
if (EDatabaseTypeName.HIVE.getDisplayName().equals(metadataConnection.getDbType())) {
try {
HiveConnectionManager.getInstance().checkConnection(metadataConnection);
} catch (Exception e) {
e.printStackTrace();
}
} else {
managerConnection.check(metadataConnection);
}
// ExtractMetaDataUtils.metadataCon = metadataConnection;
// when open,set use synonyms false.
ExtractMetaDataUtils.getInstance().setUseAllSynonyms(false);
IProxyRepositoryFactory factory = ProxyRepositoryFactory.getInstance();
boolean repositoryObjectEditable = factory.isEditableAndLockIfPossible(node.getObject());
if (!repositoryObjectEditable) {
boolean flag = MessageDialog.openConfirm(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(),
Messages.getString("CreateTableAction.action.Warning"),
Messages.getString("CreateTableAction.action.NotLockMessage"));
if (flag) {
DatabaseTableWizard databaseTableWizard = new DatabaseTableWizard(PlatformUI.getWorkbench(), creation,
node.getObject(), metadataTable, getExistingNames(), forceReadOnly, managerConnection,
metadataConnection);
WizardDialog wizardDialog = new WizardDialog(
PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(), databaseTableWizard);
wizardDialog.setBlockOnOpen(true);
handleWizard(node, wizardDialog);
}
} else {
DatabaseTableWizard databaseTableWizard = new DatabaseTableWizard(PlatformUI.getWorkbench(), creation,
node.getObject(), metadataTable, getExistingNames(), forceReadOnly, managerConnection,
metadataConnection);
WizardDialog wizardDialog = new WizardDialog(
PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(), databaseTableWizard);
wizardDialog.setBlockOnOpen(true);
handleWizard(node, wizardDialog);
}
} else {
// added for bug 16595
// no need connect to database when double click one schema.
final boolean skipStep = true;
DatabaseTableWizard databaseTableWizard = new DatabaseTableWizard(PlatformUI.getWorkbench(), creation,
node.getObject(), metadataTable, getExistingNames(), forceReadOnly, managerConnection,
metadataConnection);
databaseTableWizard.setSkipStep(skipStep);
WizardDialog wizardDialog = new WizardDialog(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(),
databaseTableWizard);
handleWizard(node, wizardDialog);
}
}
});
job.schedule();
};
repositoryWorkUnit.setAvoidUnloadResources(isAvoidUnloadResources());
IRepositoryService repositoryService = (IRepositoryService) GlobalServiceRegister.getDefault()
.getService(IRepositoryService.class);
repositoryService.getProxyRepositoryFactory().executeRepositoryWorkUnit(repositoryWorkUnit);
}
/**

View File

@@ -0,0 +1,35 @@
// ============================================================================
//
// Copyright (C) 2006-2021 Talend Inc. - www.talend.com
//
// This source code is available under agreement available at
// %InstallDIR%\features\org.talend.rcp.branding.%PRODUCTNAME%\%PRODUCTNAME%license.txt
//
// You should have received a copy of the agreement
// along with this program; if not, write to Talend SA
// 9 rue Pages 92150 Suresnes, France
//
// ============================================================================
package org.talend.repository.ui.wizards.metadata.table.database;
import java.util.List;
import org.talend.core.model.metadata.builder.database.TableNode;
/**
* wzhang class global comment. Detailled comment
*/
public class DefaultSelectorTreeViewerProvider extends SelectorTreeViewerProvider {
public DefaultSelectorTreeViewerProvider() {
super();
}
@Override
public Object[] getChildren(Object parentElement) {
TableNode tableNode = (TableNode) parentElement;
List<TableNode> child = tableNode.getChildren();
return child.toArray();
}
}

View File

@@ -16,6 +16,8 @@ import java.lang.reflect.InvocationTargetException;
import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.Driver;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.text.Collator;
import java.util.ArrayList;
@@ -80,6 +82,7 @@ import org.talend.commons.ui.swt.formtools.Form;
import org.talend.commons.ui.swt.formtools.UtilsButton;
import org.talend.commons.utils.data.text.IndiceHelper;
import org.talend.commons.utils.threading.TalendCustomThreadPoolExecutor;
import org.talend.core.database.EDatabase4DriverClassName;
import org.talend.core.database.EDatabaseTypeName;
import org.talend.core.database.conn.ConnParameterKeys;
import org.talend.core.model.metadata.IMetadataConnection;
@@ -89,6 +92,7 @@ import org.talend.core.model.metadata.MetadataToolHelper;
import org.talend.core.model.metadata.builder.connection.DatabaseConnection;
import org.talend.core.model.metadata.builder.connection.MetadataColumn;
import org.talend.core.model.metadata.builder.connection.MetadataTable;
import org.talend.core.model.metadata.builder.database.DriverShim;
import org.talend.core.model.metadata.builder.database.ExtractMetaDataFromDataBase;
import org.talend.core.model.metadata.builder.database.ExtractMetaDataFromDataBase.ETableTypes;
import org.talend.core.model.metadata.builder.database.ExtractMetaDataUtils;
@@ -388,6 +392,7 @@ public class SelectorTableForm extends AbstractForm {
// TDI-28768 after add checkStateProvider, the catalog and schema checked status become true , then
// force them to false
if (parentNode.getType() == TableNode.CATALOG || parentNode.getType() == TableNode.SCHEMA) {
retrieveSchema(parentNode);
needUpdate = false;
}
boolean firstExpand = false;
@@ -396,6 +401,9 @@ public class SelectorTableForm extends AbstractForm {
} else {
firstExpand = true;
}
if (treeItem.isDisposed()) {
return;
}
for (TreeItem item : treeItem.getItems()) {
if (item.getData() != null) {
TableNode node = (TableNode) item.getData();
@@ -466,7 +474,7 @@ public class SelectorTableForm extends AbstractForm {
viewProvider = provider.getMetadataViewProvider();
} else {
viewProvider = new SelectorTreeViewerProvider();
viewProvider = new DefaultSelectorTreeViewerProvider();
}
viewer.setLabelProvider(viewProvider);
@@ -476,7 +484,237 @@ public class SelectorTableForm extends AbstractForm {
scrolledCompositeFileViewer.setContent(tree);
scrolledCompositeFileViewer.setMinSize(tree.computeSize(SWT.DEFAULT, SWT.DEFAULT));
}
private void retrieveSchema(TableNode tableNode) {
IRunnableWithProgress runnable = new IRunnableWithProgress() {
@Override
public void run(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException {
monitor.beginTask(Messages.getString("CreateTableAction.action.createTitle"), IProgressMonitor.UNKNOWN); //$NON-NLS-1$
List<TableNode> child = tableNode.getChildren();
boolean extended = false;
if (!child.isEmpty()) {
for (TableNode node : child) {
if (node.getType() == TableNode.TABLE) {
extended = true;
break;
}
}
}
// if extended is true, means table already got,no need to get again.
if (extended) {
return;
}
List<MetadataTable> tableList = new ArrayList<MetadataTable>();
retrieveAllSubNodes(tableNode, tableList);
Display.getDefault().syncExec(() -> {
viewer.setInput(tableNodeList);
viewer.expandToLevel(tableNode, viewer.ALL_LEVELS);
});
monitor.done();
}
};
try {
this.parentWizardPage.getWizard().getContainer().run(true, true, runnable);
} catch (Exception e) {
ExceptionHandler.process(e);
}
}
private void retrieveAllSubNodes(TableNode tableNode, List<MetadataTable> tableList) {
tableList.clear();
List<TableNode> child = tableNode.getChildren();
boolean extended = false;
if (!child.isEmpty()) {
for (TableNode node : child) {
if (node.getType() == TableNode.TABLE) {
extended = true;
break;
}
}
}
// if extended is true, means table already got,no need to get again.
if (extended) {
return;
}
IMetadataConnection metadataConn = tableNode.getMetadataConn();
Connection conn = null;
Driver driver = null;
DatabaseMetaData dbMetaData = null;
ExtractMetaDataUtils extractMeta = ExtractMetaDataUtils.getInstance();
// Added by Marvin Wang on Mar. 13, 2013 for loading hive jars dynamically, refer to TDI-25072.
if (EDatabaseTypeName.HIVE.getXmlName().equalsIgnoreCase(metadataConn.getDbType())) {
try {
dbMetaData = HiveConnectionManager.getInstance().extractDatabaseMetaData(metadataConn);
} catch (Exception e) {
ExceptionHandler.process(e);
}
} else if (EDatabaseTypeName.IMPALA.getDisplayName().equalsIgnoreCase(metadataConn.getDbType())) {
try {
dbMetaData = ImpalaConnectionManager.getInstance().createConnection(metadataConn).getMetaData();
} catch (Exception e) {
ExceptionHandler.process(e);
}
} else {
List list = extractMeta.getConnectionList(metadataConn);
if (list != null && !list.isEmpty()) {
for (int i = 0; i < list.size(); i++) {
if (list.get(i) instanceof Connection) {
conn = (Connection) list.get(i);
}
if (list.get(i) instanceof DriverShim) {
driver = (DriverShim) list.get(i);
}
}
}
dbMetaData = extractMeta.getDatabaseMetaData(conn, metadataConn.getDbType(), metadataConn.isSqlMode(),
metadataConn.getDatabase());
}
int type = tableNode.getType();
orgomg.cwm.objectmodel.core.Package pack = null;
if (type == tableNode.CATALOG) {
if (tableNode.getChildren().isEmpty()) {
pack = tableNode.getCatalog();
} else {
for (TableNode n : tableNode.getChildren()) {
retrieveAllSubNodes(n, tableList);
}
}
} else if (type == tableNode.SCHEMA) {
pack = tableNode.getSchema();
}
try {
if (pack != null) {
TableInfoParameters paras = tableNode.getParas();
List<ETableTypes> paraType = paras.getTypes();
Set<String> availableTableTypes = new HashSet<String>();
for (ETableTypes tableType : paraType) {
availableTableTypes.add(tableType.getName());
}
// get all tables/views depending the filter selected
Set<String> tableNameFilter = null;
if (!paras.isUsedName()) {
tableNameFilter = new HashSet<String>();
if (paras.getSqlFiter() != null && !"".equals(paras.getSqlFiter())) { //$NON-NLS-1$
PreparedStatement stmt = extractMeta.getConn().prepareStatement(paras.getSqlFiter());
extractMeta.setQueryStatementTimeout(stmt);
ResultSet rsTables = stmt.executeQuery();
while (rsTables.next()) {
String nameKey = rsTables.getString(1).trim();
tableNameFilter.add(nameKey);
}
rsTables.close();
stmt.close();
}
} else {
tableNameFilter = paras.getNameFilters();
}
List<MetadataTable> tempListTables = new ArrayList<MetadataTable>();
MetadataFillFactory dbInstance = MetadataFillFactory.getDBInstance(metadataConn);
for (String filter : tableNameFilter) {
tempListTables = dbInstance.fillAll(pack, dbMetaData, metadataConn, null, filter,
availableTableTypes.toArray(new String[] {}));
for (MetadataTable table : tempListTables) {
boolean contains = false;
for (MetadataTable inListTable : tableList) {
if (inListTable.getName().equals(table.getName())) {
contains = true;
break;
}
}
if (!contains) {
tableList.add(table);
}
}
}
if (tableNameFilter.isEmpty()) {
tempListTables = dbInstance.fillAll(pack, dbMetaData, metadataConn, null, null,
availableTableTypes.toArray(new String[] {}));
for (MetadataTable table : tempListTables) {
boolean contains = false;
for (MetadataTable inListTable : tableList) {
if (inListTable.getName().equals(table.getName())) {
contains = true;
break;
}
}
if (!contains) {
tableList.add(table);
}
}
}
}
} catch (Exception e) {
ExceptionHandler.process(e);
} finally {
String dbType = metadataConn.getDbType();
// bug 22619
String driverClass = metadataConn.getDriverClass();
if (conn != null) {
ConnectionUtils.closeConnection(conn);
}
// for specific db such as derby
if (driver != null) {
if ((driverClass != null && driverClass.equals(EDatabase4DriverClassName.JAVADB_EMBEDED.getDriverClass()))
|| (dbType != null && (dbType.equals(EDatabaseTypeName.JAVADB_EMBEDED.getDisplayName())
|| dbType.equals(EDatabaseTypeName.JAVADB_DERBYCLIENT.getDisplayName())
|| dbType.equals(EDatabaseTypeName.JAVADB_JCCJDBC.getDisplayName())
|| dbType.equals(EDatabaseTypeName.HSQLDB_IN_PROGRESS.getDisplayName())))) {
try {
driver.connect("jdbc:derby:;shutdown=true", null); //$NON-NLS-1$
} catch (SQLException e) {
// exception of shutdown success. no need to catch.
}
}
}
}
if (!(tableNode.getType() == TableNode.CATALOG && pack == null)) {
transferToTableNode(tableList, tableNode);
}
}
protected void transferToTableNode(List<MetadataTable> list, TableNode parentNode) {
if (list != null && !list.isEmpty()) {
for (MetadataTable table : list) {
if (table instanceof TdTable) {
TdTable td = (TdTable) table;
TableNode tableNode = new TableNode();
tableNode.setType(TableNode.TABLE);
tableNode.setValue(td.getLabel());
tableNode.setItemType(td.getTableType());
tableNode.setTable(td);
tableNode.setParent(parentNode);
parentNode.addChild(tableNode);
} else if (table instanceof TdView) {
TdView tv = (TdView) table;
TableNode tableNode = new TableNode();
tableNode.setType(TableNode.TABLE);
tableNode.setValue(tv.getLabel());
tableNode.setItemType(tv.getTableType());
tableNode.setView(tv);
tableNode.setParent(parentNode);
parentNode.addChild(tableNode);
}
}
}
}
private final Collator col = Collator.getInstance(Locale.getDefault());
/**
@@ -943,6 +1181,10 @@ public class SelectorTableForm extends AbstractForm {
}
if (canAdd) {
tableNodes.add(schemaNode);
if (schemaNode.getValue() != null && StringUtils.isEmpty(schemaNode.getValue().trim())) {
List<MetadataTable> tableList = new ArrayList<MetadataTable>();
retrieveAllSubNodes(schemaNode, tableList);
}
}
}
}

View File

@@ -201,8 +201,8 @@ SHOW_IF="USE_FILE_AMBIGUOUS=='true'">
<CODEGENERATION>
<IMPORTS>
<IMPORT NAME="Talen File Enhanced"
MODULE="talend_file_enhanced-1.1.jar"
MVN="mvn:org.talend.components.lib/talend_file_enhanced/1.1" REQUIRED="true" />
MODULE="talend_file_enhanced-1.3.jar"
MVN="mvn:org.talend.components.lib/talend_file_enhanced/1.3" REQUIRED="true" />
<IMPORT NAME="Talend_CSV" MODULE="talendcsv.jar"
MVN="mvn:org.talend.libraries/talendcsv/6.0.0"
REQUIRED="true" />

View File

@@ -5,4 +5,5 @@ bin.includes = META-INF/,\
schema/,\
plugin.xml,\
OSGI-INF/,\
repository/,\
icons/

View File

@@ -9,4 +9,119 @@
</parent>
<artifactId>org.talend.updates.runtime</artifactId>
<packaging>eclipse-plugin</packaging>
<dependencies>
<dependency>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.22.2</version>
<exclusions>
<exclusion>
<groupId>org.sonatype.plexus</groupId>
<artifactId>plexus-cipher</artifactId>
</exclusion>
<exclusion>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
</exclusion>
<exclusion>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.apache.maven.surefire</groupId>
<artifactId>surefire-junit4</artifactId>
<version>2.22.2</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.11</version>
</dependency>
<dependency>
<groupId>org.codehaus.plexus</groupId>
<artifactId>plexus-component-annotations</artifactId>
<version>1.7.1</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-deploy-plugin</artifactId>
<version>2.8.2</version>
<executions>
<execution>
<id>default-deploy</id>
<phase>deploy</phase>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-clean-plugin</artifactId>
<version>3.1.0</version>
<configuration>
<filesets>
<fileset>
<directory>${project.basedir}/repository</directory>
<includes>
<include>**/*</include>
</includes>
<followSymlinks>false</followSymlinks>
</fileset>
<fileset>
<directory>${project.basedir}/tmp</directory>
<includes>
<include>**/*</include>
</includes>
<followSymlinks>false</followSymlinks>
</fileset>
</filesets>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<id>copy-dependencies-jar</id>
<phase>generate-sources</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<outputDirectory>${project.basedir}/tmp</outputDirectory>
<includeScope>runtime</includeScope>
<useRepositoryLayout>true</useRepositoryLayout>
<addParentPoms>true</addParentPoms>
<copyPom>true</copyPom>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
<version>1.8</version>
<executions>
<execution>
<id>zip-maven-repository</id>
<phase>generate-sources</phase>
<configuration>
<tasks>
<zip destfile="${project.basedir}/repository/maven_repository.zip" basedir="${project.basedir}/tmp/" />
<delete dir="${project.basedir}/tmp/" />
</tasks>
</configuration>
<goals>
<goal>run</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>

View File

@@ -0,0 +1,2 @@
*.zip
*.properties

View File

@@ -0,0 +1,124 @@
// ============================================================================
//
// Copyright (C) 2006-2023 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.updates.runtime.maven;
import java.io.File;
import java.lang.reflect.InvocationTargetException;
import org.eclipse.core.runtime.IProgressMonitor;
import org.osgi.framework.Bundle;
import org.osgi.framework.FrameworkUtil;
import org.talend.commons.exception.ExceptionHandler;
import org.talend.core.GlobalServiceRegister;
import org.talend.core.ILibraryManagerService;
import org.talend.core.model.utils.BaseComponentInstallerTask;
import org.talend.core.model.utils.ComponentGAV;
import org.talend.core.nexus.TalendMavenResolver;
import org.talend.core.runtime.maven.MavenArtifact;
import org.talend.designer.maven.model.TalendMavenConstants;
import org.talend.designer.maven.utils.PomUtil;
import org.talend.updates.runtime.UpdatesRuntimePlugin;
import org.talend.utils.files.FileUtils;
public class M2repoBaseInstaller extends BaseComponentInstallerTask {
private static final String PLUGIN_GROUP = "org.talend.studio";
private static final String SYS_PROP_M2 = "m2.update";
protected boolean updateM2() {
String prop = System.getProperty(SYS_PROP_M2, "true");
return Boolean.valueOf(prop);
}
@Override
public boolean needInstall() {
if (this.updateM2()) {
return true;
}
ComponentGAV gav = this.getPluginGAV();
ILibraryManagerService librairesManagerService = (ILibraryManagerService) GlobalServiceRegister.getDefault().getService(ILibraryManagerService.class);
if (librairesManagerService != null) {
File f = librairesManagerService.resolveStatusLocally(gav.toMavenUri());
if (f == null) {
return true;
}
}
return false;
}
@Override
public boolean install(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException {
boolean ret = super.install(monitor);
if (ret) {
// install pom
File tempFolder = FileUtils.createTmpFolder("generate", "pom");
ComponentGAV gav = this.getPluginGAV();
MavenArtifact art = new MavenArtifact();
art.setGroupId(gav.getGroupId());
art.setArtifactId(gav.getArtifactId());
art.setVersion(gav.getVersion());
art.setType(gav.getType());
try {
String pomPath = PomUtil.generatePomInFolder(tempFolder, art);
TalendMavenResolver.upload(art.getGroupId(), art.getArtifactId(), art.getClassifier(), TalendMavenConstants.PACKAGING_POM, art.getVersion(), new File(pomPath));
} catch (Exception e) {
ExceptionHandler.process(e);
}
}
return ret;
}
@Override
protected String getMonitorText() {
ComponentGAV gav = this.getPluginGAV();
return gav.getArtifactId();
}
protected ComponentGAV getPluginGAV() {
Bundle bundle = FrameworkUtil.getBundle(getInstallerClass());
String[] bundleName = bundle.getSymbolicName().split("\\.");
String artifactId = bundleName[bundleName.length - 1];
if (bundleName.length > 1) {
artifactId = bundleName[bundleName.length - 2] + "-" + bundleName[bundleName.length - 1];
}
ComponentGAV gav = new ComponentGAV();
gav.setGroupId(PLUGIN_GROUP);
gav.setArtifactId(artifactId);
gav.setVersion(bundle.getVersion().toString());
gav.setType(TalendMavenConstants.PACKAGING_POM);
return gav;
}
@Override
protected Class<? extends BaseComponentInstallerTask> getInstallerClass() {
return M2repoBaseInstaller.class;
}
}

View File

@@ -17,17 +17,19 @@ import java.util.LinkedHashSet;
import java.util.List;
import java.util.Set;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang.StringUtils;
import org.apache.log4j.Logger;
import org.codehaus.plexus.util.FileUtils;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.NullProgressMonitor;
import org.talend.commons.exception.ExceptionHandler;
import org.talend.commons.utils.resource.FileExtensions;
import org.talend.core.nexus.ArtifactRepositoryBean;
import org.talend.core.runtime.util.SharedStudioUtils;
import org.talend.core.service.IUpdateService;
import org.talend.updates.runtime.engine.component.InstallComponentMessages;
import org.talend.updates.runtime.engine.factory.ComponentsLocalNexusInstallFactory;
import org.talend.updates.runtime.maven.M2repoBaseInstaller;
import org.talend.updates.runtime.maven.MavenRepoSynchronizer;
import org.talend.updates.runtime.model.ExtraFeature;
import org.talend.updates.runtime.model.FeatureCategory;
@@ -158,5 +160,17 @@ public class UpdateService implements IUpdateService {
public boolean updateArtifactsFileSha256Hex(IProgressMonitor monitor, String studioArtifactsFileShaCodeHex) {
return SharedStudioPatchInfoProvider.getInstance().updateArtifactsFileSha256Hex(studioArtifactsFileShaCodeHex);
}
/**
* Check and install components
*/
public void installComponents(IProgressMonitor monitor) {
M2repoBaseInstaller installer = new M2repoBaseInstaller();
try {
installer.install(monitor);
} catch (Exception e) {
ExceptionHandler.process(e);
}
}
}

View File

@@ -22,12 +22,12 @@
<version>1.0.0</version>
<type>dll</type>
</dependency>
<dependency>
<!--dependency>
<groupId>org.talend.studio.test</groupId>
<artifactId>nexus.upload.test.new</artifactId>
<version>1.0.0</version>
<type>exe</type>
</dependency>
</dependency-->
<dependency>
<groupId>org.talend.studio.test</groupId>
<artifactId>nexus.upload.test.new</artifactId>
@@ -45,12 +45,12 @@
<version>1.0.0</version>
<type>dll</type>
</dependency>
<dependency>
<!--dependency>
<groupId>org.talend.studio.test</groupId>
<artifactId>nexus.upload.test.old</artifactId>
<version>1.0.0</version>
<type>exe</type>
</dependency>
</dependency-->
<dependency>
<groupId>org.talend.studio.test</groupId>
<artifactId>nexus.upload.test.old</artifactId>

View File

@@ -66,7 +66,7 @@ public class Nexus3RepositoryHandlerTest {
private static Properties nexusprops = new Properties();
private static ArtifactRepositoryBean customNexusServer;
private static IRepositoryArtifactHandler repHandler;
private static String[] types = new String[] {"jar", "pom", "exe", "zip", "dll"};
private static String[] types = new String[] {"jar", "pom", "zip", "dll"};
@BeforeClass
public static void init() throws FileNotFoundException, IOException {