diff --git a/main/plugins/org.talend.core.runtime/src/main/java/org/talend/core/database/conn/version/EDatabaseVersion4Drivers.java b/main/plugins/org.talend.core.runtime/src/main/java/org/talend/core/database/conn/version/EDatabaseVersion4Drivers.java index e0a3894fe7..5877e8f49b 100644 --- a/main/plugins/org.talend.core.runtime/src/main/java/org/talend/core/database/conn/version/EDatabaseVersion4Drivers.java +++ b/main/plugins/org.talend.core.runtime/src/main/java/org/talend/core/database/conn/version/EDatabaseVersion4Drivers.java @@ -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$ diff --git a/main/plugins/org.talend.core.runtime/src/main/java/org/talend/repository/IReferenceProjectProvider.java b/main/plugins/org.talend.core.runtime/src/main/java/org/talend/repository/IReferenceProjectProvider.java index 95696a1f10..40f46aab65 100644 --- a/main/plugins/org.talend.core.runtime/src/main/java/org/talend/repository/IReferenceProjectProvider.java +++ b/main/plugins/org.talend.core.runtime/src/main/java/org/talend/repository/IReferenceProjectProvider.java @@ -36,4 +36,7 @@ public interface IReferenceProjectProvider { public void initSettings() throws BusinessException, PersistenceException; public boolean isHasConfigurationFile(); + + void resetReferenceProjectList(); + } diff --git a/main/plugins/org.talend.core.runtime/src/main/java/org/talend/repository/ReferenceProjectProvider.java b/main/plugins/org.talend.core.runtime/src/main/java/org/talend/repository/ReferenceProjectProvider.java index 3c927157b3..455e23dbae 100644 --- a/main/plugins/org.talend.core.runtime/src/main/java/org/talend/repository/ReferenceProjectProvider.java +++ b/main/plugins/org.talend.core.runtime/src/main/java/org/talend/repository/ReferenceProjectProvider.java @@ -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 { diff --git a/main/plugins/org.talend.designer.maven.aether/src/main/java/org/talend/designer/maven/aether/util/TalendAetherProxySelector.java b/main/plugins/org.talend.designer.maven.aether/src/main/java/org/talend/designer/maven/aether/util/TalendAetherProxySelector.java index 78096fe038..e3347a727c 100644 --- a/main/plugins/org.talend.designer.maven.aether/src/main/java/org/talend/designer/maven/aether/util/TalendAetherProxySelector.java +++ b/main/plugins/org.talend.designer.maven.aether/src/main/java/org/talend/designer/maven/aether/util/TalendAetherProxySelector.java @@ -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 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 ? "..." : ""); + } + ExceptionHandler.log("Aether system proxy> host: " + repository.getHost() + ", proxy: " + proxyStr); + } + } catch (Exception e) { + ExceptionHandler.process(e); + } + } return proxy; } diff --git a/main/plugins/org.talend.metadata.managment/plugin.xml b/main/plugins/org.talend.metadata.managment/plugin.xml index b5eb2a8505..91620ad14a 100644 --- a/main/plugins/org.talend.metadata.managment/plugin.xml +++ b/main/plugins/org.talend.metadata.managment/plugin.xml @@ -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"> + + crossReferences = new ArrayList(); List allRepositoryViewObject = new ArrayList(); for (IRepositoryViewObject objToMove : objToMoves) { ERepositoryObjectType type = null; @@ -1977,18 +1978,19 @@ public class LocalRepositoryFactory extends AbstractEMFRepositoryFactory impleme resourceFolderMap.put(resource, folder); } } + Map resourceAndPathMap = new HashMap(); + + 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 resourceAndPathMap = new HashMap(); - List crossReferences = new ArrayList(); - 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); diff --git a/main/plugins/org.talend.signon.util/src/main/java/org/talend/signon/util/TMCRepositoryUtil.java b/main/plugins/org.talend.signon.util/src/main/java/org/talend/signon/util/TMCRepositoryUtil.java index 1b420a7467..6e31b65cf5 100644 --- a/main/plugins/org.talend.signon.util/src/main/java/org/talend/signon/util/TMCRepositoryUtil.java +++ b/main/plugins/org.talend.signon.util/src/main/java/org/talend/signon/util/TMCRepositoryUtil.java @@ -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; + } } diff --git a/test/plugins/org.talend.repository.localprovider.test/src/org/talend/repository/localprovider/model/BaseRepositoryTest.java b/test/plugins/org.talend.repository.localprovider.test/src/org/talend/repository/localprovider/model/BaseRepositoryTest.java index a69a3ec3f8..03ff1f65a7 100644 --- a/test/plugins/org.talend.repository.localprovider.test/src/org/talend/repository/localprovider/model/BaseRepositoryTest.java +++ b/test/plugins/org.talend.repository.localprovider.test/src/org/talend/repository/localprovider/model/BaseRepositoryTest.java @@ -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; } diff --git a/test/plugins/org.talend.repository.localprovider.test/src/org/talend/repository/localprovider/model/LocalRepositoryFactoryTest.java b/test/plugins/org.talend.repository.localprovider.test/src/org/talend/repository/localprovider/model/LocalRepositoryFactoryTest.java index 3457ce587f..a5631c3c99 100644 --- a/test/plugins/org.talend.repository.localprovider.test/src/org/talend/repository/localprovider/model/LocalRepositoryFactoryTest.java +++ b/test/plugins/org.talend.repository.localprovider.test/src/org/talend/repository/localprovider/model/LocalRepositoryFactoryTest.java @@ -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 objects = new ArrayList(); + 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, + 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