Merge branch 'maintenance/8.0' into maintenance_8.0/standalone_microservice
This commit is contained in:
@@ -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$
|
||||
|
||||
@@ -36,4 +36,7 @@ public interface IReferenceProjectProvider {
|
||||
public void initSettings() throws BusinessException, PersistenceException;
|
||||
|
||||
public boolean isHasConfigurationFile();
|
||||
|
||||
void resetReferenceProjectList();
|
||||
|
||||
}
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user