Merge branch 'maintenance/8.0' into maintenance_8.0/standalone_microservice

This commit is contained in:
Abdulhamid Rashankar
2024-01-23 10:09:04 +01:00
9 changed files with 192 additions and 21 deletions

View File

@@ -55,7 +55,7 @@ public enum EDatabaseVersion4Drivers {
//
JAVADB_EMBEDED(new DbVersion4Drivers(EDatabaseTypeName.JAVADB_EMBEDED, "derby-10.14.2.0.jar")), //$NON-NLS-1$
SQLITE(new DbVersion4Drivers(EDatabaseTypeName.SQLITE, "sqlite-jdbc-3.40.0.0.jar")), //$NON-NLS-1$
SQLITE(new DbVersion4Drivers(EDatabaseTypeName.SQLITE, new String[] { "slf4j-api-1.7.34.jar", "sqlite-jdbc-3.44.1.0.jar" })), //$NON-NLS-1$
FIREBIRD(new DbVersion4Drivers(EDatabaseTypeName.FIREBIRD, "jaybird-2.1.1.jar")), //$NON-NLS-1$
TERADATA(new DbVersion4Drivers(EDatabaseTypeName.TERADATA,
new String[] { "terajdbc4-17.10.00.27.jar" })), //$NON-NLS-1$

View File

@@ -36,4 +36,7 @@ public interface IReferenceProjectProvider {
public void initSettings() throws BusinessException, PersistenceException;
public boolean isHasConfigurationFile();
void resetReferenceProjectList();
}

View File

@@ -251,6 +251,12 @@ public class ReferenceProjectProvider implements IReferenceProjectProvider {
public static void removeTacReferenceList(String projectLabel) {
tacReferenceMap.remove(projectLabel);
}
@Override
public void resetReferenceProjectList() {
referenceProjectList = null;
}
}
class ReferenceProjectConfiguration {

View File

@@ -12,6 +12,12 @@
// ============================================================================
package org.talend.designer.maven.aether.util;
import java.net.InetSocketAddress;
import java.net.SocketAddress;
import java.net.URI;
import java.net.URISyntaxException;
import java.util.List;
import org.eclipse.aether.repository.Authentication;
import org.eclipse.aether.repository.Proxy;
import org.eclipse.aether.repository.ProxySelector;
@@ -35,6 +41,7 @@ public class TalendAetherProxySelector implements ProxySelector {
@Override
public Proxy getProxy(RemoteRepository repository) {
/**
* Update each time in case the settings are changed
*/
@@ -53,6 +60,37 @@ public class TalendAetherProxySelector implements ProxySelector {
ExceptionHandler.process(e);
}
}
if (proxy == null) {
java.net.ProxySelector jreSelector = java.net.ProxySelector.getDefault();
try {
URI uri = new URI(repository.getUrl());
List<java.net.Proxy> proxies = jreSelector.select(uri);
if (proxies != null && !proxies.isEmpty() && proxies.get(0).type() == java.net.Proxy.Type.HTTP) {
SocketAddress addr = proxies.get(0).address();
if (addr instanceof InetSocketAddress) {
InetSocketAddress iaddr = (InetSocketAddress) addr;
proxy = new org.eclipse.aether.repository.Proxy(proxies.get(0).type().name().toLowerCase(), iaddr.getHostName(), iaddr.getPort(), null);
}
}
} catch (URISyntaxException e) {
ExceptionHandler.process(e);
}
}
if (isTalendDebug) {
try {
if (repository != null) {
String proxyStr = "";
if (proxy != null) {
proxyStr = proxy.getType() + " " + proxy.toString() + ", proxy user: "
+ (proxy.getAuthentication() != null ? "..." : "<empty>");
}
ExceptionHandler.log("Aether system proxy> host: " + repository.getHost() + ", proxy: " + proxyStr);
}
} catch (Exception e) {
ExceptionHandler.process(e);
}
}
return proxy;
}

View File

@@ -190,8 +190,16 @@
context="plugin:org.talend.metadata.managment"
language="java"
message="Needed for create sqlite connection"
mvn_uri="mvn:org.xerial/sqlite-jdbc/3.40.0.0"
name="sqlite-jdbc-3.40.0.0.jar"
mvn_uri="mvn:org.xerial/sqlite-jdbc/3.44.1.0"
name="sqlite-jdbc-3.44.1.0.jar"
required="true">
</libraryNeeded>
<libraryNeeded
context="plugin:org.talend.metadata.managment"
language="java"
message="Needed for create sqlite connection"
mvn_uri="mvn:org.slf4j/slf4j-api/1.7.34"
name="slf4j-api-1.7.34.jar"
required="true">
</libraryNeeded>
<libraryNeeded

View File

@@ -1913,6 +1913,7 @@ public class LocalRepositoryFactory extends AbstractEMFRepositoryFactory impleme
IPath parentPath = null;
Project project = getRepositoryContext().getProject();
IProject fsProject = ResourceUtils.getProject(project);
List<Resource> crossReferences = new ArrayList<Resource>();
List<IRepositoryViewObject> allRepositoryViewObject = new ArrayList<IRepositoryViewObject>();
for (IRepositoryViewObject objToMove : objToMoves) {
ERepositoryObjectType type = null;
@@ -1977,18 +1978,19 @@ public class LocalRepositoryFactory extends AbstractEMFRepositoryFactory impleme
resourceFolderMap.put(resource, folder);
}
}
Map<Resource, IPath> resourceAndPathMap = new HashMap<Resource, IPath>();
for (Resource resource : allResource) {
IFolder resfolder = resourceFolderMap.get(resource);
IPath path = resfolder.getFullPath().append(resource.getURI().lastSegment());
resourceAndPathMap.put(resource, path);
// Find cross references.
crossReferences.addAll(findCrossReference(resource));
moveResource(resource, path);
}
allResource.clear();
}
Map<Resource, IPath> resourceAndPathMap = new HashMap<Resource, IPath>();
List<Resource> crossReferences = new ArrayList<Resource>();
for (Resource resource : allResource) {
IFolder folder = resourceFolderMap.get(resource);
IPath path = folder.getFullPath().append(resource.getURI().lastSegment());
resourceAndPathMap.put(resource, path);
// Find cross references.
crossReferences.addAll(findCrossReference(resource));
moveResource(resource, path);
}
// Save cross references.
saveCrossReference(crossReferences);

