Compare commits
18 Commits
patchrelea
...
patch/7.3.
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
f62e85356c | ||
|
|
81a6422c0b | ||
|
|
941c36921b | ||
|
|
e01cecfb68 | ||
|
|
9d3fb2213b | ||
|
|
aa4ccadbaf | ||
|
|
1c7f2a311c | ||
|
|
0b7cba2a9d | ||
|
|
f8dd9f0c1a | ||
|
|
9c12a2e19e | ||
|
|
a2132cb833 | ||
|
|
ed4655f2aa | ||
|
|
910e3fb601 | ||
|
|
bda6b0a1a7 | ||
|
|
4ad4d3e5b2 | ||
|
|
8031d9adb3 | ||
|
|
74232f3dc3 | ||
|
|
b2e5ab5630 |
@@ -6,7 +6,6 @@
|
||||
<license url="http://www.example.com/license">[Enter License Description here.]</license>
|
||||
<plugin id="org.talend.libraries.jdbc.access" download-size="0" install-size="0" version="0.0.0"/>
|
||||
<plugin id="org.talend.libraries.jdbc.as400" download-size="0" install-size="0" version="0.0.0"/>
|
||||
<plugin id="org.talend.libraries.jdbc.derby" download-size="0" install-size="0" version="0.0.0"/>
|
||||
<plugin id="org.talend.libraries.jdbc.exasol" download-size="0" install-size="0" version="0.0.0"/>
|
||||
<plugin id="org.talend.libraries.jdbc.h2" download-size="0" install-size="0" version="0.0.0"/>
|
||||
<plugin id="org.talend.libraries.jdbc.hsql" download-size="0" install-size="0" version="0.0.0"/>
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
<import plugin="com.thoughtworks.paranamer" version="0.0.0" match="greaterOrEqual"/>
|
||||
<import plugin="jackson-core-asl" version="0.0.0" match="greaterOrEqual"/>
|
||||
<import plugin="jackson-mapper-asl" version="0.0.0" match="greaterOrEqual"/>
|
||||
<import plugin="org.apache.commons.codec" version="0.0.0" match="greaterOrEqual"/>
|
||||
<import plugin="org.apache.commons.codec" version="1.14.0" match="greaterOrEqual"/>
|
||||
<import plugin="org.apache.commons.compress" version="1.10.0" match="greaterOrEqual"/>
|
||||
<import plugin="org.apache.commons.lang" version="0.0.0" match="greaterOrEqual"/>
|
||||
<import plugin="org.apache.commons.lang3" version="0.0.0" match="greaterOrEqual"/>
|
||||
|
||||
BIN
main/plugins/org.talend.common.ui.runtime/icons1/routinesjar.png
Normal file
BIN
main/plugins/org.talend.common.ui.runtime/icons1/routinesjar.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 768 B |
@@ -77,6 +77,7 @@ public enum ECoreImage implements IImage {
|
||||
ROUTES_ICON("/icons1/routes_icon.png"), //$NON-NLS-1$
|
||||
ROUTINE_ICON("/icons1/routine.png"), //$NON-NLS-1$
|
||||
ROUTINE_EDITOR_ICON("/icons1/routine_editor.png"), //$NON-NLS-1$
|
||||
ROUTINESJAR_ICON("/icons1/routinesjar.png"), //$NON-NLS-1$
|
||||
JOB_SCRIPTS_ICON("/icons1/job_scripts.png"), //$NON-NLS-1$
|
||||
JOB_SCRIPTS_TOOLBAR_ICON("/icons1/job_script_toolbar.png"), //$NON-NLS-1$
|
||||
FTP_ICON("/icons1/ftp.png"), //$NON-NLS-1$
|
||||
|
||||
@@ -92,7 +92,7 @@
|
||||
<dependency>
|
||||
<groupId>xerces</groupId>
|
||||
<artifactId>xercesImpl</artifactId>
|
||||
<version>2.11.0</version>
|
||||
<version>2.12.0</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>log4j</groupId>
|
||||
|
||||
@@ -13,13 +13,13 @@
|
||||
package org.talend.commons.utils.time;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.FileInputStream;
|
||||
import java.io.FileNotFoundException;
|
||||
import java.io.FileOutputStream;
|
||||
import java.io.IOException;
|
||||
import java.io.RandomAccessFile;
|
||||
import java.math.BigDecimal;
|
||||
import java.math.RoundingMode;
|
||||
import java.nio.file.Files;
|
||||
import java.nio.file.Paths;
|
||||
import java.nio.file.StandardCopyOption;
|
||||
import java.util.Properties;
|
||||
import java.util.Random;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
@@ -82,7 +82,7 @@ public class PerformanceStatisticUtil {
|
||||
public static void recordStartupEpapsedTime(double elapsedTimeInSeconds) {
|
||||
File file = getRecordingFile();
|
||||
|
||||
Properties props = read(file, true);
|
||||
Properties props = PropertiesFileUtil.read(file, true);
|
||||
String propCount = props.getProperty(StatisticKeys.STARTUP_COUNT.get(), "0");
|
||||
String propMax = props.getProperty(StatisticKeys.STARTUP_MAX.get(), "0");
|
||||
String propAverage = props.getProperty(StatisticKeys.STARTUP_AVERAGE.get(), "0");
|
||||
@@ -99,7 +99,7 @@ public class PerformanceStatisticUtil {
|
||||
props.setProperty(StatisticKeys.STARTUP_MAX.get(), "" + iPropMax);
|
||||
props.setProperty(StatisticKeys.STARTUP_AVERAGE.get(), "" + iPropAverage);
|
||||
|
||||
store(file, props);
|
||||
PropertiesFileUtil.store(file, props);
|
||||
}
|
||||
|
||||
public static File getRecordingFile() {
|
||||
@@ -108,75 +108,41 @@ public class PerformanceStatisticUtil {
|
||||
}
|
||||
|
||||
String configurationLocation = Platform.getConfigurationLocation().getURL().getPath();
|
||||
File file = new File(configurationLocation + "/" + recordingFileName);
|
||||
File file = new File(configurationLocation + "/data_collector/" + recordingFileName);
|
||||
File oldFile = new File(configurationLocation + "/" + recordingFileName);
|
||||
if(oldFile.exists()) {
|
||||
if(!file.exists()) {
|
||||
if(!file.getParentFile().exists()) {
|
||||
file.getParentFile().mkdirs();
|
||||
}
|
||||
try {
|
||||
Files.move(Paths.get(oldFile.toURI()), Paths.get(file.toURI()), StandardCopyOption.ATOMIC_MOVE);
|
||||
} catch (IOException e) {
|
||||
CommonExceptionHandler.log(e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
try {
|
||||
Files.deleteIfExists(Paths.get(oldFile.toURI()));
|
||||
} catch (IOException e) {
|
||||
CommonExceptionHandler.log(e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
return file;
|
||||
}
|
||||
|
||||
public static void setRecordingFile(File _recordingFile) {
|
||||
recordingFile = _recordingFile;
|
||||
}
|
||||
|
||||
public static synchronized Properties read(File recordFile, boolean createIfNotExist) {
|
||||
Properties props = new Properties();
|
||||
if (recordFile != null && exist(recordFile, createIfNotExist)) {
|
||||
FileInputStream inStream = null;
|
||||
try {
|
||||
inStream = new FileInputStream(recordFile);
|
||||
props.load(inStream);
|
||||
} catch (Exception e) {
|
||||
CommonExceptionHandler.log(e.getMessage());
|
||||
} finally {
|
||||
if (inStream != null) {
|
||||
try {
|
||||
inStream.close();
|
||||
} catch (IOException e) {//
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static void reset() {
|
||||
File _recordingFile = getRecordingFile();
|
||||
try {
|
||||
Files.deleteIfExists(Paths.get(_recordingFile.toURI()));
|
||||
} catch (IOException e) {
|
||||
CommonExceptionHandler.log(e.getMessage());
|
||||
}
|
||||
|
||||
return props;
|
||||
}
|
||||
|
||||
public static synchronized void store(File recordFile, Properties props) {
|
||||
if (props == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (recordFile != null && exist(recordFile, true)) {
|
||||
FileOutputStream outputStream = null;
|
||||
try {
|
||||
outputStream = new FileOutputStream(recordFile);
|
||||
props.store(outputStream, "");
|
||||
} catch (IOException e) {
|
||||
CommonExceptionHandler.log(e.getMessage());
|
||||
} finally {
|
||||
if (outputStream != null) {
|
||||
try {
|
||||
outputStream.close();
|
||||
} catch (IOException e) {
|
||||
//
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static boolean exist(File recordFile, boolean createIfNotExist) {
|
||||
boolean exists = recordFile.exists();
|
||||
if (!exists && createIfNotExist) {
|
||||
try {
|
||||
exists = recordFile.createNewFile();
|
||||
if (!exists) {
|
||||
throw new FileNotFoundException(recordFile.getName());
|
||||
}
|
||||
} catch (Exception e) {
|
||||
CommonExceptionHandler.log(e.getMessage());
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
return exists;
|
||||
}
|
||||
|
||||
private static Lock lock = new ReentrantLock();
|
||||
@@ -210,7 +176,7 @@ public class PerformanceStatisticUtil {
|
||||
|
||||
private static void _measureIO() {
|
||||
File file = getRecordingFile();
|
||||
Properties props = read(file, true);
|
||||
Properties props = PropertiesFileUtil.read(file, true);
|
||||
|
||||
IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot();
|
||||
File workspace = root.getLocation().makeAbsolute().toFile();
|
||||
@@ -221,7 +187,7 @@ public class PerformanceStatisticUtil {
|
||||
measureWrite(props, testFile);
|
||||
measureRead(props, testFile);
|
||||
|
||||
store(file, props);
|
||||
PropertiesFileUtil.store(file, props);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,93 @@
|
||||
// ============================================================================
|
||||
//
|
||||
// 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.commons.utils.time;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.FileInputStream;
|
||||
import java.io.FileNotFoundException;
|
||||
import java.io.FileOutputStream;
|
||||
import java.io.IOException;
|
||||
import java.util.Properties;
|
||||
|
||||
import org.talend.commons.exception.CommonExceptionHandler;
|
||||
|
||||
/**
|
||||
* DOC sbliu class global comment. Detailled comment
|
||||
*/
|
||||
public class PropertiesFileUtil {
|
||||
public static synchronized Properties read(File recordFile, boolean createIfNotExist) {
|
||||
Properties props = new Properties();
|
||||
if (recordFile != null && exist(recordFile, createIfNotExist)) {
|
||||
FileInputStream inStream = null;
|
||||
try {
|
||||
inStream = new FileInputStream(recordFile);
|
||||
props.load(inStream);
|
||||
} catch (Exception e) {
|
||||
CommonExceptionHandler.log(e.getMessage());
|
||||
} finally {
|
||||
if (inStream != null) {
|
||||
try {
|
||||
inStream.close();
|
||||
} catch (IOException e) {//
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return props;
|
||||
}
|
||||
|
||||
public static synchronized void store(File recordFile, Properties props) {
|
||||
if (props == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (recordFile != null && exist(recordFile, true)) {
|
||||
FileOutputStream outputStream = null;
|
||||
try {
|
||||
outputStream = new FileOutputStream(recordFile);
|
||||
props.store(outputStream, "");
|
||||
} catch (IOException e) {
|
||||
CommonExceptionHandler.log(e.getMessage());
|
||||
} finally {
|
||||
if (outputStream != null) {
|
||||
try {
|
||||
outputStream.close();
|
||||
} catch (IOException e) {
|
||||
//
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static boolean exist(File recordFile, boolean createIfNotExist) {
|
||||
boolean exists = recordFile.exists();
|
||||
if (!exists && createIfNotExist) {
|
||||
try {
|
||||
if(!recordFile.getParentFile().exists()) {
|
||||
recordFile.getParentFile().mkdirs();
|
||||
}
|
||||
exists = recordFile.createNewFile();
|
||||
if (!exists) {
|
||||
throw new FileNotFoundException(recordFile.getName());
|
||||
}
|
||||
} catch (Exception e) {
|
||||
CommonExceptionHandler.log(e.getMessage());
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
return exists;
|
||||
}
|
||||
}
|
||||
@@ -21,6 +21,7 @@ import org.talend.core.model.properties.Item;
|
||||
import org.talend.core.model.relationship.AbstractJobItemRelationshipHandler;
|
||||
import org.talend.core.model.relationship.Relation;
|
||||
import org.talend.core.model.relationship.RelationshipItemBuilder;
|
||||
import org.talend.core.model.repository.ERepositoryObjectType;
|
||||
import org.talend.designer.core.model.utils.emf.talendfile.ProcessType;
|
||||
import org.talend.designer.core.model.utils.emf.talendfile.RoutinesParameterType;
|
||||
|
||||
@@ -47,14 +48,24 @@ public class JobRoutinesItemRelationshipHandler extends AbstractJobItemRelations
|
||||
Map<String, String> currentSystemRoutinesMap = RelationshipItemBuilder.getInstance().getCurrentSystemRoutinesMap();
|
||||
for (Object o : processType.getParameters().getRoutinesParameter()) {
|
||||
RoutinesParameterType itemInfor = (RoutinesParameterType) o;
|
||||
if (currentSystemRoutinesMap.containsValue(itemInfor.getName())) {
|
||||
if (itemInfor.getName() != null && currentSystemRoutinesMap.containsValue(itemInfor.getName())) {
|
||||
// exclude system routines relation
|
||||
continue;
|
||||
}
|
||||
|
||||
Relation addedRelation = new Relation();
|
||||
addedRelation.setId(itemInfor.getName());
|
||||
addedRelation.setType(RelationshipItemBuilder.ROUTINE_RELATION);
|
||||
if (ERepositoryObjectType.ROUTINESJAR != null
|
||||
&& ERepositoryObjectType.ROUTINESJAR.getType().equals(itemInfor.getType())) {
|
||||
addedRelation.setId(itemInfor.getId());
|
||||
addedRelation.setType(RelationshipItemBuilder.ROUTINES_JAR_RELATION);
|
||||
} else if (ERepositoryObjectType.BEANSJAR != null
|
||||
&& ERepositoryObjectType.BEANSJAR.getType().equals(itemInfor.getType())) {
|
||||
addedRelation.setId(itemInfor.getId());
|
||||
addedRelation.setType(RelationshipItemBuilder.BEANS_JAR_RELATION);
|
||||
} else {
|
||||
addedRelation.setId(itemInfor.getName());
|
||||
addedRelation.setType(RelationshipItemBuilder.ROUTINE_RELATION);
|
||||
}
|
||||
addedRelation.setVersion(RelationshipItemBuilder.LATEST_VERSION);
|
||||
relationSet.add(addedRelation);
|
||||
|
||||
|
||||
@@ -15,6 +15,7 @@ package org.talend.core.repository.model;
|
||||
import java.util.List;
|
||||
|
||||
import org.eclipse.core.resources.IFile;
|
||||
import org.eclipse.core.resources.IFolder;
|
||||
import org.eclipse.core.resources.IProject;
|
||||
import org.eclipse.core.runtime.IPath;
|
||||
import org.eclipse.core.runtime.IProgressMonitor;
|
||||
@@ -186,7 +187,7 @@ public interface IRepositoryFactory {
|
||||
* @throws PersistenceException
|
||||
*/
|
||||
public List<IRepositoryViewObject> getAll(Project project, ERepositoryObjectType type, boolean withDeleted,
|
||||
boolean allVersions) throws PersistenceException;
|
||||
boolean allVersions, IFolder... folders) throws PersistenceException;
|
||||
|
||||
/**
|
||||
* Deletes logically the given object. <code>isDeleted</code> on this object will now returned <code>true</code>.
|
||||
|
||||
@@ -20,6 +20,7 @@ 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 org.apache.commons.lang.ArrayUtils;
|
||||
@@ -675,6 +676,9 @@ public class ProjectRepositoryNode extends RepositoryNode implements IProjectRep
|
||||
}
|
||||
}
|
||||
|
||||
List<IRepositoryViewObject> codeObjectList = new ArrayList<IRepositoryViewObject>();
|
||||
Map<String, List<RepositoryNode>> labelCodeJarMap = new HashMap<String, List<RepositoryNode>>();
|
||||
|
||||
for (IRepositoryViewObject currentObject : elements) {
|
||||
RepositoryNode parent = getFolder(currentObject.getRepositoryObjectType(), currentObject.getPath(), rootNodes);
|
||||
RepositoryNode parentNode = parent;
|
||||
@@ -682,20 +686,69 @@ public class ProjectRepositoryNode extends RepositoryNode implements IProjectRep
|
||||
parentNode = rootNode;
|
||||
}
|
||||
if (currentObject.isDeleted()) {
|
||||
boolean isCodeJarType = false;
|
||||
ERepositoryObjectType repositoryObjectType = currentObject.getRepositoryObjectType();
|
||||
if (ERepositoryObjectType.getAllTypesOfCodes().contains(repositoryObjectType)) {
|
||||
codeObjectList.add(currentObject);
|
||||
continue;
|
||||
} else if (ERepositoryObjectType.getAllTypesOfCodesJar().contains(repositoryObjectType)) {
|
||||
isCodeJarType = true;
|
||||
}
|
||||
|
||||
RepositoryNode repNode = new RepositoryNode(new RepositoryViewObject(currentObject.getProperty()), parentNode,
|
||||
ENodeType.REPOSITORY_ELEMENT);
|
||||
repNode.setProperties(EProperties.CONTENT_TYPE, currentObject.getRepositoryObjectType());
|
||||
repNode.setProperties(EProperties.LABEL, currentObject.getLabel());
|
||||
parentNode.getChildren().add(repNode);
|
||||
repNode.setParent(parentNode);
|
||||
|
||||
if (isCodeJarType) {
|
||||
String label = currentObject.getProperty().getLabel();
|
||||
if (labelCodeJarMap.get(label) == null) {
|
||||
labelCodeJarMap.put(label, new ArrayList<RepositoryNode>());
|
||||
}
|
||||
labelCodeJarMap.get(label).add(repNode);
|
||||
}
|
||||
} else {
|
||||
addDeletedSubItems(currentObject.getProperty().getItem(), parentNode);
|
||||
}
|
||||
}
|
||||
addDeletedCode(rootNode, codeObjectList, labelCodeJarMap);
|
||||
objects.removeAll(elements);
|
||||
addDeletedTestCases(rootNode, objects);
|
||||
}
|
||||
|
||||
private void addDeletedCode(RepositoryNode rootNode, List<IRepositoryViewObject> codeObjectList, Map<String, List<RepositoryNode>> labelCodeJarMap) {
|
||||
List<IRepositoryNode> rootNodes = rootNode.getChildren();
|
||||
for (IRepositoryViewObject codeObject : codeObjectList) {
|
||||
ERepositoryObjectType objectType = codeObject.getRepositoryObjectType();
|
||||
RepositoryNode parent = getFolder(codeObject.getRepositoryObjectType(), codeObject.getPath(), rootNodes);
|
||||
RepositoryNode parentNode = parent;
|
||||
if (parentNode == null) {
|
||||
parentNode = rootNode;
|
||||
}
|
||||
|
||||
Item parentItem = (Item) codeObject.getProperty().getItem().getParent();
|
||||
String folderItemLabel = parentItem.getProperty().getLabel();
|
||||
if (labelCodeJarMap.get(folderItemLabel) != null) {
|
||||
Optional node = labelCodeJarMap.get(folderItemLabel).stream()
|
||||
.filter(n -> ERepositoryObjectType.CodeTypeEnum.isCodeRepositoryObjectTypeMatch(n.getObjectType(),
|
||||
objectType))
|
||||
.findFirst();
|
||||
if (node.isPresent()) {
|
||||
parentNode = (RepositoryNode) node.get();
|
||||
}
|
||||
}
|
||||
|
||||
RepositoryNode repNode = new RepositoryNode(new RepositoryViewObject(codeObject.getProperty()), parentNode,
|
||||
ENodeType.REPOSITORY_ELEMENT);
|
||||
repNode.setProperties(EProperties.CONTENT_TYPE, objectType);
|
||||
repNode.setProperties(EProperties.LABEL, codeObject.getLabel());
|
||||
parentNode.getChildren().add(repNode);
|
||||
repNode.setParent(parentNode);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* DOC nrousseau Comment method "addDeletedElements".
|
||||
*
|
||||
|
||||
@@ -25,6 +25,7 @@ import java.util.Hashtable;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.regex.Pattern;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import org.apache.log4j.Level;
|
||||
import org.apache.log4j.Logger;
|
||||
@@ -106,6 +107,7 @@ import org.talend.core.model.properties.ProcessItem;
|
||||
import org.talend.core.model.properties.ProjectReference;
|
||||
import org.talend.core.model.properties.PropertiesPackage;
|
||||
import org.talend.core.model.properties.Property;
|
||||
import org.talend.core.model.properties.RoutineItem;
|
||||
import org.talend.core.model.properties.SpagoBiServer;
|
||||
import org.talend.core.model.properties.Status;
|
||||
import org.talend.core.model.properties.User;
|
||||
@@ -138,6 +140,7 @@ import org.talend.core.runtime.util.ItemDateParser;
|
||||
import org.talend.core.runtime.util.SharedStudioUtils;
|
||||
import org.talend.core.service.ICoreUIService;
|
||||
import org.talend.core.service.IUpdateService;
|
||||
import org.talend.core.utils.CodesJarResourceCache;
|
||||
import org.talend.cwm.helper.SubItemHelper;
|
||||
import org.talend.cwm.helper.TableHelper;
|
||||
import org.talend.designer.runprocess.IRunProcessService;
|
||||
@@ -1348,6 +1351,41 @@ public final class ProxyRepositoryFactory implements IProxyRepositoryFactory {
|
||||
return this.repositoryFactoryFromProvider.getAll(projectManager.getCurrentProject(), type, withDeleted, allVersions);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<IRepositoryViewObject> getAll(Project project, ERepositoryObjectType type, boolean withDeleted,
|
||||
boolean allVersions, IFolder... folders) throws PersistenceException {
|
||||
return this.repositoryFactoryFromProvider.getAll(project, type, withDeleted, allVersions, folders);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<IRepositoryViewObject> getAllCodesJars(ERepositoryObjectType type) throws PersistenceException {
|
||||
return getAllCodesJars(projectManager.getCurrentProject(), type);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<IRepositoryViewObject> getAllCodesJars(Project project, ERepositoryObjectType type) throws PersistenceException {
|
||||
return getAll(project, type).stream().filter(obj -> !(obj.getProperty().getItem() instanceof RoutineItem))
|
||||
.collect(Collectors.toList());
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<IRepositoryViewObject> getAllInnerCodes(ERepositoryObjectType codesJarType, Property jarProperty)
|
||||
throws PersistenceException {
|
||||
return getAllInnerCodes(projectManager.getCurrentProject(), codesJarType, jarProperty);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<IRepositoryViewObject> getAllInnerCodes(Project project, ERepositoryObjectType codesJarType, Property jarProperty)
|
||||
throws PersistenceException {
|
||||
// empty folder won't be commit in git, create if not exist
|
||||
IFolder folder = ResourceUtils.getProject(project).getFolder(ERepositoryObjectType.getFolderName(codesJarType))
|
||||
.getFolder(jarProperty.getLabel());
|
||||
if (!folder.exists()) {
|
||||
ResourceUtils.createFolder(folder);
|
||||
}
|
||||
return repositoryFactoryFromProvider.getAll(project, codesJarType, false, false, folder);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<String> getFolders(ERepositoryObjectType type) throws PersistenceException {
|
||||
return getFolders(projectManager.getCurrentProject(), type);
|
||||
@@ -2213,6 +2251,8 @@ public final class ProxyRepositoryFactory implements IProxyRepositoryFactory {
|
||||
ExceptionHandler.process(e);
|
||||
}
|
||||
|
||||
CodesJarResourceCache.initCodesJarCache();
|
||||
|
||||
currentMonitor = subMonitor.newChild(1, SubMonitor.SUPPRESS_NONE);
|
||||
currentMonitor.beginTask("Execute before logon migrations tasks", 1); //$NON-NLS-1$
|
||||
ProjectManager.getInstance().getMigrationRecords().clear();
|
||||
|
||||
@@ -36,7 +36,6 @@ import org.eclipse.swt.widgets.Display;
|
||||
import org.talend.commons.exception.BusinessException;
|
||||
import org.talend.commons.exception.LoginException;
|
||||
import org.talend.commons.exception.PersistenceException;
|
||||
import org.talend.commons.exception.SystemException;
|
||||
import org.talend.commons.runtime.model.repository.ERepositoryStatus;
|
||||
import org.talend.commons.ui.runtime.exception.ExceptionHandler;
|
||||
import org.talend.core.GlobalServiceRegister;
|
||||
@@ -54,11 +53,16 @@ import org.talend.core.model.properties.SQLPatternItem;
|
||||
import org.talend.core.model.relationship.RelationshipItemBuilder;
|
||||
import org.talend.core.model.repository.ERepositoryObjectType;
|
||||
import org.talend.core.model.repository.IRepositoryViewObject;
|
||||
import org.talend.core.model.routines.CodesJarInfo;
|
||||
import org.talend.core.model.routines.RoutinesUtil;
|
||||
import org.talend.core.repository.model.ProxyRepositoryFactory;
|
||||
import org.talend.core.repository.ui.dialog.PastSelectorDialog;
|
||||
import org.talend.core.repository.utils.RoutineUtils;
|
||||
import org.talend.core.runtime.services.IDesignerMavenService;
|
||||
import org.talend.core.runtime.services.IGenericDBService;
|
||||
import org.talend.core.ui.ICDCProviderService;
|
||||
import org.talend.core.ui.ITestContainerProviderService;
|
||||
import org.talend.core.utils.CodesJarResourceCache;
|
||||
import org.talend.designer.codegen.ICodeGeneratorService;
|
||||
import org.talend.repository.RepositoryWorkUnit;
|
||||
import org.talend.repository.model.IProxyRepositoryFactory;
|
||||
@@ -125,6 +129,44 @@ public class CopyObjectAction {
|
||||
// return false;
|
||||
// }
|
||||
|
||||
// disable copy for codejar
|
||||
ERepositoryObjectType sourceObjectType = objectToCopy.getRepositoryObjectType();
|
||||
if (ERepositoryObjectType.getAllTypesOfCodesJar().contains(sourceObjectType)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// disable paste between global code and custom code
|
||||
if (ERepositoryObjectType.getAllTypesOfCodes().contains(sourceObjectType) && targetNode != null) {
|
||||
IRepositoryViewObject targetObject = targetNode.getObject();
|
||||
boolean isInnerCodeSourceNode = RoutinesUtil.isInnerCodes(objectToCopy.getProperty());
|
||||
if (targetObject != null) {
|
||||
if (sourceObjectType.equals(targetObject.getRepositoryObjectType())) {
|
||||
return isInnerCodeSourceNode && RoutinesUtil.isInnerCodes(targetObject.getProperty());
|
||||
}
|
||||
|
||||
if (isInnerCodeSourceNode
|
||||
&& !ERepositoryObjectType.getAllTypesOfCodesJar().contains(targetObject.getRepositoryObjectType())) {
|
||||
return false;
|
||||
}
|
||||
if (!isInnerCodeSourceNode
|
||||
&& ERepositoryObjectType.getAllTypesOfCodesJar().contains(targetObject.getRepositoryObjectType())) {
|
||||
return false;
|
||||
}
|
||||
} else {
|
||||
// system folder node
|
||||
if (isInnerCodeSourceNode) {
|
||||
return false;
|
||||
} else {
|
||||
ERepositoryObjectType targetType = ((ERepositoryObjectType) targetNode
|
||||
.getProperties(EProperties.CONTENT_TYPE));
|
||||
if (ERepositoryObjectType.getAllTypesOfCodesJar().contains(targetType)) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
// Cannot copy system routines:
|
||||
if (objectToCopy.getRepositoryObjectType() == ERepositoryObjectType.ROUTINES) {
|
||||
Property property = objectToCopy.getProperty();
|
||||
@@ -193,7 +235,8 @@ public class CopyObjectAction {
|
||||
}
|
||||
|
||||
// for bug 0005454: Copy paste with keyboard in the repository view doesn't work.
|
||||
if (targetNode.getType() == ENodeType.REPOSITORY_ELEMENT) {
|
||||
if (targetNode.getType() == ENodeType.REPOSITORY_ELEMENT
|
||||
&& !ERepositoryObjectType.getAllTypesOfCodesJar().contains(targetNode.getObjectType())) {
|
||||
targetNode = targetNode.getParent();
|
||||
}
|
||||
|
||||
@@ -471,9 +514,23 @@ public class CopyObjectAction {
|
||||
ICodeGeneratorService.class);
|
||||
if (codeGenService != null) {
|
||||
codeGenService.createRoutineSynchronizer().renameRoutineClass(item);
|
||||
boolean isInnerCode = RoutinesUtil.isInnerCodes(item.getProperty());
|
||||
if (isInnerCode) {
|
||||
RoutineUtils.changeInnerCodePackage(item, true);
|
||||
}
|
||||
try {
|
||||
codeGenService.createRoutineSynchronizer().syncRoutine(item, true);
|
||||
} catch (SystemException e) {
|
||||
|
||||
if (isInnerCode) {
|
||||
CodesJarInfo info = CodesJarResourceCache.getCodesJarByInnerCode(item);
|
||||
if (info.getProperty() != null) {
|
||||
IDesignerMavenService designerMavenService = IDesignerMavenService.get();
|
||||
if (designerMavenService != null) {
|
||||
designerMavenService.updateCodeJarMavenProject(info.getProperty(), false);
|
||||
}
|
||||
}
|
||||
}
|
||||
} catch (Exception e) {
|
||||
ExceptionHandler.process(e);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -111,7 +111,8 @@ public class CreateFolderAction extends AContextualAction {
|
||||
|| property.equals(ERepositoryObjectType.JOB_DOC) || property.equals(ERepositoryObjectType.JOBLET_DOC)
|
||||
|| ERepositoryObjectType.SQLPATTERNS.equals(property)
|
||||
|| ERepositoryObjectType.REFERENCED_PROJECTS.equals(property)
|
||||
|| ERepositoryObjectType.SVN_ROOT.equals(property)) {
|
||||
|| ERepositoryObjectType.SVN_ROOT.equals(property) || ERepositoryObjectType.ROUTINESJAR.equals(property)
|
||||
|| property.equals(ERepositoryObjectType.BEANSJAR)) {
|
||||
canWork = false;
|
||||
} else if (property != null
|
||||
&& GlobalServiceRegister.getDefault().isServiceRegistered(ICamelDesignerCoreService.class)) {
|
||||
|
||||
@@ -21,6 +21,7 @@ import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
import org.apache.commons.collections.map.MultiKeyMap;
|
||||
import org.eclipse.core.resources.IFolder;
|
||||
import org.eclipse.core.resources.IWorkspace;
|
||||
import org.eclipse.core.resources.IWorkspaceRunnable;
|
||||
import org.eclipse.core.resources.ResourcesPlugin;
|
||||
@@ -54,6 +55,7 @@ import org.talend.commons.ui.runtime.exception.MessageBoxExceptionHandler;
|
||||
import org.talend.commons.ui.runtime.image.EImage;
|
||||
import org.talend.commons.ui.runtime.image.ImageProvider;
|
||||
import org.talend.commons.utils.data.container.RootContainer;
|
||||
import org.talend.commons.utils.workbench.resources.ResourceUtils;
|
||||
import org.talend.core.GlobalServiceRegister;
|
||||
import org.talend.core.IESBService;
|
||||
import org.talend.core.ITDQRepositoryService;
|
||||
@@ -714,6 +716,7 @@ public class DeleteAction extends AContextualAction {
|
||||
removeConnFromSQLExplorer(repositoryNode);
|
||||
List<IRepositoryViewObject> batchDeleteObjectList = new ArrayList<IRepositoryViewObject>();
|
||||
deleteTestCases(factory, deleteActionCache, repositoryNode, null, batchDeleteObjectList);
|
||||
deleteCodeSubItem(factory, deleteActionCache, repositoryNode, null, true);
|
||||
|
||||
return true;
|
||||
}
|
||||
@@ -1456,10 +1459,11 @@ public class DeleteAction extends AContextualAction {
|
||||
ITestContainerProviderService testService = (ITestContainerProviderService) GlobalServiceRegister.getDefault()
|
||||
.getService(ITestContainerProviderService.class);
|
||||
if(testService != null){
|
||||
|
||||
testService.deleteDataFiles(objToDelete);
|
||||
}
|
||||
testService.deleteDataFiles(objToDelete);
|
||||
}
|
||||
// delete codejar forever need to delete subitem also
|
||||
deleteCodeSubItem(factory, deleteActionCache, currentJobNode, confirm, false);
|
||||
|
||||
if (!ProjectManager.getInstance().getCurrentProject().isLocal()) {
|
||||
// if remote,batch delete later
|
||||
@@ -1482,14 +1486,47 @@ public class DeleteAction extends AContextualAction {
|
||||
factory.deleteObjectLogical(objToDelete);
|
||||
updateRelatedViews();
|
||||
removeConnFromSQLExplorer(currentJobNode);
|
||||
List<IRepositoryViewObject> deleteObjectList = new ArrayList<IRepositoryViewObject>();
|
||||
deleteTestCases(factory, deleteActionCache, currentJobNode, confirm, null);
|
||||
deleteCodeSubItem(factory, deleteActionCache, currentJobNode, confirm, true);
|
||||
}
|
||||
}
|
||||
|
||||
return needReturn;
|
||||
}
|
||||
|
||||
private void deleteCodeSubItem(IProxyRepositoryFactory factory, DeleteActionCache deleteActionCache,
|
||||
final IRepositoryNode currentJobNode, Boolean confirm, boolean logicalDelete)
|
||||
throws PersistenceException, BusinessException {
|
||||
if (!ERepositoryObjectType.getAllTypesOfCodesJar().contains(currentJobNode.getObjectType())) {
|
||||
return;
|
||||
}
|
||||
if (!currentJobNode.getChildren().isEmpty()) {
|
||||
List<IRepositoryViewObject> deleteObjectList = new ArrayList<IRepositoryViewObject>();
|
||||
for (IRepositoryNode child : currentJobNode.getChildren()) {
|
||||
deleteElements(factory, deleteActionCache, (RepositoryNode) child, confirm, deleteObjectList);
|
||||
}
|
||||
if (deleteObjectList != null && deleteObjectList.size() > 0) {
|
||||
factory.batchDeleteObjectPhysical4Remote(ProjectManager.getInstance().getCurrentProject(), deleteObjectList);
|
||||
}
|
||||
}
|
||||
|
||||
// delete forever to delete codeJar folder
|
||||
if (!logicalDelete) {
|
||||
IFolder folder = ResourceUtils
|
||||
.getFolder(ResourceUtils.getProject(ProjectManager.getInstance().getCurrentProject()),
|
||||
ERepositoryObjectType.getFolderName(currentJobNode.getObjectType()), true)
|
||||
.getFolder(currentJobNode.getObject().getProperty().getLabel());
|
||||
if (folder != null) {
|
||||
try {
|
||||
folder.delete(false, null);
|
||||
} catch (CoreException e) {
|
||||
throw new PersistenceException(e);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private void deleteTestCases(IProxyRepositoryFactory factory, DeleteActionCache deleteActionCache,
|
||||
final IRepositoryNode currentJobNode, Boolean confirm, List<IRepositoryViewObject> batchDeleteObjectList)
|
||||
throws PersistenceException, BusinessException {
|
||||
|
||||
@@ -74,6 +74,7 @@ import org.talend.core.model.repository.ERepositoryObjectType;
|
||||
import org.talend.core.model.repository.IRepositoryContentHandler;
|
||||
import org.talend.core.model.repository.IRepositoryViewObject;
|
||||
import org.talend.core.model.repository.RepositoryContentManager;
|
||||
import org.talend.core.model.routines.RoutinesUtil;
|
||||
import org.talend.core.repository.i18n.Messages;
|
||||
import org.talend.core.repository.model.ProxyRepositoryFactory;
|
||||
import org.talend.core.repository.ui.dialog.DuplicateDialog;
|
||||
@@ -145,8 +146,14 @@ public class DuplicateAction extends AContextualAction {
|
||||
canWork = false;
|
||||
} else if (((StructuredSelection) selection).toArray().length == 1) {
|
||||
Object obj = ((StructuredSelection) selection).toList().get(0);
|
||||
RepositoryNode sourceNode = (RepositoryNode) obj;
|
||||
// disable duplicate for codejar / innercode now
|
||||
if (ERepositoryObjectType.getAllTypesOfCodesJar().contains(sourceNode.getObjectType())
|
||||
|| sourceNode.getObject() != null && sourceNode.getObject().getProperty() != null
|
||||
&& RoutinesUtil.isInnerCodes(sourceNode.getObject().getProperty())) {
|
||||
canWork = false;
|
||||
}
|
||||
if (canWork) {
|
||||
RepositoryNode sourceNode = (RepositoryNode) obj;
|
||||
if (!CopyObjectAction.getInstance().validateAction(sourceNode, null)) {
|
||||
canWork = false;
|
||||
} else if (node.getProperties(EProperties.CONTENT_TYPE) == ERepositoryObjectType.JOB_DOC
|
||||
|
||||
@@ -16,6 +16,7 @@ import java.lang.reflect.InvocationTargetException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import org.eclipse.core.resources.IFolder;
|
||||
import org.eclipse.core.resources.IWorkspace;
|
||||
import org.eclipse.core.resources.IWorkspaceRunnable;
|
||||
import org.eclipse.core.resources.ResourcesPlugin;
|
||||
@@ -45,6 +46,7 @@ import org.talend.commons.ui.runtime.exception.ExceptionHandler;
|
||||
import org.talend.commons.ui.runtime.exception.MessageBoxExceptionHandler;
|
||||
import org.talend.commons.ui.runtime.image.ECoreImage;
|
||||
import org.talend.commons.ui.runtime.image.ImageProvider;
|
||||
import org.talend.commons.utils.workbench.resources.ResourceUtils;
|
||||
import org.talend.core.GlobalServiceRegister;
|
||||
import org.talend.core.ITDQRepositoryService;
|
||||
import org.talend.core.model.properties.ConnectionItem;
|
||||
@@ -343,6 +345,7 @@ public class EmptyRecycleBinAction extends AContextualAction {
|
||||
testService.deleteDataFiles(objToDelete);
|
||||
}
|
||||
}
|
||||
deleteCodeSubItem(factory, currentNode);
|
||||
if (!ProjectManager.getInstance().getCurrentProject().isLocal()) {
|
||||
// if remote, batch delete later
|
||||
batchDeleteObjectList.add(objToDelete);
|
||||
@@ -355,6 +358,36 @@ public class EmptyRecycleBinAction extends AContextualAction {
|
||||
}
|
||||
}
|
||||
|
||||
private void deleteCodeSubItem(IProxyRepositoryFactory factory, final IRepositoryNode currentNode)
|
||||
throws PersistenceException, BusinessException {
|
||||
if (!ERepositoryObjectType.getAllTypesOfCodesJar().contains(currentNode.getObjectType())) {
|
||||
return;
|
||||
}
|
||||
if (!currentNode.getChildren().isEmpty()) {
|
||||
List<IRepositoryViewObject> deleteObjectList = new ArrayList<IRepositoryViewObject>();
|
||||
for (IRepositoryNode child : currentNode.getChildren()) {
|
||||
deleteElements(factory, (RepositoryNode) child, deleteObjectList);
|
||||
}
|
||||
if (deleteObjectList != null && deleteObjectList.size() > 0) {
|
||||
factory.batchDeleteObjectPhysical4Remote(ProjectManager.getInstance().getCurrentProject(), deleteObjectList);
|
||||
}
|
||||
}
|
||||
|
||||
// delete forever to delete codeJar folder
|
||||
IFolder folder = ResourceUtils
|
||||
.getFolder(ResourceUtils.getProject(ProjectManager.getInstance().getCurrentProject()),
|
||||
ERepositoryObjectType.getFolderName(currentNode.getObjectType()), true)
|
||||
.getFolder(currentNode.getObject().getProperty().getLabel());
|
||||
if (folder != null) {
|
||||
try {
|
||||
folder.delete(false, null);
|
||||
} catch (CoreException e) {
|
||||
throw new PersistenceException(e);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
protected boolean isRelation(IEditorInput editorInput, String repoNodeProjectLabel, String repoNodeId) {
|
||||
IRepoViewLinker[] allRepoViewLinkers = RepoViewLinkerRegistryReader.getInstance().getAllRepoViewLinkers();
|
||||
for (IRepoViewLinker linker : allRepoViewLinkers) {
|
||||
|
||||
@@ -193,7 +193,8 @@ public class RestoreAction extends AContextualAction {
|
||||
node = node.getParent();
|
||||
if ((node.getObject().getProperty().getItem() instanceof FolderItem)) {
|
||||
node.getObject().getProperty().getItem().getState().setDeleted(false);
|
||||
} else if (isTestcase) {
|
||||
} else if (isTestcase
|
||||
|| ERepositoryObjectType.getAllTypesOfCodesJar().contains(node.getObjectType())) {
|
||||
restoreNode(node);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -389,6 +389,14 @@ public class RepositoryLabelProvider extends LabelProvider implements IColorProv
|
||||
case STABLE_SYSTEM_FOLDER:
|
||||
case SYSTEM_FOLDER:
|
||||
ERepositoryObjectType contentType = node.getContentType();
|
||||
if (contentType != null) {
|
||||
// special setting for system codeJar node
|
||||
if (contentType.equals(ERepositoryObjectType.ROUTINESJAR)) {
|
||||
nodeIcon = RepositoryImageProvider.getIcon(ERepositoryObjectType.ROUTINES);
|
||||
} else if (contentType.equals(ERepositoryObjectType.BEANSJAR)) {
|
||||
nodeIcon = RepositoryImageProvider.getIcon(ERepositoryObjectType.BEANS);
|
||||
}
|
||||
}
|
||||
if (nodeIcon == null || EImage.DEFAULT_IMAGE.equals(nodeIcon)) {
|
||||
Image image = getImageFromFramework(contentType);
|
||||
if (image != null) {
|
||||
|
||||
@@ -22,6 +22,7 @@ import org.talend.core.model.properties.ByteArray;
|
||||
import org.talend.core.model.properties.FileItem;
|
||||
import org.talend.core.model.properties.Item;
|
||||
import org.talend.core.model.properties.ProcessItem;
|
||||
import org.talend.core.model.properties.RoutinesJarItem;
|
||||
import org.talend.core.model.repository.AbstractRepositoryContentHandler;
|
||||
import org.talend.core.model.repository.ERepositoryObjectType;
|
||||
|
||||
@@ -66,6 +67,13 @@ public abstract class AbstractResourceRepositoryContentHandler extends AbstractR
|
||||
return itemResource;
|
||||
}
|
||||
|
||||
protected Resource save(RoutinesJarItem item) {
|
||||
final Resource itemResource = getXmiResourceManager().getItemResource(item);
|
||||
itemResource.getContents().clear();
|
||||
itemResource.getContents().add(item.getRoutinesJarType());
|
||||
return itemResource;
|
||||
}
|
||||
|
||||
protected Resource saveScreenShots(ProcessItem item) throws PersistenceException {
|
||||
Resource itemResource = getXmiResourceManager().getScreenshotResource(item, true, true);
|
||||
EMap screenshots = item.getProcess().getScreenshots();
|
||||
@@ -76,7 +84,7 @@ public abstract class AbstractResourceRepositoryContentHandler extends AbstractR
|
||||
return itemResource;
|
||||
}
|
||||
|
||||
private XmiResourceManager getXmiResourceManager() {
|
||||
protected XmiResourceManager getXmiResourceManager() {
|
||||
if (null == xmiResourceManager) {
|
||||
xmiResourceManager = new XmiResourceManager();
|
||||
}
|
||||
|
||||
@@ -81,6 +81,12 @@ public class ProjectDataJsonProvider {
|
||||
return strBuilder.toString();
|
||||
}
|
||||
|
||||
public static String getMigrationTaskIndexPath() {
|
||||
StringBuilder strBuilder = new StringBuilder();
|
||||
strBuilder.append(FileConstants.SETTINGS_FOLDER_NAME).append("/").append(FileConstants.MIGRATION_TASK_FILE_NAME); //$NON-NLS-1$
|
||||
return strBuilder.toString();
|
||||
}
|
||||
|
||||
public static void saveProjectData(Project project) throws PersistenceException {
|
||||
saveProjectData(project, CONTENT_ALL);
|
||||
}
|
||||
|
||||
@@ -12,6 +12,10 @@
|
||||
// ============================================================================
|
||||
package org.talend.core.repository.utils;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import org.apache.commons.lang.StringUtils;
|
||||
import org.apache.oro.text.regex.MalformedPatternException;
|
||||
import org.apache.oro.text.regex.Pattern;
|
||||
import org.apache.oro.text.regex.PatternCompiler;
|
||||
@@ -26,37 +30,65 @@ import org.talend.core.model.properties.Item;
|
||||
import org.talend.core.model.properties.RoutineItem;
|
||||
import org.talend.core.model.repository.ERepositoryObjectType;
|
||||
import org.talend.core.repository.model.ProxyRepositoryFactory;
|
||||
import org.talend.core.runtime.services.IDesignerMavenService;
|
||||
|
||||
/**
|
||||
* DOC nrousseau class global comment. Detailled comment
|
||||
*/
|
||||
public final class RoutineUtils {
|
||||
|
||||
private static final String DEFAULT_PACKAGE_REGEX = "package(\\s)+" + JavaUtils.JAVA_ROUTINES_DIRECTORY //$NON-NLS-1$
|
||||
+ "\\.((\\w)+)(\\s)*;"; //$NON-NLS-1$
|
||||
|
||||
private static final String DEFAULT_PACKAGE_STRING = "package " + JavaUtils.JAVA_ROUTINES_DIRECTORY + ";"; //$NON-NLS-1$ //$NON-NLS-2$
|
||||
|
||||
private static final String INNER_ROUTINES_PACKAGE_REGEX = "package\\s+([^;]+);";
|
||||
|
||||
public static void changeRoutinesPackage(Item item) {
|
||||
List<ERepositoryObjectType> allowedTypes = new ArrayList<ERepositoryObjectType>();
|
||||
allowedTypes.add(ERepositoryObjectType.ROUTINES);
|
||||
doChangeRoutinesPackage(item, DEFAULT_PACKAGE_REGEX, DEFAULT_PACKAGE_STRING, allowedTypes, false, true);
|
||||
}
|
||||
|
||||
public static void changeInnerCodePackage(Item item, boolean avoidSave) {
|
||||
changeInnerCodePackage(item, avoidSave, true);
|
||||
}
|
||||
|
||||
public static void changeInnerCodePackage(Item item, boolean avoidSave, boolean commitMode) {
|
||||
IDesignerMavenService service = IDesignerMavenService.get();
|
||||
if (service != null && item instanceof RoutineItem) {
|
||||
RoutineItem routineItem = (RoutineItem) item;
|
||||
String codesJarPackageByInnerCode = service.getCodesJarPackageByInnerCode(routineItem);
|
||||
if (StringUtils.isNotBlank(codesJarPackageByInnerCode)) {
|
||||
String newPackageString = "package " + StringUtils.replace(codesJarPackageByInnerCode, "/", ".") + ";";
|
||||
if (!routineItem.isBuiltIn()) {
|
||||
String routineContent = new String(routineItem.getContent().getInnerContent());
|
||||
if (routineContent != null && routineContent.contains(newPackageString)) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
doChangeRoutinesPackage(item, INNER_ROUTINES_PACKAGE_REGEX, newPackageString,
|
||||
ERepositoryObjectType.getAllTypesOfCodes(), avoidSave, commitMode);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static void doChangeRoutinesPackage(Item item, String packageRegex, String newPackage,
|
||||
List<ERepositoryObjectType> allowedTypes, boolean avoidSave, boolean commitMode) {
|
||||
if (item == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
ERepositoryObjectType itemType = ERepositoryObjectType.getItemType(item);
|
||||
if (ERepositoryObjectType.ROUTINES.equals(itemType) && item instanceof RoutineItem) {
|
||||
if (allowedTypes != null && allowedTypes.contains(itemType) && item instanceof RoutineItem) {
|
||||
RoutineItem rItem = (RoutineItem) item;
|
||||
if (!rItem.isBuiltIn()) {
|
||||
//
|
||||
String routineContent = new String(rItem.getContent().getInnerContent());
|
||||
//
|
||||
// String curProjectName =
|
||||
// currentProject.getTechnicalLabel().toLowerCase();
|
||||
String oldPackage = "package(\\s)+" + JavaUtils.JAVA_ROUTINES_DIRECTORY + "\\.((\\w)+)(\\s)*;"; //$NON-NLS-1$ //$NON-NLS-2$
|
||||
// String newPackage = "package " +
|
||||
// JavaUtils.JAVA_ROUTINES_DIRECTORY + "." + curProjectName +
|
||||
// ";";
|
||||
|
||||
String newPackage = "package " + JavaUtils.JAVA_ROUTINES_DIRECTORY + ";"; //$NON-NLS-1$ //$NON-NLS-2$
|
||||
try {
|
||||
PatternCompiler compiler = new Perl5Compiler();
|
||||
Perl5Matcher matcher = new Perl5Matcher();
|
||||
matcher.setMultiline(true);
|
||||
Pattern pattern = compiler.compile(oldPackage);
|
||||
Pattern pattern = compiler.compile(packageRegex);
|
||||
|
||||
if (matcher.contains(routineContent, pattern)) {
|
||||
// String group = matcher.getMatch().group(2);
|
||||
@@ -67,7 +99,14 @@ public final class RoutineUtils {
|
||||
rItem.getContent().setInnerContent(routineContent.getBytes());
|
||||
ProxyRepositoryFactory repFactory = ProxyRepositoryFactory.getInstance();
|
||||
|
||||
repFactory.save(rItem);
|
||||
if (!avoidSave) {
|
||||
if (commitMode) {
|
||||
repFactory.save(rItem);
|
||||
} else {
|
||||
// avoid deadlock in git pull event listener
|
||||
new XmiResourceManager().saveResource(rItem.eResource());
|
||||
}
|
||||
}
|
||||
// }
|
||||
}
|
||||
} catch (MalformedPatternException e) {
|
||||
|
||||
@@ -70,6 +70,7 @@ import org.talend.core.model.properties.TDQItem;
|
||||
import org.talend.core.model.properties.ValidationRulesConnectionItem;
|
||||
import org.talend.core.model.properties.helper.ByteArrayResource;
|
||||
import org.talend.core.model.repository.ERepositoryObjectType;
|
||||
import org.talend.core.model.routines.RoutinesUtil;
|
||||
import org.talend.core.repository.constants.FileConstants;
|
||||
import org.talend.core.repository.model.ProxyRepositoryFactory;
|
||||
import org.talend.core.repository.utils.ResourceFilenameHelper.FileName;
|
||||
@@ -209,7 +210,7 @@ public class XmiResourceManager {
|
||||
* @return
|
||||
* @throws PersistenceException
|
||||
*/
|
||||
private IPath getFolderPath(IProject project, ERepositoryObjectType repositoryObjectType, IPath relativePath)
|
||||
private IPath getFolderPath(IProject project, ERepositoryObjectType repositoryObjectType, IPath relativePath, Item item)
|
||||
throws PersistenceException {
|
||||
ERepositoryObjectType type = repositoryObjectType;
|
||||
if (ERepositoryObjectType.TDQ_SYSTEM_INDICATORS.equals(repositoryObjectType)
|
||||
@@ -218,6 +219,10 @@ public class XmiResourceManager {
|
||||
} else if (ERepositoryObjectType.TDQ_PATTERN_REGEX.equals(repositoryObjectType)
|
||||
|| ERepositoryObjectType.TDQ_PATTERN_SQL.equals(repositoryObjectType)) {
|
||||
type = ERepositoryObjectType.TDQ_PATTERN_ELEMENT;
|
||||
} else if (type == ERepositoryObjectType.ROUTINES && RoutinesUtil.isInnerCodes(item.getProperty())) {
|
||||
type = ERepositoryObjectType.ROUTINESJAR;
|
||||
} else if (type == ERepositoryObjectType.BEANS && RoutinesUtil.isInnerCodes(item.getProperty())) {
|
||||
type = ERepositoryObjectType.BEANSJAR;
|
||||
}
|
||||
IFolder folder = project.getFolder(ERepositoryObjectType.getFolderName(type)).getFolder(relativePath);
|
||||
return folder.getFullPath();
|
||||
@@ -704,7 +709,7 @@ public class XmiResourceManager {
|
||||
// MOD mzhao 2010-11-22, suppport TDQ item file extensions.(.ana, .rep, etc)
|
||||
private URI getItemResourceURI(IProject project, ERepositoryObjectType repositoryObjectType, IPath path, Item item)
|
||||
throws PersistenceException {
|
||||
IPath folderPath = getFolderPath(project, repositoryObjectType, path);
|
||||
IPath folderPath = getFolderPath(project, repositoryObjectType, path, item);
|
||||
FileName fileName = ResourceFilenameHelper.create(item.getProperty());
|
||||
IPath resourcePath = null;
|
||||
if (item.getFileExtension() == null) {
|
||||
@@ -720,7 +725,7 @@ public class XmiResourceManager {
|
||||
@Deprecated
|
||||
private URI getItemResourceURI(IProject project, ERepositoryObjectType repositoryObjectType, IPath path, Item item,
|
||||
String fileExtension) throws PersistenceException {
|
||||
IPath folderPath = getFolderPath(project, repositoryObjectType, path);
|
||||
IPath folderPath = getFolderPath(project, repositoryObjectType, path, item);
|
||||
FileName fileName = ResourceFilenameHelper.create(item.getProperty());
|
||||
IPath resourcePath = ResourceFilenameHelper
|
||||
.getExpectedFilePath(fileName, folderPath, fileExtension, item.isNeedVersion());
|
||||
@@ -730,7 +735,7 @@ public class XmiResourceManager {
|
||||
// added by dlin 2011-7-14 to create the uri of file of .screenshot
|
||||
private URI getScreenshotResourceURI(IProject project, ERepositoryObjectType repositoryObjectType, IPath path, Item item,
|
||||
String... fileExtension) throws PersistenceException {
|
||||
IPath folderPath = getFolderPath(project, repositoryObjectType, path);
|
||||
IPath folderPath = getFolderPath(project, repositoryObjectType, path, item);
|
||||
FileName fileName = ResourceFilenameHelper.create(item.getProperty());
|
||||
IPath resourcePath = ResourceFilenameHelper.getExpectedFilePath(fileName, folderPath, FileConstants.SCREENSHOT_EXTENSION,
|
||||
item.isNeedVersion());
|
||||
|
||||
@@ -95,6 +95,7 @@ Export-Package: org.talend.commons.utils.generation,
|
||||
org.talend.repository.documentation.generation,
|
||||
org.talend.repository.model,
|
||||
org.talend.repository.model.nodes,
|
||||
org.talend.repository.token,
|
||||
org.talend.repository.ui.actions,
|
||||
org.talend.repository.ui.dialog,
|
||||
org.talend.repository.ui.login.connections,
|
||||
|
||||
@@ -89,6 +89,10 @@ public final class JavaUtils {
|
||||
/** Java Routines Directory. */
|
||||
public static final String JAVA_ROUTINES_DIRECTORY = "routines"; //$NON-NLS-1$
|
||||
|
||||
// TODO check refrerences of JAVA_ROUTINES_DIRECTORY
|
||||
/** Java Routines Jar Directory. */
|
||||
public static final String JAVA_ROUTINESJAR_DIRECTORY = "routinesjar"; //$NON-NLS-1$
|
||||
|
||||
/** Java Pig Directory. */
|
||||
public static final String JAVA_PIG_DIRECTORY = "pig"; //$NON-NLS-1$
|
||||
|
||||
@@ -98,6 +102,9 @@ public final class JavaUtils {
|
||||
/** Java Beans Directory. */
|
||||
public static final String JAVA_BEANS_DIRECTORY = "beans"; //$NON-NLS-1$
|
||||
|
||||
/** Java Beans Jar Directory. */
|
||||
public static final String JAVA_BEANSJAR_DIRECTORY = "beansjar"; //$NON-NLS-1$
|
||||
|
||||
/** Java SQLTemplate Directory. */
|
||||
public static final String JAVA_SQLPATTERNS_DIRECTORY = "sqltemplates"; //$NON-NLS-1$
|
||||
|
||||
|
||||
@@ -27,6 +27,7 @@ import org.talend.core.model.process.IElement;
|
||||
import org.talend.core.model.process.INode;
|
||||
import org.talend.core.model.process.IProcess;
|
||||
import org.talend.core.model.process.Problem;
|
||||
import org.talend.core.model.properties.Property;
|
||||
import org.talend.core.model.repository.ERepositoryObjectType;
|
||||
import org.talend.designer.codegen.PigTemplate;
|
||||
|
||||
@@ -117,6 +118,10 @@ public interface ILibrariesService extends IService {
|
||||
|
||||
Set<ModuleNeeded> getCodesModuleNeededs(ERepositoryObjectType type);
|
||||
|
||||
Set<ModuleNeeded> getAllCodesJarModuleNeededs();
|
||||
|
||||
Set<ModuleNeeded> getCodesJarModuleNeededs(Property property);
|
||||
|
||||
List<ModuleNeeded> getModuleNeeded(String id, boolean isGroup);
|
||||
|
||||
public void deployProjectLibrary(File source) throws IOException;
|
||||
|
||||
@@ -49,6 +49,7 @@ import orgomg.cwm.objectmodel.core.TaggedValue;
|
||||
*/
|
||||
public final class MetadataToolAvroHelper {
|
||||
|
||||
private static final String TALEND_DB_COLUMN_NAME = "talend.field.dbColumnName";
|
||||
/**
|
||||
* @return An Avro schema with enriched properties from the incoming metadata table.
|
||||
*/
|
||||
@@ -451,19 +452,16 @@ public final class MetadataToolAvroHelper {
|
||||
table.setTableType(prop);
|
||||
}
|
||||
|
||||
// Add the columns.
|
||||
List<org.talend.core.model.metadata.builder.connection.MetadataColumn> columns = new ArrayList<>(in.getFields().size());
|
||||
for (Schema.Field f : in.getFields()) {
|
||||
columns.add(convertFromAvro(f, table));
|
||||
table.getColumns().add(convertFromAvro(f, table));
|
||||
}
|
||||
boolean isDynamic = AvroUtils.isIncludeAllFields(in);
|
||||
if (isDynamic) {
|
||||
org.talend.core.model.metadata.builder.connection.MetadataColumn col = convertFromAvroForDynamic(in);
|
||||
// get dynamic position
|
||||
int dynPosition = Integer.valueOf(in.getProp(DiSchemaConstants.TALEND6_DYNAMIC_COLUMN_POSITION));
|
||||
columns.add(dynPosition, col);
|
||||
table.getColumns().add(dynPosition, col);
|
||||
}
|
||||
table.getColumns().addAll(columns);
|
||||
return table;
|
||||
}
|
||||
|
||||
@@ -574,7 +572,12 @@ public final class MetadataToolAvroHelper {
|
||||
|
||||
// Set the defaults values to the name (the only information guaranteed to be available in every field).
|
||||
col.setId(field.name());
|
||||
col.setLabel(field.name());
|
||||
String dbColumnlable = null;
|
||||
if (MetadataToolHelper.isAllowSpecificCharacters() && null != (dbColumnlable = field.getProp(TALEND_DB_COLUMN_NAME))) {
|
||||
col.setLabel(dbColumnlable);
|
||||
} else {
|
||||
col.setLabel(field.name());
|
||||
}
|
||||
col.setName(field.name());
|
||||
Schema nonnullable = AvroUtils.unwrapIfNullable(in);
|
||||
LogicalType logicalType = LogicalTypes.fromSchemaIgnoreInvalid(nonnullable);
|
||||
|
||||
@@ -280,7 +280,7 @@ public final class MetadataToolHelper {
|
||||
return isAllowSpecificCharacters() || Pattern.matches(RepositoryConstants.COLUMN_NAME_PATTERN, name);
|
||||
}
|
||||
|
||||
private static boolean isAllowSpecificCharacters() {
|
||||
public static boolean isAllowSpecificCharacters() {
|
||||
IEclipsePreferences coreUIPluginNode = new InstanceScope().getNode(ITalendCorePrefConstants.CoreUIPlugin_ID);
|
||||
return coreUIPluginNode
|
||||
.getBoolean(IRepositoryPrefConstants.ALLOW_SPECIFIC_CHARACTERS_FOR_SCHEMA_COLUMNS, false);
|
||||
|
||||
@@ -51,7 +51,6 @@ import org.talend.designer.core.model.utils.emf.talendfile.NodeType;
|
||||
import org.talend.designer.core.model.utils.emf.talendfile.ProcessType;
|
||||
import org.talend.repository.ProjectManager;
|
||||
import org.talend.repository.model.IProxyRepositoryFactory;
|
||||
import org.talend.repository.model.IRepositoryNode;
|
||||
|
||||
/**
|
||||
* This class store all relationships between jobs/joblets and other items from the repository. Be sure to update the
|
||||
@@ -102,6 +101,10 @@ public class RelationshipItemBuilder {
|
||||
|
||||
public static final String ROUTINE_RELATION = "routine"; //$NON-NLS-1$
|
||||
|
||||
public static final String ROUTINES_JAR_RELATION = "routinesJar"; //$NON-NLS-1$
|
||||
|
||||
public static final String BEANS_JAR_RELATION = "beansJar"; //$NON-NLS-1$
|
||||
|
||||
public static final String MAPPER_RELATION = "mapper"; //$NON-NLS-1$
|
||||
|
||||
public static final String SURVIVOR_RELATION = "survivorshipRuleRelation"; //$NON-NLS-1$
|
||||
|
||||
@@ -61,6 +61,7 @@ import org.talend.core.model.properties.ProcessItem;
|
||||
import org.talend.core.model.properties.Property;
|
||||
import org.talend.core.model.properties.RegExFileConnectionItem;
|
||||
import org.talend.core.model.properties.RoutineItem;
|
||||
import org.talend.core.model.properties.RoutinesJarItem;
|
||||
import org.talend.core.model.properties.RulesItem;
|
||||
import org.talend.core.model.properties.SAPConnectionItem;
|
||||
import org.talend.core.model.properties.SQLPatternItem;
|
||||
@@ -443,8 +444,19 @@ public class ERepositoryObjectType extends DynaEnum<ERepositoryObjectType> {
|
||||
|
||||
public final static ERepositoryObjectType ROUTINES = ERepositoryObjectType.valueOf("ROUTINES"); //$NON-NLS-1$
|
||||
|
||||
public final static ERepositoryObjectType ROUTINESJAR = ERepositoryObjectType.valueOf("ROUTINESJAR"); //$NON-NLS-1$
|
||||
|
||||
/**
|
||||
* <font color="red">This value may be <b>null</b> in some licenses, <b>should add NPE check</b></font>
|
||||
*/
|
||||
public final static ERepositoryObjectType BEANS = ERepositoryObjectType.valueOf("BEANS"); //$NON-NLS-1$
|
||||
|
||||
/**
|
||||
* <font color="red">This value may be <b>null</b> in some licenses, <b>should add NPE check</b></font>
|
||||
*/
|
||||
// TODO need and register it in extension or not?
|
||||
public final static ERepositoryObjectType BEANSJAR = ERepositoryObjectType.valueOf("BEANSJAR"); //$NON-NLS-1$
|
||||
|
||||
public final static ERepositoryObjectType METADATA_HEADER_FOOTER = ERepositoryObjectType.valueOf("METADATA_HEADER_FOOTER"); //$NON-NLS-1$
|
||||
|
||||
public final static ERepositoryObjectType JOB_SCRIPT = ERepositoryObjectType.valueOf("JOB_SCRIPT"); //$NON-NLS-1$
|
||||
@@ -936,7 +948,7 @@ public class ERepositoryObjectType extends DynaEnum<ERepositoryObjectType> {
|
||||
* @return
|
||||
*/
|
||||
public static ERepositoryObjectType getItemType(Item item) {
|
||||
|
||||
// FIXME update all inner codes related callers
|
||||
ERepositoryObjectType repObjType = getTDQRepObjType(item);
|
||||
if (repObjType != null) {
|
||||
return repObjType;
|
||||
@@ -1003,6 +1015,11 @@ public class ERepositoryObjectType extends DynaEnum<ERepositoryObjectType> {
|
||||
// return BEANS;
|
||||
// }
|
||||
|
||||
@Override
|
||||
public Object caseRoutinesJarItem(RoutinesJarItem object) {
|
||||
return ROUTINESJAR;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object caseJobScriptItem(JobScriptItem object) {
|
||||
return JOB_SCRIPT;
|
||||
@@ -1505,11 +1522,66 @@ public class ERepositoryObjectType extends DynaEnum<ERepositoryObjectType> {
|
||||
if (ERepositoryObjectType.ROUTINES != null) {
|
||||
allTypes.add(ERepositoryObjectType.ROUTINES);
|
||||
}
|
||||
ERepositoryObjectType beansType = ERepositoryObjectType.valueOf("BEANS"); //$NON-NLS-1$
|
||||
if (beansType != null) {
|
||||
allTypes.add(beansType);
|
||||
if (ERepositoryObjectType.BEANS != null) {
|
||||
allTypes.add(ERepositoryObjectType.BEANS);
|
||||
}
|
||||
return allTypes;
|
||||
}
|
||||
|
||||
public static List<ERepositoryObjectType> getAllTypesOfCodesJar() {
|
||||
List<ERepositoryObjectType> allTypes = new ArrayList<ERepositoryObjectType>();
|
||||
if (ERepositoryObjectType.ROUTINESJAR != null) {
|
||||
allTypes.add(ERepositoryObjectType.ROUTINESJAR);
|
||||
}
|
||||
if (ERepositoryObjectType.BEANSJAR != null) {
|
||||
allTypes.add(ERepositoryObjectType.BEANSJAR);
|
||||
}
|
||||
return allTypes;
|
||||
}
|
||||
|
||||
public enum CodeTypeEnum {
|
||||
Routines("ROUTINESJAR", "ROUTINES"),
|
||||
Beans("BEANSJAR", "BEANS");
|
||||
|
||||
private String codeJarType;
|
||||
|
||||
private String codeType;
|
||||
|
||||
private CodeTypeEnum(String codeJarType, String codeType) {
|
||||
this.codeJarType = codeJarType;
|
||||
this.codeType = codeType;
|
||||
}
|
||||
|
||||
public static boolean isCodeRepositoryObjectTypeMatch(ERepositoryObjectType jarType, ERepositoryObjectType codeType) {
|
||||
if (jarType == null || codeType == null) {
|
||||
return false;
|
||||
}
|
||||
for (CodeTypeEnum cType : CodeTypeEnum.values()) {
|
||||
if (cType.getCodeJarType().equals(jarType.getType())) {
|
||||
return cType.getCodeType().equals(codeType.getType());
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Getter for codeJarType.
|
||||
*
|
||||
* @return the codeJarType
|
||||
*/
|
||||
public String getCodeJarType() {
|
||||
return codeJarType;
|
||||
}
|
||||
|
||||
/**
|
||||
* Getter for codeType.
|
||||
*
|
||||
* @return the codeType
|
||||
*/
|
||||
public String getCodeType() {
|
||||
return codeType;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -0,0 +1,118 @@
|
||||
// ============================================================================
|
||||
//
|
||||
// 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.core.model.routines;
|
||||
|
||||
import org.talend.core.model.properties.Property;
|
||||
import org.talend.core.model.repository.ERepositoryObjectType;
|
||||
import org.talend.repository.ProjectManager;
|
||||
|
||||
/**
|
||||
* Could get most of codesjar's attribute in EMF model but some are lost when model is unloaded. Store those attributes
|
||||
* in this bean.
|
||||
*/
|
||||
|
||||
public class CodesJarInfo {
|
||||
|
||||
private Property property;
|
||||
|
||||
private String projectTechName;
|
||||
|
||||
private String id;
|
||||
|
||||
private String label;
|
||||
|
||||
private String version;
|
||||
|
||||
private ERepositoryObjectType type;
|
||||
|
||||
private CodesJarInfo() {
|
||||
|
||||
}
|
||||
|
||||
public static CodesJarInfo create(Property property) {
|
||||
CodesJarInfo info = new CodesJarInfo();
|
||||
info.property = property;
|
||||
info.projectTechName = ProjectManager.getInstance().getProject(property).getTechnicalLabel();
|
||||
info.id = property.getId();
|
||||
info.label = property.getLabel();
|
||||
info.version = property.getVersion();
|
||||
info.type = ERepositoryObjectType.getItemType(property.getItem());
|
||||
return info;
|
||||
}
|
||||
|
||||
public Property getProperty() {
|
||||
return property;
|
||||
}
|
||||
|
||||
public String getProjectTechName() {
|
||||
return projectTechName;
|
||||
}
|
||||
|
||||
public String getId() {
|
||||
return id;
|
||||
}
|
||||
|
||||
public String getLabel() {
|
||||
return label;
|
||||
}
|
||||
|
||||
public String getVersion() {
|
||||
return version;
|
||||
}
|
||||
|
||||
public ERepositoryObjectType getType() {
|
||||
return type;
|
||||
}
|
||||
|
||||
public boolean isInCurrentMainProject() {
|
||||
return projectTechName.equals(ProjectManager.getInstance().getCurrentProject().getTechnicalLabel());
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
final int prime = 31;
|
||||
int result = 1;
|
||||
result = prime * result + ((projectTechName == null) ? 0 : projectTechName.hashCode());
|
||||
result = prime * result + ((property == null) ? 0 : property.hashCode());
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object obj) {
|
||||
if (this == obj) {
|
||||
return true;
|
||||
}
|
||||
if (obj == null) {
|
||||
return false;
|
||||
}
|
||||
if (getClass() != obj.getClass()) {
|
||||
return false;
|
||||
}
|
||||
CodesJarInfo other = (CodesJarInfo) obj;
|
||||
if (projectTechName == null && other.projectTechName != null) {
|
||||
return false;
|
||||
} else if (!projectTechName.equals(other.projectTechName)) {
|
||||
return false;
|
||||
}
|
||||
if (property == null && other.property != null) {
|
||||
return false;
|
||||
} else if (property != null && other.property != null) {
|
||||
if (!property.getId().equals(other.property.getId()) || !property.getLabel().equals(other.property.getLabel())
|
||||
|| !property.getVersion().equals(other.property.getVersion())) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -12,11 +12,9 @@
|
||||
// ============================================================================
|
||||
package org.talend.core.model.routines;
|
||||
|
||||
import java.util.Set;
|
||||
import java.util.Vector;
|
||||
|
||||
import org.talend.core.IService;
|
||||
import org.talend.core.model.general.ModuleNeeded;
|
||||
|
||||
/**
|
||||
*
|
||||
@@ -26,5 +24,4 @@ public interface IRoutinesService extends IService {
|
||||
|
||||
public Vector getAccents();
|
||||
|
||||
Set<ModuleNeeded> getRunningModules();
|
||||
}
|
||||
|
||||
@@ -120,8 +120,12 @@ public class RoutineLibraryMananger {
|
||||
initialized = true;
|
||||
}
|
||||
}
|
||||
|
||||
public boolean needDeploy(URL fileUrl) throws IOException, Exception{
|
||||
return needDeploy(fileUrl, null);
|
||||
}
|
||||
|
||||
public boolean needDeploy(URL fileUrl) throws IOException, Exception {
|
||||
public boolean needDeploy(URL fileUrl, String mvnUrl) throws IOException, Exception {
|
||||
File file = new File(fileUrl.getFile());
|
||||
ILibraryManagerService libManagerService = null;
|
||||
if (GlobalServiceRegister.getDefault().isServiceRegistered(ILibraryManagerService.class)) {
|
||||
@@ -129,19 +133,21 @@ public class RoutineLibraryMananger {
|
||||
.getService(ILibraryManagerService.class);
|
||||
}
|
||||
if (libManagerService != null) {
|
||||
Map<String, String> sourceAndMavenUri = new HashMap<>();
|
||||
libManagerService.guessMavenRUIFromIndex(file, sourceAndMavenUri);
|
||||
String mavUri = null;
|
||||
boolean isSnapshot = false;
|
||||
for (String key : sourceAndMavenUri.keySet()) {
|
||||
if (sourceAndMavenUri.get(key).equals(file.getPath())) {
|
||||
mavUri = key;
|
||||
break;
|
||||
String mavUri = mvnUrl;
|
||||
if (StringUtils.isBlank(mvnUrl)) {
|
||||
Map<String, String> sourceAndMavenUri = new HashMap<>();
|
||||
libManagerService.guessMavenRUIFromIndex(file, sourceAndMavenUri);
|
||||
for (String key : sourceAndMavenUri.keySet()) {
|
||||
if (sourceAndMavenUri.get(key).equals(file.getPath())) {
|
||||
mavUri = key;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (mavUri == null) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
if (mavUri == null) {
|
||||
return true;
|
||||
}
|
||||
boolean isSnapshot = false;
|
||||
final MavenArtifact parseMvnUrl = MavenUrlHelper.parseMvnUrl(mavUri);
|
||||
if (parseMvnUrl != null) {
|
||||
if (parseMvnUrl.getVersion() != null && parseMvnUrl.getVersion().endsWith(MavenConstants.SNAPSHOT)) {
|
||||
|
||||
@@ -13,6 +13,7 @@
|
||||
package org.talend.core.model.routines;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
@@ -20,12 +21,16 @@ import org.eclipse.core.resources.IFile;
|
||||
import org.eclipse.core.resources.IMarker;
|
||||
import org.eclipse.core.resources.IResource;
|
||||
import org.eclipse.core.runtime.CoreException;
|
||||
import org.eclipse.core.runtime.Path;
|
||||
import org.talend.commons.exception.ExceptionHandler;
|
||||
import org.talend.commons.exception.PersistenceException;
|
||||
import org.talend.commons.exception.SystemException;
|
||||
import org.talend.core.GlobalServiceRegister;
|
||||
import org.talend.core.model.general.Project;
|
||||
import org.talend.core.model.process.JobInfo;
|
||||
import org.talend.core.model.properties.Item;
|
||||
import org.talend.core.model.properties.JobletProcessItem;
|
||||
import org.talend.core.model.properties.ProcessItem;
|
||||
import org.talend.core.model.properties.Property;
|
||||
import org.talend.core.model.properties.RoutineItem;
|
||||
import org.talend.core.model.repository.ERepositoryObjectType;
|
||||
@@ -204,6 +209,7 @@ public final class RoutinesUtil {
|
||||
}
|
||||
|
||||
private static RoutinesParameterType createItemInforType(RoutineItem routineItem) {
|
||||
// no need to update
|
||||
Property property = routineItem.getProperty();
|
||||
|
||||
RoutinesParameterType itemRecordType = TalendFileFactory.eINSTANCE.createRoutinesParameterType();
|
||||
@@ -353,4 +359,54 @@ public final class RoutinesUtil {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
public static void setInnerCodes(Property property, ERepositoryObjectType type) {
|
||||
if (type == null) {
|
||||
property.getAdditionalProperties().removeKey("JAR_TYPE");
|
||||
} else {
|
||||
property.getAdditionalProperties().put("JAR_TYPE", type.name()); //$NON-NLS-1$
|
||||
}
|
||||
}
|
||||
|
||||
public static ERepositoryObjectType getInnerCodeType(Property property) {
|
||||
Object type = property.getAdditionalProperties().get("JAR_TYPE"); //$NON-NLS-1$
|
||||
if (type != null) {
|
||||
return ERepositoryObjectType.getAllTypesOfCodesJar().stream().filter(t -> t.name().equals(type)).findFirst().get();
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public static boolean isInnerCodes(Property property) {
|
||||
Object isInnerCodes = property.getAdditionalProperties().get("JAR_TYPE"); //$NON-NLS-1$
|
||||
return isInnerCodes != null;
|
||||
}
|
||||
|
||||
public static String getCodesJarLabelByInnerCode(Item innerCodeItem) {
|
||||
return new Path(innerCodeItem.getState().getPath()).segment(0);
|
||||
}
|
||||
|
||||
public static List<RoutinesParameterType> getRoutinesParametersFromJobInfo(JobInfo info) {
|
||||
Item item = null;
|
||||
if (info.getJobletProperty() != null) {
|
||||
item = info.getJobletProperty().getItem();
|
||||
} else if (info.getProcessItem() != null) {
|
||||
item = info.getProcessItem();
|
||||
}
|
||||
return getRoutinesParametersFromItem(item);
|
||||
}
|
||||
|
||||
public static List<RoutinesParameterType> getRoutinesParametersFromItem(Item item) {
|
||||
List<RoutinesParameterType> routinesParameters = null;
|
||||
if (item == null) {
|
||||
routinesParameters = Collections.emptyList();
|
||||
}
|
||||
if (item instanceof JobletProcessItem) {
|
||||
routinesParameters = ((JobletProcessItem) item).getJobletProcess().getParameters().getRoutinesParameter();
|
||||
} else if (item instanceof ProcessItem) {
|
||||
routinesParameters = ((ProcessItem) item).getProcess().getParameters().getRoutinesParameter();
|
||||
}
|
||||
return routinesParameters;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -207,6 +207,10 @@ public final class ContextParameterUtils {
|
||||
}
|
||||
|
||||
private static ScriptEngine engine = new ScriptEngineManager().getEngineByName("JavaScript");
|
||||
|
||||
public static ScriptEngine getScriptEngine() {
|
||||
return engine;
|
||||
}
|
||||
|
||||
public static String convertContext2Literal4AnyVar(final String code, final IContext context) {
|
||||
if (code == null) {
|
||||
|
||||
@@ -27,6 +27,9 @@ import java.util.Set;
|
||||
import java.util.regex.Matcher;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
import javax.script.ScriptEngine;
|
||||
import javax.script.ScriptException;
|
||||
|
||||
import org.talend.core.GlobalServiceRegister;
|
||||
import org.talend.core.model.components.ComponentCategory;
|
||||
import org.talend.core.model.components.IComponent;
|
||||
@@ -1005,6 +1008,15 @@ public class NodeUtil {
|
||||
|
||||
//suppose all memo fields are processed well already, no need to go though this with dangerous
|
||||
if (!isMemo && !org.talend.core.model.utils.ContextParameterUtils.isDynamic(value)) {
|
||||
//https://jira.talendforge.org/browse/TDI-45563
|
||||
//now can't get the var real value for "out1.A" in code generation time, so need to ignore it for runtime value log
|
||||
//here consider the performance, only do it for some special case
|
||||
if(itemFromTable && "VALUE".equals(ep.getName())) {
|
||||
if(!isValidLiteralValue(value)) {
|
||||
return "\"\"";//return empty string as can't get the real runtime value
|
||||
}
|
||||
}
|
||||
|
||||
if(value.length() > 1 && value.startsWith("\"") && value.endsWith("\"")) {
|
||||
if(itemFromTable && "ARGS".equals(ep.getName())) {
|
||||
value = value.substring(1, value.length());
|
||||
@@ -1015,7 +1027,7 @@ public class NodeUtil {
|
||||
return value;
|
||||
}
|
||||
} else {
|
||||
return "\"" + checkStringQuotationMarks(value) + "\"";
|
||||
return "\"" + checkStringQuotationMarks(value) + "\"";
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1027,6 +1039,17 @@ public class NodeUtil {
|
||||
return value;
|
||||
}
|
||||
|
||||
private static boolean isValidLiteralValue(String value) {
|
||||
ScriptEngine se = ContextParameterUtils.getScriptEngine();
|
||||
if(se==null) return true;
|
||||
try {
|
||||
se.eval(value);
|
||||
return true;
|
||||
} catch (ScriptException e) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
private static String checkStringQuotationMarks(String str) {
|
||||
String result = str;
|
||||
if (result.contains("\"")) {
|
||||
|
||||
@@ -114,7 +114,7 @@ public interface ITalendCorePrefConstants {
|
||||
public static final String DATA_COLLECTOR_PREVIEW = "data_collector_preview"; //$NON-NLS-1$
|
||||
|
||||
public static final String DATA_COLLECTOR = "data_collector"; //$NON-NLS-1$
|
||||
|
||||
|
||||
public static final String EXCHANGE_CHECK_TIS_VERSION = "exchange_check_tis_version"; //$NON-NLS-1$
|
||||
|
||||
public static final String EXCHANGE_DOWNLOADED_CHECK_UPDATES = "exchange_downloaded_check_updates"; //$NON-NLS-1$
|
||||
|
||||
@@ -390,4 +390,34 @@ public class MavenUrlHelper {
|
||||
}
|
||||
return rVersion;
|
||||
}
|
||||
|
||||
public static String getCoordinate(String mavenUri) {
|
||||
if (!isMvnUrl(mavenUri)) {
|
||||
mavenUri = generateMvnUrlForJarName(mavenUri);
|
||||
}
|
||||
MavenArtifact artifact = parseMvnUrl(mavenUri);
|
||||
|
||||
String groupId = artifact.getGroupId();
|
||||
String artifactId = artifact.getArtifactId();
|
||||
String type = artifact.getType();
|
||||
String version = artifact.getVersion();
|
||||
String classifier = artifact.getClassifier();
|
||||
|
||||
String separator = ":"; //$NON-NLS-1$
|
||||
String coordinate = groupId + separator + artifactId;
|
||||
if (StringUtils.isNotBlank(type)) {
|
||||
coordinate += separator + type;
|
||||
}
|
||||
if (StringUtils.isNotBlank(classifier)) {
|
||||
coordinate += separator + classifier;
|
||||
}
|
||||
if (StringUtils.isNotBlank(version)) {
|
||||
if (version.endsWith("-SNAPSHOT")) {
|
||||
version = version.substring(0, version.indexOf("-SNAPSHOT"));
|
||||
}
|
||||
coordinate += separator + version;
|
||||
}
|
||||
return coordinate;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -30,6 +30,8 @@ public interface ITalendProcessJavaProject {
|
||||
|
||||
IJavaProject getJavaProject();
|
||||
|
||||
boolean exists();
|
||||
|
||||
IProject getProject();
|
||||
|
||||
Property getPropery();
|
||||
|
||||
@@ -28,9 +28,15 @@ public class LastGenerationInfo {
|
||||
|
||||
private HashMap<String, Set<ModuleNeeded>> modulesNeededPerJob;
|
||||
|
||||
private HashMap<String, Set<ModuleNeeded>> modulesNeededWithSubjobPerJob;
|
||||
|
||||
private HashMap<String, Set<String>> routinesNeededPerJob;
|
||||
|
||||
private HashMap<String, Set<ModuleNeeded>> modulesNeededWithSubjobPerJob;
|
||||
private HashMap<String, Set<String>> routinesNeededWithSubjobPerJob;
|
||||
|
||||
private HashMap<String, Set<ModuleNeeded>> codesJarModulesNeededPerJob;
|
||||
|
||||
private HashMap<String, Set<ModuleNeeded>> codesJarModulesNeededWithSubjobPerJob;
|
||||
|
||||
private HashMap<String, Set<ModuleNeeded>> highPriorityModuleNeededPerJob;
|
||||
|
||||
@@ -38,8 +44,6 @@ public class LastGenerationInfo {
|
||||
|
||||
private HashMap<String, Set<ModuleNeeded>> testcaseModuleNeeded;
|
||||
|
||||
private HashMap<String, Set<String>> routinesNeededWithSubjobPerJob;
|
||||
|
||||
private HashMap<String, Set<String>> contextPerJob;
|
||||
|
||||
private HashMap<String, Boolean> useDynamic, useRules;
|
||||
@@ -54,16 +58,18 @@ public class LastGenerationInfo {
|
||||
|
||||
private LastGenerationInfo() {
|
||||
modulesNeededPerJob = new HashMap<String, Set<ModuleNeeded>>();
|
||||
contextPerJob = new HashMap<String, Set<String>>();
|
||||
modulesNeededWithSubjobPerJob = new HashMap<String, Set<ModuleNeeded>>();
|
||||
contextPerJob = new HashMap<>();
|
||||
modulesNeededWithSubjobPerJob = new HashMap<>();
|
||||
highPriorityModuleNeededPerJob = new HashMap<>();
|
||||
highPriorityModuleNeeded = new HashMap<>();
|
||||
testcaseModuleNeeded = new HashMap<>();
|
||||
lastGeneratedjobs = new HashSet<JobInfo>();
|
||||
routinesNeededPerJob = new HashMap<String, Set<String>>();
|
||||
routinesNeededWithSubjobPerJob = new HashMap<String, Set<String>>();
|
||||
useDynamic = new HashMap<String, Boolean>();
|
||||
useRules = new HashMap<String, Boolean>();
|
||||
lastGeneratedjobs = new HashSet<>();
|
||||
routinesNeededPerJob = new HashMap<>();
|
||||
routinesNeededWithSubjobPerJob = new HashMap<>();
|
||||
codesJarModulesNeededPerJob = new HashMap<>();
|
||||
codesJarModulesNeededWithSubjobPerJob = new HashMap<>();
|
||||
useDynamic = new HashMap<>();
|
||||
useRules = new HashMap<>();
|
||||
}
|
||||
|
||||
public static LastGenerationInfo getInstance() {
|
||||
@@ -74,10 +80,11 @@ public class LastGenerationInfo {
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @return the modulesNeededPerJob
|
||||
*/
|
||||
// TODO check callers to see if need to add operations for codejars
|
||||
public Set<ModuleNeeded> getModulesNeededWithSubjobPerJob(String jobId, String jobVersion) {
|
||||
|
||||
String key = this.getProcessKey(jobId, jobVersion);
|
||||
if (!modulesNeededWithSubjobPerJob.containsKey(key)) {
|
||||
modulesNeededWithSubjobPerJob.put(key, new HashSet<ModuleNeeded>());
|
||||
@@ -85,6 +92,20 @@ public class LastGenerationInfo {
|
||||
return modulesNeededWithSubjobPerJob.get(key);
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the modulesNeededWithSubjobPerJob.
|
||||
*
|
||||
* @param modulesNeededWithSubjobPerJob the modulesNeededWithSubjobPerJob to set
|
||||
*/
|
||||
public void setModulesNeededWithSubjobPerJob(String jobId, String jobVersion, Set<ModuleNeeded> modulesNeeded) {
|
||||
String key = this.getProcessKey(jobId, jobVersion);
|
||||
if (modulesNeeded == null) {
|
||||
modulesNeededWithSubjobPerJob.put(key, null);
|
||||
} else {
|
||||
modulesNeededWithSubjobPerJob.put(key, new HashSet<ModuleNeeded>(modulesNeeded));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @return the modulesNeededPerJob
|
||||
@@ -97,19 +118,6 @@ public class LastGenerationInfo {
|
||||
return modulesNeededPerJob.get(key);
|
||||
}
|
||||
|
||||
/**
|
||||
* Getter for contextPerJob.
|
||||
*
|
||||
* @return the contextPerJob
|
||||
*/
|
||||
public Set<String> getContextPerJob(String jobId, String jobVersion) {
|
||||
String key = this.getProcessKey(jobId, jobVersion);
|
||||
if (!contextPerJob.containsKey(key)) {
|
||||
contextPerJob.put(key, new HashSet<String>());
|
||||
}
|
||||
return contextPerJob.get(key);
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the modulesNeededPerJob.
|
||||
*
|
||||
@@ -121,17 +129,16 @@ public class LastGenerationInfo {
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the modulesNeededWithSubjobPerJob.
|
||||
* Getter for contextPerJob.
|
||||
*
|
||||
* @param modulesNeededWithSubjobPerJob the modulesNeededWithSubjobPerJob to set
|
||||
* @return the contextPerJob
|
||||
*/
|
||||
public void setModulesNeededWithSubjobPerJob(String jobId, String jobVersion, Set<ModuleNeeded> modulesNeeded) {
|
||||
public Set<String> getContextPerJob(String jobId, String jobVersion) {
|
||||
String key = this.getProcessKey(jobId, jobVersion);
|
||||
if (modulesNeeded == null) {
|
||||
modulesNeededWithSubjobPerJob.put(key, null);
|
||||
} else {
|
||||
modulesNeededWithSubjobPerJob.put(key, new HashSet<ModuleNeeded>(modulesNeeded));
|
||||
if (!contextPerJob.containsKey(key)) {
|
||||
contextPerJob.put(key, new HashSet<String>());
|
||||
}
|
||||
return contextPerJob.get(key);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -241,6 +248,64 @@ public class LastGenerationInfo {
|
||||
return routinesNeededPerJob.get(key);
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the routinesNeededPerJob.
|
||||
*
|
||||
* @param modulesNeededPerJob the modulesNeededPerJob to set
|
||||
*/
|
||||
public void setRoutinesNeededPerJob(String jobId, String jobVersion, Set<String> modulesNeeded) {
|
||||
String key = this.getProcessKey(jobId, jobVersion);
|
||||
routinesNeededPerJob.put(key, new HashSet<String>(modulesNeeded));
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @return the modulesNeededPerJob
|
||||
*/
|
||||
public Set<String> getRoutinesNeededWithSubjobPerJob(String jobId, String jobVersion) {
|
||||
String key = this.getProcessKey(jobId, jobVersion);
|
||||
if (!routinesNeededWithSubjobPerJob.containsKey(key)) {
|
||||
routinesNeededWithSubjobPerJob.put(key, new HashSet<String>());
|
||||
}
|
||||
return routinesNeededWithSubjobPerJob.get(key);
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the routinesNeededPerJob.
|
||||
*
|
||||
* @param modulesNeededPerJob the modulesNeededPerJob to set
|
||||
*/
|
||||
public void setRoutinesNeededWithSubjobPerJob(String jobId, String jobVersion, Set<String> modulesNeeded) {
|
||||
String key = this.getProcessKey(jobId, jobVersion);
|
||||
routinesNeededWithSubjobPerJob.put(key, new HashSet<String>(modulesNeeded));
|
||||
}
|
||||
|
||||
public Set<ModuleNeeded> getCodesJarModulesNeededPerJob(String jobId, String jobVersion) {
|
||||
String key = this.getProcessKey(jobId, jobVersion);
|
||||
if (!codesJarModulesNeededPerJob.containsKey(key)) {
|
||||
codesJarModulesNeededPerJob.put(key, new HashSet<>());
|
||||
}
|
||||
return codesJarModulesNeededPerJob.get(key);
|
||||
}
|
||||
|
||||
public void setCodesJarModulesNeededPerJob(String jobId, String jobVersion, Set<ModuleNeeded> modulesNeeded) {
|
||||
String key = this.getProcessKey(jobId, jobVersion);
|
||||
codesJarModulesNeededPerJob.put(key, new HashSet<>(modulesNeeded));
|
||||
}
|
||||
|
||||
public Set<ModuleNeeded> getCodesJarModulesNeededWithSubjobPerJob(String jobId, String jobVersion) {
|
||||
String key = this.getProcessKey(jobId, jobVersion);
|
||||
if (!codesJarModulesNeededWithSubjobPerJob.containsKey(key)) {
|
||||
codesJarModulesNeededWithSubjobPerJob.put(key, new HashSet<>());
|
||||
}
|
||||
return codesJarModulesNeededWithSubjobPerJob.get(key);
|
||||
}
|
||||
|
||||
public void setCodesJarModulesNeededWithSubjobPerJob(String jobId, String jobVersion, Set<ModuleNeeded> modulesNeeded) {
|
||||
String key = this.getProcessKey(jobId, jobVersion);
|
||||
codesJarModulesNeededWithSubjobPerJob.put(key, new HashSet<>(modulesNeeded));
|
||||
}
|
||||
|
||||
public Set<ModuleNeeded> getHighPriorityModuleNeededPerJob(String jobId, String jobVersion) {
|
||||
String key = getProcessKey(jobId, jobVersion);
|
||||
if (!highPriorityModuleNeededPerJob.containsKey(key)) {
|
||||
@@ -295,38 +360,6 @@ public class LastGenerationInfo {
|
||||
return pureJobId + "_" + jobVersion; //$NON-NLS-1$
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the routinesNeededPerJob.
|
||||
*
|
||||
* @param modulesNeededPerJob the modulesNeededPerJob to set
|
||||
*/
|
||||
public void setRoutinesNeededPerJob(String jobId, String jobVersion, Set<String> modulesNeeded) {
|
||||
String key = this.getProcessKey(jobId, jobVersion);
|
||||
routinesNeededPerJob.put(key, new HashSet<String>(modulesNeeded));
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @return the modulesNeededPerJob
|
||||
*/
|
||||
public Set<String> getRoutinesNeededWithSubjobPerJob(String jobId, String jobVersion) {
|
||||
String key = this.getProcessKey(jobId, jobVersion);
|
||||
if (!routinesNeededWithSubjobPerJob.containsKey(key)) {
|
||||
routinesNeededWithSubjobPerJob.put(key, new HashSet<String>());
|
||||
}
|
||||
return routinesNeededWithSubjobPerJob.get(key);
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the routinesNeededPerJob.
|
||||
*
|
||||
* @param modulesNeededPerJob the modulesNeededPerJob to set
|
||||
*/
|
||||
public void setRoutinesNeededWithSubjobPerJob(String jobId, String jobVersion, Set<String> modulesNeeded) {
|
||||
String key = this.getProcessKey(jobId, jobVersion);
|
||||
routinesNeededWithSubjobPerJob.put(key, new HashSet<String>(modulesNeeded));
|
||||
}
|
||||
|
||||
public void clearCaches() {
|
||||
clearHighPriorityModuleNeeded();
|
||||
modulesNeededPerJob.clear();
|
||||
|
||||
@@ -74,4 +74,10 @@ public interface TalendProcessOptionConstants {
|
||||
|
||||
public static final int MODULES_EXCLUDE_SHADED = 1 << 5;
|
||||
|
||||
/**
|
||||
* NOTE with this option, still won't get codesjar modules of related joblet TODO check all callers to find a way to
|
||||
* include those
|
||||
*/
|
||||
public static final int MODULES_WITH_CODESJAR = 1 << 6;
|
||||
|
||||
}
|
||||
|
||||
@@ -0,0 +1,36 @@
|
||||
// ============================================================================
|
||||
//
|
||||
// Copyright (C) 2006-2019 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.runtime.services;
|
||||
|
||||
import org.talend.core.GlobalServiceRegister;
|
||||
import org.talend.core.IService;
|
||||
import org.talend.core.model.properties.Item;
|
||||
import org.talend.core.model.properties.Property;
|
||||
import org.talend.core.model.properties.RoutineItem;
|
||||
|
||||
public interface IDesignerMavenService extends IService {
|
||||
|
||||
String getCodesJarPackageByInnerCode(RoutineItem innerCodeItem);
|
||||
|
||||
String getImportGAVPackageForCodesJar(String projectTechName, Item codesJarItem);
|
||||
|
||||
void updateCodeJarMavenProject(Property codeJarProperty, boolean needReSync) throws Exception;
|
||||
|
||||
public static IDesignerMavenService get() {
|
||||
if (GlobalServiceRegister.getDefault().isServiceRegistered(IDesignerMavenService.class)) {
|
||||
return GlobalServiceRegister.getDefault().getService(IDesignerMavenService.class);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -22,6 +22,7 @@ import org.eclipse.core.resources.IResource;
|
||||
import org.eclipse.core.runtime.IPath;
|
||||
import org.eclipse.ui.IEditorPart;
|
||||
import org.talend.commons.exception.PersistenceException;
|
||||
import org.talend.core.GlobalServiceRegister;
|
||||
import org.talend.core.IService;
|
||||
import org.talend.core.model.components.IComponent;
|
||||
import org.talend.core.model.general.ModuleNeeded;
|
||||
@@ -135,4 +136,11 @@ public interface ITestContainerProviderService extends IService {
|
||||
|
||||
public List<NodeType> getOriginalNodes(ProcessType process);
|
||||
|
||||
public static ITestContainerProviderService get() {
|
||||
if (GlobalServiceRegister.getDefault().isServiceRegistered(ITestContainerProviderService.class)) {
|
||||
return GlobalServiceRegister.getDefault().getService(ITestContainerProviderService.class);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -0,0 +1,163 @@
|
||||
package org.talend.core.utils;
|
||||
|
||||
import java.beans.PropertyChangeListener;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Iterator;
|
||||
import java.util.LinkedHashSet;
|
||||
import java.util.List;
|
||||
import java.util.Optional;
|
||||
import java.util.Set;
|
||||
|
||||
import org.talend.commons.exception.ExceptionHandler;
|
||||
import org.talend.commons.exception.PersistenceException;
|
||||
import org.talend.core.GlobalServiceRegister;
|
||||
import org.talend.core.model.general.Project;
|
||||
import org.talend.core.model.properties.Property;
|
||||
import org.talend.core.model.properties.RoutineItem;
|
||||
import org.talend.core.model.repository.ERepositoryObjectType;
|
||||
import org.talend.core.model.repository.IRepositoryViewObject;
|
||||
import org.talend.core.model.routines.CodesJarInfo;
|
||||
import org.talend.core.model.routines.RoutinesUtil;
|
||||
import org.talend.designer.runprocess.IRunProcessService;
|
||||
import org.talend.repository.ProjectManager;
|
||||
import org.talend.repository.model.IProxyRepositoryFactory;
|
||||
import org.talend.repository.model.IProxyRepositoryService;
|
||||
|
||||
public class CodesJarResourceCache {
|
||||
|
||||
private static final Set<CodesJarInfo> CACHE = new LinkedHashSet<>();
|
||||
|
||||
private static final Object LOCK = new Object();
|
||||
|
||||
private static boolean isListenerAdded;
|
||||
|
||||
private static PropertyChangeListener listener;
|
||||
|
||||
public static void initCodesJarCache() {
|
||||
synchronized (LOCK) {
|
||||
CACHE.clear();
|
||||
List<Project> allProjects = new ArrayList<>();
|
||||
allProjects.addAll(ProjectManager.getInstance().getAllReferencedProjects(true));
|
||||
allProjects.add(ProjectManager.getInstance().getCurrentProject());
|
||||
try {
|
||||
for (Project project : allProjects) {
|
||||
for (ERepositoryObjectType codesJarType : ERepositoryObjectType.getAllTypesOfCodesJar()) {
|
||||
List<IRepositoryViewObject> objects = getProxyRepositoryFactory().getAllCodesJars(project, codesJarType);
|
||||
for (IRepositoryViewObject obj : objects) {
|
||||
CACHE.add(CodesJarInfo.create(obj.getProperty()));
|
||||
}
|
||||
}
|
||||
}
|
||||
addCodesJarChangeListener();
|
||||
} catch (PersistenceException e) {
|
||||
ExceptionHandler.process(e);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static Set<CodesJarInfo> getAllCodesJars() {
|
||||
synchronized (LOCK) {
|
||||
return new LinkedHashSet<>(CACHE);
|
||||
}
|
||||
}
|
||||
|
||||
public static CodesJarInfo getCodesJarById(String id) {
|
||||
synchronized (LOCK) {
|
||||
Optional<CodesJarInfo> optional = CACHE.stream().filter(info -> info.getProperty().getId().equals(id))
|
||||
.findFirst();
|
||||
if (optional.isPresent()) {
|
||||
return optional.get();
|
||||
}
|
||||
ExceptionHandler.process(new Exception("Codes jar id [" + id + "] is not found!")); //$NON-NLS-1$ //$NON-NLS-2$
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
public static CodesJarInfo getCodesJarByLabel(ERepositoryObjectType type, String projectTechName, String label) {
|
||||
synchronized (LOCK) {
|
||||
Optional<CodesJarInfo> optional = CACHE.stream().filter(
|
||||
info -> ERepositoryObjectType.getItemType(info.getProperty().getItem()) == type
|
||||
&& info.getProperty().getLabel().equals(label) && info.getProjectTechName().equals(projectTechName))
|
||||
.findFirst();
|
||||
if (optional.isPresent()) {
|
||||
return optional.get();
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
public static CodesJarInfo getCodesJarByInnerCode(RoutineItem routineItem) throws PersistenceException {
|
||||
String codesJarName = RoutinesUtil.getCodesJarLabelByInnerCode(routineItem);
|
||||
String projectTechName = ProjectManager.getInstance().getProject(routineItem).getTechnicalLabel();
|
||||
return getAllCodesJars().stream()
|
||||
.filter(info -> info.getProperty().getLabel().equals(codesJarName)
|
||||
&& info.getProjectTechName().equals(projectTechName))
|
||||
.findFirst().get();
|
||||
}
|
||||
|
||||
public static void addToCache(Property newProperty) {
|
||||
synchronized (LOCK) {
|
||||
Iterator<CodesJarInfo> iterator = CACHE.iterator();
|
||||
while (iterator.hasNext()) {
|
||||
Property oldProperty = iterator.next().getProperty();
|
||||
if (newProperty.getId().equals(oldProperty.getId()) && newProperty.getLabel().equals(oldProperty.getLabel())
|
||||
&& newProperty.getVersion().equals(oldProperty.getVersion())) {
|
||||
iterator.remove();
|
||||
}
|
||||
}
|
||||
CACHE.add(CodesJarInfo.create(newProperty));
|
||||
}
|
||||
}
|
||||
|
||||
public static void updateCache(String oldId, String oldLabel, String oldVersion, Property newProperty) {
|
||||
synchronized (LOCK) {
|
||||
Iterator<CodesJarInfo> iterator = CACHE.iterator();
|
||||
while (iterator.hasNext()) {
|
||||
Property oldProperty = iterator.next().getProperty();
|
||||
if ((oldId == null || (oldId != null && oldId.equals(oldProperty.getId())))
|
||||
&& oldLabel.equals(oldProperty.getLabel())
|
||||
&& oldVersion.equals(oldProperty.getVersion())) {
|
||||
iterator.remove();
|
||||
}
|
||||
}
|
||||
CACHE.add(CodesJarInfo.create(newProperty));
|
||||
}
|
||||
}
|
||||
|
||||
public static void removeCache(Property property) {
|
||||
synchronized (LOCK) {
|
||||
Iterator<CodesJarInfo> iterator = CACHE.iterator();
|
||||
while (iterator.hasNext()) {
|
||||
Property oldProperty = iterator.next().getProperty();
|
||||
if (oldProperty.getId().equals(property.getId()) && oldProperty.getLabel().equals(property.getLabel())
|
||||
&& oldProperty.getVersion().equals(property.getVersion())) {
|
||||
iterator.remove();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static IProxyRepositoryFactory getProxyRepositoryFactory() {
|
||||
if (GlobalServiceRegister.getDefault().isServiceRegistered(IProxyRepositoryService.class)) {
|
||||
return GlobalServiceRegister.getDefault().getService(IProxyRepositoryService.class).getProxyRepositoryFactory();
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public static void addCodesJarChangeListener() {
|
||||
if (!isListenerAdded) {
|
||||
synchronized (LOCK) {
|
||||
if (!isListenerAdded) {
|
||||
if (listener == null) {
|
||||
if (GlobalServiceRegister.getDefault().isServiceRegistered(IRunProcessService.class)) {
|
||||
IRunProcessService service = GlobalServiceRegister.getDefault().getService(IRunProcessService.class);
|
||||
listener = service.addCodesJarChangeListener();
|
||||
isListenerAdded = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -20,6 +20,7 @@ import java.util.Collections;
|
||||
import java.util.Date;
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
@@ -36,6 +37,7 @@ import org.talend.commons.utils.VersionUtils;
|
||||
import org.talend.commons.utils.encoding.CharsetToolkit;
|
||||
import org.talend.commons.utils.generation.JavaUtils;
|
||||
import org.talend.commons.utils.resource.FileExtensions;
|
||||
import org.talend.commons.utils.workbench.resources.ResourceUtils;
|
||||
import org.talend.core.GlobalServiceRegister;
|
||||
import org.talend.core.IService;
|
||||
import org.talend.core.model.general.Project;
|
||||
@@ -46,14 +48,19 @@ import org.talend.core.model.properties.Property;
|
||||
import org.talend.core.model.properties.RoutineItem;
|
||||
import org.talend.core.model.repository.ERepositoryObjectType;
|
||||
import org.talend.core.model.repository.IRepositoryViewObject;
|
||||
import org.talend.core.model.routines.CodesJarInfo;
|
||||
import org.talend.core.model.routines.RoutinesUtil;
|
||||
import org.talend.core.model.utils.JavaResourcesHelper;
|
||||
import org.talend.core.runtime.process.ITalendProcessJavaProject;
|
||||
import org.talend.core.runtime.repository.item.ItemProductKeys;
|
||||
import org.talend.core.runtime.services.IDesignerMavenService;
|
||||
import org.talend.core.runtime.util.ItemDateParser;
|
||||
import org.talend.core.ui.branding.IBrandingService;
|
||||
import org.talend.core.utils.CodesJarResourceCache;
|
||||
import org.talend.designer.core.ICamelDesignerCoreService;
|
||||
import org.talend.designer.runprocess.IRunProcessService;
|
||||
import org.talend.repository.ProjectManager;
|
||||
import org.talend.repository.model.IProxyRepositoryFactory;
|
||||
import org.talend.repository.model.IRepositoryService;
|
||||
import org.talend.repository.model.RepositoryNodeUtilities;
|
||||
|
||||
@@ -141,6 +148,9 @@ public abstract class AbstractRoutineSynchronizer implements ITalendSynchronizer
|
||||
}
|
||||
|
||||
protected IFile getRoutineFile(RoutineItem routineItem, String projectTechName) throws SystemException {
|
||||
if (RoutinesUtil.isInnerCodes(routineItem.getProperty())) {
|
||||
return getInnerCodeFile(routineItem);
|
||||
}
|
||||
ITalendProcessJavaProject talendProcessJavaProject = getRunProcessService()
|
||||
.getTalendCodeJavaProject(ERepositoryObjectType.getItemType(routineItem), projectTechName);
|
||||
if (talendProcessJavaProject == null) {
|
||||
@@ -150,6 +160,24 @@ public abstract class AbstractRoutineSynchronizer implements ITalendSynchronizer
|
||||
return routineFolder.getFile(routineItem.getProperty().getLabel() + JavaUtils.JAVA_EXTENSION);
|
||||
}
|
||||
|
||||
protected IFile getInnerCodeFile(RoutineItem routineItem) throws SystemException {
|
||||
CodesJarInfo info = CodesJarResourceCache.getCodesJarByInnerCode(routineItem);
|
||||
ITalendProcessJavaProject talendProcessJavaProject = getRunProcessService().getTalendCodesJarJavaProject(info);
|
||||
if (talendProcessJavaProject == null) {
|
||||
return null;
|
||||
}
|
||||
IFolder routineFolder = talendProcessJavaProject.getSrcSubFolder(null, getInnerCodePackage(routineItem));
|
||||
return routineFolder.getFile(routineItem.getProperty().getLabel() + JavaUtils.JAVA_EXTENSION);
|
||||
}
|
||||
|
||||
private String getInnerCodePackage(RoutineItem innerCodeItem) {
|
||||
if (GlobalServiceRegister.getDefault().isServiceRegistered(IDesignerMavenService.class)) {
|
||||
IDesignerMavenService service = GlobalServiceRegister.getDefault().getService(IDesignerMavenService.class);
|
||||
return service.getCodesJarPackageByInnerCode(innerCodeItem);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
private IFile getProcessFile(ProcessItem item) throws SystemException {
|
||||
final ITalendProcessJavaProject talendProcessJavaProject = getRunProcessService().getTalendJobJavaProject(item.getProperty());
|
||||
if (talendProcessJavaProject == null) {
|
||||
@@ -173,15 +201,23 @@ public abstract class AbstractRoutineSynchronizer implements ITalendSynchronizer
|
||||
|
||||
@Override
|
||||
public IFile getRoutinesFile(Item item) throws SystemException {
|
||||
// from talend project
|
||||
if (item instanceof RoutineItem) {
|
||||
final RoutineItem routineItem = (RoutineItem) item;
|
||||
final IProject project = ResourcesPlugin.getWorkspace().getRoot()
|
||||
.getProject(ProjectManager.getInstance().getProject(routineItem).getTechnicalLabel());
|
||||
IFolder folder = project
|
||||
.getFolder(ERepositoryObjectType.getFolderName(ERepositoryObjectType.getItemType(routineItem)));
|
||||
ERepositoryObjectType type;
|
||||
ERepositoryObjectType innerCodeType = RoutinesUtil.getInnerCodeType(item.getProperty());
|
||||
if (innerCodeType != null) {
|
||||
type = innerCodeType;
|
||||
} else {
|
||||
type = ERepositoryObjectType.getItemType(routineItem);
|
||||
}
|
||||
IFolder folder = project.getFolder(ERepositoryObjectType.getFolderName(type));
|
||||
IPath ipath = RepositoryNodeUtilities.getPath(routineItem.getProperty().getId());
|
||||
if (ipath == null)
|
||||
if (ipath == null) {
|
||||
return null;
|
||||
}
|
||||
final String folderPath = ipath.toString();
|
||||
if (folderPath != null && !folderPath.trim().isEmpty()) {
|
||||
folder = folder.getFolder(folderPath);
|
||||
@@ -232,14 +268,46 @@ public abstract class AbstractRoutineSynchronizer implements ITalendSynchronizer
|
||||
}
|
||||
}
|
||||
|
||||
protected void syncInnerCodeItems(boolean forceUpdate) throws SystemException {
|
||||
IProxyRepositoryFactory factory = getRepositoryService().getProxyRepositoryFactory();
|
||||
for (CodesJarInfo info : CodesJarResourceCache.getAllCodesJars()) {
|
||||
Property property = info.getProperty();
|
||||
String projectTechName = info.getProjectTechName();
|
||||
Project project = ProjectManager.getInstance().getProjectFromProjectTechLabel(projectTechName);
|
||||
ERepositoryObjectType codesJarType = ERepositoryObjectType.getItemType(property.getItem());
|
||||
List<IRepositoryViewObject> innerCodesObjects = factory.getAllInnerCodes(project, codesJarType, property);
|
||||
for (IRepositoryViewObject codesObj : innerCodesObjects) {
|
||||
RoutineItem codeItem = (RoutineItem) codesObj.getProperty().getItem();
|
||||
syncRoutine(codeItem, projectTechName, true, forceUpdate);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void doSyncRoutine(RoutineItem routineItem, String projectTechName, boolean copyToTemp) throws SystemException {
|
||||
try {
|
||||
IFile file = getRoutineFile(routineItem, projectTechName);
|
||||
if (file == null) {
|
||||
return;
|
||||
}
|
||||
File itemFile = null;
|
||||
if (routineItem.eResource() == null) {
|
||||
return;
|
||||
if (!RoutinesUtil.isInnerCodes(routineItem.getProperty())) {
|
||||
return;
|
||||
}
|
||||
CodesJarInfo info = CodesJarResourceCache.getCodesJarByInnerCode(routineItem);
|
||||
Property codesJarProperty = info.getProperty();
|
||||
IFolder innerCodeFolder = ResourceUtils.getFolder(ResourceUtils.getProject(info.getProjectTechName()),
|
||||
ERepositoryObjectType.getFolderName(ERepositoryObjectType.getItemType(codesJarProperty.getItem())) + "/"
|
||||
+ codesJarProperty.getLabel(),
|
||||
true);
|
||||
IFile innerCodeFile = innerCodeFolder
|
||||
.getFile(routineItem.getProperty().getLabel() + "_" + routineItem.getProperty().getVersion() + ".item");
|
||||
if (innerCodeFile.exists()) {
|
||||
itemFile = innerCodeFile.getLocation().toFile();
|
||||
}
|
||||
if (itemFile == null) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
Property property = routineItem.getProperty();
|
||||
Date modifiedDate = ItemDateParser.parseAdditionalDate(property, ItemProductKeys.DATE.getModifiedKey());
|
||||
@@ -252,9 +320,11 @@ public abstract class AbstractRoutineSynchronizer implements ITalendSynchronizer
|
||||
}
|
||||
|
||||
if (copyToTemp) {
|
||||
String uri = routineItem.eResource().getURI().trimFileExtension()
|
||||
.appendFileExtension(FileExtensions.ITEM_EXTENSION).toPlatformString(false);
|
||||
File itemFile = ResourcesPlugin.getWorkspace().getRoot().getLocation().append(uri).toFile();
|
||||
if (itemFile == null) {
|
||||
String uri = routineItem.eResource().getURI().trimFileExtension()
|
||||
.appendFileExtension(FileExtensions.ITEM_EXTENSION).toPlatformString(false);
|
||||
itemFile = ResourcesPlugin.getWorkspace().getRoot().getLocation().append(uri).toFile();
|
||||
}
|
||||
byte[] buf = routineItem.getContent().getInnerContent();
|
||||
String charset = null;
|
||||
if (itemFile.exists()) {
|
||||
@@ -292,8 +362,13 @@ public abstract class AbstractRoutineSynchronizer implements ITalendSynchronizer
|
||||
@Override
|
||||
public void deleteRoutinefile(IRepositoryViewObject objToDelete) {
|
||||
Item item = objToDelete.getProperty().getItem();
|
||||
if (RoutinesUtil.isInnerCodes(item.getProperty())) {
|
||||
deleteInnerCodeFile(item);
|
||||
return;
|
||||
}
|
||||
try {
|
||||
ITalendProcessJavaProject talendProcessJavaProject = getRunProcessService().getTalendCodeJavaProject(ERepositoryObjectType.getItemType(item));
|
||||
ITalendProcessJavaProject talendProcessJavaProject = getRunProcessService()
|
||||
.getTalendCodeJavaProject(ERepositoryObjectType.getItemType(item));
|
||||
if (talendProcessJavaProject == null) {
|
||||
return;
|
||||
}
|
||||
@@ -306,6 +381,15 @@ public abstract class AbstractRoutineSynchronizer implements ITalendSynchronizer
|
||||
}
|
||||
}
|
||||
|
||||
private void deleteInnerCodeFile(Item item) {
|
||||
try {
|
||||
IFile file = getInnerCodeFile((RoutineItem) item);
|
||||
file.delete(true, null);
|
||||
} catch (CoreException | SystemException e) {
|
||||
ExceptionHandler.process(e);
|
||||
}
|
||||
}
|
||||
|
||||
protected boolean isRoutineUptodate(RoutineItem routineItem) {
|
||||
Date refDate = getRefDate(routineItem);
|
||||
if (refDate == null) {
|
||||
|
||||
@@ -53,4 +53,8 @@ public interface ITalendSynchronizer {
|
||||
|
||||
void deleteRoutinefile(IRepositoryViewObject objToDelete);
|
||||
|
||||
void syncAllInnerCodes() throws SystemException;
|
||||
|
||||
void syncAllInnerCodesForLogOn() throws SystemException;
|
||||
|
||||
}
|
||||
|
||||
@@ -43,6 +43,8 @@ public interface ICamelDesignerCoreService extends IService {
|
||||
|
||||
public boolean isInstanceofCamelBeans(Item item);
|
||||
|
||||
boolean isInstanceofCamelBeansJar(Item item);
|
||||
|
||||
/**
|
||||
* Synchronized Route resource
|
||||
*
|
||||
|
||||
@@ -157,7 +157,9 @@ public interface IDesignerCoreService extends IService {
|
||||
|
||||
public void reloadParamFromProjectSettings(ParametersType processType, String paramName);
|
||||
|
||||
public Set<ModuleNeeded> getNeededLibrariesForProcess(IProcess process, boolean withChildrens);
|
||||
public Set<ModuleNeeded> getNeededLibrariesForProcess(IProcess process, int options);
|
||||
|
||||
public Set<ModuleNeeded> getCodesJarNeededLibrariesForProcess(Item item);
|
||||
|
||||
public Set<ModuleNeeded> getNeededModules(INode node, boolean withChildrens);
|
||||
|
||||
|
||||
@@ -299,6 +299,8 @@ public interface IProcessor {
|
||||
String[] getJVMArgs();
|
||||
|
||||
Set<ModuleNeeded> getNeededModules(int options);
|
||||
|
||||
Set<ModuleNeeded> getCodesJarModulesNeededOfJoblets();
|
||||
|
||||
public void updateModulesAfterSetLog4j(Collection<ModuleNeeded> modulesNeeded);
|
||||
|
||||
@@ -306,6 +308,8 @@ public interface IProcessor {
|
||||
|
||||
Set<JobInfo> getBuildFirstChildrenJobs();
|
||||
|
||||
Set<JobInfo> getBuildChildrenJobsAndJoblets();
|
||||
|
||||
/**
|
||||
* used for old build job system. after maven build, can be removed.
|
||||
*/
|
||||
|
||||
@@ -12,6 +12,7 @@
|
||||
// ============================================================================
|
||||
package org.talend.designer.runprocess;
|
||||
|
||||
import java.beans.PropertyChangeListener;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
@@ -37,8 +38,8 @@ import org.talend.core.model.process.IProcess2;
|
||||
import org.talend.core.model.process.JobInfo;
|
||||
import org.talend.core.model.properties.Item;
|
||||
import org.talend.core.model.properties.Property;
|
||||
import org.talend.core.model.properties.RoutineItem;
|
||||
import org.talend.core.model.repository.ERepositoryObjectType;
|
||||
import org.talend.core.model.routines.CodesJarInfo;
|
||||
import org.talend.core.runtime.process.ITalendProcessJavaProject;
|
||||
import org.talend.core.runtime.projectsetting.ProjectPreferenceManager;
|
||||
|
||||
@@ -131,7 +132,7 @@ public interface IRunProcessService extends IService {
|
||||
public void updateLibraries(Set<ModuleNeeded> jobModuleList, IProcess process, Set<ModuleNeeded> alreadyRetrievedModules)
|
||||
throws ProcessorException;
|
||||
|
||||
public void updateLibraries(RoutineItem routineItem);
|
||||
public void updateLibraries(Item routineItem);
|
||||
|
||||
public void refreshView();
|
||||
|
||||
@@ -201,6 +202,7 @@ public interface IRunProcessService extends IService {
|
||||
|
||||
ProjectPreferenceManager getProjectPreferenceManager();
|
||||
|
||||
@Deprecated
|
||||
Set<String> getLibJarsForBD(IProcess process);
|
||||
|
||||
void updateProjectPomWithTemplate();
|
||||
@@ -215,8 +217,16 @@ public interface IRunProcessService extends IService {
|
||||
|
||||
ITalendProcessJavaProject getTalendCodeJavaProject(ERepositoryObjectType type, String projectTechName);
|
||||
|
||||
ITalendProcessJavaProject getTalendCodesJarJavaProject(CodesJarInfo info);
|
||||
|
||||
ITalendProcessJavaProject getTalendJobJavaProject(Property property);
|
||||
|
||||
ITalendProcessJavaProject getExistingTalendJobProject(Property property);
|
||||
|
||||
ITalendProcessJavaProject getExistingTalendCodesJarProject(CodesJarInfo info);
|
||||
|
||||
PropertyChangeListener addCodesJarChangeListener();
|
||||
|
||||
IFolder getCodeSrcFolder(ERepositoryObjectType type, String projectTechName);
|
||||
|
||||
ITalendProcessJavaProject getTempJavaProject();
|
||||
@@ -255,4 +265,9 @@ public interface IRunProcessService extends IService {
|
||||
return null;
|
||||
}
|
||||
|
||||
void deleteTalendCodesJarProject(CodesJarInfo info, boolean deleteContent);
|
||||
|
||||
void deleteTalendCodesJarProject(ERepositoryObjectType type, String projectTechName, String codesJarName,
|
||||
boolean deleteContent);
|
||||
|
||||
}
|
||||
|
||||
@@ -427,6 +427,18 @@ public final class ProjectManager {
|
||||
return isInMainProject(getCurrentProject(), object);
|
||||
}
|
||||
|
||||
/**
|
||||
* could get the right comparing result if resource is unloaded
|
||||
*/
|
||||
public boolean isResourceInCurrentMainProject(EObject object) {
|
||||
org.talend.core.model.properties.Project project = getProject(object);
|
||||
Project mainProject = getCurrentProject();
|
||||
if (project != null && mainProject != null) {
|
||||
return project.getTechnicalLabel().equals(mainProject.getEmfProject().getTechnicalLabel());
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public boolean isInMainProject(Project mainProject, EObject object) {
|
||||
if (object != null) {
|
||||
org.talend.core.model.properties.Project project = getProject(mainProject, object);
|
||||
|
||||
@@ -12,6 +12,8 @@
|
||||
// ============================================================================
|
||||
package org.talend.repository;
|
||||
|
||||
import java.util.Set;
|
||||
|
||||
import org.talend.commons.exception.LoginException;
|
||||
import org.talend.commons.exception.PersistenceException;
|
||||
import org.talend.core.model.general.Project;
|
||||
@@ -45,6 +47,8 @@ public abstract class RepositoryWorkUnit<T> {
|
||||
|
||||
private boolean refreshRepository = true; // added for TDI-27085
|
||||
|
||||
private Set<String> specifiedCommitFiles;
|
||||
|
||||
/**
|
||||
* Usefull for some save only actions, where we're sure everything is up to date.
|
||||
*/
|
||||
@@ -194,6 +198,13 @@ public abstract class RepositoryWorkUnit<T> {
|
||||
this.refreshRepository = refreshRepository;
|
||||
}
|
||||
|
||||
public Set<String> getSpecifiedCommitFiles() {
|
||||
return specifiedCommitFiles;
|
||||
}
|
||||
|
||||
public void setSpecifiedCommitFiles(Set<String> specifiedCommitFiles) {
|
||||
this.specifiedCommitFiles = specifiedCommitFiles;
|
||||
}
|
||||
|
||||
/**
|
||||
* Getter for avoidUpdateLocks.
|
||||
|
||||
@@ -17,6 +17,7 @@ import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import org.eclipse.core.resources.IFolder;
|
||||
import org.eclipse.core.runtime.IPath;
|
||||
import org.talend.commons.exception.BusinessException;
|
||||
import org.talend.commons.exception.LoginException;
|
||||
@@ -206,6 +207,8 @@ public interface IProxyRepositoryFactory {
|
||||
*/
|
||||
public abstract void deleteObjectLogical(IRepositoryViewObject objToDelete) throws PersistenceException, BusinessException;
|
||||
|
||||
// TODO need to remove codesjar and related routine node to bin, or just show codesjar node?
|
||||
// if delete inner routine, show node itself only
|
||||
public abstract void deleteObjectLogical(Project project, IRepositoryViewObject objToDelete) throws PersistenceException,
|
||||
BusinessException;
|
||||
|
||||
@@ -213,6 +216,7 @@ public interface IProxyRepositoryFactory {
|
||||
throws PersistenceException, BusinessException;
|
||||
|
||||
public abstract void deleteObjectPhysical(IRepositoryViewObject objToDelete) throws PersistenceException;
|
||||
// TODO if delete codesjar item should delete all related routines
|
||||
|
||||
public abstract void deleteObjectPhysical(IRepositoryViewObject objToDelete, String version) throws PersistenceException;
|
||||
|
||||
@@ -305,6 +309,20 @@ public interface IProxyRepositoryFactory {
|
||||
public abstract List<IRepositoryViewObject> getAll(Project project, ERepositoryObjectType type, boolean withDeleted,
|
||||
boolean allVersions) throws PersistenceException;
|
||||
|
||||
public abstract List<IRepositoryViewObject> getAll(Project project, ERepositoryObjectType type, boolean withDeleted,
|
||||
boolean allVersions, IFolder... folders) throws PersistenceException;
|
||||
|
||||
public abstract List<IRepositoryViewObject> getAllCodesJars(ERepositoryObjectType type) throws PersistenceException;
|
||||
|
||||
public abstract List<IRepositoryViewObject> getAllCodesJars(Project project, ERepositoryObjectType type)
|
||||
throws PersistenceException;
|
||||
|
||||
public abstract List<IRepositoryViewObject> getAllInnerCodes(ERepositoryObjectType codesJarType, Property jarProperty)
|
||||
throws PersistenceException;
|
||||
|
||||
public abstract List<IRepositoryViewObject> getAllInnerCodes(Project project, ERepositoryObjectType codesJarType,
|
||||
Property jarProperty) throws PersistenceException;
|
||||
|
||||
public abstract List<String> getFolders(ERepositoryObjectType type) throws PersistenceException;
|
||||
|
||||
/**
|
||||
|
||||
@@ -128,7 +128,8 @@ public class RepositoryConstants {
|
||||
|| type == ERepositoryObjectType.JOB_SCRIPT) {
|
||||
return CODE_ITEM_PATTERN;
|
||||
} else if (type == ERepositoryObjectType.ROUTINES
|
||||
|| "BEANS".equals(type.getType())) {
|
||||
|| "BEANS".equals(type.getType()) || type == ERepositoryObjectType.ROUTINESJAR
|
||||
|| (type != null && type == ERepositoryObjectType.BEANSJAR)) {
|
||||
// for bug 10356
|
||||
return ROUTINES_ITEM_PATTERN;
|
||||
} else if (type == ERepositoryObjectType.TDQ_JRAXML_ELEMENT || type == ERepositoryObjectType.TDQ_DATA_PROFILING
|
||||
|
||||
@@ -46,6 +46,7 @@ import org.talend.core.model.repository.ERepositoryObjectType;
|
||||
import org.talend.core.model.repository.IRepositoryPrefConstants;
|
||||
import org.talend.core.model.repository.IRepositoryViewObject;
|
||||
import org.talend.core.model.repository.ISubRepositoryObject;
|
||||
import org.talend.core.model.routines.RoutinesUtil;
|
||||
import org.talend.core.model.utils.RepositoryManagerHelper;
|
||||
import org.talend.core.runtime.CoreRuntimePlugin;
|
||||
import org.talend.core.runtime.i18n.Messages;
|
||||
@@ -108,6 +109,11 @@ public class RepositoryNodeUtilities {
|
||||
} else {
|
||||
if (/* !isMetadataLabel(label) && */node.getType() != ENodeType.REPOSITORY_ELEMENT) {
|
||||
return getPath(node.getParent()).append(label);
|
||||
} else if (ERepositoryObjectType.getAllTypesOfCodesJar().contains(node.getContentType())) {
|
||||
if (RoutinesUtil.isInnerCodes(node.getObject().getProperty())) {
|
||||
return new Path(node.getObject().getProperty().getItem().getState().getPath());
|
||||
}
|
||||
return new Path(node.getObject().getLabel());
|
||||
} else {
|
||||
return getPath(node.getParent());
|
||||
}
|
||||
|
||||
@@ -0,0 +1,57 @@
|
||||
// ============================================================================
|
||||
//
|
||||
// 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.token;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.Properties;
|
||||
|
||||
import org.eclipse.core.runtime.Platform;
|
||||
import org.talend.commons.utils.time.PropertiesFileUtil;
|
||||
|
||||
/**
|
||||
* DOC sbliu class global comment. Detailled comment
|
||||
*/
|
||||
public class RepositoryActionLogger {
|
||||
|
||||
private static String recordingFileName = "actions";
|
||||
|
||||
private static File recordingFile;
|
||||
public static final String PREFIX_PERSPECITVE = "perspective.";
|
||||
public static final String PREFIX_ACTION = "action.";
|
||||
|
||||
public static File getRecordingFile() {
|
||||
if (recordingFile == null) {
|
||||
String configurationLocation = Platform.getConfigurationLocation().getURL().getPath();
|
||||
recordingFile = new File(configurationLocation + "/data_collector/" + recordingFileName);
|
||||
}
|
||||
return recordingFile;
|
||||
}
|
||||
|
||||
private static void log(String action) {
|
||||
new Thread(() -> {
|
||||
Properties props = PropertiesFileUtil.read(getRecordingFile(), false);
|
||||
int count = Integer.parseInt(props.getProperty(action, "0"));
|
||||
props.put(action, count + 1 + "");
|
||||
PropertiesFileUtil.store(getRecordingFile(), props);
|
||||
}).start();
|
||||
}
|
||||
|
||||
public static void logPerspective(String perspective) {
|
||||
log(PREFIX_PERSPECITVE + perspective);
|
||||
}
|
||||
|
||||
public static void logAction(String action) {
|
||||
log(PREFIX_ACTION + action);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -65,6 +65,7 @@ import org.talend.repository.model.IRepositoryNode.ENodeType;
|
||||
import org.talend.repository.model.IRepositoryNode.EProperties;
|
||||
import org.talend.repository.model.RepositoryConstants;
|
||||
import org.talend.repository.model.RepositoryNode;
|
||||
import org.talend.repository.token.RepositoryActionLogger;
|
||||
import org.talend.repository.ui.views.IJobSettingsView;
|
||||
import org.talend.repository.ui.views.IRepositoryView;
|
||||
|
||||
@@ -638,6 +639,7 @@ public abstract class AContextualAction extends Action implements ITreeContextua
|
||||
@Override
|
||||
public void run() {
|
||||
String name = "User action : " + getText(); //$NON-NLS-1$
|
||||
RepositoryActionLogger.logAction(getClass().getName());
|
||||
|
||||
oldItem = null;
|
||||
// if (node == null) {
|
||||
|
||||
@@ -30,6 +30,12 @@
|
||||
id="org.talend.core.ui.token.PerformanceProvider"
|
||||
name="performance">
|
||||
</provider>
|
||||
<provider
|
||||
collector="org.talend.core.ui.token.RepositroyActionsTokenCollector"
|
||||
description="collect DI/DQ actions/numbers of action done, also collect perspective switch"
|
||||
id="org.talend.core.ui.token.RepositroyActionsTokenCollector"
|
||||
name="actions">
|
||||
</provider>
|
||||
</extension>
|
||||
|
||||
<extension
|
||||
|
||||
@@ -260,7 +260,6 @@ public class ExtendedContextColumnPropertyAccessor<R> implements IColumnProperty
|
||||
return;
|
||||
}
|
||||
String newType = getRealType((String) newValue);
|
||||
contextPara.setType(newType);
|
||||
|
||||
Command cmd = new SetContextTypeCommand(manager, contextPara, newType);
|
||||
runCommand(cmd, manager);
|
||||
@@ -460,6 +459,9 @@ public class ExtendedContextColumnPropertyAccessor<R> implements IColumnProperty
|
||||
for (IContext context : modelManager.getContextManager().getListContext()) {
|
||||
for (IContextParameter contextParameter : context.getContextParameterList()) {
|
||||
if (param.getName().equals(contextParameter.getName())) {
|
||||
if(!param.getType().equals(newValue) ) {
|
||||
modified = true;
|
||||
}
|
||||
oldValue = param.getType();
|
||||
contextParameter.setType(newValue);
|
||||
}
|
||||
|
||||
@@ -31,8 +31,7 @@ public class TalendDataCollectorPreferenceInitializer extends AbstractPreference
|
||||
public void initializeDefaultPreferences() {
|
||||
IPreferenceStore preferenceStore = CoreUIPlugin.getDefault().getPreferenceStore();
|
||||
preferenceStore.setDefault(ITalendCorePrefConstants.DATA_COLLECTOR_ENABLED, true);
|
||||
preferenceStore.setDefault(ITalendCorePrefConstants.DATA_COLLECTOR_UPLOAD_PERIOD, 10);
|
||||
|
||||
preferenceStore.setDefault(ITalendCorePrefConstants.DATA_COLLECTOR_UPLOAD_PERIOD, 5);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -34,4 +34,9 @@ public interface ITokenCollector {
|
||||
* collect the values from different provider.
|
||||
*/
|
||||
public JSONObject collect() throws Exception;
|
||||
|
||||
/**
|
||||
* reset cached collected data
|
||||
*/
|
||||
public default void reset() {}
|
||||
}
|
||||
|
||||
@@ -17,6 +17,7 @@ import java.util.Properties;
|
||||
import org.talend.commons.exception.CommonExceptionHandler;
|
||||
import org.talend.commons.utils.time.PerformanceStatisticUtil;
|
||||
import org.talend.commons.utils.time.PerformanceStatisticUtil.StatisticKeys;
|
||||
import org.talend.commons.utils.time.PropertiesFileUtil;
|
||||
|
||||
import oshi.SystemInfo;
|
||||
import oshi.hardware.Baseboard;
|
||||
@@ -60,7 +61,7 @@ public class PerformanceTokenCollector extends AbstractTokenCollector {
|
||||
|
||||
//
|
||||
JSONObject jsonObjectIOInfo = new JSONObject();
|
||||
Properties props = PerformanceStatisticUtil.read(PerformanceStatisticUtil.getRecordingFile(),false);
|
||||
Properties props = PropertiesFileUtil.read(PerformanceStatisticUtil.getRecordingFile(),false);
|
||||
jsonObjectIOInfo.put(StatisticKeys.STARTUP_AVERAGE.get(), props.getProperty(StatisticKeys.STARTUP_AVERAGE.get()));
|
||||
jsonObjectIOInfo.put(StatisticKeys.STARTUP_MAX.get(), props.getProperty(StatisticKeys.STARTUP_MAX.get()));
|
||||
jsonObjectIOInfo.put(StatisticKeys.IO_R_MB_SEC.get(), props.getProperty(StatisticKeys.IO_R_MB_SEC.get()));
|
||||
@@ -79,5 +80,10 @@ public class PerformanceTokenCollector extends AbstractTokenCollector {
|
||||
CommonExceptionHandler.log(e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void reset() {
|
||||
PerformanceStatisticUtil.reset();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -0,0 +1,52 @@
|
||||
// ============================================================================
|
||||
//
|
||||
// Copyright (C) 2006-2020 Talend Inc. - www.talend.com
|
||||
//
|
||||
// This source code is available under agreement available at
|
||||
// %InstallDIR%\features\org.talend.rcp.branding.%PRODUCTNAME%\%PRODUCTNAME%license.txt
|
||||
//
|
||||
// You should have received a copy of the agreement
|
||||
// along with this program; if not, write to Talend SA
|
||||
// 9 rue Pages 92150 Suresnes, France
|
||||
//
|
||||
// ============================================================================
|
||||
package org.talend.core.ui.token;
|
||||
|
||||
import java.util.Map.Entry;
|
||||
import java.util.Properties;
|
||||
|
||||
import org.talend.commons.utils.time.PropertiesFileUtil;
|
||||
import org.talend.repository.token.RepositoryActionLogger;
|
||||
|
||||
import us.monoid.json.JSONObject;
|
||||
|
||||
/**
|
||||
* DOC sbliu class global comment. Detailled comment
|
||||
*/
|
||||
public class RepositroyActionsTokenCollector extends AbstractTokenCollector {
|
||||
@Override
|
||||
public JSONObject collect() throws Exception {
|
||||
JSONObject tokenStudioObject = new JSONObject();
|
||||
//
|
||||
JSONObject jsonObjectActionInfo = new JSONObject();
|
||||
JSONObject jsonObjectPerspectiveInfo = new JSONObject();
|
||||
Properties props = PropertiesFileUtil.read(RepositoryActionLogger.getRecordingFile(), false);
|
||||
if(!props.isEmpty()) {
|
||||
for(Entry<Object, Object> entry: props.entrySet()) {
|
||||
String key = (String)entry.getKey();
|
||||
if(key.startsWith(RepositoryActionLogger.PREFIX_ACTION)) {
|
||||
key = key.substring(RepositoryActionLogger.PREFIX_ACTION.length());
|
||||
jsonObjectActionInfo.put(key, entry.getValue());
|
||||
} else if(key.startsWith(RepositoryActionLogger.PREFIX_PERSPECITVE)) {
|
||||
key = key.substring(RepositoryActionLogger.PREFIX_PERSPECITVE.length());
|
||||
jsonObjectPerspectiveInfo.put(key, entry.getValue());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
tokenStudioObject.put("actions", jsonObjectActionInfo);
|
||||
tokenStudioObject.put("perspectives", jsonObjectPerspectiveInfo);
|
||||
|
||||
return tokenStudioObject;
|
||||
}
|
||||
}
|
||||
@@ -28,6 +28,7 @@ import java.util.Date;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Optional;
|
||||
import java.util.zip.GZIPOutputStream;
|
||||
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
@@ -63,6 +64,7 @@ import org.talend.commons.utils.network.NetworkUtil;
|
||||
import org.talend.commons.utils.network.TalendProxySelector;
|
||||
import org.talend.core.GlobalServiceRegister;
|
||||
import org.talend.core.prefs.ITalendCorePrefConstants;
|
||||
import org.talend.core.repository.model.ProxyRepositoryFactory;
|
||||
import org.talend.core.ui.CoreUIPlugin;
|
||||
import org.talend.core.ui.branding.IBrandingService;
|
||||
|
||||
@@ -109,7 +111,7 @@ public final class TokenCollectorFactory {
|
||||
idWithPluginMap.put(id, pluginName);
|
||||
} else {
|
||||
log.log(Priority.WARN, "there is id: " + id + " to have been existed in plugin:" + idWithPluginMap.get(id) //$NON-NLS-1$ //$NON-NLS-2$
|
||||
+ " (current plugin is:" + pluginName + "), will ignore this extension."); //$NON-NLS-1$ //$NON-NLS-2$
|
||||
+ " (current plugin is:" + pluginName + "), will ignore this extension."); //$NON-NLS-1$ //$NON-NLS-2$
|
||||
}
|
||||
|
||||
}
|
||||
@@ -125,7 +127,72 @@ public final class TokenCollectorFactory {
|
||||
public TokenInforProvider[] getProviders() {
|
||||
return providers.values().toArray(new TokenInforProvider[0]);
|
||||
}
|
||||
|
||||
private final int magic_mainthreadStackTraceNum = 28;
|
||||
private Thread monitorSendThread = new Thread(new Runnable() {
|
||||
public void run() {
|
||||
while (true) {
|
||||
try {
|
||||
long millis = 12 * 60 * 60 * 1000L;//check every half day
|
||||
millis = Long.getLong("studio.token.send", millis);
|
||||
if (dataCollectorEnabled()) {
|
||||
if (isTimeToSend()) {//need send
|
||||
if(studioInIdle()) {
|
||||
//if free, send in background
|
||||
send(true);
|
||||
} else {
|
||||
Thread.sleep(10000L);
|
||||
continue;
|
||||
}
|
||||
}
|
||||
}
|
||||
Thread.sleep(millis);
|
||||
} catch (InterruptedException e) {
|
||||
ExceptionHandler.process(e);
|
||||
} catch(Exception e) {
|
||||
ExceptionHandler.process(e);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
private boolean studioInIdle() {
|
||||
ProxyRepositoryFactory repoFactory = ProxyRepositoryFactory.getInstance();
|
||||
boolean repositoryBusy = repoFactory.isRepositoryBusy();
|
||||
|
||||
boolean threadIdle = false;
|
||||
Map<Thread, StackTraceElement[]> allStackTraces = Thread.getAllStackTraces();
|
||||
if (allStackTraces != null) {
|
||||
Optional<Thread> mainThread = allStackTraces.keySet().stream()
|
||||
.filter(t -> t.isAlive() && !t.isDaemon() && t.getName().equalsIgnoreCase("main")).findFirst();
|
||||
if (mainThread.isPresent()) {
|
||||
threadIdle = (magic_mainthreadStackTraceNum >= mainThread.get().getStackTrace().length);
|
||||
}
|
||||
}
|
||||
return !repositoryBusy && threadIdle;
|
||||
}
|
||||
|
||||
private boolean isTimeToSend() {
|
||||
Date lastDate = lastSendDate();
|
||||
final IPreferenceStore preferenceStore = CoreUIPlugin.getDefault().getPreferenceStore();
|
||||
int days = preferenceStore.getInt(ITalendCorePrefConstants.DATA_COLLECTOR_UPLOAD_PERIOD);
|
||||
Date curDate = new Date();
|
||||
Date expectedSendDate = curDate;
|
||||
if (days > 0 && lastDate != null) {
|
||||
expectedSendDate = TokenInforUtil.getDateAfter(lastDate, days);
|
||||
}
|
||||
if (expectedSendDate.compareTo(curDate) < 0) {
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
public void monitor() {
|
||||
monitorSendThread.start();
|
||||
}
|
||||
|
||||
public void priorCollect() throws Exception {
|
||||
if (isActiveAndValid(false)) { //
|
||||
for (TokenInforProvider tip : getProviders()) {
|
||||
@@ -161,31 +228,22 @@ public final class TokenCollectorFactory {
|
||||
}
|
||||
|
||||
private boolean isActiveAndValid(boolean timeExpired) {
|
||||
final IPreferenceStore preferenceStore = CoreUIPlugin.getDefault().getPreferenceStore();
|
||||
if (preferenceStore.getBoolean(ITalendCorePrefConstants.DATA_COLLECTOR_ENABLED)) {
|
||||
String last = preferenceStore.getString(ITalendCorePrefConstants.DATA_COLLECTOR_LAST_TIME);
|
||||
int days = preferenceStore.getInt(ITalendCorePrefConstants.DATA_COLLECTOR_UPLOAD_PERIOD);
|
||||
|
||||
long syncNb = preferenceStore.getLong(DefaultTokenCollector.COLLECTOR_SYNC_NB);
|
||||
if (syncNb < 15) {
|
||||
days = 2;
|
||||
}
|
||||
Date lastDate = null;
|
||||
if (last != null && !"".equals(last.trim())) { //$NON-NLS-1$
|
||||
// parse the last date;
|
||||
try {
|
||||
lastDate = DATE_FORMAT.parse(last);
|
||||
} catch (ParseException ee) {
|
||||
//
|
||||
}
|
||||
}
|
||||
Date curDate = new Date();
|
||||
Date addedDate = curDate;
|
||||
if (days > 0 && lastDate != null) {
|
||||
addedDate = TokenInforUtil.getDateAfter(lastDate, days);
|
||||
}
|
||||
if (dataCollectorEnabled()) {
|
||||
//
|
||||
if (timeExpired) {
|
||||
Date lastDate = lastSendDate();
|
||||
|
||||
final IPreferenceStore preferenceStore = CoreUIPlugin.getDefault().getPreferenceStore();
|
||||
int days = preferenceStore.getInt(ITalendCorePrefConstants.DATA_COLLECTOR_UPLOAD_PERIOD);
|
||||
long syncNb = preferenceStore.getLong(DefaultTokenCollector.COLLECTOR_SYNC_NB);
|
||||
if (syncNb < 15) {
|
||||
days = 2;
|
||||
}
|
||||
Date curDate = new Date();
|
||||
Date addedDate = curDate;
|
||||
if (days > 0 && lastDate != null) {
|
||||
addedDate = TokenInforUtil.getDateAfter(lastDate, days);
|
||||
}
|
||||
if (addedDate.compareTo(curDate) <= 0) {
|
||||
return true;
|
||||
}
|
||||
@@ -196,6 +254,26 @@ public final class TokenCollectorFactory {
|
||||
return false;
|
||||
|
||||
}
|
||||
|
||||
private boolean dataCollectorEnabled() {
|
||||
final IPreferenceStore preferenceStore = CoreUIPlugin.getDefault().getPreferenceStore();
|
||||
return preferenceStore.getBoolean(ITalendCorePrefConstants.DATA_COLLECTOR_ENABLED);
|
||||
}
|
||||
|
||||
private Date lastSendDate() {
|
||||
final IPreferenceStore preferenceStore = CoreUIPlugin.getDefault().getPreferenceStore();
|
||||
String last = preferenceStore.getString(ITalendCorePrefConstants.DATA_COLLECTOR_LAST_TIME);
|
||||
Date lastDate = null;
|
||||
if (last != null && !"".equals(last.trim())) { //$NON-NLS-1$
|
||||
// parse the last date;
|
||||
try {
|
||||
lastDate = DATE_FORMAT.parse(last);
|
||||
} catch (ParseException ee) {
|
||||
//
|
||||
}
|
||||
}
|
||||
return lastDate;
|
||||
}
|
||||
|
||||
public boolean process() {
|
||||
boolean result = false;
|
||||
@@ -364,5 +442,18 @@ public final class TokenCollectorFactory {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void reset() {
|
||||
for (TokenInforProvider tip : getProviders()) {
|
||||
ITokenCollector collector = tip.getCollector();
|
||||
if (collector != null) {
|
||||
try {
|
||||
collector.reset();
|
||||
} catch (Exception e) {
|
||||
ExceptionHandler.process(e);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -279,7 +279,9 @@ public class CoreService implements ICoreService {
|
||||
if (GlobalServiceRegister.getDefault().isServiceRegistered(ICodeGeneratorService.class)) {
|
||||
ICodeGeneratorService codeGenService = (ICodeGeneratorService) GlobalServiceRegister.getDefault().getService(
|
||||
ICodeGeneratorService.class);
|
||||
codeGenService.createRoutineSynchronizer().syncAllRoutinesForLogOn();
|
||||
ITalendSynchronizer talendSynchronizer = codeGenService.createRoutineSynchronizer();
|
||||
talendSynchronizer.syncAllRoutinesForLogOn();
|
||||
talendSynchronizer.syncAllInnerCodesForLogOn();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -17,7 +17,9 @@ import java.util.Collections;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import org.eclipse.emf.common.util.EList;
|
||||
import org.talend.commons.exception.ExceptionHandler;
|
||||
import org.talend.commons.exception.PersistenceException;
|
||||
import org.talend.core.CorePlugin;
|
||||
@@ -26,9 +28,18 @@ import org.talend.core.language.LanguageManager;
|
||||
import org.talend.core.model.general.ILibrariesService;
|
||||
import org.talend.core.model.general.Project;
|
||||
import org.talend.core.model.process.IProcess;
|
||||
import org.talend.core.model.process.IProcess2;
|
||||
import org.talend.core.model.process.JobInfo;
|
||||
import org.talend.core.model.properties.Item;
|
||||
import org.talend.core.model.properties.JobletProcessItem;
|
||||
import org.talend.core.model.properties.ProcessItem;
|
||||
import org.talend.core.model.properties.RoutineItem;
|
||||
import org.talend.core.model.repository.ERepositoryObjectType;
|
||||
import org.talend.core.model.repository.IRepositoryViewObject;
|
||||
import org.talend.core.runtime.services.IDesignerMavenService;
|
||||
import org.talend.core.ui.ITestContainerProviderService;
|
||||
import org.talend.core.utils.CodesJarResourceCache;
|
||||
import org.talend.designer.core.model.utils.emf.talendfile.RoutinesParameterType;
|
||||
import org.talend.repository.ProjectManager;
|
||||
import org.talend.repository.model.IProxyRepositoryFactory;
|
||||
|
||||
@@ -109,6 +120,47 @@ public final class CodeGeneratorRoutine {
|
||||
return new ArrayList<String>(neededRoutines);
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
public static List<String> getRequiredCodesJarName(IProcess process) {
|
||||
IDesignerMavenService designerMavenService = IDesignerMavenService.get();
|
||||
List<String> neededCodesJars = new ArrayList<>();
|
||||
if (process instanceof IProcess2) {
|
||||
List<Item> all = new ArrayList<>();
|
||||
Item currentItem = ((IProcess2) process).getProperty().getItem();
|
||||
all.add(currentItem);
|
||||
if (currentItem instanceof ProcessItem) {
|
||||
ITestContainerProviderService testContainerService = ITestContainerProviderService.get();
|
||||
if (testContainerService != null && testContainerService.isTestContainerItem(currentItem)) {
|
||||
try {
|
||||
all.add(testContainerService.getParentJobItem(currentItem));
|
||||
} catch (PersistenceException e) {
|
||||
ExceptionHandler.process(e);
|
||||
}
|
||||
}
|
||||
all.addAll(ProcessorUtilities.getChildrenJobInfo(currentItem, false, true).stream().filter(JobInfo::isJoblet)
|
||||
.map(info -> info.getJobletProperty().getItem()).collect(Collectors.toSet()));
|
||||
all.forEach(item -> {
|
||||
EList<RoutinesParameterType> routinesParameterTypes = null;
|
||||
if (item instanceof ProcessItem && ((ProcessItem) item).getProcess() != null
|
||||
&& ((ProcessItem) item).getProcess().getParameters() != null) {
|
||||
routinesParameterTypes = ((ProcessItem) item).getProcess().getParameters().getRoutinesParameter();
|
||||
} else if (item instanceof JobletProcessItem && ((JobletProcessItem) item).getJobletProcess() != null
|
||||
&& ((JobletProcessItem) item).getJobletProcess().getParameters() != null) {
|
||||
routinesParameterTypes = ((JobletProcessItem) item).getJobletProcess().getParameters()
|
||||
.getRoutinesParameter();
|
||||
}
|
||||
if (routinesParameterTypes != null) {
|
||||
routinesParameterTypes.stream().filter(r -> r.getType() != null)
|
||||
.map(r -> CodesJarResourceCache.getCodesJarById(r.getId())).filter(info -> info != null)
|
||||
.forEach(info -> neededCodesJars.add(designerMavenService.getImportGAVPackageForCodesJar(
|
||||
info.getProjectTechName(), info.getProperty().getItem())));
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
return neededCodesJars;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* Deprecate for won't use pigudf any more
|
||||
|
||||
@@ -147,6 +147,9 @@ public class ProcessorUtilities {
|
||||
|
||||
public static final String PROP_MAPPINGS_URL = "talend.mappings.url"; //$NON-NLS-1$
|
||||
|
||||
/**
|
||||
* For generating code in CI without param -pl
|
||||
*/
|
||||
public static final int GENERATE_MAIN_ONLY = TalendProcessOptionConstants.GENERATE_MAIN_ONLY;
|
||||
|
||||
public static final int GENERATE_WITH_FIRST_CHILD = TalendProcessOptionConstants.GENERATE_WITH_FIRST_CHILD;
|
||||
@@ -562,14 +565,26 @@ public class ProcessorUtilities {
|
||||
}
|
||||
// TDI-26513:For the Dynamic schema,need to check the currentProcess(job or joblet)
|
||||
checkMetadataDynamic(currentProcess, jobInfo);
|
||||
Set<ModuleNeeded> neededLibraries =
|
||||
CorePlugin.getDefault().getDesignerCoreService().getNeededLibrariesForProcess(currentProcess, false);
|
||||
Set<ModuleNeeded> neededLibraries = CorePlugin.getDefault().getDesignerCoreService()
|
||||
.getNeededLibrariesForProcess(currentProcess, TalendProcessOptionConstants.MODULES_DEFAULT);
|
||||
if (neededLibraries != null) {
|
||||
LastGenerationInfo.getInstance().setModulesNeededWithSubjobPerJob(jobInfo.getJobId(),
|
||||
jobInfo.getJobVersion(), neededLibraries);
|
||||
LastGenerationInfo.getInstance().setModulesNeededPerJob(jobInfo.getJobId(), jobInfo.getJobVersion(),
|
||||
neededLibraries);
|
||||
|
||||
// get all codesjars needed modules
|
||||
Set<ModuleNeeded> codesJarModules = CorePlugin.getDefault().getDesignerCoreService()
|
||||
.getCodesJarNeededLibrariesForProcess(selectedProcessItem);
|
||||
// get codesjar libraries from related joblets
|
||||
codesJarModules.addAll(processor.getCodesJarModulesNeededOfJoblets());
|
||||
|
||||
LastGenerationInfo.getInstance().setCodesJarModulesNeededWithSubjobPerJob(jobInfo.getJobId(), jobInfo.getJobVersion(),
|
||||
codesJarModules);
|
||||
LastGenerationInfo.getInstance().setCodesJarModulesNeededPerJob(jobInfo.getJobId(), jobInfo.getJobVersion(),
|
||||
codesJarModules);
|
||||
neededLibraries.addAll(codesJarModules);
|
||||
|
||||
// get all job testcases needed modules
|
||||
Set<ModuleNeeded> testcaseModules = getAllJobTestcaseModules(selectedProcessItem);
|
||||
LastGenerationInfo.getInstance().setTestcaseModuleNeeded(jobInfo.getJobId(), jobInfo.getJobVersion(),
|
||||
@@ -920,16 +935,16 @@ public class ProcessorUtilities {
|
||||
return true;
|
||||
}
|
||||
if (service != null && service.isSupportDynamicType(node)) {
|
||||
IElementParameter mappingParam = node.getElementParameterFromField(EParameterFieldType.MAPPING_TYPE);
|
||||
if (mappingParam != null) {
|
||||
for (IMetadataTable metadataTable : node.getMetadataList()) {
|
||||
for (IMetadataColumn column : metadataTable.getListColumns()) {
|
||||
if ("id_Dynamic".equals(column.getTalendType())) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
IElementParameter mappingParam = node.getElementParameterFromField(EParameterFieldType.MAPPING_TYPE);
|
||||
if (mappingParam != null) {
|
||||
for (IMetadataTable metadataTable : node.getMetadataList()) {
|
||||
for (IMetadataColumn column : metadataTable.getListColumns()) {
|
||||
if ("id_Dynamic".equals(column.getTalendType())) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return hasDynamicMetadata;
|
||||
@@ -1083,20 +1098,20 @@ public class ProcessorUtilities {
|
||||
}
|
||||
return context;
|
||||
}
|
||||
|
||||
|
||||
private static IContext checkCleanSecureContextParameterValue(IContext currentContext, JobInfo jobInfo) {
|
||||
|
||||
JobInfo job = null;
|
||||
|
||||
if (jobInfo.getFatherJobInfo() == null) {
|
||||
job = jobInfo;
|
||||
job = jobInfo;
|
||||
} else {
|
||||
job = getRootJob(jobInfo);
|
||||
if (job.getProcess() == null || "route".equalsIgnoreCase(job.getProcess().getElementName())) {
|
||||
// cleanup context only for child jobs which are referenced
|
||||
// by tRunJob component or for Joblets (see TESB-29718 for details)
|
||||
return currentContext;
|
||||
}
|
||||
job = getRootJob(jobInfo);
|
||||
if (job.getProcess() == null || "route".equalsIgnoreCase(job.getProcess().getElementName())) {
|
||||
// cleanup context only for child jobs which are referenced
|
||||
// by tRunJob component or for Joblets (see TESB-29718 for details)
|
||||
return currentContext;
|
||||
}
|
||||
}
|
||||
|
||||
if (job.getArgumentsMap() == null
|
||||
@@ -1119,9 +1134,9 @@ public class ProcessorUtilities {
|
||||
}
|
||||
|
||||
private static JobInfo getRootJob(JobInfo jobInfo) {
|
||||
|
||||
if (jobInfo != null && jobInfo.getFatherJobInfo() != null) {
|
||||
return getRootJob(jobInfo.getFatherJobInfo());
|
||||
|
||||
if (jobInfo != null && jobInfo.getFatherJobInfo() != null) {
|
||||
return getRootJob(jobInfo.getFatherJobInfo());
|
||||
}
|
||||
|
||||
return jobInfo;
|
||||
@@ -1296,15 +1311,37 @@ public class ProcessorUtilities {
|
||||
}
|
||||
checkMetadataDynamic(currentProcess, jobInfo);
|
||||
|
||||
Set<ModuleNeeded> neededLibraries =
|
||||
CorePlugin.getDefault().getDesignerCoreService().getNeededLibrariesForProcess(currentProcess,
|
||||
isCIMode && BitwiseOptionUtils.containOption(option, GENERATE_MAIN_ONLY));
|
||||
if (neededLibraries != null) {
|
||||
int options = TalendProcessOptionConstants.MODULES_DEFAULT;
|
||||
if (isCIMode && BitwiseOptionUtils.containOption(option, GENERATE_MAIN_ONLY)) {
|
||||
options |= TalendProcessOptionConstants.MODULES_WITH_CHILDREN;
|
||||
}
|
||||
Set<ModuleNeeded> neededLibraries = new HashSet<>();
|
||||
Set<ModuleNeeded> processLibraries = CorePlugin.getDefault().getDesignerCoreService()
|
||||
.getNeededLibrariesForProcess(currentProcess, options);
|
||||
if (processLibraries != null) {
|
||||
neededLibraries.addAll(processLibraries);
|
||||
LastGenerationInfo.getInstance().setModulesNeededWithSubjobPerJob(jobInfo.getJobId(),
|
||||
jobInfo.getJobVersion(), neededLibraries);
|
||||
LastGenerationInfo.getInstance().setModulesNeededPerJob(jobInfo.getJobId(), jobInfo.getJobVersion(),
|
||||
neededLibraries);
|
||||
|
||||
// get all codesjars needed modules
|
||||
Set<ModuleNeeded> codesJarLibraries;
|
||||
if (BitwiseOptionUtils.containOption(option, GENERATE_MAIN_ONLY)) {
|
||||
codesJarLibraries = CorePlugin.getDefault().getDesignerCoreService().getNeededLibrariesForProcess(
|
||||
currentProcess, option |= TalendProcessOptionConstants.MODULES_WITH_CODESJAR);
|
||||
codesJarLibraries.removeAll(processLibraries);
|
||||
} else {
|
||||
codesJarLibraries = CorePlugin.getDefault().getDesignerCoreService()
|
||||
.getCodesJarNeededLibrariesForProcess(selectedProcessItem);
|
||||
}
|
||||
codesJarLibraries.addAll(processor.getCodesJarModulesNeededOfJoblets());
|
||||
LastGenerationInfo.getInstance().setCodesJarModulesNeededWithSubjobPerJob(jobInfo.getJobId(),
|
||||
jobInfo.getJobVersion(), codesJarLibraries);
|
||||
LastGenerationInfo.getInstance().setCodesJarModulesNeededPerJob(jobInfo.getJobId(), jobInfo.getJobVersion(),
|
||||
codesJarLibraries);
|
||||
neededLibraries.addAll(codesJarLibraries);
|
||||
|
||||
// get all job testcases needed modules
|
||||
Set<ModuleNeeded> testcaseModules = getAllJobTestcaseModules(selectedProcessItem);
|
||||
LastGenerationInfo.getInstance().setTestcaseModuleNeeded(jobInfo.getJobId(), jobInfo.getJobVersion(),
|
||||
@@ -1418,7 +1455,7 @@ public class ProcessorUtilities {
|
||||
}
|
||||
}
|
||||
|
||||
private static Set<ModuleNeeded> getAllJobTestcaseModules(ProcessItem selectedProcessItem) {
|
||||
private static Set<ModuleNeeded> getAllJobTestcaseModules(ProcessItem selectedProcessItem) {
|
||||
Set<ModuleNeeded> neededLibraries = new HashSet<>();
|
||||
if (GlobalServiceRegister.getDefault().isServiceRegistered(ITestContainerProviderService.class)) {
|
||||
ITestContainerProviderService testcontainerService =
|
||||
@@ -1814,6 +1851,11 @@ public class ProcessorUtilities {
|
||||
generationInfo.getModulesNeededWithSubjobPerJob(jobInfo.getJobId(), jobInfo.getJobVersion()).addAll(
|
||||
subjobModules);
|
||||
|
||||
Set<ModuleNeeded> subCodesJarModules = generationInfo.getCodesJarModulesNeededWithSubjobPerJob(subJobInfo.getJobId(),
|
||||
subJobInfo.getJobVersion());
|
||||
generationInfo.getCodesJarModulesNeededWithSubjobPerJob(jobInfo.getJobId(), jobInfo.getJobVersion())
|
||||
.addAll(subCodesJarModules);
|
||||
|
||||
Set<String> subjobRoutineModules =
|
||||
generationInfo.getRoutinesNeededWithSubjobPerJob(subJobInfo.getJobId(), subJobInfo.getJobVersion());
|
||||
generationInfo.getRoutinesNeededWithSubjobPerJob(jobInfo.getJobId(), jobInfo.getJobVersion()).addAll(
|
||||
@@ -2491,13 +2533,13 @@ public class ProcessorUtilities {
|
||||
|
||||
// see bug 0004939: making tRunjobs work loop will cause a error of "out of memory" .
|
||||
private static Set<JobInfo> getAllJobInfo(ProcessType ptype, JobInfo parentJobInfo, Set<JobInfo> jobInfos,
|
||||
boolean firstChildOnly) {
|
||||
boolean firstChildOnly, boolean includeJoblet) {
|
||||
if (ptype == null) {
|
||||
return jobInfos;
|
||||
}
|
||||
// trunjob component
|
||||
EList<NodeType> nodes = ptype.getNode();
|
||||
getSubjobInfo(nodes, ptype, parentJobInfo, jobInfos,firstChildOnly);
|
||||
getSubjobInfo(nodes, ptype, parentJobInfo, jobInfos, firstChildOnly, includeJoblet);
|
||||
|
||||
if (parentJobInfo.isTestContainer()
|
||||
&& GlobalServiceRegister.getDefault().isServiceRegistered(ITestContainerProviderService.class)) {
|
||||
@@ -2505,7 +2547,8 @@ public class ProcessorUtilities {
|
||||
GlobalServiceRegister.getDefault().getService(
|
||||
ITestContainerProviderService.class);
|
||||
if (testContainerService != null) {
|
||||
getSubjobInfo(testContainerService.getOriginalNodes(ptype), ptype, parentJobInfo, jobInfos,firstChildOnly);
|
||||
getSubjobInfo(testContainerService.getOriginalNodes(ptype), ptype, parentJobInfo, jobInfos, firstChildOnly,
|
||||
includeJoblet);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2537,7 +2580,7 @@ public class ProcessorUtilities {
|
||||
}
|
||||
|
||||
private static Set<JobInfo> getSubjobInfo(List<NodeType> nodes, ProcessType ptype, JobInfo parentJobInfo, Set<JobInfo> jobInfos,
|
||||
boolean firstChildOnly) {
|
||||
boolean firstChildOnly, boolean includeJoblet) {
|
||||
String jobletPaletteType = null;
|
||||
String frameWork = ptype.getFramework();
|
||||
if (StringUtils.isBlank(frameWork)) {
|
||||
@@ -2547,7 +2590,7 @@ public class ProcessorUtilities {
|
||||
} else if (frameWork.equals(HadoopConstants.FRAMEWORK_SPARK_STREAMING)) {
|
||||
jobletPaletteType = ComponentCategory.CATEGORY_4_SPARKSTREAMING.getName();
|
||||
}
|
||||
for (NodeType node : nodes) {
|
||||
for (NodeType node : nodes) {
|
||||
boolean activate = true;
|
||||
// check if node is active at least.
|
||||
for (Object o : node.getElementParameter()) {
|
||||
@@ -2590,7 +2633,7 @@ public class ProcessorUtilities {
|
||||
jobInfos.add(jobInfo);
|
||||
jobInfo.setFatherJobInfo(parentJobInfo);
|
||||
if (!firstChildOnly) {
|
||||
getAllJobInfo(processItem.getProcess(), jobInfo, jobInfos, firstChildOnly);
|
||||
getAllJobInfo(processItem.getProcess(), jobInfo, jobInfos, firstChildOnly, includeJoblet);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -2607,28 +2650,25 @@ public class ProcessorUtilities {
|
||||
ProcessType jobletProcess = service.getJobletProcess(jobletComponent);
|
||||
if (jobletComponent != null) {
|
||||
if (!firstChildOnly) {
|
||||
getAllJobInfo(jobletProcess, parentJobInfo, jobInfos, firstChildOnly);
|
||||
} else {
|
||||
getAllJobInfo(jobletProcess, parentJobInfo, jobInfos, firstChildOnly, includeJoblet);
|
||||
}
|
||||
if (firstChildOnly || (!firstChildOnly && includeJoblet)) {
|
||||
Project project = null;
|
||||
String componentName = node.getComponentName();
|
||||
String[] array = componentName.split(":"); //$NON-NLS-1$
|
||||
if (array.length == 2) {
|
||||
// from ref project
|
||||
String projectTechName = array[0];
|
||||
project = ProjectManager.getInstance().getProjectFromProjectTechLabel(
|
||||
projectTechName);
|
||||
project = ProjectManager.getInstance().getProjectFromProjectTechLabel(projectTechName);
|
||||
} else {
|
||||
project = ProjectManager.getInstance().getCurrentProject();
|
||||
}
|
||||
Property property = service.getJobletComponentItem(jobletComponent);
|
||||
Project currentProject = ProjectManager.getInstance().getCurrentProject();
|
||||
if (project != null
|
||||
&& !project.getTechnicalLabel().equals(currentProject.getTechnicalLabel())) {
|
||||
if (project != null && !project.getTechnicalLabel().equals(currentProject.getTechnicalLabel())) {
|
||||
try {
|
||||
property = ProxyRepositoryFactory
|
||||
.getInstance()
|
||||
.getSpecificVersion(project, property.getId(), property.getVersion(),
|
||||
true)
|
||||
property = ProxyRepositoryFactory.getInstance()
|
||||
.getSpecificVersion(project, property.getId(), property.getVersion(), true)
|
||||
.getProperty();
|
||||
} catch (PersistenceException e) {
|
||||
ExceptionHandler.process(e);
|
||||
@@ -2645,7 +2685,7 @@ public class ProcessorUtilities {
|
||||
}
|
||||
}
|
||||
}
|
||||
return jobInfos;
|
||||
return jobInfos;
|
||||
}
|
||||
|
||||
private static boolean isRouteletNode(NodeType node) {
|
||||
@@ -2664,6 +2704,10 @@ public class ProcessorUtilities {
|
||||
}
|
||||
|
||||
public static Set<JobInfo> getChildrenJobInfo(Item processItem, boolean firstChildOnly) {
|
||||
return getChildrenJobInfo(processItem, firstChildOnly, false);
|
||||
}
|
||||
|
||||
public static Set<JobInfo> getChildrenJobInfo(Item processItem, boolean firstChildOnly, boolean includeJoblet) {
|
||||
// delegate to the new method, prevent dead loop method call. see bug 0004939: making tRunjobs work loop will
|
||||
// cause a error of "out of memory" .
|
||||
JobInfo parentJobInfo = null;
|
||||
@@ -2692,7 +2736,7 @@ public class ProcessorUtilities {
|
||||
}
|
||||
}
|
||||
if (parentJobInfo != null && processType != null) {
|
||||
return getAllJobInfo(processType, parentJobInfo, new HashSet<JobInfo>(), firstChildOnly);
|
||||
return getAllJobInfo(processType, parentJobInfo, new HashSet<JobInfo>(), firstChildOnly, includeJoblet);
|
||||
}
|
||||
return new HashSet<JobInfo>();
|
||||
}
|
||||
@@ -2931,9 +2975,12 @@ public class ProcessorUtilities {
|
||||
public static void writeLog4j2ConfToFile(File configFile, Level rootLevel) throws IOException {
|
||||
ConfigurationBuilder<BuiltConfiguration> builder = ConfigurationBuilderFactory.newConfigurationBuilder();
|
||||
FileOutputStream configOs = new FileOutputStream(configFile);
|
||||
final AppenderComponentBuilder appenderBuilder = builder.newAppender("Console", "Console").addAttribute("target", ConsoleAppender.Target.SYSTEM_OUT);
|
||||
appenderBuilder.add(builder.newLayout("PatternLayout").addAttribute("pattern", "[%-5level] %d{HH:mm:ss} %logger{36}- %msg%n"));
|
||||
final RootLoggerComponentBuilder rootLoggerBuilder = builder.newRootLogger(rootLevel).add(builder.newAppenderRef("Console"));
|
||||
final AppenderComponentBuilder appenderBuilder = builder.newAppender("Console", "Console").addAttribute("target",
|
||||
ConsoleAppender.Target.SYSTEM_OUT);
|
||||
appenderBuilder
|
||||
.add(builder.newLayout("PatternLayout").addAttribute("pattern", "[%-5level] %d{HH:mm:ss} %logger{36}- %msg%n"));
|
||||
final RootLoggerComponentBuilder rootLoggerBuilder = builder.newRootLogger(rootLevel)
|
||||
.add(builder.newAppenderRef("Console"));
|
||||
builder.add(appenderBuilder);
|
||||
builder.add(rootLoggerBuilder);
|
||||
builder.writeXmlConfiguration(configOs);
|
||||
@@ -2953,7 +3000,7 @@ public class ProcessorUtilities {
|
||||
jarOs.closeEntry();
|
||||
jarOs.close();
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Generate a jar containing a log4j2 config file
|
||||
*
|
||||
|
||||
@@ -5999,20 +5999,17 @@
|
||||
<eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
|
||||
<details key="documentation" value="This subclass of Segment supports the full-function features that are limited to HDAM, HIDAM and HISAM databases: specifically logical children and secondary indexes."/>
|
||||
</eAnnotations>
|
||||
<eStructuralFeatures xsi:type="ecore:EAttribute" name="deleteFlag" eType="#//cwmx/resource/imsdatabase/imstypes/FlagsType"
|
||||
defaultValueLiteral="76">
|
||||
<eStructuralFeatures xsi:type="ecore:EAttribute" name="deleteFlag" eType="#//cwmx/resource/imsdatabase/imstypes/FlagsType">
|
||||
<eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
|
||||
<details key="documentation" value="This attribute holds the value used for the delete rule."/>
|
||||
</eAnnotations>
|
||||
</eStructuralFeatures>
|
||||
<eStructuralFeatures xsi:type="ecore:EAttribute" name="insertFlag" eType="#//cwmx/resource/imsdatabase/imstypes/FlagsType"
|
||||
defaultValueLiteral="76">
|
||||
<eStructuralFeatures xsi:type="ecore:EAttribute" name="insertFlag" eType="#//cwmx/resource/imsdatabase/imstypes/FlagsType">
|
||||
<eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
|
||||
<details key="documentation" value="This attribute holds the value used for the insert rule. bidirectional is not used for the insert flag."/>
|
||||
</eAnnotations>
|
||||
</eStructuralFeatures>
|
||||
<eStructuralFeatures xsi:type="ecore:EAttribute" name="replaceFlag" eType="#//cwmx/resource/imsdatabase/imstypes/FlagsType"
|
||||
defaultValueLiteral="76">
|
||||
<eStructuralFeatures xsi:type="ecore:EAttribute" name="replaceFlag" eType="#//cwmx/resource/imsdatabase/imstypes/FlagsType">
|
||||
<eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
|
||||
<details key="documentation" value="This attribute holds the value used for the replace rule. bidirectional is not used for the replace flag."/>
|
||||
</eAnnotations>
|
||||
|
||||
@@ -19,6 +19,6 @@
|
||||
<module>zip/pom.xml</module>
|
||||
</modules>
|
||||
<properties>
|
||||
<m2.fasterxml.jackson.version>2.10.1</m2.fasterxml.jackson.version>
|
||||
<m2.fasterxml.jackson.version>2.11.4</m2.fasterxml.jackson.version>
|
||||
</properties>
|
||||
</project>
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
<artifactId>studio-tacokit-dependencies</artifactId>
|
||||
<packaging>pom</packaging>
|
||||
<properties>
|
||||
<tacokit.components.version>1.17.1</tacokit.components.version>
|
||||
<tacokit.components.version>1.19.0</tacokit.components.version>
|
||||
</properties>
|
||||
<repositories>
|
||||
<repository>
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
<packaging>pom</packaging>
|
||||
|
||||
<properties>
|
||||
<tcomp.version>1.29.1</tcomp.version>
|
||||
<tcomp.version>1.30.0</tcomp.version>
|
||||
<slf4j.version>1.7.25</slf4j.version>
|
||||
</properties>
|
||||
|
||||
|
||||
@@ -19,5 +19,12 @@
|
||||
priority="lowest">
|
||||
</loginTask>
|
||||
</extension>
|
||||
<extension
|
||||
point="org.talend.core.runtime.service">
|
||||
<Service
|
||||
class="org.talend.designer.maven.DesignerMavenService"
|
||||
serviceId="IDesignerMavenService">
|
||||
</Service>
|
||||
</extension>
|
||||
|
||||
</plugin>
|
||||
|
||||
@@ -0,0 +1,39 @@
|
||||
// ============================================================================
|
||||
//
|
||||
// Copyright (C) 2006-2020 Talend Inc. - www.talend.com
|
||||
//
|
||||
// This source code is available under agreement available at
|
||||
// %InstallDIR%\features\org.talend.rcp.branding.%PRODUCTNAME%\%PRODUCTNAME%license.txt
|
||||
//
|
||||
// You should have received a copy of the agreement
|
||||
// along with this program; if not, write to Talend SA
|
||||
// 9 rue Pages 92150 Suresnes, France
|
||||
//
|
||||
// ============================================================================
|
||||
package org.talend.designer.maven;
|
||||
|
||||
import org.talend.core.model.properties.Item;
|
||||
import org.talend.core.model.properties.Property;
|
||||
import org.talend.core.model.properties.RoutineItem;
|
||||
import org.talend.core.runtime.services.IDesignerMavenService;
|
||||
import org.talend.designer.maven.tools.CodesJarM2CacheManager;
|
||||
import org.talend.designer.maven.utils.CodesJarMavenUtil;
|
||||
|
||||
public class DesignerMavenService implements IDesignerMavenService {
|
||||
|
||||
@Override
|
||||
public String getCodesJarPackageByInnerCode(RoutineItem innerCodeItem) {
|
||||
return CodesJarMavenUtil.getCodesJarPackageByInnerCode(innerCodeItem);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getImportGAVPackageForCodesJar(String projectTechName, Item codesJarItem) {
|
||||
return CodesJarMavenUtil.getImportGAVPackageForCodesJar(projectTechName, codesJarItem);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateCodeJarMavenProject(Property codeJarProperty, boolean needReSync) throws Exception {
|
||||
CodesJarM2CacheManager.updateCodesJarProject(codeJarProperty, needReSync);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -26,8 +26,12 @@ public class TalendJavaProjectConstants {
|
||||
|
||||
public static final String DIR_ROUTINES = "routines"; //$NON-NLS-1$
|
||||
|
||||
public static final String DIR_ROUTINESJAR = "routinesjar"; //$NON-NLS-1$
|
||||
|
||||
public static final String DIR_BEANS = "beans"; //$NON-NLS-1$
|
||||
|
||||
public static final String DIR_BEANSJAR = "beansjar"; //$NON-NLS-1$
|
||||
|
||||
public static final String DIR_JOBS = "jobs"; //$NON-NLS-1$
|
||||
|
||||
public static final String DIR_PROCESS = "process"; //$NON-NLS-1$
|
||||
|
||||
@@ -156,6 +156,10 @@ public interface TalendMavenConstants {
|
||||
|
||||
static final String DEFAULT_PIGUDF = "pigudf";
|
||||
|
||||
static final String DEFAULT_ROUTINESJAR = "routinesjar";
|
||||
|
||||
static final String DEFAULT_BEANSJAR = "beansjar";
|
||||
|
||||
static final String DEFAULT_JOB = "job";
|
||||
|
||||
static final String DEFAULT_JOBLET = "joblet";
|
||||
|
||||
@@ -34,6 +34,7 @@ import org.eclipse.core.runtime.NullProgressMonitor;
|
||||
import org.eclipse.m2e.core.MavenPlugin;
|
||||
import org.talend.commons.exception.ExceptionHandler;
|
||||
import org.talend.commons.utils.generation.JavaUtils;
|
||||
import org.talend.core.model.properties.Property;
|
||||
import org.talend.core.runtime.projectsetting.IProjectSettingPreferenceConstants;
|
||||
import org.talend.core.runtime.projectsetting.IProjectSettingTemplateConstants;
|
||||
import org.talend.designer.maven.DesignerMavenPlugin;
|
||||
@@ -291,6 +292,14 @@ public class MavenTemplateManager {
|
||||
return getCodesModelFromGeneralTemplate(defaultModel, projectTechName, "Routines", //$NON-NLS-1$
|
||||
JavaUtils.JAVA_ROUTINES_DIRECTORY);
|
||||
}
|
||||
|
||||
public static Model getRoutinesJarTempalteModel(Property property, String projectTechName) {
|
||||
Model defaultModel = createDefaultCodesTempalteModel(
|
||||
PomIdsHelper.getCodesGroupId(projectTechName, TalendMavenConstants.DEFAULT_ROUTINESJAR),
|
||||
property.getLabel().toLowerCase(), PomIdsHelper.getCodesVersion(projectTechName));
|
||||
return getCodesModelFromGeneralTemplate(defaultModel, projectTechName, property.getLabel().toLowerCase(),
|
||||
JavaUtils.JAVA_ROUTINESJAR_DIRECTORY);
|
||||
}
|
||||
|
||||
public static Model getBeansTempalteModel(String projectTechName) {
|
||||
Model defaultModel = createDefaultCodesTempalteModel(
|
||||
@@ -298,6 +307,14 @@ public class MavenTemplateManager {
|
||||
TalendMavenConstants.DEFAULT_BEANS_ARTIFACT_ID, PomIdsHelper.getCodesVersion(projectTechName));
|
||||
return getCodesModelFromGeneralTemplate(defaultModel, projectTechName, "Beans", JavaUtils.JAVA_BEANS_DIRECTORY); //$NON-NLS-1$
|
||||
}
|
||||
|
||||
public static Model getBeansJarTempalteModel(Property property, String projectTechName) {
|
||||
Model defaultModel = createDefaultCodesTempalteModel(
|
||||
PomIdsHelper.getCodesGroupId(projectTechName, TalendMavenConstants.DEFAULT_BEANSJAR),
|
||||
property.getLabel().toLowerCase(), PomIdsHelper.getCodesVersion(projectTechName));
|
||||
return getCodesModelFromGeneralTemplate(defaultModel, projectTechName, property.getLabel().toLowerCase(),
|
||||
JavaUtils.JAVA_BEANSJAR_DIRECTORY);
|
||||
}
|
||||
|
||||
private static Model createDefaultCodesTempalteModel(String groupId, String artifactId, String version) {
|
||||
Model templateRoutinesModel = new Model();
|
||||
|
||||
@@ -58,6 +58,7 @@ import org.talend.core.context.Context;
|
||||
import org.talend.core.context.RepositoryContext;
|
||||
import org.talend.core.model.general.ILibrariesService;
|
||||
import org.talend.core.model.general.ModuleNeeded;
|
||||
import org.talend.core.model.general.ModuleNeeded.ELibraryInstallStatus;
|
||||
import org.talend.core.model.general.Project;
|
||||
import org.talend.core.model.process.ProcessUtils;
|
||||
import org.talend.core.model.properties.Item;
|
||||
@@ -67,6 +68,8 @@ import org.talend.core.model.relationship.Relation;
|
||||
import org.talend.core.model.relationship.RelationshipItemBuilder;
|
||||
import org.talend.core.model.repository.ERepositoryObjectType;
|
||||
import org.talend.core.model.repository.IRepositoryViewObject;
|
||||
import org.talend.core.model.routines.CodesJarInfo;
|
||||
import org.talend.core.model.routines.RoutinesUtil;
|
||||
import org.talend.core.repository.model.ProxyRepositoryFactory;
|
||||
import org.talend.core.repository.utils.ItemResourceUtil;
|
||||
import org.talend.core.runtime.CoreRuntimePlugin;
|
||||
@@ -77,7 +80,7 @@ import org.talend.core.runtime.process.TalendProcessArgumentConstant;
|
||||
import org.talend.core.runtime.process.TalendProcessOptionConstants;
|
||||
import org.talend.core.runtime.services.IFilterService;
|
||||
import org.talend.core.ui.ITestContainerProviderService;
|
||||
import org.talend.designer.core.ICamelDesignerCoreService;
|
||||
import org.talend.core.utils.CodesJarResourceCache;
|
||||
import org.talend.designer.maven.launch.MavenPomCommandLauncher;
|
||||
import org.talend.designer.maven.model.MavenSystemFolders;
|
||||
import org.talend.designer.maven.model.TalendJavaProjectConstants;
|
||||
@@ -85,6 +88,7 @@ import org.talend.designer.maven.model.TalendMavenConstants;
|
||||
import org.talend.designer.maven.template.MavenTemplateManager;
|
||||
import org.talend.designer.maven.tools.creator.CreateMavenBeanPom;
|
||||
import org.talend.designer.maven.tools.creator.CreateMavenRoutinePom;
|
||||
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;
|
||||
@@ -164,34 +168,33 @@ public class AggregatorPomsHelper {
|
||||
return getProjectPomsFolder().getFolder(DIR_AGGREGATORS);
|
||||
}
|
||||
|
||||
public void updateCodeProjects(IProgressMonitor monitor) {
|
||||
updateCodeProjects(monitor, false);
|
||||
}
|
||||
|
||||
public void updateCodeProjects(IProgressMonitor monitor, boolean forceBuild) {
|
||||
updateCodeProjects(monitor, forceBuild, false);
|
||||
}
|
||||
|
||||
public void updateCodeProjects(IProgressMonitor monitor, boolean forceBuild, boolean ignoreM2Cache) {
|
||||
updateCodeProjects(monitor, forceBuild, ignoreM2Cache, false);
|
||||
}
|
||||
|
||||
public void updateCodeProjects(IProgressMonitor monitor, boolean forceBuild, boolean ignoreM2Cache, boolean buildIfNoUpdate) {
|
||||
RepositoryWorkUnit workUnit = new RepositoryWorkUnit<Object>("update code project") { //$NON-NLS-1$
|
||||
|
||||
@Override
|
||||
protected void run() {
|
||||
Project currentProject = ProjectManager.getInstance().getCurrentProject();
|
||||
for (ERepositoryObjectType codeType : ERepositoryObjectType.getAllTypesOfCodes()) {
|
||||
try {
|
||||
try {
|
||||
for (ERepositoryObjectType codeType : ERepositoryObjectType.getAllTypesOfCodes()) {
|
||||
ITalendProcessJavaProject codeProject = getCodesProject(codeType);
|
||||
if (ERepositoryObjectType.ROUTINES == codeType) {
|
||||
PomUtil.checkExistingLog4j2Dependencies4RoutinePom(projectTechName, codeProject.getProjectPom());
|
||||
}
|
||||
if (ignoreM2Cache || CodeM2CacheManager.needUpdateCodeProject(currentProject, codeType)) {
|
||||
updateCodeProjectPom(monitor, codeType, codeProject.getProjectPom());
|
||||
MavenProjectUtils.updateMavenProject(monitor, codeProject.getProject());
|
||||
buildAndInstallCodesProject(monitor, codeType, true, forceBuild);
|
||||
CodeM2CacheManager.updateCodeProjectCache(currentProject, codeType);
|
||||
} else if (buildIfNoUpdate) {
|
||||
buildAndInstallCodesProject(monitor, codeType, false, true);
|
||||
}
|
||||
} catch (Exception e) {
|
||||
ExceptionHandler.process(e);
|
||||
}
|
||||
} catch (Exception e) {
|
||||
ExceptionHandler.process(e);
|
||||
}
|
||||
}
|
||||
};
|
||||
@@ -204,16 +207,8 @@ public class AggregatorPomsHelper {
|
||||
if (type != null) {
|
||||
if (ERepositoryObjectType.ROUTINES == type) {
|
||||
createRoutinesPom(pomFile, monitor);
|
||||
} else {
|
||||
if (GlobalServiceRegister.getDefault().isServiceRegistered(ICamelDesignerCoreService.class)) {
|
||||
ICamelDesignerCoreService service =
|
||||
(ICamelDesignerCoreService) GlobalServiceRegister.getDefault().getService(
|
||||
ICamelDesignerCoreService.class);
|
||||
ERepositoryObjectType beanType = service.getBeansType();
|
||||
if (beanType != null && beanType == type) {
|
||||
createBeansPom(pomFile, monitor);
|
||||
}
|
||||
}
|
||||
} else if (ERepositoryObjectType.BEANS != null && ERepositoryObjectType.BEANS == type) {
|
||||
createBeansPom(pomFile, monitor);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -225,9 +220,16 @@ public class AggregatorPomsHelper {
|
||||
ILibrariesService librariesService = GlobalServiceRegister.getDefault().getService(ILibrariesService.class);
|
||||
ERepositoryObjectType.getAllTypesOfCodes()
|
||||
.forEach(c -> neededModules.addAll(librariesService.getCodesModuleNeededs(c)));
|
||||
neededModules.addAll(librariesService.getAllCodesJarModuleNeededs());
|
||||
|
||||
ILibraryManagerService repositoryBundleService = GlobalServiceRegister.getDefault()
|
||||
.getService(ILibraryManagerService.class);
|
||||
repositoryBundleService.installModules(neededModules, monitor);
|
||||
repositoryBundleService.retrieve(neededModules, null, false);
|
||||
Set<ModuleNeeded> toInstall = neededModules.stream()
|
||||
.filter(module -> module.getDeployStatus() != ELibraryInstallStatus.DEPLOYED).collect(Collectors.toSet());
|
||||
if (!toInstall.isEmpty()) {
|
||||
repositoryBundleService.installModules(neededModules, monitor);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -270,6 +272,35 @@ public class AggregatorPomsHelper {
|
||||
}
|
||||
}
|
||||
|
||||
// only compile for global/custom code projects
|
||||
public static void buildCodesProject() {
|
||||
IRunProcessService service = IRunProcessService.get();
|
||||
if (service == null) {
|
||||
return;
|
||||
}
|
||||
IProgressMonitor monitor = new NullProgressMonitor();
|
||||
ERepositoryObjectType.getAllTypesOfCodes().forEach(type -> {
|
||||
try {
|
||||
buildAndInstallCodesProject(monitor, type, false, false);
|
||||
} catch (Exception e) {
|
||||
ExceptionHandler.process(e);
|
||||
}
|
||||
});
|
||||
Set<CodesJarInfo> jarsToUpdate = CodesJarResourceCache.getAllCodesJars().stream()
|
||||
.filter(info -> CodesJarM2CacheManager.needUpdateCodesJarProject(info)).collect(Collectors.toSet());
|
||||
jarsToUpdate.stream().map(info -> service.getTalendCodesJarJavaProject(info)).forEach(p -> {
|
||||
try {
|
||||
p.buildModules(monitor, null, null);
|
||||
} catch (Exception e) {
|
||||
ExceptionHandler.process(e);
|
||||
}
|
||||
});
|
||||
String currentProjectName = ProjectManager.getInstance().getCurrentProject().getTechnicalLabel();
|
||||
jarsToUpdate.stream().filter(info -> !currentProjectName.equals(info.getProjectTechName()))
|
||||
.forEach(info -> service.deleteTalendCodesJarProject(info, false));
|
||||
|
||||
}
|
||||
|
||||
public void updateRefProjectModules(List<ProjectReference> references, IProgressMonitor monitor) {
|
||||
if (!needUpdateRefProjectModules()) {
|
||||
return;
|
||||
@@ -540,10 +571,15 @@ public class AggregatorPomsHelper {
|
||||
if (codeType == ERepositoryObjectType.ROUTINES) {
|
||||
return codesFolder.getFolder(DIR_ROUTINES);
|
||||
}
|
||||
|
||||
if (codeType == ERepositoryObjectType.valueOf("BEANS")) { //$NON-NLS-1$
|
||||
if (codeType == ERepositoryObjectType.BEANS) {
|
||||
return codesFolder.getFolder(DIR_BEANS);
|
||||
}
|
||||
if (codeType == ERepositoryObjectType.ROUTINESJAR) {
|
||||
return codesFolder.getFolder(DIR_ROUTINESJAR);
|
||||
}
|
||||
if (codeType == ERepositoryObjectType.BEANSJAR) {
|
||||
return codesFolder.getFolder(DIR_BEANSJAR);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@@ -551,6 +587,16 @@ public class AggregatorPomsHelper {
|
||||
return getCodeFolder(codeType).getFolder(MavenSystemFolders.JAVA.getPath());
|
||||
}
|
||||
|
||||
public IFolder getCodesJarFolder(Property property) {
|
||||
String codesJarName = property.getLabel();
|
||||
ERepositoryObjectType type = ERepositoryObjectType.getItemType(property.getItem());
|
||||
if (RoutinesUtil.isInnerCodes(property)) {
|
||||
type = RoutinesUtil.getInnerCodeType(property);
|
||||
codesJarName = RoutinesUtil.getCodesJarLabelByInnerCode(property.getItem());
|
||||
}
|
||||
return getCodeFolder(type).getFolder(codesJarName);
|
||||
}
|
||||
|
||||
public IFolder getProcessFolder(ERepositoryObjectType type) {
|
||||
return getProjectPomsFolder().getFolder(DIR_JOBS).getFolder(type.getFolder());
|
||||
}
|
||||
@@ -585,6 +631,12 @@ public class AggregatorPomsHelper {
|
||||
* Use Function to get the relativePath from property at realtime, since the property may be changed
|
||||
*/
|
||||
public static IFolder getItemPomFolder(Property property, String realVersion, Function<Property, IPath> getItemRelativePath) {
|
||||
return getItemPomFolder(property, ProjectManager.getInstance().getProject(property).getTechnicalLabel(), realVersion,
|
||||
getItemRelativePath);
|
||||
}
|
||||
|
||||
public static IFolder getItemPomFolder(Property property, String projectTechName, String realVersion,
|
||||
Function<Property, IPath> getItemRelativePath) {
|
||||
if (GlobalServiceRegister.getDefault().isServiceRegistered(ITestContainerProviderService.class)) {
|
||||
ITestContainerProviderService testContainerService =
|
||||
(ITestContainerProviderService) GlobalServiceRegister.getDefault().getService(
|
||||
@@ -601,7 +653,6 @@ public class AggregatorPomsHelper {
|
||||
}
|
||||
}
|
||||
|
||||
String projectTechName = ProjectManager.getInstance().getProject(property).getTechnicalLabel();
|
||||
AggregatorPomsHelper helper = new AggregatorPomsHelper(projectTechName);
|
||||
IPath itemRelativePath = getItemRelativePath.apply(property);
|
||||
String version = realVersion == null ? property.getVersion() : realVersion;
|
||||
@@ -637,10 +688,6 @@ public class AggregatorPomsHelper {
|
||||
}
|
||||
}
|
||||
|
||||
public static String getCodeProjectId(ERepositoryObjectType codeType, String projectTechName) {
|
||||
return projectTechName + "|" + codeType.name(); //$NON-NLS-1$
|
||||
}
|
||||
|
||||
public static void checkJobPomCreation(ITalendProcessJavaProject jobProject) throws CoreException {
|
||||
Model model = MavenPlugin.getMavenModelManager().readMavenModel(jobProject.getProjectPom());
|
||||
boolean useTempPom = TalendJavaProjectConstants.TEMP_POM_ARTIFACT_ID.equals(model.getArtifactId());
|
||||
@@ -869,6 +916,7 @@ public class AggregatorPomsHelper {
|
||||
// codes pom
|
||||
monitor.subTask("Synchronize code poms"); //$NON-NLS-1$
|
||||
updateCodeProjects(monitor, true, true);
|
||||
CodesJarM2CacheManager.updateCodesJarProject(monitor, true, true, true);
|
||||
monitor.worked(1);
|
||||
if (monitor.isCanceled()) {
|
||||
return;
|
||||
@@ -933,9 +981,13 @@ public class AggregatorPomsHelper {
|
||||
if (service != null) {
|
||||
modules.add(getModulePath(service.getTalendCodeJavaProject(ERepositoryObjectType.ROUTINES).getProjectPom()));
|
||||
if (ProcessUtils.isRequiredBeans(null)) {
|
||||
modules.add(getModulePath(service.getTalendCodeJavaProject(ERepositoryObjectType.valueOf("BEANS")) //$NON-NLS-1$
|
||||
.getProjectPom()));
|
||||
modules.add(getModulePath(service.getTalendCodeJavaProject(ERepositoryObjectType.BEANS).getProjectPom()));
|
||||
}
|
||||
String currentProjectTechName = ProjectManager.getInstance().getCurrentProject().getTechnicalLabel();
|
||||
CodesJarResourceCache.getAllCodesJars().stream()
|
||||
.filter(info -> info.getProjectTechName().equals(currentProjectTechName))
|
||||
.forEach(info -> modules.add(
|
||||
getModulePath(getCodesJarFolder(info.getProperty()).getFile(TalendMavenConstants.POM_FILE_NAME))));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -42,10 +42,17 @@ public class CodeM2CacheManager {
|
||||
|
||||
private static final String EMPTY_DATE;
|
||||
|
||||
private static File cacheFolder;
|
||||
|
||||
static {
|
||||
Calendar c = Calendar.getInstance();
|
||||
c.setTimeInMillis(0);
|
||||
EMPTY_DATE = ResourceHelper.dateFormat().format(c.getTime());
|
||||
cacheFolder = new File(MavenPlugin.getMaven().getLocalRepositoryPath()).toPath().resolve(".codecache").resolve("codes")
|
||||
.toFile();
|
||||
if (!cacheFolder.exists()) {
|
||||
cacheFolder.mkdirs();
|
||||
}
|
||||
}
|
||||
|
||||
public static boolean needUpdateCodeProject(Project project, ERepositoryObjectType codeType) {
|
||||
@@ -68,7 +75,7 @@ public class CodeM2CacheManager {
|
||||
String key = getKey(projectTechName, property);
|
||||
String cacheValue = cache.getProperty(key);
|
||||
if (cacheValue != null) {
|
||||
Date currentDate = ResourceHelper.dateFormat().parse(getModifiedDate(projectTechName, property));
|
||||
Date currentDate = ResourceHelper.dateFormat().parse(getModifiedDate(property));
|
||||
Date cachedDate = ResourceHelper.dateFormat().parse(cacheValue);
|
||||
if (currentDate.compareTo(cachedDate) != 0) {
|
||||
return true;
|
||||
@@ -92,7 +99,7 @@ public class CodeM2CacheManager {
|
||||
for (IRepositoryViewObject codeItem : allCodes) {
|
||||
Property property = codeItem.getProperty();
|
||||
String key = getKey(projectTechName, property);
|
||||
String value = getModifiedDate(projectTechName, property);
|
||||
String value = getModifiedDate(property);
|
||||
cache.put(key, value);
|
||||
}
|
||||
cache.store(out, StringUtils.EMPTY);
|
||||
@@ -104,14 +111,14 @@ public class CodeM2CacheManager {
|
||||
public static File getCacheFile(String projectTechName, ERepositoryObjectType codeType) {
|
||||
String cacheFileName = PomIdsHelper.getProjectGroupId(projectTechName) + "." + codeType.name().toLowerCase() + "-" //$NON-NLS-1$ //$NON-NLS-2$
|
||||
+ PomIdsHelper.getCodesVersion(projectTechName) + ".cache"; // $NON-NLS-1$
|
||||
return new File(MavenPlugin.getMaven().getLocalRepositoryPath(), cacheFileName);
|
||||
return new File(cacheFolder, cacheFileName);
|
||||
}
|
||||
|
||||
private static String getKey(String projectTechName, Property property) {
|
||||
return projectTechName + KEY_SEPERATOR + property.getId() + KEY_SEPERATOR + property.getVersion(); // $NON-NLS-1$
|
||||
}
|
||||
|
||||
private static String getModifiedDate(String projectTechName, Property property) {
|
||||
private static String getModifiedDate(Property property) {
|
||||
String modifiedDate = (String) property.getAdditionalProperties().get(ItemProductKeys.DATE.getModifiedKey());
|
||||
return StringUtils.isNotBlank(modifiedDate) ? modifiedDate : EMPTY_DATE;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,480 @@
|
||||
// ============================================================================
|
||||
//
|
||||
// Copyright (C) 2006-2020 Talend Inc. - www.talend.com
|
||||
//
|
||||
// This source code is available under agreement available at
|
||||
// %InstallDIR%\features\org.talend.rcp.branding.%PRODUCTNAME%\%PRODUCTNAME%license.txt
|
||||
//
|
||||
// You should have received a copy of the agreement
|
||||
// along with this program; if not, write to Talend SA
|
||||
// 9 rue Pages 92150 Suresnes, France
|
||||
//
|
||||
// ============================================================================
|
||||
package org.talend.designer.maven.tools;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.FileInputStream;
|
||||
import java.io.FileOutputStream;
|
||||
import java.io.IOException;
|
||||
import java.io.OutputStream;
|
||||
import java.text.DateFormat;
|
||||
import java.text.ParseException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Calendar;
|
||||
import java.util.Collections;
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Properties;
|
||||
import java.util.Set;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.apache.maven.model.Model;
|
||||
import org.apache.maven.model.Parent;
|
||||
import org.eclipse.core.resources.IBuildConfiguration;
|
||||
import org.eclipse.core.resources.IFile;
|
||||
import org.eclipse.core.resources.IProject;
|
||||
import org.eclipse.core.resources.IncrementalProjectBuilder;
|
||||
import org.eclipse.core.resources.ResourcesPlugin;
|
||||
import org.eclipse.core.runtime.CoreException;
|
||||
import org.eclipse.core.runtime.IPath;
|
||||
import org.eclipse.core.runtime.IProgressMonitor;
|
||||
import org.eclipse.core.runtime.NullProgressMonitor;
|
||||
import org.eclipse.core.runtime.Path;
|
||||
import org.eclipse.emf.common.util.EList;
|
||||
import org.eclipse.m2e.core.MavenPlugin;
|
||||
import org.talend.commons.exception.ExceptionHandler;
|
||||
import org.talend.core.GlobalServiceRegister;
|
||||
import org.talend.core.model.general.Project;
|
||||
import org.talend.core.model.properties.Property;
|
||||
import org.talend.core.model.properties.RoutineItem;
|
||||
import org.talend.core.model.properties.RoutinesJarItem;
|
||||
import org.talend.core.model.repository.ERepositoryObjectType;
|
||||
import org.talend.core.model.repository.IRepositoryViewObject;
|
||||
import org.talend.core.model.routines.CodesJarInfo;
|
||||
import org.talend.core.repository.model.ProxyRepositoryFactory;
|
||||
import org.talend.core.repository.utils.RoutineUtils;
|
||||
import org.talend.core.runtime.maven.MavenArtifact;
|
||||
import org.talend.core.runtime.process.ITalendProcessJavaProject;
|
||||
import org.talend.core.runtime.process.TalendProcessArgumentConstant;
|
||||
import org.talend.core.runtime.repository.item.ItemProductKeys;
|
||||
import org.talend.core.utils.CodesJarResourceCache;
|
||||
import org.talend.cwm.helper.ResourceHelper;
|
||||
import org.talend.designer.codegen.ICodeGeneratorService;
|
||||
import org.talend.designer.codegen.ITalendSynchronizer;
|
||||
import org.talend.designer.core.model.utils.emf.component.IMPORTType;
|
||||
import org.talend.designer.maven.launch.MavenPomCommandLauncher;
|
||||
import org.talend.designer.maven.model.TalendMavenConstants;
|
||||
import org.talend.designer.maven.tools.creator.CreateMavenBeansJarPom;
|
||||
import org.talend.designer.maven.tools.creator.CreateMavenRoutinesJarPom;
|
||||
import org.talend.designer.maven.utils.PomIdsHelper;
|
||||
import org.talend.designer.maven.utils.PomUtil;
|
||||
import org.talend.designer.runprocess.IRunProcessService;
|
||||
import org.talend.repository.ProjectManager;
|
||||
import org.talend.repository.RepositoryWorkUnit;
|
||||
import org.talend.utils.io.FilesUtils;
|
||||
|
||||
public class CodesJarM2CacheManager {
|
||||
|
||||
private static final String KEY_MODIFIED_DATE = "MODIFIED_DATE"; //$NON-NLS-1$
|
||||
|
||||
private static final String KEY_DEPENDENCY_LIST = "DEPENDENCY_LIST"; //$NON-NLS-1$
|
||||
|
||||
private static final String KEY_INNERCODE_PREFIX = "INNERCODE"; //$NON-NLS-1$
|
||||
|
||||
private static final String KEY_SEPERATOR = "|"; //$NON-NLS-1$
|
||||
|
||||
private static final String DEP_SEPERATOR = ","; //$NON-NLS-1$
|
||||
|
||||
private static final String EMPTY_DATE;
|
||||
|
||||
public final static String BUILD_AGGREGATOR_POM_NAME = "build-codesjar-aggregator.pom"; //$NON-NLS-1$
|
||||
|
||||
|
||||
private static File cacheFolder;
|
||||
|
||||
static {
|
||||
Calendar c = Calendar.getInstance();
|
||||
c.setTimeInMillis(0);
|
||||
EMPTY_DATE = ResourceHelper.dateFormat().format(c.getTime());
|
||||
cacheFolder = new File(MavenPlugin.getMaven().getLocalRepositoryPath()).toPath().resolve(".codecache").resolve("codesjar")
|
||||
.toFile();
|
||||
if (!cacheFolder.exists()) {
|
||||
cacheFolder.mkdirs();
|
||||
}
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
public static boolean needUpdateCodesJarProject(CodesJarInfo info) {
|
||||
try {
|
||||
Property property = info.getProperty();
|
||||
String projectTechName = info.getProjectTechName();
|
||||
File cacheFile = getCacheFile(projectTechName, property);
|
||||
if (!cacheFile.exists()) {
|
||||
return true;
|
||||
}
|
||||
DateFormat format = ResourceHelper.dateFormat();
|
||||
Properties cache = new Properties();
|
||||
cache.load(new FileInputStream(cacheFile));
|
||||
String currentTime = getModifiedDate(property);
|
||||
String cachedTime = cache.getProperty(KEY_MODIFIED_DATE);
|
||||
// check codesjar modified date
|
||||
if (cachedTime == null) {
|
||||
return true;
|
||||
}
|
||||
if (format.parse(currentTime).compareTo(format.parse(cachedTime)) != 0) {
|
||||
return true;
|
||||
}
|
||||
|
||||
// check dependency list
|
||||
String dependencies = cache.getProperty(KEY_DEPENDENCY_LIST);
|
||||
List<String> cachedDepList;
|
||||
if (dependencies == null) {
|
||||
cachedDepList = Collections.emptyList();
|
||||
} else {
|
||||
cachedDepList = Arrays.asList(dependencies.split(DEP_SEPERATOR));
|
||||
}
|
||||
EList<IMPORTType> imports = ((RoutinesJarItem) property.getItem()).getRoutinesJarType().getImports();
|
||||
List<String> currentDepList = imports.stream().map(IMPORTType::getMVN).collect(Collectors.toList());
|
||||
if (cachedDepList.size() != currentDepList.size()) {
|
||||
return true;
|
||||
}
|
||||
if (!cachedDepList.isEmpty() && !cachedDepList.stream().allMatch(s -> currentDepList.contains(s))) {
|
||||
return true;
|
||||
}
|
||||
|
||||
// // check inner codes
|
||||
// ERepositoryObjectType codeType = ERepositoryObjectType.getItemType(property.getItem());
|
||||
// Project project = ProjectManager.getInstance().getProjectFromProjectTechLabel(projectTechName);
|
||||
// List<IRepositoryViewObject> currentInnerCodes =
|
||||
// ProxyRepositoryFactory.getInstance().getAllInnerCodes(project,
|
||||
// codeType, property);
|
||||
// Map<Object, Object> cachedInnerCodes = cache.entrySet().stream()
|
||||
// .filter(e -> e.getKey().toString().startsWith(KEY_INNERCODE_PREFIX))
|
||||
// .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));
|
||||
// // check A/D
|
||||
// if (currentInnerCodes.size() != cachedInnerCodes.size()) {
|
||||
// return true;
|
||||
// }
|
||||
// // check M
|
||||
// for (IRepositoryViewObject codeItem : currentInnerCodes) {
|
||||
// Property innerCodeProperty = codeItem.getProperty();
|
||||
// String key = getInnerCodeKey(projectTechName, innerCodeProperty);
|
||||
// String cacheValue = (String) cachedInnerCodes.get(key);
|
||||
// if (cacheValue != null) {
|
||||
// Date currentDate = ResourceHelper.dateFormat().parse(getModifiedDate(innerCodeProperty));
|
||||
// Date cachedDate = ResourceHelper.dateFormat().parse(cacheValue);
|
||||
// if (currentDate.compareTo(cachedDate) != 0) {
|
||||
// return true;
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
} catch (IOException | ParseException e) {
|
||||
ExceptionHandler.process(e);
|
||||
// if any exception, still update in case breaking build job
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
public static void updateCodesJarProjectCache(CodesJarInfo info) {
|
||||
Property property = info.getProperty();
|
||||
String projectTechName = info.getProjectTechName();
|
||||
Properties cache = new Properties();
|
||||
File cacheFile = getCacheFile(projectTechName, property);
|
||||
// update codesjar modified date
|
||||
cache.setProperty(KEY_MODIFIED_DATE, getModifiedDate(property));
|
||||
// update dependencies
|
||||
EList<IMPORTType> imports = ((RoutinesJarItem) property.getItem()).getRoutinesJarType().getImports();
|
||||
StringBuilder builder = new StringBuilder();
|
||||
if (!imports.isEmpty()) {
|
||||
imports.forEach(i -> builder.append(i.getMVN()).append(DEP_SEPERATOR));
|
||||
cache.setProperty(KEY_DEPENDENCY_LIST, StringUtils.stripEnd(builder.toString(), DEP_SEPERATOR));
|
||||
}
|
||||
try (OutputStream out = new FileOutputStream(cacheFile)) {
|
||||
// // update inner codes
|
||||
// ERepositoryObjectType codeType = ERepositoryObjectType.getItemType(property.getItem());
|
||||
// Project project = ProjectManager.getInstance().getProjectFromProjectTechLabel(projectTechName);
|
||||
// List<IRepositoryViewObject> allInnerCodes =
|
||||
// ProxyRepositoryFactory.getInstance().getAllInnerCodes(project, codeType,
|
||||
// property);
|
||||
// for (IRepositoryViewObject codeItem : allInnerCodes) {
|
||||
// Property innerCodeProperty = codeItem.getProperty();
|
||||
// String key = getInnerCodeKey(projectTechName, innerCodeProperty);
|
||||
// String value = getModifiedDate(innerCodeProperty);
|
||||
// cache.put(key, value);
|
||||
// }
|
||||
cache.store(out, StringUtils.EMPTY);
|
||||
} catch (IOException e) {
|
||||
ExceptionHandler.process(e);
|
||||
}
|
||||
}
|
||||
|
||||
public static void deleteCodesJarProjectCache(CodesJarInfo info) {
|
||||
deleteCodesJarProjectCache(info.getProjectTechName(), ERepositoryObjectType.getItemType(info.getProperty().getItem()),
|
||||
info.getProperty().getLabel());
|
||||
}
|
||||
|
||||
public static void deleteCodesJarProjectCache(String projectTechName, ERepositoryObjectType type, String label) {
|
||||
String baseName = ""; // $NON-NLS-1$
|
||||
if (type == ERepositoryObjectType.ROUTINESJAR) {
|
||||
baseName = TalendMavenConstants.DEFAULT_ROUTINESJAR;
|
||||
} else if (type == ERepositoryObjectType.BEANSJAR) {
|
||||
baseName = TalendMavenConstants.DEFAULT_BEANSJAR;
|
||||
}
|
||||
File cacheFile = getCacheFile(projectTechName, baseName, label);
|
||||
if (cacheFile.exists()) {
|
||||
cacheFile.delete();
|
||||
}
|
||||
MavenArtifact artifact = new MavenArtifact();
|
||||
artifact.setGroupId(PomIdsHelper.getCodesJarGroupId(projectTechName, baseName));
|
||||
artifact.setArtifactId(label.toLowerCase());
|
||||
artifact.setVersion(PomIdsHelper.getCodesJarVersion(projectTechName));
|
||||
File artifactFile = new File(PomUtil.getArtifactFullPath(artifact));
|
||||
if (artifactFile.exists()) {
|
||||
FilesUtils.deleteFolder(artifactFile.getParentFile().getParentFile(), true);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* update code jar pom only when first time create project/dependencies changed
|
||||
*/
|
||||
public static void updateCodesJarProjectPom(IProgressMonitor monitor, CodesJarInfo info) {
|
||||
try {
|
||||
IFile pomFile = new AggregatorPomsHelper(info.getProjectTechName()).getCodesJarFolder(info.getProperty())
|
||||
.getFile(TalendMavenConstants.POM_FILE_NAME);
|
||||
ERepositoryObjectType type = ERepositoryObjectType.getItemType(info.getProperty().getItem());
|
||||
if (type != null) {
|
||||
if (ERepositoryObjectType.ROUTINESJAR == type) {
|
||||
createRoutinesJarPom(info, pomFile, monitor);
|
||||
} else if (ERepositoryObjectType.BEANSJAR != null && ERepositoryObjectType.BEANSJAR == type) {
|
||||
createBeansJarPom(info, pomFile, monitor);
|
||||
}
|
||||
}
|
||||
} catch (Exception e) {
|
||||
ExceptionHandler.process(e);
|
||||
}
|
||||
}
|
||||
|
||||
private static void createRoutinesJarPom(CodesJarInfo info, IFile pomFile, IProgressMonitor monitor) throws Exception {
|
||||
CreateMavenRoutinesJarPom createTemplatePom = new CreateMavenRoutinesJarPom(info.getProperty(), pomFile);
|
||||
createTemplatePom.setProjectName(info.getProjectTechName());
|
||||
createTemplatePom.create(monitor);
|
||||
}
|
||||
|
||||
private static void createBeansJarPom(CodesJarInfo info, IFile pomFile, IProgressMonitor monitor) throws Exception {
|
||||
CreateMavenBeansJarPom createTemplatePom = new CreateMavenBeansJarPom(info.getProperty(), pomFile);
|
||||
createTemplatePom.setProjectName(info.getProjectTechName());
|
||||
createTemplatePom.create(monitor);
|
||||
}
|
||||
|
||||
public static void updateCodesJarProject(IProgressMonitor monitor) {
|
||||
updateCodesJarProject(monitor, false, false, false);
|
||||
}
|
||||
|
||||
public static void updateCodesJarProject(IProgressMonitor monitor, boolean forceBuild, boolean onlyCurrentProject,
|
||||
boolean syncCode) {
|
||||
Set<CodesJarInfo> toUpdate;
|
||||
if (onlyCurrentProject) {
|
||||
String currentProject = ProjectManager.getInstance().getCurrentProject().getTechnicalLabel();
|
||||
toUpdate = CodesJarResourceCache.getAllCodesJars().stream().filter(
|
||||
info -> info.getProjectTechName().equals(currentProject) && (forceBuild || needUpdateCodesJarProject(info)))
|
||||
.collect(Collectors.toSet());
|
||||
} else {
|
||||
toUpdate = CodesJarResourceCache.getAllCodesJars().stream()
|
||||
.filter(info -> forceBuild || needUpdateCodesJarProject(info)).collect(Collectors.toSet());
|
||||
}
|
||||
updateCodesJarProject(monitor, toUpdate, false, syncCode, false);
|
||||
}
|
||||
|
||||
public static void updateCodesJarProject(Property property, boolean needReSync) throws Exception {
|
||||
Set<CodesJarInfo> toUpdate = new HashSet<>();
|
||||
toUpdate.add(CodesJarInfo.create(property));
|
||||
updateCodesJarProject(new NullProgressMonitor(), toUpdate, false, needReSync, true);
|
||||
}
|
||||
|
||||
public static void updateCodesJarProject(IProgressMonitor monitor, Set<CodesJarInfo> toUpdate, boolean generatePom,
|
||||
boolean syncCode, boolean keepNonExistingProject) {
|
||||
|
||||
RepositoryWorkUnit<Object> workUnit = new RepositoryWorkUnit<Object>("update codesjar project") { //$NON-NLS-1$
|
||||
|
||||
@Override
|
||||
protected void run() {
|
||||
internalUpdateCodesJarProject(monitor, toUpdate, generatePom, syncCode, keepNonExistingProject);
|
||||
}
|
||||
|
||||
};
|
||||
workUnit.setAvoidUnloadResources(true);
|
||||
ProxyRepositoryFactory.getInstance().executeRepositoryWorkUnit(workUnit);
|
||||
}
|
||||
|
||||
public static void internalUpdateCodesJarProject(IProgressMonitor monitor, Set<CodesJarInfo> toUpdate, boolean generatePom,
|
||||
boolean syncCode, boolean keepNonExistingProject) {
|
||||
if (toUpdate.isEmpty()) {
|
||||
return;
|
||||
}
|
||||
Set<ITalendProcessJavaProject> existingProjects = toUpdate.stream()
|
||||
.map(info -> IRunProcessService.get().getExistingTalendCodesJarProject(info)).filter(p -> p != null)
|
||||
.collect(Collectors.toSet());
|
||||
try {
|
||||
if (generatePom) {
|
||||
// only for git update
|
||||
toUpdate.forEach(info -> updateCodesJarProjectPom(monitor, info));
|
||||
}
|
||||
|
||||
if (syncCode) {
|
||||
toUpdate.forEach(info -> syncSourceCode(info));
|
||||
}
|
||||
|
||||
// parallelBuild(monitor, projects);
|
||||
|
||||
install(toUpdate, monitor);
|
||||
|
||||
toUpdate.forEach(info -> updateCodesJarProjectCache(info));
|
||||
} catch (Exception e) {
|
||||
ExceptionHandler.process(e);
|
||||
} finally {
|
||||
if (!keepNonExistingProject) {
|
||||
for (CodesJarInfo info : toUpdate) {
|
||||
ITalendProcessJavaProject updatedProject = IRunProcessService.get().getExistingTalendCodesJarProject(info);
|
||||
if (updatedProject != null && !existingProjects.contains(updatedProject)) {
|
||||
IRunProcessService.get().deleteTalendCodesJarProject(info, false);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// TODO find a way to trigger parallel build
|
||||
// not fully implemented, still build projects with build order
|
||||
// but should be much faster than call ITalendProcessJavaProject.buildWholeCodeProject() one by one.
|
||||
private static void parallelBuild(IProgressMonitor monitor, Set<IProject> projects) throws CoreException {
|
||||
Set<IBuildConfiguration> configs = new HashSet<>(3);
|
||||
for (IProject project : projects) {
|
||||
configs.add(project.getActiveBuildConfig());
|
||||
}
|
||||
ResourcesPlugin.getWorkspace().build(configs.toArray(new IBuildConfiguration[configs.size()]),
|
||||
IncrementalProjectBuilder.INCREMENTAL_BUILD, false, monitor);
|
||||
// or just call buildParallel directly
|
||||
// org.eclipse.core.internal.resources.Workspace workspace = (Workspace) ResourcesPlugin.getWorkspace();
|
||||
// workspace.getBuildManager().buildParallel(configs, requestedConfigs, trigger, buildJobGroup, monitor);
|
||||
}
|
||||
|
||||
private static void syncSourceCode(CodesJarInfo info) {
|
||||
try {
|
||||
Property property = info.getProperty();
|
||||
String projectTechName = info.getProjectTechName();
|
||||
ITalendProcessJavaProject codesJarProject = IRunProcessService.get().getTalendCodesJarJavaProject(info);
|
||||
codesJarProject.cleanFolder(new NullProgressMonitor(), codesJarProject.getSrcFolder());
|
||||
|
||||
if (GlobalServiceRegister.getDefault().isServiceRegistered(ICodeGeneratorService.class)) {
|
||||
ICodeGeneratorService codeGenService = (ICodeGeneratorService) GlobalServiceRegister.getDefault()
|
||||
.getService(ICodeGeneratorService.class);
|
||||
ITalendSynchronizer routineSynchronizer = codeGenService.createRoutineSynchronizer();
|
||||
Project project = ProjectManager.getInstance().getProjectFromProjectTechLabel(projectTechName);
|
||||
ERepositoryObjectType codesJarType = ERepositoryObjectType.getItemType(property.getItem());
|
||||
List<IRepositoryViewObject> allInnerCodes = ProxyRepositoryFactory.getInstance().getAllInnerCodes(project,
|
||||
codesJarType, property);
|
||||
for (IRepositoryViewObject codesObj : allInnerCodes) {
|
||||
RoutineItem codeItem = (RoutineItem) codesObj.getProperty().getItem();
|
||||
RoutineUtils.changeInnerCodePackage(codeItem, false, false);
|
||||
routineSynchronizer.syncRoutine(codeItem, true, true);
|
||||
}
|
||||
}
|
||||
} catch (Exception e) {
|
||||
ExceptionHandler.process(e);
|
||||
}
|
||||
}
|
||||
|
||||
private static void install(Set<CodesJarInfo> toUpdate, IProgressMonitor monitor) throws Exception {
|
||||
if (toUpdate.isEmpty()) {
|
||||
return;
|
||||
}
|
||||
IFile pomFile = createBuildAggregatorPom(toUpdate);
|
||||
Set<ITalendProcessJavaProject> projects = toUpdate.stream()
|
||||
.map(info -> IRunProcessService.get().getTalendCodesJarJavaProject(info)).collect(Collectors.toSet());
|
||||
try {
|
||||
for (ITalendProcessJavaProject project : projects) {
|
||||
Model model = MavenPlugin.getMavenModelManager().readMavenModel(project.getProjectPom());
|
||||
MavenArtifact artifact = new MavenArtifact();
|
||||
artifact.setGroupId(model.getGroupId());
|
||||
artifact.setArtifactId(model.getArtifactId());
|
||||
artifact.setVersion(model.getVersion());
|
||||
String artifactPath = PomUtil.getArtifactPath(artifact);
|
||||
|
||||
String localRepositoryPath = MavenPlugin.getMaven().getLocalRepositoryPath();
|
||||
if (localRepositoryPath != null) {
|
||||
File moduleFolder = new File(localRepositoryPath, artifactPath);
|
||||
PomUtil.cleanLastUpdatedFile(moduleFolder.getParentFile());
|
||||
}
|
||||
}
|
||||
Map<String, Object> argumentsMap = new HashMap<>();
|
||||
argumentsMap.put(TalendProcessArgumentConstant.ARG_PROGRAM_ARGUMENTS,
|
||||
"-fn -T 1 -f " + BUILD_AGGREGATOR_POM_NAME //$NON-NLS-1$
|
||||
+ " -Dmaven.compiler.failOnError=false"/* + TalendMavenConstants.ARG_MAIN_SKIP */); //$NON-NLS-1$ //$NON-NLS-2$
|
||||
MavenPomCommandLauncher mavenLauncher = new MavenPomCommandLauncher(pomFile, TalendMavenConstants.GOAL_INSTALL);
|
||||
mavenLauncher.setArgumentsMap(argumentsMap);
|
||||
mavenLauncher.setSkipTests(true);
|
||||
mavenLauncher.execute(monitor);
|
||||
} finally {
|
||||
if (pomFile.exists()) {
|
||||
pomFile.delete(true, false, monitor);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static IFile createBuildAggregatorPom(Set<CodesJarInfo> toUpdate) throws Exception {
|
||||
IFile pomFile = new AggregatorPomsHelper().getProjectPomsFolder().getFile(new Path(BUILD_AGGREGATOR_POM_NAME));
|
||||
Model model = new Model();
|
||||
model.setModelVersion("4.0.0"); //$NON-NLS-1$
|
||||
model.setGroupId(TalendMavenConstants.DEFAULT_GROUP_ID);
|
||||
model.setArtifactId("build.codesjar.aggregator"); //$NON-NLS-1$
|
||||
model.setVersion("7.0.0"); //$NON-NLS-1$
|
||||
model.setPackaging(TalendMavenConstants.PACKAGING_POM);
|
||||
model.setModules(new ArrayList<String>());
|
||||
toUpdate.stream().forEach(info -> model.getModules().add(getModulePath(info)));
|
||||
Parent parent = new Parent();
|
||||
parent.setGroupId(PomIdsHelper.getProjectGroupId());
|
||||
parent.setArtifactId(PomIdsHelper.getProjectArtifactId());
|
||||
parent.setVersion(PomIdsHelper.getProjectVersion());
|
||||
model.setParent(parent);
|
||||
PomUtil.savePom(null, model, pomFile);
|
||||
return pomFile;
|
||||
}
|
||||
|
||||
private static String getModulePath(CodesJarInfo info) {
|
||||
String projectTechName = info.getProjectTechName();
|
||||
IPath basePath = new AggregatorPomsHelper().getProjectPomsFolder().getLocation();
|
||||
IPath codeJarProjectPath = new AggregatorPomsHelper(projectTechName).getCodesJarFolder(info.getProperty()).getLocation();
|
||||
String modulePath = codeJarProjectPath.makeRelativeTo(basePath).toPortableString();
|
||||
return modulePath;
|
||||
}
|
||||
|
||||
public static File getCacheFile(String projectTechName, Property property) {
|
||||
String cacheFileName = PomIdsHelper.getCodesJarGroupId(projectTechName, property.getItem()) + "." //$NON-NLS-1$
|
||||
+ property.getLabel().toLowerCase() + "-" //$NON-NLS-1$
|
||||
+ PomIdsHelper.getCodesVersion(projectTechName) + ".cache"; // $NON-NLS-1$
|
||||
return new File(cacheFolder, cacheFileName);
|
||||
}
|
||||
|
||||
private static File getCacheFile(String projectTechName, String baseName, String label) {
|
||||
String cacheFileName = PomIdsHelper.getCodesJarGroupId(projectTechName, baseName) + "." //$NON-NLS-1$
|
||||
+ label.toLowerCase() + "-" //$NON-NLS-1$
|
||||
+ PomIdsHelper.getCodesVersion(projectTechName) + ".cache"; // $NON-NLS-1$
|
||||
return new File(cacheFolder, cacheFileName);
|
||||
}
|
||||
|
||||
private static String getInnerCodeKey(String projectTechName, Property property) {
|
||||
return KEY_INNERCODE_PREFIX + KEY_SEPERATOR + property.getId() + KEY_SEPERATOR + property.getVersion();
|
||||
}
|
||||
|
||||
private static String getModifiedDate(Property property) {
|
||||
String modifiedDate = (String) property.getAdditionalProperties().get(ItemProductKeys.DATE.getModifiedKey());
|
||||
return StringUtils.isNotBlank(modifiedDate) ? modifiedDate : EMPTY_DATE;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -183,7 +183,7 @@ public class MavenPomSynchronizer {
|
||||
public void afterChangingLibraries() {
|
||||
try {
|
||||
// update the dependencies
|
||||
new AggregatorPomsHelper().updateCodeProjects(new NullProgressMonitor());
|
||||
new AggregatorPomsHelper().updateCodeProjects(new NullProgressMonitor(), false, false);
|
||||
} catch (Exception e) {
|
||||
ExceptionHandler.process(e);
|
||||
}
|
||||
|
||||
@@ -116,7 +116,7 @@ public abstract class AbstractMavenCodesTemplatePom extends AbstractMavenGeneral
|
||||
} else {
|
||||
isDeployed = true;
|
||||
}
|
||||
if (isDeployed) {
|
||||
if (ignoreModuleInstallationStatus() || isDeployed) {
|
||||
dependency = PomUtil.createModuleDependency(module.getMavenUri());
|
||||
if (module.isExcluded())
|
||||
dependency.setScope("provided");
|
||||
@@ -129,4 +129,9 @@ public abstract class AbstractMavenCodesTemplatePom extends AbstractMavenGeneral
|
||||
}
|
||||
|
||||
protected abstract Set<ModuleNeeded> getDependenciesModules();
|
||||
|
||||
protected boolean ignoreModuleInstallationStatus() {
|
||||
return false;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -13,10 +13,12 @@
|
||||
package org.talend.designer.maven.tools.creator;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import org.apache.maven.model.Dependency;
|
||||
import org.apache.maven.model.Model;
|
||||
@@ -50,6 +52,9 @@ import org.talend.core.runtime.process.LastGenerationInfo;
|
||||
import org.talend.core.runtime.projectsetting.IProjectSettingTemplateConstants;
|
||||
import org.talend.core.runtime.repository.build.IMavenPomCreator;
|
||||
import org.talend.core.ui.ITestContainerProviderService;
|
||||
import org.talend.core.utils.CodesJarResourceCache;
|
||||
import org.talend.designer.core.model.utils.emf.talendfile.ProcessType;
|
||||
import org.talend.designer.core.model.utils.emf.talendfile.RoutinesParameterType;
|
||||
import org.talend.designer.maven.model.TalendMavenConstants;
|
||||
import org.talend.designer.maven.template.ETalendMavenVariables;
|
||||
import org.talend.designer.maven.tools.ProcessorDependenciesManager;
|
||||
@@ -285,6 +290,7 @@ public abstract class AbstractMavenProcessorPom extends CreateMavenBundleTemplat
|
||||
|
||||
protected void addCodesDependencies(final List<Dependency> dependencies) {
|
||||
dependencies.addAll(getCodesDependencies());
|
||||
dependencies.addAll(getCodesJarDependencies());
|
||||
}
|
||||
|
||||
protected List<Dependency> getCodesDependencies() {
|
||||
@@ -308,6 +314,30 @@ public abstract class AbstractMavenProcessorPom extends CreateMavenBundleTemplat
|
||||
return dependencies;
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
protected List<Dependency> getCodesJarDependencies() {
|
||||
Property property = getJobProcessor().getProperty();
|
||||
if (property != null && getProcessType() != null && getProcessType().getParameters() != null) {
|
||||
return new ArrayList<>(createCodesJarDependencies(getProcessType().getParameters().getRoutinesParameter()));
|
||||
}
|
||||
return Collections.emptyList();
|
||||
}
|
||||
|
||||
protected Set<Dependency> createCodesJarDependencies(List<RoutinesParameterType> routineParameters) {
|
||||
if (routineParameters == null) {
|
||||
return Collections.emptySet();
|
||||
}
|
||||
return routineParameters.stream().filter(r -> r.getType() != null)
|
||||
.map(r -> CodesJarResourceCache.getCodesJarById(r.getId())).filter(info -> info != null)
|
||||
.map(info -> PomUtil.createDependency(
|
||||
PomIdsHelper.getCodesJarGroupId(info.getProjectTechName(), info.getProperty().getItem()),
|
||||
info.getProperty().getLabel().toLowerCase(), PomIdsHelper.getCodesJarVersion(info.getProjectTechName()),
|
||||
null))
|
||||
.collect(Collectors.toSet());
|
||||
}
|
||||
|
||||
abstract protected ProcessType getProcessType();
|
||||
|
||||
protected void addChildrenDependencies(final List<Dependency> dependencies) {
|
||||
String parentId = getJobProcessor().getProperty().getId();
|
||||
|
||||
|
||||
@@ -0,0 +1,56 @@
|
||||
// ============================================================================
|
||||
//
|
||||
// Copyright (C) 2006-2019 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.designer.maven.tools.creator;
|
||||
|
||||
import java.util.HashSet;
|
||||
import java.util.Set;
|
||||
|
||||
import org.apache.maven.model.Model;
|
||||
import org.eclipse.core.resources.IFile;
|
||||
import org.talend.core.GlobalServiceRegister;
|
||||
import org.talend.core.model.general.ILibrariesService;
|
||||
import org.talend.core.model.general.ModuleNeeded;
|
||||
import org.talend.core.model.properties.Property;
|
||||
import org.talend.designer.maven.template.MavenTemplateManager;
|
||||
|
||||
public class CreateMavenBeansJarPom extends AbstractMavenCodesTemplatePom {
|
||||
|
||||
private Property property;
|
||||
|
||||
public CreateMavenBeansJarPom(Property property, IFile pomFile) {
|
||||
super(pomFile);
|
||||
this.property = property;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Model getTemplateModel() {
|
||||
return MavenTemplateManager.getBeansJarTempalteModel(property, getProjectName());
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Set<ModuleNeeded> getDependenciesModules() {
|
||||
Set<ModuleNeeded> runningModules = new HashSet<>();
|
||||
if (GlobalServiceRegister.getDefault().isServiceRegistered(ILibrariesService.class)) {
|
||||
ILibrariesService libService = (ILibrariesService) GlobalServiceRegister.getDefault().getService(
|
||||
ILibrariesService.class);
|
||||
runningModules.addAll(libService.getCodesJarModuleNeededs(property));
|
||||
}
|
||||
return runningModules;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected boolean ignoreModuleInstallationStatus() {
|
||||
return true;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -17,12 +17,14 @@ import java.io.InputStream;
|
||||
|
||||
import org.apache.maven.model.Model;
|
||||
import org.eclipse.core.resources.IFile;
|
||||
import org.eclipse.core.resources.IFolder;
|
||||
import org.eclipse.core.runtime.CoreException;
|
||||
import org.eclipse.core.runtime.IProgressMonitor;
|
||||
import org.eclipse.m2e.core.MavenPlugin;
|
||||
import org.eclipse.m2e.core.embedder.MavenModelManager;
|
||||
import org.talend.commons.exception.ExceptionHandler;
|
||||
import org.talend.commons.utils.io.FilesUtils;
|
||||
import org.talend.commons.utils.workbench.resources.ResourceUtils;
|
||||
import org.talend.core.PluginChecker;
|
||||
import org.talend.designer.maven.template.MavenTemplateManager;
|
||||
import org.talend.designer.maven.utils.PomUtil;
|
||||
@@ -153,6 +155,9 @@ public class CreateMavenBundleTemplatePom extends CreateMaven {
|
||||
if (curPomFile == null) {
|
||||
return;
|
||||
}
|
||||
if (!curPomFile.getParent().exists()) {
|
||||
ResourceUtils.createFolder((IFolder) curPomFile.getParent());
|
||||
}
|
||||
|
||||
Model model = createModel();
|
||||
if (model == null) {
|
||||
|
||||
@@ -29,6 +29,7 @@ import java.util.Properties;
|
||||
import java.util.Scanner;
|
||||
import java.util.Set;
|
||||
import java.util.stream.Collectors;
|
||||
import java.util.stream.Stream;
|
||||
|
||||
import org.apache.commons.lang3.BooleanUtils;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
@@ -59,10 +60,12 @@ import org.talend.core.model.process.IProcess;
|
||||
import org.talend.core.model.process.IProcess2;
|
||||
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.ProcessItem;
|
||||
import org.talend.core.model.properties.Project;
|
||||
import org.talend.core.model.properties.Property;
|
||||
import org.talend.core.model.repository.ERepositoryObjectType;
|
||||
import org.talend.core.model.routines.RoutinesUtil;
|
||||
import org.talend.core.model.utils.JavaResourcesHelper;
|
||||
import org.talend.core.repository.utils.ItemResourceUtil;
|
||||
import org.talend.core.runtime.maven.MavenConstants;
|
||||
@@ -76,6 +79,7 @@ import org.talend.core.runtime.projectsetting.IProjectSettingTemplateConstants;
|
||||
import org.talend.core.runtime.projectsetting.ProjectPreferenceManager;
|
||||
import org.talend.core.ui.ITestContainerProviderService;
|
||||
import org.talend.core.utils.TemplateFileUtils;
|
||||
import org.talend.designer.core.model.utils.emf.talendfile.ProcessType;
|
||||
import org.talend.designer.maven.model.TalendMavenConstants;
|
||||
import org.talend.designer.maven.template.ETalendMavenVariables;
|
||||
import org.talend.designer.maven.template.MavenTemplateManager;
|
||||
@@ -664,26 +668,37 @@ public class CreateMavenJobPom extends AbstractMavenProcessorPom {
|
||||
}
|
||||
|
||||
// talend libraries and codes
|
||||
String projectGroupId = PomIdsHelper.getProjectGroupId(ProjectManager.getInstance().getProject(currentJobProperty).getTechnicalLabel());
|
||||
|
||||
List<Dependency> dependencies = new ArrayList<>();
|
||||
// codes
|
||||
List<Dependency> codeDependencies = getCodesDependencies();
|
||||
List<Dependency> codeDependencies = new ArrayList<>();
|
||||
addCodesDependencies(codeDependencies);
|
||||
// codesjar
|
||||
codeDependencies.addAll(getCodesJarDependenciesFromChildren());
|
||||
dependencies.addAll(codeDependencies);
|
||||
|
||||
// codes dependencies (optional)
|
||||
ERepositoryObjectType.getAllTypesOfCodes().forEach(t -> dependencies.addAll(PomUtil.getCodesDependencies(t)));
|
||||
|
||||
// libraries of talend/3rd party
|
||||
Set<Dependency> parentJobDependencies = processor.getNeededModules(TalendProcessOptionConstants.MODULES_EXCLUDE_SHADED).stream()
|
||||
Set<Dependency> parentJobDependencies = processor
|
||||
.getNeededModules(
|
||||
TalendProcessOptionConstants.MODULES_EXCLUDE_SHADED | TalendProcessOptionConstants.MODULES_WITH_CODESJAR)
|
||||
.stream()
|
||||
.filter(m -> !m.isExcluded()).map(m -> createDenpendency(m, false))
|
||||
.collect(Collectors.toSet());
|
||||
dependencies.addAll(parentJobDependencies);
|
||||
|
||||
// get codesjar libraries from related joblets
|
||||
dependencies.addAll(processor.getCodesJarModulesNeededOfJoblets().stream().map(m -> createDenpendency(m, false))
|
||||
.collect(Collectors.toSet()));
|
||||
|
||||
// missing modules from the job generation of children
|
||||
Map<String, Set<Dependency>> childjobDependencies = new HashMap<String, Set<Dependency>>();
|
||||
childrenJobInfo.forEach(j -> {
|
||||
Set<Dependency> collectDependency = LastGenerationInfo.getInstance().getModulesNeededPerJob(j.getJobId(), j.getJobVersion()).stream()
|
||||
Set<Dependency> collectDependency = Stream
|
||||
.concat(LastGenerationInfo.getInstance().getModulesNeededPerJob(j.getJobId(), j.getJobVersion()).stream(),
|
||||
LastGenerationInfo.getInstance().getCodesJarModulesNeededPerJob(j.getJobId(), j.getJobVersion())
|
||||
.stream())
|
||||
.filter(m -> !m.isExcluded()).map(m -> createDenpendency(m, false)).collect(Collectors.toSet());
|
||||
dependencies.addAll(collectDependency);
|
||||
childjobDependencies.put(j.getJobId(), collectDependency);});
|
||||
@@ -763,6 +778,12 @@ public class CreateMavenJobPom extends AbstractMavenProcessorPom {
|
||||
}
|
||||
}
|
||||
|
||||
private List<Dependency> getCodesJarDependenciesFromChildren() {
|
||||
List<Dependency> dependencies = new ArrayList<>();
|
||||
getJobProcessor().getBuildChildrenJobsAndJoblets().stream().filter(info -> !info.isTestContainer()).forEach(
|
||||
info -> dependencies.addAll(createCodesJarDependencies(RoutinesUtil.getRoutinesParametersFromJobInfo(info))));
|
||||
return dependencies;
|
||||
}
|
||||
|
||||
// remove duplicate job dependencies and only keep the latest one
|
||||
// keep high priority dependencies if set by tLibraryLoad
|
||||
@@ -1018,4 +1039,10 @@ public class CreateMavenJobPom extends AbstractMavenProcessorPom {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
protected ProcessType getProcessType() {
|
||||
Item item = this.getJobProcessor().getProperty().getItem();
|
||||
return ((ProcessItem) item).getProcess();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -23,11 +23,13 @@ import org.eclipse.core.resources.IFile;
|
||||
import org.talend.commons.exception.ExceptionHandler;
|
||||
import org.talend.core.model.process.IProcess;
|
||||
import org.talend.core.model.properties.Item;
|
||||
import org.talend.core.model.properties.JobletProcessItem;
|
||||
import org.talend.core.model.properties.Project;
|
||||
import org.talend.core.model.properties.Property;
|
||||
import org.talend.core.model.repository.ERepositoryObjectType;
|
||||
import org.talend.core.model.utils.JavaResourcesHelper;
|
||||
import org.talend.core.runtime.projectsetting.IProjectSettingTemplateConstants;
|
||||
import org.talend.designer.core.model.utils.emf.talendfile.ProcessType;
|
||||
import org.talend.designer.maven.template.ETalendMavenVariables;
|
||||
import org.talend.designer.maven.template.MavenTemplateManager;
|
||||
import org.talend.designer.maven.utils.PomIdsHelper;
|
||||
@@ -126,10 +128,17 @@ public class CreateMavenJobletPom extends AbstractMavenProcessorPom {
|
||||
if (ERepositoryObjectType.JOBLET == ERepositoryObjectType.getType(getJobProcessor().getProperty())) {
|
||||
getProcessorDependenciesManager().updateDependencies(null, model);
|
||||
}
|
||||
model.getDependencies().addAll(getCodesJarDependencies());
|
||||
addChildrenDependencies(model.getDependencies());
|
||||
} catch (ProcessorException e) {
|
||||
ExceptionHandler.process(e);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected ProcessType getProcessType() {
|
||||
Item item = getJobProcessor().getProperty().getItem();
|
||||
return ((JobletProcessItem) item).getJobletProcess();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -0,0 +1,56 @@
|
||||
// ============================================================================
|
||||
//
|
||||
// Copyright (C) 2006-2019 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.designer.maven.tools.creator;
|
||||
|
||||
import java.util.HashSet;
|
||||
import java.util.Set;
|
||||
|
||||
import org.apache.maven.model.Model;
|
||||
import org.eclipse.core.resources.IFile;
|
||||
import org.talend.core.GlobalServiceRegister;
|
||||
import org.talend.core.model.general.ILibrariesService;
|
||||
import org.talend.core.model.general.ModuleNeeded;
|
||||
import org.talend.core.model.properties.Property;
|
||||
import org.talend.designer.maven.template.MavenTemplateManager;
|
||||
|
||||
public class CreateMavenRoutinesJarPom extends AbstractMavenCodesTemplatePom {
|
||||
|
||||
private Property property;
|
||||
|
||||
public CreateMavenRoutinesJarPom(Property property, IFile pomFile) {
|
||||
super(pomFile);
|
||||
this.property = property;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Model getTemplateModel() {
|
||||
return MavenTemplateManager.getRoutinesJarTempalteModel(property, getProjectName());
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Set<ModuleNeeded> getDependenciesModules() {
|
||||
Set<ModuleNeeded> runningModules = new HashSet<>();
|
||||
if (GlobalServiceRegister.getDefault().isServiceRegistered(ILibrariesService.class)) {
|
||||
ILibrariesService libService = (ILibrariesService) GlobalServiceRegister.getDefault().getService(
|
||||
ILibrariesService.class);
|
||||
runningModules.addAll(libService.getCodesJarModuleNeededs(property));
|
||||
}
|
||||
return runningModules;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected boolean ignoreModuleInstallationStatus() {
|
||||
return true;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -13,6 +13,12 @@
|
||||
package org.talend.designer.maven.tools.creator;
|
||||
|
||||
import org.eclipse.core.resources.IFile;
|
||||
import org.talend.commons.exception.ExceptionHandler;
|
||||
import org.talend.commons.exception.PersistenceException;
|
||||
import org.talend.core.model.properties.Item;
|
||||
import org.talend.core.model.properties.ProcessItem;
|
||||
import org.talend.core.ui.ITestContainerProviderService;
|
||||
import org.talend.designer.core.model.utils.emf.talendfile.ProcessType;
|
||||
import org.talend.designer.runprocess.IProcessor;
|
||||
|
||||
/**
|
||||
@@ -30,4 +36,17 @@ public class CreateMavenTestPom extends CreateMavenJobPom {
|
||||
super(jobProcessor, pomFile);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected ProcessType getProcessType() {
|
||||
try {
|
||||
Item parentJobItem = ITestContainerProviderService.get().getParentJobItem(getJobProcessor().getProperty().getItem());
|
||||
if (parentJobItem != null) {
|
||||
return ((ProcessItem) parentJobItem).getProcess();
|
||||
}
|
||||
} catch (PersistenceException e) {
|
||||
ExceptionHandler.process(e);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -0,0 +1,40 @@
|
||||
// ============================================================================
|
||||
//
|
||||
// Copyright (C) 2006-2020 Talend Inc. - www.talend.com
|
||||
//
|
||||
// This source code is available under agreement available at
|
||||
// %InstallDIR%\features\org.talend.rcp.branding.%PRODUCTNAME%\%PRODUCTNAME%license.txt
|
||||
//
|
||||
// You should have received a copy of the agreement
|
||||
// along with this program; if not, write to Talend SA
|
||||
// 9 rue Pages 92150 Suresnes, France
|
||||
//
|
||||
// ============================================================================
|
||||
package org.talend.designer.maven.utils;
|
||||
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.talend.core.model.properties.Item;
|
||||
import org.talend.core.model.properties.RoutineItem;
|
||||
import org.talend.core.model.routines.RoutinesUtil;
|
||||
import org.talend.repository.ProjectManager;
|
||||
|
||||
public class CodesJarMavenUtil {
|
||||
|
||||
public static String getCodesJarPackageByInnerCode(RoutineItem innerCodeItem) {
|
||||
String codesJarName = RoutinesUtil.getCodesJarLabelByInnerCode(innerCodeItem);
|
||||
String projectTechName = ProjectManager.getInstance().getProject(innerCodeItem).getTechnicalLabel();
|
||||
return StringUtils.replace(PomIdsHelper.getCodesJarGroupIdByInnerCode(projectTechName, innerCodeItem), ".", "/") + "/" //$NON-NLS-1$
|
||||
+ codesJarName.toLowerCase();
|
||||
}
|
||||
|
||||
public static String getGAVPackageForCodesJar(Item codesJarItem) {
|
||||
return StringUtils.replace(PomIdsHelper.getCodesJarGroupId(codesJarItem), ".", "/") + "/"
|
||||
+ codesJarItem.getProperty().getLabel().toLowerCase();
|
||||
}
|
||||
|
||||
public static String getImportGAVPackageForCodesJar(String projectTechName, Item codesJarItem) {
|
||||
return PomIdsHelper.getCodesJarGroupId(projectTechName, codesJarItem) + "."
|
||||
+ codesJarItem.getProperty().getLabel().toLowerCase() + ".*";
|
||||
}
|
||||
|
||||
}
|
||||
@@ -42,11 +42,9 @@ import org.eclipse.m2e.core.project.ProjectImportConfiguration;
|
||||
import org.osgi.service.prefs.BackingStoreException;
|
||||
import org.talend.commons.exception.ExceptionHandler;
|
||||
import org.talend.commons.utils.generation.JavaUtils;
|
||||
import org.talend.core.GlobalServiceRegister;
|
||||
import org.talend.designer.maven.model.MavenSystemFolders;
|
||||
import org.talend.designer.maven.model.ProjectSystemFolder;
|
||||
import org.talend.designer.maven.model.TalendMavenConstants;
|
||||
import org.talend.designer.runprocess.IRunProcessService;
|
||||
|
||||
/**
|
||||
* DOC zwxue class global comment. Detailled comment
|
||||
@@ -94,12 +92,8 @@ public class MavenProjectUtils {
|
||||
return;
|
||||
}
|
||||
MavenPlugin.getProjectConfigurationManager().updateProjectConfiguration(project, monitor);
|
||||
if (GlobalServiceRegister.getDefault().isServiceRegistered(IRunProcessService.class)) {
|
||||
IRunProcessService service = (IRunProcessService) GlobalServiceRegister.getDefault().getDefault()
|
||||
.getService(IRunProcessService.class);
|
||||
|
||||
changeClasspath(monitor, project, MavenSystemFolders.ALL_DIRS_EXT);
|
||||
}
|
||||
changeClasspath(monitor, project, MavenSystemFolders.ALL_DIRS_EXT);
|
||||
|
||||
// only need this when pom has no parent.
|
||||
// IJavaProject javaProject = JavaCore.create(project);
|
||||
|
||||
@@ -23,12 +23,17 @@ import org.talend.core.IESBService;
|
||||
import org.talend.core.PluginChecker;
|
||||
import org.talend.core.model.general.Project;
|
||||
import org.talend.core.model.process.JobInfo;
|
||||
import org.talend.core.model.properties.Item;
|
||||
import org.talend.core.model.properties.Property;
|
||||
import org.talend.core.model.properties.RoutineItem;
|
||||
import org.talend.core.model.properties.RoutinesJarItem;
|
||||
import org.talend.core.model.repository.ERepositoryObjectType;
|
||||
import org.talend.core.model.routines.RoutinesUtil;
|
||||
import org.talend.core.model.utils.JavaResourcesHelper;
|
||||
import org.talend.core.repository.utils.ItemResourceUtil;
|
||||
import org.talend.core.runtime.maven.MavenConstants;
|
||||
import org.talend.core.runtime.projectsetting.ProjectPreferenceManager;
|
||||
import org.talend.designer.core.ICamelDesignerCoreService;
|
||||
import org.talend.designer.maven.DesignerMavenPlugin;
|
||||
import org.talend.designer.maven.model.TalendMavenConstants;
|
||||
import org.talend.repository.ProjectManager;
|
||||
@@ -126,6 +131,49 @@ public class PomIdsHelper {
|
||||
return getProjectVersion(projectTechName);
|
||||
}
|
||||
|
||||
public static String getCodesJarGroupId(Item item) {
|
||||
return getCodesJarGroupId(null, item);
|
||||
}
|
||||
|
||||
public static String getCodesJarGroupId(String projectTechName, Item item) {
|
||||
if (!(item instanceof RoutinesJarItem)) {
|
||||
return null;
|
||||
}
|
||||
String baseName = TalendMavenConstants.DEFAULT_ROUTINESJAR;
|
||||
if (GlobalServiceRegister.getDefault().isServiceRegistered(ICamelDesignerCoreService.class)) {
|
||||
ICamelDesignerCoreService camelService = GlobalServiceRegister.getDefault()
|
||||
.getService(ICamelDesignerCoreService.class);
|
||||
if (camelService.isInstanceofCamelBeansJar(item)) {
|
||||
baseName = TalendMavenConstants.DEFAULT_BEANSJAR;
|
||||
}
|
||||
}
|
||||
return getCodesJarGroupId(projectTechName, baseName);
|
||||
}
|
||||
|
||||
public static String getCodesJarGroupIdByInnerCode(String projectTechName, Item item) {
|
||||
if (!(item instanceof RoutineItem)) {
|
||||
return null;
|
||||
}
|
||||
String baseName = TalendMavenConstants.DEFAULT_ROUTINESJAR;
|
||||
if (ERepositoryObjectType.BEANSJAR != null
|
||||
&& ERepositoryObjectType.BEANSJAR == RoutinesUtil.getInnerCodeType(item.getProperty())) {
|
||||
baseName = TalendMavenConstants.DEFAULT_BEANSJAR;
|
||||
}
|
||||
return getCodesJarGroupId(projectTechName, baseName);
|
||||
}
|
||||
|
||||
public static String getCodesJarGroupId(String projectTechName, String baseName) {
|
||||
return getCodesGroupId(projectTechName, baseName);
|
||||
}
|
||||
|
||||
public static String getCodesJarVersion() {
|
||||
return getCodesVersion();
|
||||
}
|
||||
|
||||
public static String getCodesJarVersion(String projectTechName) {
|
||||
return getCodesVersion(projectTechName);
|
||||
}
|
||||
|
||||
@Deprecated
|
||||
public static String getJobGroupId(String name) {
|
||||
if (name != null && !name.trim().isEmpty()) {
|
||||
|
||||
@@ -71,7 +71,6 @@ import org.talend.commons.exception.ExceptionHandler;
|
||||
import org.talend.commons.exception.PersistenceException;
|
||||
import org.talend.commons.runtime.utils.io.IOUtils;
|
||||
import org.talend.commons.utils.VersionUtils;
|
||||
import org.talend.commons.utils.generation.JavaUtils;
|
||||
import org.talend.commons.utils.io.FilesUtils;
|
||||
import org.talend.commons.utils.workbench.resources.ResourceUtils;
|
||||
import org.talend.core.GlobalServiceRegister;
|
||||
@@ -768,18 +767,6 @@ public class PomUtil {
|
||||
return codesModules;
|
||||
}
|
||||
|
||||
public static List<String> getCodesExportJars(IProcess process) {
|
||||
List<String> codesJars = new ArrayList<>();
|
||||
// add routines always.
|
||||
codesJars.add(JavaUtils.ROUTINES_JAR);
|
||||
|
||||
// Beans
|
||||
if (ProcessUtils.isRequiredBeans(process)) {
|
||||
codesJars.add(JavaUtils.BEANS_JAR);
|
||||
}
|
||||
return codesJars;
|
||||
}
|
||||
|
||||
public static Map<String, Object> getTemplateParameters(IProcessor processor) {
|
||||
Map<String, Object> parameters = new HashMap<>();
|
||||
if (processor != null) {
|
||||
|
||||
@@ -1,6 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<classpath>
|
||||
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
|
||||
<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
|
||||
<classpathentry kind="output" path="bin"/>
|
||||
</classpath>
|
||||
@@ -1,28 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<projectDescription>
|
||||
<name>org.talend.libraries.apache.batik</name>
|
||||
<comment></comment>
|
||||
<projects>
|
||||
</projects>
|
||||
<buildSpec>
|
||||
<buildCommand>
|
||||
<name>org.eclipse.jdt.core.javabuilder</name>
|
||||
<arguments>
|
||||
</arguments>
|
||||
</buildCommand>
|
||||
<buildCommand>
|
||||
<name>org.eclipse.pde.ManifestBuilder</name>
|
||||
<arguments>
|
||||
</arguments>
|
||||
</buildCommand>
|
||||
<buildCommand>
|
||||
<name>org.eclipse.pde.SchemaBuilder</name>
|
||||
<arguments>
|
||||
</arguments>
|
||||
</buildCommand>
|
||||
</buildSpec>
|
||||
<natures>
|
||||
<nature>org.eclipse.pde.PluginNature</nature>
|
||||
<nature>org.eclipse.jdt.core.javanature</nature>
|
||||
</natures>
|
||||
</projectDescription>
|
||||
@@ -1,6 +0,0 @@
|
||||
Manifest-Version: 1.0
|
||||
Bundle-ManifestVersion: 2
|
||||
Bundle-Name: Batik
|
||||
Bundle-SymbolicName: org.talend.libraries.apache.batik
|
||||
Bundle-Version: 7.3.1.qualifier
|
||||
Eclipse-BundleShape: dir
|
||||
@@ -1 +0,0 @@
|
||||
jarprocessor.exclude.children=true
|
||||
@@ -1,3 +0,0 @@
|
||||
output.. = bin/
|
||||
bin.includes = META-INF/,\
|
||||
lib/
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user