View File

@@ -13,6 +13,7 @@
package org.talend.signon.util;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.apache.log4j.Logger;
@@ -68,6 +69,7 @@ public class TMCRepositoryUtil {
public static final Pattern DATA_CENTER_PATTERN = Pattern.compile("^http[s?]://tmc\\.(.*)(\\.cloud\\.talend\\.com.*)", Pattern.CASE_INSENSITIVE);
public static final String DEFAULT_DATA_CENTER = "us";
public static String getBaseLoginURL(String dataCenter) {
if (dataCenter == null) {
@@ -77,7 +79,7 @@ public class TMCRepositoryUtil {
}
public static String getDefaultDataCenter() {
String defaultDataCenter = "us";
String defaultDataCenter = DEFAULT_DATA_CENTER;
if (getRecentDataCenter() != null) {
defaultDataCenter = getRecentDataCenter();
}
@@ -163,4 +165,16 @@ public class TMCRepositoryUtil {
public static String getTokenIntrospectURL(String dataCenter) {
return String.format(TOKEN_INTROSPECT_URL, dataCenter);
}
public static String getDataCenterFromTmcUrl(String tmcUrl) {
String dataCenter = TMCRepositoryUtil.DEFAULT_DATA_CENTER;
Matcher m = DATA_CENTER_PATTERN.matcher(tmcUrl);
if (!m.matches()) {
// custom cloud
LOGGER.info("Use default data center, can not find data center area from tmcUrl: " + tmcUrl);
} else {
dataCenter = m.group(1);
}
return dataCenter;
}
}

View File

@@ -184,27 +184,33 @@ public class BaseRepositoryTest {
}
protected ProcessItem createTempProcessItem(LocalRepositoryFactory factory, String path) throws PersistenceException {
ProcessItem processItem = createTempProcessItem(factory, path, "myJob", "0.1", factory.getNextId());
return processItem;
}
protected ProcessItem createTempProcessItem(LocalRepositoryFactory factory, String path, String jobLabel, String jobVersion, String id) throws PersistenceException {
ProcessItem processItem = PropertiesFactory.eINSTANCE.createProcessItem();
Property myProperty = PropertiesFactory.eINSTANCE.createProperty();
ItemState itemState = PropertiesFactory.eINSTANCE.createItemState();
itemState.setPath(path);
processItem.setProperty(myProperty);
processItem.setState(itemState);
myProperty.setId(factory.getNextId());
myProperty.setLabel("myJob");
myProperty.setVersion("0.1");
myProperty.setId(id);
myProperty.setLabel(jobLabel);
myProperty.setVersion(jobVersion);
processItem.setProcess(TalendFileFactory.eINSTANCE.createProcessType());
processItem.getProcess().getNode().add(TalendFileFactory.eINSTANCE.createNodeType());
((NodeType) processItem.getProcess().getNode().get(0)).setComponentName("test");
((NodeType) processItem.getProcess().getNode().get(0)).setComponentVersion("0.1");
if (!"".equals(path)) {
factory.createFolder(sampleProject, ERepositoryObjectType.PROCESS, new Path(""), path);
}
factory.create(sampleProject, processItem, new Path(path), false);
return processItem;
}

View File

@@ -12,13 +12,18 @@
// ============================================================================
package org.talend.repository.localprovider.model;
import static org.assertj.core.api.Assertions.assertThat;
import static org.junit.Assert.*;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.ParserConfigurationException;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IFolder;
import org.eclipse.core.resources.IProject;
@@ -58,6 +63,10 @@ import org.talend.designer.core.model.utils.emf.talendfile.NodeType;
import org.talend.designer.core.model.utils.emf.talendfile.ProcessType;
import org.talend.designer.core.model.utils.emf.talendfile.TalendFileFactory;
import org.talend.repository.ProjectManager;
import org.talend.utils.xml.XmlUtils;
import org.w3c.dom.Document;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
/**
* DOC nrousseau class global comment. Detailled comment
@@ -1053,6 +1062,91 @@ public class LocalRepositoryFactoryTest extends BaseRepositoryTest {
assertTrue(fileProperty.exists());
}
/**
* Test method for
* {@link org.talend.repository.localprovider.model.LocalRepositoryFactory#moveObjectMulti(org.talend.core.model.repository.IRepositoryViewObject[], org.eclipse.core.runtime.IPath)}
* .
* take process for example, test move multi jobs, each job has multi versions
*
* @throws CoreException
* @throws PersistenceException
* @throws LoginException
* @throws IOException
* @throws ParserConfigurationException
*/
@Test
public void testmoveObjectMulti() throws LoginException, PersistenceException, IOException, CoreException, ParserConfigurationException {
repositoryFactory.logOnProject(sampleProject);
String version[] = {"0.1", "0.2", "0.3"};
// String version[] = {"0.1"};
String jobLabel = "job";
int nums = 3; // number of jobs, for test move as a group
List<IRepositoryViewObject> objects = new ArrayList<IRepositoryViewObject>();
ERepositoryObjectType type = ERepositoryObjectType.PROCESS;
for (int i = 0; i < nums; i++) {
String propId = repositoryFactory.getNextId();
ProcessItem processItem = createTempProcessItem(repositoryFactory, "", jobLabel + i, version[0], propId);
for (int j = 1; j < version.length; j++) {
String originalVersion = processItem.getProperty().getVersion();
processItem.getProperty().setVersion(version[j]);
ProxyRepositoryFactory.getInstance().save(processItem.getProperty(), processItem.getProperty().getLabel(), originalVersion);
}
String processId = processItem.getProperty().getId();
IRepositoryViewObject lastVersion = repositoryFactory.getLastVersion(sampleProject, processId, "", type);
assertNotNull(lastVersion);
objects.add(lastVersion);
}
String targetFolder = "moveMultiToThisFolder";
final Folder createFolder = repositoryFactory.createFolder(sampleProject, type, new Path(""), targetFolder);
assertNotNull(createFolder);
IPath ipath = new Path(createFolder.getLabel());
repositoryFactory.moveObjectMulti(objects.toArray(new IRepositoryViewObject[0]), ipath);
//verify in memory
FolderItem folderItem = repositoryFactory.getFolderItem(sampleProject, type, ipath);
assertEquals("after move multi jobs, the target folder has own children now in memory", nums * version.length, folderItem.getChildren().size());
//verify local files
IProject project = ResourceUtils.getProject(sampleProject);
for (int i = 0; i < nums; i++) {
ProcessItem processItem = null;
for (int j = 0; j < version.length; j++) {
checkMoveObjectFileExists(project, type, createFolder.getLabel(), jobLabel + i, version[j]);
checkAuthorPathInProperties(version[j], jobLabel + i, type, targetFolder, project);
}
}
//
repositoryFactory.batchDeleteObjectPhysical(sampleProject, objects, true, false);
}
private void checkAuthorPathInProperties(String version, String jobLabel, ERepositoryObjectType type, String targetFolder,
IProject project) {
// verify author path change in properties file: for example, <author
// href="../../talend.project#_UrUe4JXNEe6e9KueIEhr5Q"/>
try {
IFile fileProperty = project.getFile(new Path(ERepositoryObjectType.getFolderName(type) + "/" + targetFolder
+ "/" + jobLabel + "_" + version + ".properties"));
DocumentBuilder docBuilder = XmlUtils.getSecureDocumentBuilderFactory().newInstance().newDocumentBuilder();
Document doc = docBuilder.parse(fileProperty.getContents());
NodeList authorTag = doc.getElementsByTagName("author");
if (authorTag == null || authorTag.getLength() != 1) {
assertThat("author element not found");
}
Node hrefAttrItem = authorTag.item(0).getAttributes().getNamedItem("href");
String nodeValue = hrefAttrItem.getNodeValue();
assertTrue("relative href path for author: " + nodeValue, nodeValue.startsWith("../../"));
} catch (Exception e) {
}
}
/**
* Test method for