Compare commits
13 Commits
patch/TPS-
...
patch/7.2.
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
e408ee84c5 | ||
|
|
10914b92bd | ||
|
|
1efd7570d3 | ||
|
|
5b8e8a86ba | ||
|
|
816bb48c60 | ||
|
|
f80c5e54ec | ||
|
|
233e2a33fd | ||
|
|
f559f4c5ea | ||
|
|
0667640551 | ||
|
|
5cc003d379 | ||
|
|
da471ce3c4 | ||
|
|
1ca6dda3cf | ||
|
|
89675c4b23 |
@@ -1,10 +1,10 @@
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<groupId>org.talend.libraries</groupId>
|
||||
<groupId>org.talend.components.lib</groupId>
|
||||
<artifactId>talendsap</artifactId>
|
||||
<name>talendsap</name>
|
||||
<version>1.0.1</version>
|
||||
<version>1.0.2</version>
|
||||
|
||||
<properties>
|
||||
<talend.nexus.url>https://artifacts-oss.talend.com</talend.nexus.url>
|
||||
|
||||
@@ -90,6 +90,7 @@ public class DocumentExtractor {
|
||||
List<Element> tablesAndChangingElements = new ArrayList<Element>(3);
|
||||
tablesAndChangingElements.add(functionElement.element("TABLES"));
|
||||
tablesAndChangingElements.add(functionElement.element("CHANGING"));
|
||||
tablesAndChangingElements.add(functionElement.element("OUTPUT"));
|
||||
|
||||
for(Element tablesOrChangingElement : tablesAndChangingElements) {
|
||||
if (tablesOrChangingElement == null) {
|
||||
@@ -121,6 +122,10 @@ public class DocumentExtractor {
|
||||
}
|
||||
result.add(row);
|
||||
}
|
||||
|
||||
if(!result.isEmpty()) {
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
||||
return result;
|
||||
|
||||
@@ -49,11 +49,11 @@ public class DocumentHelper {
|
||||
}
|
||||
}
|
||||
|
||||
public void addSingleParameter(String name, String value, boolean isChanging) {
|
||||
public void addSingleParameter(String name, String value, SAPParameterType parameter_type) {
|
||||
if(value == null) {
|
||||
value = "";
|
||||
}
|
||||
if (isChanging) {
|
||||
if (parameter_type == SAPParameterType.CHANGING) {
|
||||
correctChanging();
|
||||
changing.addElement(name).setText(value);
|
||||
} else {
|
||||
@@ -62,8 +62,8 @@ public class DocumentHelper {
|
||||
}
|
||||
}
|
||||
|
||||
public void addStructParameter(String name, boolean isChanging) {
|
||||
if (isChanging) {
|
||||
public void addStructParameter(String name, SAPParameterType parameter_type) {
|
||||
if (parameter_type == SAPParameterType.CHANGING) {
|
||||
correctChanging();
|
||||
currentStruct = changing.addElement(name);
|
||||
} else {
|
||||
@@ -79,13 +79,16 @@ public class DocumentHelper {
|
||||
currentStruct.addElement(name).setText(value);
|
||||
}
|
||||
|
||||
public void addTableParameter(String name, boolean isChanging) {
|
||||
if (isChanging) {
|
||||
public void addTableParameter(String name, SAPParameterType parameter_type) {
|
||||
if (parameter_type == SAPParameterType.CHANGING) {
|
||||
correctChanging();
|
||||
currentTable = changing.addElement(name);
|
||||
} else {
|
||||
} else if(parameter_type == SAPParameterType.TABLES) {
|
||||
correctTables();
|
||||
currentTable = tables.addElement(name);
|
||||
} else {
|
||||
correctInput();
|
||||
currentTable = input.addElement(name);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -108,18 +111,18 @@ public class DocumentHelper {
|
||||
DocumentHelper helper = new DocumentHelper();
|
||||
helper.setFunctionName("READ_TABLE_FUNCTION");
|
||||
|
||||
helper.addSingleParameter("ID", "1", true);
|
||||
helper.addSingleParameter("NAME", "gaoyan", false);
|
||||
helper.addSingleParameter("ID", "1", SAPParameterType.CHANGING);
|
||||
helper.addSingleParameter("NAME", "gaoyan", SAPParameterType.IMPORT);
|
||||
|
||||
helper.addStructParameter("INFO", true);
|
||||
helper.addStructParameter("INFO", SAPParameterType.CHANGING);
|
||||
helper.addStructChildParameter("ID", "2");
|
||||
helper.addStructChildParameter("NAME", "wangwei");
|
||||
|
||||
helper.addStructParameter("INFO1", false);
|
||||
helper.addStructParameter("INFO1", SAPParameterType.IMPORT);
|
||||
helper.addStructChildParameter("ID1", "4");
|
||||
helper.addStructChildParameter("NAME1", "momo");
|
||||
|
||||
helper.addTableParameter("TABLE1", false);
|
||||
helper.addTableParameter("TABLE1", SAPParameterType.TABLES);
|
||||
for (int i = 0; i < 200000; i++) {
|
||||
helper.addTableRow();
|
||||
helper.addTableRowChildParameter("c1", i + "");
|
||||
@@ -132,7 +135,7 @@ public class DocumentHelper {
|
||||
helper.addTableRowChildParameter("c8", "wangwei" + i);
|
||||
}
|
||||
|
||||
helper.addTableParameter("TABLE2", false);
|
||||
helper.addTableParameter("TABLE2", SAPParameterType.TABLES);
|
||||
for (int i = 0; i < 2; i++) {
|
||||
helper.addTableRow();
|
||||
helper.addTableRowChildParameter("ID4", i + "");
|
||||
|
||||
@@ -0,0 +1,8 @@
|
||||
package org.talend.sap;
|
||||
|
||||
public enum SAPParameterType {
|
||||
IMPORT,
|
||||
CHANGING,
|
||||
TABLES,
|
||||
EXPORT
|
||||
}
|
||||
@@ -18,6 +18,7 @@ import java.util.Map;
|
||||
import org.eclipse.core.resources.IFile;
|
||||
import org.eclipse.core.resources.IFolder;
|
||||
import org.eclipse.core.runtime.IPath;
|
||||
import org.eclipse.emf.ecore.EObject;
|
||||
import org.talend.commons.CommonsPlugin;
|
||||
import org.talend.core.model.process.INode;
|
||||
import org.talend.core.model.process.IProcess2;
|
||||
@@ -62,7 +63,7 @@ public class StandardJobOSGiBundleBuildProvider extends RepositoryObjectTypeBuil
|
||||
IProcess2 process = (IProcess2) object;
|
||||
for (INode node : process.getGraphicalNodes()) {
|
||||
if (node.isActivate() && BuildJobConstants.esbComponents.contains(node.getComponent().getName())) {
|
||||
fixDefaultBuildType(property);
|
||||
// fixDefaultBuildType(property);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
@@ -78,7 +79,7 @@ public class StandardJobOSGiBundleBuildProvider extends RepositoryObjectTypeBuil
|
||||
for (Object node : processItem.getProcess().getNode()) {
|
||||
NodeType nodeType = (NodeType) node;
|
||||
if (BuildJobConstants.esbComponents.contains(nodeType.getComponentName())) {
|
||||
fixDefaultBuildType(property);
|
||||
// fixDefaultBuildType(property);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -210,4 +210,11 @@ public class DragNDrop {
|
||||
dropTarget.addDropListener(targetListener);
|
||||
}
|
||||
|
||||
public static DropTarget addDropListener(Control listenerControl, TransferDropTargetListener listener) {
|
||||
DropTarget dropTarget = new DropTarget(listenerControl, DND.DROP_DEFAULT | DND.DROP_MOVE | DND.DROP_COPY | DND.DROP_LINK);
|
||||
dropTarget.setTransfer(new Transfer[] { TableEntriesTransfer.getInstance() });
|
||||
dropTarget.addDropListener(listener);
|
||||
return dropTarget;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -23,6 +23,7 @@ import org.eclipse.swt.widgets.Control;
|
||||
import org.eclipse.swt.widgets.Table;
|
||||
import org.eclipse.swt.widgets.TableColumn;
|
||||
import org.eclipse.swt.widgets.TableItem;
|
||||
import org.eclipse.swt.widgets.Text;
|
||||
import org.talend.commons.ui.runtime.swt.tableviewer.TableViewerCreatorColumnNotModifiable;
|
||||
import org.talend.commons.ui.runtime.ws.WindowSystem;
|
||||
import org.talend.commons.ui.swt.tableviewer.TableViewerCreator;
|
||||
@@ -46,6 +47,8 @@ import org.talend.designer.mapper.ui.visualmap.zone.Zone;
|
||||
*/
|
||||
public class DropContextAnalyzer {
|
||||
|
||||
public static final String PROP_DND_OPERATE_CONTROL = "PROP_DND_OPERATE_CONTROL";
|
||||
|
||||
private DropTargetEvent event;
|
||||
|
||||
private DraggedData draggedData;
|
||||
@@ -105,14 +108,21 @@ public class DropContextAnalyzer {
|
||||
|
||||
DropTarget dropTarget = (DropTarget) event.widget;
|
||||
Control controlTarget = dropTarget.getControl();
|
||||
dataMapTableViewTarget = mapperManager.retrieveDataMapTableView(controlTarget);
|
||||
if (controlTarget instanceof Table) {
|
||||
currentTableTarget = (Table) dropTarget.getControl();
|
||||
} else if (controlTarget instanceof StyledText) {
|
||||
currentStyledTextTarget = (StyledText) dropTarget.getControl();
|
||||
} else {
|
||||
} else if (controlTarget instanceof Text) {
|
||||
Object storedData = controlTarget.getData(DropContextAnalyzer.PROP_DND_OPERATE_CONTROL);
|
||||
if (storedData instanceof Table) {
|
||||
currentTableTarget = (Table) storedData;
|
||||
controlTarget = currentTableTarget;
|
||||
}
|
||||
}
|
||||
if (currentTableTarget == null && currentStyledTextTarget == null) {
|
||||
throw new IllegalArgumentException(Messages.getString("DropContextAnalyzer.0", controlTarget.toString())); //$NON-NLS-1$
|
||||
}
|
||||
dataMapTableViewTarget = mapperManager.retrieveDataMapTableView(controlTarget);
|
||||
zoneTarget = dataMapTableViewTarget.getZone();
|
||||
draggedData = TableEntriesTransfer.getInstance().getDraggedData();
|
||||
dataMapTableViewSource = (DataMapTableView) draggedData.getDataMapTableViewSource();
|
||||
|
||||
@@ -27,6 +27,7 @@ import org.eclipse.jface.fieldassist.IContentProposal;
|
||||
import org.eclipse.jface.fieldassist.IContentProposalListener;
|
||||
import org.eclipse.jface.fieldassist.IContentProposalProvider;
|
||||
import org.eclipse.jface.preference.IPreferenceStore;
|
||||
import org.eclipse.jface.util.TransferDropTargetListener;
|
||||
import org.eclipse.jface.viewers.CellEditor;
|
||||
import org.eclipse.jface.viewers.ComboBoxCellEditor;
|
||||
import org.eclipse.jface.viewers.DialogCellEditor;
|
||||
@@ -170,7 +171,9 @@ import org.talend.designer.mapper.model.tableentry.VarTableEntry;
|
||||
import org.talend.designer.mapper.ui.color.ColorInfo;
|
||||
import org.talend.designer.mapper.ui.color.ColorProviderMapper;
|
||||
import org.talend.designer.mapper.ui.dialog.ListStringValueDialog;
|
||||
import org.talend.designer.mapper.ui.dnd.CompleteDropTargetTableListener;
|
||||
import org.talend.designer.mapper.ui.dnd.DragNDrop;
|
||||
import org.talend.designer.mapper.ui.dnd.DropContextAnalyzer;
|
||||
import org.talend.designer.mapper.ui.event.MousePositionAnalyser;
|
||||
import org.talend.designer.mapper.ui.event.ResizeHelper;
|
||||
import org.talend.designer.mapper.ui.event.ResizeHelper.RESIZE_MODE;
|
||||
@@ -2045,6 +2048,11 @@ public abstract class DataMapTableView extends Composite implements IDataMapTabl
|
||||
|
||||
final Text expressionTextEditor = cellEditor.getTextControl();
|
||||
|
||||
expressionTextEditor.setData(DropContextAnalyzer.PROP_DND_OPERATE_CONTROL, tableViewerCreator.getTable());
|
||||
TransferDropTargetListener completeDropTargetListener = new CompleteDropTargetTableListener(mapperManager,
|
||||
tableViewerCreator.getTable());
|
||||
DragNDrop.addDropListener(expressionTextEditor, completeDropTargetListener);
|
||||
|
||||
if (isConstraintExpressionCellEditor) {
|
||||
constraintExpressionTextEditor = expressionTextEditor;
|
||||
} else {
|
||||
|
||||
@@ -32,6 +32,7 @@ import org.talend.commons.utils.resource.FileExtensions;
|
||||
import org.talend.core.model.general.ModuleNeeded;
|
||||
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.ProcessItem;
|
||||
import org.talend.core.model.properties.Property;
|
||||
@@ -245,6 +246,8 @@ public abstract class BigDataJavaProcessor extends MavenJavaProcessor implements
|
||||
if (isExport) {
|
||||
// In an export mode, we add the job jar which is located in the current working directory
|
||||
libJars.append("./" + makeupJobJarName()); //$NON-NLS-1$
|
||||
// to fix TBD-13419, need to add the subjob jar name to the -libjars parameter
|
||||
libJars.append(makeupSubjobJarNameStr4Export()); //$NON-NLS-1$
|
||||
if (!needAllLibJars) {
|
||||
// to avoid issue TPSVC-4826
|
||||
libJars.append(","); //$NON-NLS-1$
|
||||
@@ -278,12 +281,61 @@ public abstract class BigDataJavaProcessor extends MavenJavaProcessor implements
|
||||
|
||||
// ... and add the jar of the job itself also located in the target directory/
|
||||
libJars.append(getTalendJavaProject().getTargetFolder().getLocation().toPortableString() + "/" + makeupJobJarName()); //$NON-NLS-1$
|
||||
// to fix TBD-13419, need to add the subjob jar name to the -libjars parameter
|
||||
libJars.append(makeupSubjobJarNameStr4Local());
|
||||
}
|
||||
list.add(libJars.toString());
|
||||
return list;
|
||||
}
|
||||
|
||||
protected String makeUpClassPathString() {
|
||||
/**
|
||||
* Makes up the subjob(s) jar name string for local, that should be like:
|
||||
* 1) "" (no subjobs)
|
||||
* 2) ",<project_folder>/poms/jobs/process/<subjob_name_versiono>/target/<subjob_name_versiono>.jar" (standard subjob)
|
||||
* 3) ",<project_folder>/poms/jobs/process_mr/<subjob_name_version>/target/<subjob_name_versiono>.jar" (spark subjob)
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
protected String makeupSubjobJarNameStr4Local() {
|
||||
String subjobJarNameStr = ""; //$NON-NLS-1$
|
||||
Set<JobInfo> jobInfos = getBuildChildrenJobs();
|
||||
if (!jobInfos.isEmpty()) {
|
||||
Iterator<JobInfo> it = jobInfos.iterator();
|
||||
while (it.hasNext()) {
|
||||
JobInfo jobInfo = it.next();
|
||||
subjobJarNameStr += "," //$NON-NLS-1$
|
||||
+ TalendJavaProjectManager.getTalendJobJavaProject(jobInfo.getProcessItem().getProperty())
|
||||
.getTargetFolder()
|
||||
.getLocation()
|
||||
.toPortableString()
|
||||
+ "/" + jobInfo.getJobName().toLowerCase() + "_" + jobInfo.getJobVersion().replace(".", "_") //$NON-NLS-1$//$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
|
||||
+ ".jar"; //$NON-NLS-1$
|
||||
}
|
||||
}
|
||||
return subjobJarNameStr;
|
||||
}
|
||||
|
||||
/**
|
||||
* Makes up the subjob(s) jar name string for export, that should be like:
|
||||
* 1) "" (no subjobs)
|
||||
* 2) ",./subjob1_0_1.jar" (with subjobs)
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
protected String makeupSubjobJarNameStr4Export() {
|
||||
String subjobJarNameStr = ""; //$NON-NLS-1$
|
||||
Set<JobInfo> jobInfos = getBuildChildrenJobs();
|
||||
if (!jobInfos.isEmpty()) {
|
||||
Iterator<JobInfo> it = jobInfos.iterator();
|
||||
while (it.hasNext()) {
|
||||
JobInfo jobInfo = it.next();
|
||||
subjobJarNameStr += ",./" + jobInfo.getJobName().toLowerCase() + "_" + jobInfo.getJobVersion().replace(".", "_") + ".jar"; //$NON-NLS-1$//$NON-NLS-2$//$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$
|
||||
}
|
||||
}
|
||||
return subjobJarNameStr;
|
||||
}
|
||||
|
||||
protected String makeUpClassPathString() {
|
||||
StringBuffer sb = new StringBuffer();
|
||||
try {
|
||||
sb.append(getLibsClasspath());
|
||||
|
||||
@@ -3242,6 +3242,24 @@
|
||||
name="SpecialUpdateELTEnableColumnAliasMigrationTask"
|
||||
version="7.2.1">
|
||||
</projecttask>
|
||||
<projecttask
|
||||
beforeLogon="true"
|
||||
breaks="7.2.0"
|
||||
class="org.talend.repository.model.migration.RemoveSnapshotJarMigrationTask"
|
||||
id="org.talend.repository.model.migration.RemoveSnapshotJarMigrationTask"
|
||||
description="Regnerate all poms"
|
||||
name="RemoveSnapshotJarMigrationTask"
|
||||
version="7.2.1">
|
||||
</projecttask>
|
||||
<projecttask
|
||||
beforeLogon="false"
|
||||
breaks="7.2.0"
|
||||
class="org.talend.repository.model.migration.SAPBAPIParameterTypeMigrationTask"
|
||||
description="adjust the tsapbapi ui"
|
||||
id="org.talend.repository.model.migration.SAPBAPIParameterTypeMigrationTask"
|
||||
name="SAPBAPIParameterTypeMigrationTask"
|
||||
version="7.2.1">
|
||||
</projecttask>
|
||||
</extension>
|
||||
|
||||
<extension
|
||||
|
||||
@@ -16,6 +16,7 @@ import java.beans.PropertyChangeEvent;
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.net.URL;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.security.NoSuchAlgorithmException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
@@ -87,6 +88,7 @@ import org.talend.core.model.process.INode;
|
||||
import org.talend.core.model.properties.ContextItem;
|
||||
import org.talend.core.model.properties.Item;
|
||||
import org.talend.core.model.properties.ProcessItem;
|
||||
import org.talend.core.model.properties.PropertiesFactory;
|
||||
import org.talend.core.model.properties.Property;
|
||||
import org.talend.core.model.properties.RulesItem;
|
||||
import org.talend.core.model.properties.SAPConnectionItem;
|
||||
@@ -110,6 +112,7 @@ import org.talend.core.repository.model.repositoryObject.SalesforceModuleReposit
|
||||
import org.talend.core.repository.utils.ProjectHelper;
|
||||
import org.talend.core.repository.utils.RepositoryPathProvider;
|
||||
import org.talend.core.runtime.process.ITalendProcessJavaProject;
|
||||
import org.talend.core.services.ICoreTisService;
|
||||
import org.talend.core.services.IGITProviderService;
|
||||
import org.talend.core.services.ISVNProviderService;
|
||||
import org.talend.core.ui.branding.IBrandingService;
|
||||
@@ -333,6 +336,28 @@ public class RepositoryService implements IRepositoryService, IRepositoryContext
|
||||
logged = LoginHelper.getInstance().loginAuto();
|
||||
}
|
||||
if (!logged) {
|
||||
if (ArrayUtils.contains(Platform.getApplicationArgs(), EclipseCommandLine.LOGIN_ONLINE_UPDATE)) {
|
||||
ICoreTisService tisService = ICoreTisService.get();
|
||||
if (tisService != null) {
|
||||
LoginHelper loginHelper = LoginHelper.getInstance();
|
||||
ConnectionBean connBean = loginHelper.getCurrentSelectedConnBean();
|
||||
try {
|
||||
User user = PropertiesFactory.eINSTANCE.createUser();
|
||||
user.setLogin(connBean.getUser());
|
||||
user.setPassword(connBean.getPassword().getBytes(StandardCharsets.UTF_8));
|
||||
LoginHelper.setRepositoryContextInContext(connBean, user, null, null);
|
||||
tisService.downLoadAndInstallUpdates(connBean.getUser(), connBean.getPassword(),
|
||||
LoginHelper.getAdminURL(connBean));
|
||||
tisService.setNeedResartAfterUpdate(true);
|
||||
LoginHelper.isRestart = true;
|
||||
EclipseCommandLine.updateOrCreateExitDataPropertyWithCommand(EclipseCommandLine.LOGIN_ONLINE_UPDATE, null,
|
||||
true, true);
|
||||
return true;
|
||||
} catch (Throwable e) {
|
||||
ExceptionHandler.process(e);
|
||||
}
|
||||
}
|
||||
}
|
||||
LoginDialogV2 loginDialog = new LoginDialogV2(shell);
|
||||
logged = (loginDialog.open() == LoginDialogV2.OK);
|
||||
}
|
||||
@@ -358,7 +383,7 @@ public class RepositoryService implements IRepositoryService, IRepositoryContext
|
||||
|
||||
if (ArrayUtils.contains(Platform.getApplicationArgs(), EclipseCommandLine.TALEND_DISABLE_LOGINDIALOG_COMMAND)) {
|
||||
boolean deleteProjectIfExist = ArrayUtils.contains(Platform.getApplicationArgs(), "--deleteProjectIfExist"); //$NON-NLS-1$
|
||||
IBrandingService brandingService = (IBrandingService) GlobalServiceRegister.getDefault().getService(
|
||||
IBrandingService brandingService = GlobalServiceRegister.getDefault().getService(
|
||||
IBrandingService.class);
|
||||
brandingService.getBrandingConfiguration().setUseProductRegistration(false);
|
||||
ProxyRepositoryFactory repositoryFactory = ProxyRepositoryFactory.getInstance();
|
||||
@@ -472,7 +497,7 @@ public class RepositoryService implements IRepositoryService, IRepositoryContext
|
||||
}
|
||||
if (project != null && reload && lastBean != null && repositoryFactory.getRepositoryContext().isOffline()) {
|
||||
if (PluginChecker.isSVNProviderPluginLoaded()) {
|
||||
ISVNProviderService svnProviderService = (ISVNProviderService) GlobalServiceRegister.getDefault()
|
||||
ISVNProviderService svnProviderService = GlobalServiceRegister.getDefault()
|
||||
.getService(ISVNProviderService.class);
|
||||
if (svnProviderService.isSVNProject(project)) {
|
||||
String projectUrl = svnProviderService.getProjectUrl(project);
|
||||
@@ -791,7 +816,7 @@ public class RepositoryService implements IRepositoryService, IRepositoryContext
|
||||
public String getRulesProviderPath(RulesItem currentRepositoryItem) {
|
||||
IRulesProviderService rulesService = null;
|
||||
if (PluginChecker.isRulesPluginLoaded()) {
|
||||
rulesService = (IRulesProviderService) GlobalServiceRegister.getDefault().getService(IRulesProviderService.class);
|
||||
rulesService = GlobalServiceRegister.getDefault().getService(IRulesProviderService.class);
|
||||
try {
|
||||
rulesService.syncRule(currentRepositoryItem);
|
||||
IFile ruleFile = rulesService.getRuleFile(currentRepositoryItem, FileConstants.XLS_FILE_SUFFIX);
|
||||
@@ -915,9 +940,9 @@ public class RepositoryService implements IRepositoryService, IRepositoryContext
|
||||
private void initProviderService() {
|
||||
if (PluginChecker.isSVNProviderPluginLoaded()) {
|
||||
try {
|
||||
svnProviderService = (ISVNProviderService) GlobalServiceRegister.getDefault()
|
||||
svnProviderService = GlobalServiceRegister.getDefault()
|
||||
.getService(ISVNProviderService.class);
|
||||
gitProviderService = (IGITProviderService) GlobalServiceRegister.getDefault()
|
||||
gitProviderService = GlobalServiceRegister.getDefault()
|
||||
.getService(IGITProviderService.class);
|
||||
} catch (RuntimeException e) {
|
||||
// nothing to do
|
||||
@@ -1008,7 +1033,7 @@ public class RepositoryService implements IRepositoryService, IRepositoryContext
|
||||
@Override
|
||||
public boolean isSVN() {
|
||||
if (svnProviderService == null && PluginChecker.isSVNProviderPluginLoaded()) {
|
||||
svnProviderService = (ISVNProviderService) GlobalServiceRegister.getDefault().getService(ISVNProviderService.class);
|
||||
svnProviderService = GlobalServiceRegister.getDefault().getService(ISVNProviderService.class);
|
||||
}
|
||||
if (svnProviderService != null) {
|
||||
return svnProviderService.isProjectInSvnMode();
|
||||
@@ -1019,7 +1044,7 @@ public class RepositoryService implements IRepositoryService, IRepositoryContext
|
||||
@Override
|
||||
public boolean isGIT() {
|
||||
if (gitProviderService == null && PluginChecker.isGITProviderPluginLoaded()) {
|
||||
gitProviderService = (IGITProviderService) GlobalServiceRegister.getDefault().getService(IGITProviderService.class);
|
||||
gitProviderService = GlobalServiceRegister.getDefault().getService(IGITProviderService.class);
|
||||
}
|
||||
if (gitProviderService != null) {
|
||||
return gitProviderService.isProjectInGitMode();
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,93 @@
|
||||
// ============================================================================
|
||||
//
|
||||
// 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.repository.model.migration;
|
||||
|
||||
import java.nio.file.Path;
|
||||
import java.nio.file.Paths;
|
||||
import java.util.Date;
|
||||
import java.util.GregorianCalendar;
|
||||
import java.util.List;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.apache.maven.model.Dependency;
|
||||
import org.apache.maven.model.Model;
|
||||
import org.eclipse.core.resources.IFile;
|
||||
import org.eclipse.core.runtime.NullProgressMonitor;
|
||||
import org.eclipse.m2e.core.MavenPlugin;
|
||||
import org.talend.commons.exception.ExceptionHandler;
|
||||
import org.talend.core.model.general.Project;
|
||||
import org.talend.core.model.migration.AbstractProjectMigrationTask;
|
||||
import org.talend.core.repository.model.ProxyRepositoryFactory;
|
||||
import org.talend.designer.maven.tools.AggregatorPomsHelper;
|
||||
|
||||
/*
|
||||
* Created by bhe on Sep 29, 2020
|
||||
*/
|
||||
public class RemoveSnapshotJarMigrationTask extends AbstractProjectMigrationTask {
|
||||
|
||||
private static final Logger LOGGER = Logger.getLogger(RemoveSnapshotJarMigrationTask.class.getCanonicalName());
|
||||
|
||||
@Override
|
||||
public Date getOrder() {
|
||||
GregorianCalendar gc = new GregorianCalendar(2020, 9, 30, 12, 00, 00);
|
||||
return gc.getTime();
|
||||
}
|
||||
|
||||
@Override
|
||||
public ExecutionResult execute(Project project) {
|
||||
AggregatorPomsHelper pomHelper = new AggregatorPomsHelper();
|
||||
IFile rootPomFile = pomHelper.getProjectRootPom();
|
||||
if (rootPomFile.exists()) {
|
||||
try {
|
||||
boolean isRegeneratePoms = false;
|
||||
Model model = MavenPlugin.getMaven().readModel(rootPomFile.getLocation().toFile());
|
||||
if (model.getModules() != null) {
|
||||
for (String module : model.getModules()) {
|
||||
Path modPath = Paths.get(rootPomFile.getLocation().toFile().getParent(), module, "pom.xml");
|
||||
Model modModel = MavenPlugin.getMaven().readModel(modPath.toFile());
|
||||
isRegeneratePoms = doMigration(modModel.getDependencies());
|
||||
if (isRegeneratePoms) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
LOGGER.info("modules: " + model.getModules() + ", isRegeneratePoms: " + isRegeneratePoms);
|
||||
if (isRegeneratePoms) {
|
||||
pomHelper.syncAllPomsWithoutProgress(new NullProgressMonitor());
|
||||
return ExecutionResult.SUCCESS_NO_ALERT;
|
||||
}
|
||||
return ExecutionResult.NOTHING_TO_DO;
|
||||
} catch (Exception e) {
|
||||
ExceptionHandler.process(e);
|
||||
return ExecutionResult.FAILURE;
|
||||
}
|
||||
}
|
||||
return ExecutionResult.NOTHING_TO_DO;
|
||||
}
|
||||
|
||||
private static boolean doMigration(List<Dependency> deps) {
|
||||
if (deps == null || deps.isEmpty()) {
|
||||
return false;
|
||||
}
|
||||
for (Dependency dep : deps) {
|
||||
if (StringUtils.equals("org.talend.libraries", dep.getGroupId())
|
||||
&& StringUtils.equals("6.0.0-SNAPSHOT", dep.getVersion())) {
|
||||
if (StringUtils.equals("crypto-utils", dep.getArtifactId())) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,109 @@
|
||||
// ============================================================================
|
||||
//
|
||||
// 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.repository.model.migration;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Date;
|
||||
import java.util.GregorianCalendar;
|
||||
import java.util.List;
|
||||
|
||||
import org.talend.commons.exception.ExceptionHandler;
|
||||
import org.talend.core.model.components.ComponentUtilities;
|
||||
import org.talend.core.model.components.ModifyComponentsAction;
|
||||
import org.talend.core.model.components.conversions.IComponentConversion;
|
||||
import org.talend.core.model.components.filters.IComponentFilter;
|
||||
import org.talend.core.model.components.filters.NameComponentFilter;
|
||||
import org.talend.core.model.migration.AbstractJobMigrationTask;
|
||||
import org.talend.core.model.properties.Item;
|
||||
import org.talend.designer.core.model.utils.emf.talendfile.ElementParameterType;
|
||||
import org.talend.designer.core.model.utils.emf.talendfile.ElementValueType;
|
||||
import org.talend.designer.core.model.utils.emf.talendfile.NodeType;
|
||||
import org.talend.designer.core.model.utils.emf.talendfile.ProcessType;
|
||||
import org.talend.designer.core.model.utils.emf.talendfile.TalendFileFactory;
|
||||
|
||||
public class SAPBAPIParameterTypeMigrationTask extends AbstractJobMigrationTask {
|
||||
|
||||
@Override
|
||||
public ExecutionResult execute(Item item) {
|
||||
ProcessType processType = getProcessType(item);
|
||||
if (processType == null) {
|
||||
return ExecutionResult.NOTHING_TO_DO;
|
||||
}
|
||||
String[] componentsName = new String[] { "tSAPBapi" };
|
||||
|
||||
try {
|
||||
|
||||
for (String element : componentsName) {
|
||||
IComponentFilter filter = new NameComponentFilter(element);
|
||||
ModifyComponentsAction.searchAndModify(item, processType, filter,
|
||||
Arrays.<IComponentConversion>asList(new IComponentConversion() {
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
@Override
|
||||
public void transform(NodeType node) {
|
||||
ElementParameterType mapping_input = ComponentUtilities.getNodeProperty(node,
|
||||
"MAPPING_INPUT");
|
||||
TalendFileFactory fileFact = TalendFileFactory.eINSTANCE;
|
||||
if (mapping_input != null) {
|
||||
List<ElementValueType> newElementValues = new ArrayList<ElementValueType>();
|
||||
List<ElementValueType> elementValues = mapping_input.getElementValue();
|
||||
boolean tableType = false;
|
||||
for (ElementValueType elementValue : elementValues) {
|
||||
if ("TYPE".equals(elementValue.getElementRef())
|
||||
&& "TABLE".equals(elementValue.getValue())) {
|
||||
tableType = true;
|
||||
}
|
||||
|
||||
if ("CHANGING".equals(elementValue.getElementRef())) {
|
||||
ElementValueType value = fileFact.createElementValueType();
|
||||
value.setElementRef("PARAMETER_TYPE");
|
||||
boolean is_changing_parameter = "true".equalsIgnoreCase(elementValue.getValue());
|
||||
if (tableType) {
|
||||
value.setValue(is_changing_parameter ? "CHANGING" : "TABLES");
|
||||
} else {
|
||||
value.setValue(is_changing_parameter ? "CHANGING" : "IMPORT");
|
||||
}
|
||||
|
||||
newElementValues.add(value);
|
||||
|
||||
tableType = false;
|
||||
|
||||
continue;
|
||||
}
|
||||
|
||||
newElementValues.add(elementValue);
|
||||
}
|
||||
|
||||
elementValues.clear();
|
||||
elementValues.addAll(newElementValues);
|
||||
}
|
||||
}
|
||||
|
||||
}));
|
||||
}
|
||||
|
||||
return ExecutionResult.SUCCESS_NO_ALERT;
|
||||
} catch (Exception e) {
|
||||
ExceptionHandler.process(e);
|
||||
return ExecutionResult.FAILURE;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public Date getOrder() {
|
||||
GregorianCalendar gc = new GregorianCalendar(2021, 10, 2, 18, 0, 0);
|
||||
return gc.getTime();
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1079,8 +1079,20 @@ public class LoginProjectPage extends AbstractLoginActionPage {
|
||||
ICoreTisService.class);
|
||||
afterUpdate = false;
|
||||
if (tisService != null) {
|
||||
tisService.downLoadAndInstallUpdates(getConnection().getUser(), getConnection().getPassword(),
|
||||
loginFetchLicenseHelper.getAdminURL());
|
||||
if (tisService.isDefaultLicenseAndProjectType()) {
|
||||
tisService.downLoadAndInstallUpdates(getConnection().getUser(), getConnection().getPassword(),
|
||||
loginFetchLicenseHelper.getAdminURL());
|
||||
} else {
|
||||
EclipseCommandLine.updateOrCreateExitDataPropertyWithCommand(EclipseCommandLine.LOGIN_ONLINE_UPDATE, null,
|
||||
false, true);
|
||||
EclipseCommandLine.updateOrCreateExitDataPropertyWithCommand(EclipseCommandLine.CLEAN, null, false, true);
|
||||
EclipseCommandLine.updateOrCreateExitDataPropertyWithCommand(EclipseCommandLine.TALEND_RELOAD_COMMAND,
|
||||
Boolean.TRUE.toString(), false);
|
||||
EclipseCommandLine.updateOrCreateExitDataPropertyWithCommand(
|
||||
EclipseCommandLine.TALEND_PROJECT_TYPE_COMMAND, "", true);
|
||||
EclipseCommandLine.updateOrCreateExitDataPropertyWithCommand(EclipseCommandLine.ARG_TALEND_LICENCE_PATH,
|
||||
"", true);
|
||||
}
|
||||
afterUpdate = true;
|
||||
tisService.setNeedResartAfterUpdate(afterUpdate);
|
||||
}
|
||||
|
||||
@@ -13,6 +13,7 @@
|
||||
package org.talend.repository.ui.wizards.exportjob.handler;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.lang.reflect.InvocationTargetException;
|
||||
import java.net.URL;
|
||||
import java.util.ArrayList;
|
||||
@@ -58,11 +59,13 @@ import org.talend.core.runtime.process.TalendProcessArgumentConstant;
|
||||
import org.talend.core.runtime.repository.build.BuildExportManager;
|
||||
import org.talend.core.service.ITransformService;
|
||||
import org.talend.core.ui.ITestContainerProviderService;
|
||||
import org.talend.designer.core.model.utils.emf.talendfile.ProcessType;
|
||||
import org.talend.designer.maven.model.TalendMavenConstants;
|
||||
import org.talend.designer.maven.tools.BuildCacheManager;
|
||||
import org.talend.designer.runprocess.IProcessor;
|
||||
import org.talend.designer.runprocess.ProcessorUtilities;
|
||||
import org.talend.model.bridge.ReponsitoryContextBridge;
|
||||
import org.talend.repository.ProjectManager;
|
||||
import org.talend.repository.documentation.ExportFileResource;
|
||||
import org.talend.repository.local.ExportItemUtil;
|
||||
import org.talend.repository.model.RepositoryConstants;
|
||||
@@ -79,7 +82,6 @@ public class BuildJobHandler extends AbstractBuildJobHandler {
|
||||
|
||||
public BuildJobHandler(ProcessItem processItem, String version, String contextName, Map<ExportChoice, Object> exportChoiceMap) {
|
||||
super(processItem, version, contextName, exportChoiceMap);
|
||||
|
||||
setProjectNameLowerCase(true);
|
||||
ProcessorUtilities.setExportConfig(JavaUtils.JAVA_APP_NAME, null, null);
|
||||
}
|
||||
@@ -182,6 +184,8 @@ public class BuildJobHandler extends AbstractBuildJobHandler {
|
||||
generationOption = generationOption | ProcessorUtilities.GENERATE_WITHOUT_COMPILING;
|
||||
}
|
||||
argumentsMap.put(TalendProcessArgumentConstant.ARG_GENERATE_OPTION, generationOption);
|
||||
argumentsMap.put(TalendProcessArgumentConstant.ARG_NEED_JETTY_SERVER,
|
||||
ProcessUtils.hasJettyEndpoint((ProcessType)processItem.getProcess()));
|
||||
|
||||
BuildCacheManager.getInstance().clearCurrentCache();
|
||||
|
||||
@@ -200,7 +204,7 @@ public class BuildJobHandler extends AbstractBuildJobHandler {
|
||||
return;
|
||||
}
|
||||
if (GlobalServiceRegister.getDefault().isServiceRegistered(ITestContainerProviderService.class)) {
|
||||
ITestContainerProviderService testContainerService = (ITestContainerProviderService) GlobalServiceRegister
|
||||
ITestContainerProviderService testContainerService = GlobalServiceRegister
|
||||
.getDefault().getService(ITestContainerProviderService.class);
|
||||
if (testContainerService != null) {
|
||||
List<IFile> reports = new ArrayList<IFile>();
|
||||
@@ -268,7 +272,7 @@ public class BuildJobHandler extends AbstractBuildJobHandler {
|
||||
private void addTDMDependencies(IFolder itemsFolder, List<Item> items) {
|
||||
ITransformService tdmService = null;
|
||||
if (GlobalServiceRegister.getDefault().isServiceRegistered(ITransformService.class)) {
|
||||
tdmService = (ITransformService) GlobalServiceRegister.getDefault().getService(ITransformService.class);
|
||||
tdmService = GlobalServiceRegister.getDefault().getService(ITransformService.class);
|
||||
}
|
||||
if (tdmService == null) {
|
||||
return;
|
||||
@@ -354,62 +358,88 @@ public class BuildJobHandler extends AbstractBuildJobHandler {
|
||||
|
||||
private void addDQDependencies(IFolder parentFolder, List<Item> items) throws Exception {
|
||||
if (GlobalServiceRegister.getDefault().isServiceRegistered(ITDQItemService.class)) {
|
||||
ITDQItemService tdqItemService = (ITDQItemService) GlobalServiceRegister.getDefault().getService(
|
||||
ITDQItemService tdqItemService = GlobalServiceRegister.getDefault().getService(
|
||||
ITDQItemService.class);
|
||||
List<Project> initProList = new ArrayList<>();
|
||||
for (Item item : items) {
|
||||
if (tdqItemService != null && tdqItemService.hasProcessItemDependencies(Arrays.asList(new Item[] { item }))) {
|
||||
setNeedItemDependencies(true);
|
||||
// add .Talend.definition file
|
||||
String defIdxFolderName = "TDQ_Libraries"; //$NON-NLS-1$
|
||||
String defIdxFileName = ".Talend.definition"; //$NON-NLS-1$
|
||||
Project pro = getProject(processItem);
|
||||
IFolder itemsProjectFolder = parentFolder.getFolder(pro.getTechnicalLabel().toLowerCase());
|
||||
File itemsFolderDir = new File(parentFolder.getLocation().toFile().getAbsolutePath());
|
||||
IProject project = ReponsitoryContextBridge.getRootProject();
|
||||
String defIdxRelativePath = defIdxFolderName + PATH_SEPARATOR + defIdxFileName;
|
||||
IFile defIdxFile = project.getFile(defIdxRelativePath);
|
||||
if (defIdxFile.exists()) {
|
||||
File defIdxFileSource = new File(project.getLocation().makeAbsolute().append(defIdxFolderName)
|
||||
.append(defIdxFileName).toFile().toURI());
|
||||
File defIdxFileTarget = new File(itemsProjectFolder.getFile(defIdxRelativePath).getLocation().toFile()
|
||||
.getAbsolutePath());
|
||||
FilesUtils.copyFile(defIdxFileSource, defIdxFileTarget);
|
||||
}
|
||||
// add report header image & template files
|
||||
String reportingBundlePath = PluginChecker.getBundlePath("org.talend.dataquality.reporting"); //$NON-NLS-1$
|
||||
File imageFolder = new File(reportingBundlePath + PATH_SEPARATOR + "images"); //$NON-NLS-1$
|
||||
if (imageFolder.exists()) {
|
||||
FilesUtils.copyDirectory(imageFolder, itemsFolderDir);
|
||||
}
|
||||
File templateFolder = new File(reportingBundlePath + PATH_SEPARATOR + "reports"); //$NON-NLS-1$
|
||||
if (templateFolder.exists() && templateFolder.isDirectory()) {
|
||||
FilesUtils.copyDirectory(templateFolder, itemsFolderDir);
|
||||
}
|
||||
// TDQ-10842 msjian: consider user defined report template files
|
||||
String reportTemplateFolderName = "JRXML Template"; //$NON-NLS-1$
|
||||
String reportTemplateFolderPath = defIdxFolderName + PATH_SEPARATOR + reportTemplateFolderName;
|
||||
IFolder reportFolder = project.getFolder(reportTemplateFolderPath);
|
||||
if (reportFolder.exists()) {
|
||||
File reportFileSource = new File(project
|
||||
.getLocation()
|
||||
.makeAbsolute()
|
||||
.append(defIdxFolderName)
|
||||
.append(reportTemplateFolderName)
|
||||
.toFile()
|
||||
.toURI());
|
||||
File reportFileTarget = new File(itemsProjectFolder
|
||||
.getFile(defIdxFolderName)
|
||||
.getLocation()
|
||||
.toFile()
|
||||
.getAbsolutePath());
|
||||
FilesUtils.copyDirectory(reportFileSource, reportFileTarget);
|
||||
}
|
||||
// TDQ-10842~
|
||||
if (PluginChecker.isRefProjectLoaded()
|
||||
&& ProjectManager.getInstance().getAllReferencedProjects().size() > 0) {
|
||||
handleMulitProjectCase(parentFolder, initProList, item);
|
||||
} else {
|
||||
handleSingleProjectCase(parentFolder, tdqItemService, item);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void handleMulitProjectCase(IFolder parentFolder, List<Project> initProList, Item item) throws IOException {
|
||||
Project pro = ProjectManager.getInstance().getProject(item);
|
||||
if (!initProList.contains(pro)) {
|
||||
initProList.add(pro);
|
||||
copyDQSystemFile(parentFolder, pro);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
protected void copyDQSystemFile(IFolder parentFolder, Project pro) throws IOException {
|
||||
setNeedItemDependencies(true);
|
||||
// add .Talend.definition file
|
||||
String defIdxFolderName = "TDQ_Libraries"; //$NON-NLS-1$
|
||||
String defIdxFileName = ".Talend.definition"; //$NON-NLS-1$
|
||||
IFolder itemsProjectFolder = parentFolder.getFolder(pro.getTechnicalLabel().toLowerCase());
|
||||
File itemsFolderDir = new File(parentFolder.getLocation().toFile().getAbsolutePath());
|
||||
IProject project = ReponsitoryContextBridge.findProject(pro.getTechnicalLabel());
|
||||
String defIdxRelativePath = defIdxFolderName + PATH_SEPARATOR + defIdxFileName;
|
||||
IFile defIdxFile = project.getFile(defIdxRelativePath);
|
||||
if (defIdxFile.exists()) {
|
||||
File defIdxFileSource = new File(project
|
||||
.getLocation()
|
||||
.makeAbsolute()
|
||||
.append(defIdxFolderName)
|
||||
.append(defIdxFileName)
|
||||
.toFile()
|
||||
.toURI());
|
||||
File defIdxFileTarget =
|
||||
new File(itemsProjectFolder.getFile(defIdxRelativePath).getLocation().toFile().getAbsolutePath());
|
||||
FilesUtils.copyFile(defIdxFileSource, defIdxFileTarget);
|
||||
}
|
||||
// add report header image & template files
|
||||
String reportingBundlePath = PluginChecker.getBundlePath("org.talend.dataquality.reporting"); //$NON-NLS-1$
|
||||
File imageFolder = new File(reportingBundlePath + PATH_SEPARATOR + "images"); //$NON-NLS-1$
|
||||
if (imageFolder.exists()) {
|
||||
FilesUtils.copyDirectory(imageFolder, itemsFolderDir);
|
||||
}
|
||||
File templateFolder = new File(reportingBundlePath + PATH_SEPARATOR + "reports"); //$NON-NLS-1$
|
||||
if (templateFolder.exists() && templateFolder.isDirectory()) {
|
||||
FilesUtils.copyDirectory(templateFolder, itemsFolderDir);
|
||||
}
|
||||
// TDQ-10842 msjian: consider user defined report template files
|
||||
String reportTemplateFolderName = "JRXML Template"; //$NON-NLS-1$
|
||||
String reportTemplateFolderPath = defIdxFolderName + PATH_SEPARATOR + reportTemplateFolderName;
|
||||
IFolder reportFolder = project.getFolder(reportTemplateFolderPath);
|
||||
if (reportFolder.exists()) {
|
||||
File reportFileSource = new File(project
|
||||
.getLocation()
|
||||
.makeAbsolute()
|
||||
.append(defIdxFolderName)
|
||||
.append(reportTemplateFolderName)
|
||||
.toFile()
|
||||
.toURI());
|
||||
File reportFileTarget =
|
||||
new File(itemsProjectFolder.getFile(defIdxFolderName).getLocation().toFile().getAbsolutePath());
|
||||
FilesUtils.copyDirectory(reportFileSource, reportFileTarget);
|
||||
}
|
||||
// TDQ-10842~
|
||||
}
|
||||
|
||||
private void handleSingleProjectCase(IFolder parentFolder, ITDQItemService tdqItemService, Item item)
|
||||
throws IOException {
|
||||
Project pro = getProject(processItem);
|
||||
if (tdqItemService != null && tdqItemService.hasProcessItemDependencies(Arrays.asList(new Item[] { item }))) {
|
||||
copyDQSystemFile(parentFolder, pro);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void build(IProgressMonitor monitor) throws Exception {
|
||||
final IWorkspaceRunnable runnable = new IWorkspaceRunnable() {
|
||||
|
||||
@@ -24,6 +24,7 @@ import aQute.service.reporter.Reporter;
|
||||
|
||||
import java.io.ByteArrayOutputStream;
|
||||
import java.io.File;
|
||||
import java.io.FileInputStream;
|
||||
import java.io.FileOutputStream;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
@@ -100,6 +101,7 @@ import org.talend.repository.documentation.ExportFileResource;
|
||||
import org.talend.repository.ui.wizards.exportjob.scriptsmanager.JarBuilder;
|
||||
import org.talend.repository.ui.wizards.exportjob.scriptsmanager.JobJavaScriptsManager;
|
||||
import org.talend.repository.utils.EmfModelUtils;
|
||||
import org.talend.repository.utils.EsbConfigUtils;
|
||||
import org.talend.repository.utils.TemplateProcessor;
|
||||
|
||||
/**
|
||||
@@ -169,8 +171,22 @@ public class JobJavaScriptOSGIForESBManager extends JobJavaScriptsManager {
|
||||
}
|
||||
complianceParameter = " -" + complianceLevel + " -maxProblems 100000 -nowarn";
|
||||
|
||||
try (InputStream is = RepositoryPlugin.getDefault().getBundle().getEntry("/resources/osgi-exclude.properties") //$NON-NLS-1$
|
||||
.openStream()) {
|
||||
try {
|
||||
File propFile = null;
|
||||
File esbConfigurationLocation = EsbConfigUtils.getEclipseEsbFolder();
|
||||
|
||||
if (esbConfigurationLocation != null && esbConfigurationLocation.exists() && esbConfigurationLocation.isDirectory()) {
|
||||
propFile = new File(esbConfigurationLocation.getAbsolutePath(), OSGI_EXCLUDE_PROP_FILENAME);
|
||||
}
|
||||
|
||||
InputStream is = null;
|
||||
if (propFile != null && propFile.exists() && propFile.isFile()) {
|
||||
is = new FileInputStream(propFile);
|
||||
} else {
|
||||
is = RepositoryPlugin.getDefault().getBundle().getEntry("/resources/" + OSGI_EXCLUDE_PROP_FILENAME)
|
||||
.openStream();
|
||||
}
|
||||
|
||||
final Properties p = new Properties();
|
||||
p.load(is);
|
||||
for (Enumeration<?> e = p.propertyNames(); e.hasMoreElements();) {
|
||||
@@ -999,6 +1015,17 @@ public class JobJavaScriptOSGIForESBManager extends JobJavaScriptsManager {
|
||||
requireBundle = "tesb-xacml-rt"; //$NON-NLS-1$
|
||||
}
|
||||
}
|
||||
|
||||
// https://jira.talendforge.org/browse/APPINT-34077
|
||||
if (ERepositoryObjectType.getType(processItem.getProperty()).equals(ERepositoryObjectType.PROCESS)) {
|
||||
for (JobInfo subjobInfo : ProcessorUtilities.getChildrenJobInfo(processItem)) {
|
||||
if (EmfModelUtils.getComponentByName(subjobInfo.getProcessItem(), "tESBConsumer") != null) { //$NON-NLS-1$
|
||||
importPackages.add("org.apache.cxf.databinding"); //$NON-NLS-1$
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (ERepositoryObjectType.PROCESS_MR == ERepositoryObjectType.getItemType(processItem)) {
|
||||
importPackages.add("org.talend.cloud"); //$NON-NLS-1$
|
||||
}
|
||||
|
||||
@@ -806,11 +806,13 @@ public class DbGenerationManagerTest extends DbGenerationManagerTestHelper {
|
||||
|
||||
// Snowflake
|
||||
dbMapComponent = new DbMapComponent();
|
||||
List<ElementParameter> paramList = new ArrayList<>();
|
||||
ElementParameter param = new ElementParameter(dbMapComponent);
|
||||
param.setFieldType(EParameterFieldType.MAPPING_TYPE);
|
||||
param.setName(EParameterName.MAPPING.getName());
|
||||
param.setValue("snowflake_id");
|
||||
((List<IElementParameter>) dbMapComponent.getElementParameters()).add(param);
|
||||
paramList.add(param);
|
||||
dbMapComponent.setElementParameters(paramList);
|
||||
|
||||
List<IMetadataTable> metadataList = new ArrayList<IMetadataTable>();
|
||||
|
||||
@@ -941,11 +943,13 @@ public class DbGenerationManagerTest extends DbGenerationManagerTestHelper {
|
||||
|
||||
// Snowflake
|
||||
dbMapComponent = new DbMapComponent();
|
||||
List<ElementParameter> paramList = new ArrayList<>();
|
||||
ElementParameter param = new ElementParameter(dbMapComponent);
|
||||
param.setFieldType(EParameterFieldType.MAPPING_TYPE);
|
||||
param.setName(EParameterName.MAPPING.getName());
|
||||
param.setValue("snowflake_id");
|
||||
((List<IElementParameter>) dbMapComponent.getElementParameters()).add(param);
|
||||
paramList.add(param);
|
||||
dbMapComponent.setElementParameters(paramList);
|
||||
|
||||
List<IMetadataTable> metadataList = new ArrayList<IMetadataTable>();
|
||||
|
||||
@@ -1076,11 +1080,13 @@ public class DbGenerationManagerTest extends DbGenerationManagerTestHelper {
|
||||
|
||||
// Snowflake
|
||||
dbMapComponent = new DbMapComponent();
|
||||
List<ElementParameter> paramList = new ArrayList<>();
|
||||
ElementParameter param = new ElementParameter(dbMapComponent);
|
||||
param.setFieldType(EParameterFieldType.MAPPING_TYPE);
|
||||
param.setName(EParameterName.MAPPING.getName());
|
||||
param.setValue("snowflake_id");
|
||||
((List<IElementParameter>) dbMapComponent.getElementParameters()).add(param);
|
||||
paramList.add(param);
|
||||
dbMapComponent.setElementParameters(paramList);
|
||||
|
||||
List<IMetadataTable> metadataList = new ArrayList<IMetadataTable>();
|
||||
|
||||
|
||||
@@ -1,387 +1,384 @@
|
||||
package org.talend.repository.handler;
|
||||
|
||||
import static org.junit.Assert.assertEquals;
|
||||
import static org.junit.Assert.assertNotNull;
|
||||
import static org.junit.Assert.assertNull;
|
||||
import static org.junit.Assert.assertTrue;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.InputStream;
|
||||
import java.net.URL;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Properties;
|
||||
import java.util.jar.JarEntry;
|
||||
import java.util.jar.JarInputStream;
|
||||
import java.util.zip.ZipEntry;
|
||||
import java.util.zip.ZipFile;
|
||||
|
||||
import org.eclipse.core.runtime.FileLocator;
|
||||
import org.eclipse.core.runtime.NullProgressMonitor;
|
||||
import org.eclipse.core.runtime.Path;
|
||||
import org.eclipse.core.runtime.Platform;
|
||||
import org.junit.After;
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
import org.talend.commons.exception.PersistenceException;
|
||||
import org.talend.core.CorePlugin;
|
||||
import org.talend.core.GlobalServiceRegister;
|
||||
import org.talend.core.model.process.IElementParameter;
|
||||
import org.talend.core.model.process.INode;
|
||||
import org.talend.core.model.process.IProcess;
|
||||
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.IRepositoryViewObject;
|
||||
import org.talend.core.model.utils.JavaResourcesHelper;
|
||||
import org.talend.core.repository.model.ProxyRepositoryFactory;
|
||||
import org.talend.designer.core.IDesignerCoreService;
|
||||
import org.talend.designer.runprocess.IRunProcessService;
|
||||
import org.talend.model.bridge.ReponsitoryContextBridge;
|
||||
import org.talend.repository.ProjectManager;
|
||||
import org.talend.repository.items.importexport.handlers.ImportExportHandlersManager;
|
||||
import org.talend.repository.items.importexport.handlers.model.ImportItem;
|
||||
import org.talend.repository.items.importexport.manager.ResourcesManager;
|
||||
import org.talend.repository.items.importexport.ui.managers.FileResourcesUnityManager;
|
||||
import org.talend.repository.items.importexport.ui.managers.ResourcesManagerFactory;
|
||||
import org.talend.repository.model.IProxyRepositoryFactory;
|
||||
import org.talend.repository.ui.wizards.exportjob.JavaJobScriptsExportWSWizardPage.JobExportType;
|
||||
import org.talend.repository.ui.wizards.exportjob.scriptsmanager.BuildJobManager;
|
||||
import org.talend.repository.ui.wizards.exportjob.scriptsmanager.JobScriptsManager.ExportChoice;
|
||||
import org.talend.repository.ui.wizards.exportjob.util.ExportJobUtil;
|
||||
|
||||
public class BuildJobHandlerTest {
|
||||
|
||||
private ProcessItem jobWithTdqItem;
|
||||
|
||||
private ProcessItem jobWithTdmItem;
|
||||
|
||||
private ProcessItem jobWithChildrenItem;
|
||||
|
||||
private ProcessItem jobWithJobletItem;
|
||||
|
||||
private ProcessItem jobWithTestcaseItem;
|
||||
|
||||
private ProcessItem childJobItem;
|
||||
|
||||
private Item jobletItem;
|
||||
|
||||
private List<Item> testItems;
|
||||
|
||||
private List<String> destinationPaths;
|
||||
|
||||
private Project bridgeProject;
|
||||
|
||||
private Map<ExportChoice, Object> exportChoiceMap;
|
||||
|
||||
private IRunProcessService runProcessService;
|
||||
|
||||
private static final String JOB_WITH_TDQ_ID = "_3TtbgD7OEeiHhJsSj16U_A";
|
||||
|
||||
private static final String JOB_WITH_TDM_ID = "_bWyBUAYbEeapTZ0aKwL_YA";
|
||||
|
||||
private static final String JOB_WITH_CHILDREN_ID = "_HGAFAD7OEeiNfpYj4K_XrA";
|
||||
|
||||
private static final String JOB_WITH_JOBLET_ID = "_FKbJID7OEeiNfpYj4K_XrA";
|
||||
|
||||
private static final String JOB_WITH_TESTCASE_ID = "_YmcxoHniEeiA8rKAx4YxMw";
|
||||
|
||||
private static final String JOB_CHILD_ID = "_JJsbED7OEeiNfpYj4K_XrA";
|
||||
|
||||
private static final String JOBLET_ID = "_V92qED7OEeiNfpYj4K_XrA";
|
||||
|
||||
@Before
|
||||
public void setUp() throws Exception {
|
||||
if (GlobalServiceRegister.getDefault().isServiceRegistered(IRunProcessService.class)) {
|
||||
runProcessService = (IRunProcessService) GlobalServiceRegister.getDefault().getService(IRunProcessService.class);
|
||||
}
|
||||
assertNotNull(runProcessService);
|
||||
|
||||
// Fix the NPE for org.talend.designer.core.ui.editor.process.Process.createMainParameters(Process.java:401)
|
||||
bridgeProject = ReponsitoryContextBridge.getProject();
|
||||
ReponsitoryContextBridge.setProject(ProjectManager.getInstance().getCurrentProject().getEmfProject());
|
||||
|
||||
ImportExportHandlersManager importManager = new ImportExportHandlersManager();
|
||||
|
||||
URL testJobURL = FileLocator.find(Platform.getBundle("org.talend.repository.test"),
|
||||
new Path("/resources/testBuildJob.zip"), null);
|
||||
if (testJobURL != null) {
|
||||
testJobURL = FileLocator.toFileURL(testJobURL);
|
||||
}
|
||||
File srcFile = new File(testJobURL.getFile());
|
||||
FileResourcesUnityManager fileUnityManager = ResourcesManagerFactory.getInstance().createFileUnityManager(srcFile);
|
||||
ResourcesManager resManager = fileUnityManager.doUnify();
|
||||
List<ImportItem> projectRecords = importManager.populateImportingItems(resManager, true, new NullProgressMonitor());
|
||||
assertTrue(projectRecords.size() > 0);
|
||||
importManager.importItemRecords(new NullProgressMonitor(), resManager, projectRecords, true,
|
||||
projectRecords.toArray(new ImportItem[0]), null);
|
||||
|
||||
jobWithTdqItem = (ProcessItem) getItemById(JOB_WITH_TDQ_ID);
|
||||
jobWithTdmItem = (ProcessItem) getItemById(JOB_WITH_TDM_ID);
|
||||
jobWithChildrenItem = (ProcessItem) getItemById(JOB_WITH_CHILDREN_ID);
|
||||
jobWithJobletItem = (ProcessItem) getItemById(JOB_WITH_JOBLET_ID);
|
||||
jobWithTestcaseItem = (ProcessItem) getItemById(JOB_WITH_TESTCASE_ID);
|
||||
childJobItem = (ProcessItem) getItemById(JOB_CHILD_ID);
|
||||
jobletItem = getItemById(JOBLET_ID);
|
||||
|
||||
testItems = new ArrayList<>();
|
||||
testItems.add(jobWithTdqItem);
|
||||
testItems.add(jobWithTdmItem);
|
||||
testItems.add(jobWithChildrenItem);
|
||||
testItems.add(jobWithJobletItem);
|
||||
testItems.add(jobWithTestcaseItem);
|
||||
testItems.add(childJobItem);
|
||||
testItems.add(jobletItem);
|
||||
|
||||
initExportChoice();
|
||||
|
||||
destinationPaths = new ArrayList<>();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testBuildJobWithTDQ() throws Exception {
|
||||
String destinationPath = getDestinationPath(jobWithTdqItem);
|
||||
destinationPaths.add(destinationPath);
|
||||
BuildJobManager.getInstance().buildJob(destinationPath, jobWithTdqItem, "0.1", "Default", exportChoiceMap,
|
||||
JobExportType.POJO, new NullProgressMonitor());
|
||||
validateBuildResult(jobWithTdqItem, destinationPath);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testBuildJobWithTDM() throws Exception {
|
||||
String destinationPath = getDestinationPath(jobWithTdmItem);
|
||||
destinationPaths.add(destinationPath);
|
||||
BuildJobManager.getInstance().buildJob(destinationPath, jobWithTdmItem, "0.1", "Default", exportChoiceMap,
|
||||
JobExportType.POJO, new NullProgressMonitor());
|
||||
validateBuildResult(jobWithTdmItem, destinationPath);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testBuildJobWithChildren() throws Exception {
|
||||
String destinationPath = getDestinationPath(jobWithChildrenItem);
|
||||
destinationPaths.add(destinationPath);
|
||||
BuildJobManager.getInstance().buildJob(destinationPath, jobWithChildrenItem, "0.1", "Default", exportChoiceMap,
|
||||
JobExportType.POJO, new NullProgressMonitor());
|
||||
validateBuildResult(jobWithChildrenItem, destinationPath);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testBuildJobWithJoblet() throws Exception {
|
||||
String destinationPath = getDestinationPath(jobWithJobletItem);
|
||||
destinationPaths.add(destinationPath);
|
||||
BuildJobManager.getInstance().buildJob(destinationPath, jobWithJobletItem, "0.1", "Default", exportChoiceMap,
|
||||
JobExportType.POJO, new NullProgressMonitor());
|
||||
validateBuildResult(jobWithJobletItem, destinationPath);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testBuildJobWithTestcase() throws Exception {
|
||||
String destinationPath = getDestinationPath(jobWithTestcaseItem);
|
||||
destinationPaths.add(destinationPath);
|
||||
BuildJobManager.getInstance().buildJob(destinationPath, jobWithTestcaseItem, "0.1", "Default", exportChoiceMap,
|
||||
JobExportType.POJO, new NullProgressMonitor());
|
||||
validateBuildResult(jobWithTestcaseItem, destinationPath);
|
||||
}
|
||||
|
||||
private Map<ExportChoice, Object> initExportChoice() {
|
||||
exportChoiceMap = new HashMap<ExportChoice, Object>();
|
||||
exportChoiceMap.put(ExportChoice.needLauncher, true);
|
||||
exportChoiceMap.put(ExportChoice.needSystemRoutine, true);
|
||||
exportChoiceMap.put(ExportChoice.needUserRoutine, true);
|
||||
exportChoiceMap.put(ExportChoice.needTalendLibraries, true);
|
||||
exportChoiceMap.put(ExportChoice.needJobItem, false);
|
||||
exportChoiceMap.put(ExportChoice.needJobScript, true);
|
||||
exportChoiceMap.put(ExportChoice.needSourceCode, true);
|
||||
exportChoiceMap.put(ExportChoice.includeLibs, true);
|
||||
exportChoiceMap.put(ExportChoice.includeTestSource, false);
|
||||
exportChoiceMap.put(ExportChoice.executeTests, false);
|
||||
exportChoiceMap.put(ExportChoice.binaries, true);
|
||||
exportChoiceMap.put(ExportChoice.needContext, true);
|
||||
exportChoiceMap.put(ExportChoice.contextName, "Default");
|
||||
exportChoiceMap.put(ExportChoice.applyToChildren, false);
|
||||
exportChoiceMap.put(ExportChoice.needLog4jLevel, false);
|
||||
exportChoiceMap.put(ExportChoice.log4jLevel, null);
|
||||
exportChoiceMap.put(ExportChoice.needDependencies, true);
|
||||
exportChoiceMap.put(ExportChoice.needParameterValues, false);
|
||||
return exportChoiceMap;
|
||||
}
|
||||
|
||||
private Item getItemById(String jobId) throws PersistenceException {
|
||||
IRepositoryViewObject obj = ProxyRepositoryFactory.getInstance().getLastVersion(jobId);
|
||||
return obj.getProperty().getItem();
|
||||
}
|
||||
|
||||
private String getDestinationPath(Item item) {
|
||||
return ExportJobUtil.getTmpFolderPath() + "/" + item.getProperty().getLabel() + ".zip";
|
||||
}
|
||||
|
||||
private void validateBuildResult(ProcessItem jobItem, String destinationPath) throws Exception {
|
||||
assertTrue(new File(destinationPath).exists());
|
||||
ZipFile zip = null;
|
||||
try {
|
||||
zip = new ZipFile(destinationPath);
|
||||
// jobInfo
|
||||
ZipEntry jobInfoEntry = zip.getEntry("jobInfo.properties");
|
||||
assertNotNull("Can't find the jobInfo.properties", jobInfoEntry);
|
||||
final InputStream jobInfoStream = zip.getInputStream(jobInfoEntry);
|
||||
|
||||
Property property = jobItem.getProperty();
|
||||
String jobName = property.getLabel();
|
||||
String jobVersion = property.getVersion();
|
||||
|
||||
Properties jobInfoProp = new Properties();
|
||||
jobInfoProp.load(jobInfoStream);
|
||||
jobInfoStream.close();
|
||||
|
||||
assertEquals(property.getId(), jobInfoProp.getProperty("jobId"));
|
||||
assertEquals(jobName, jobInfoProp.getProperty("job"));
|
||||
assertEquals(jobVersion, jobInfoProp.getProperty("jobVersion"));
|
||||
assertEquals(jobItem.getProcess().getJobType(), jobInfoProp.getProperty("jobType"));
|
||||
assertEquals(jobItem.getProcess().getDefaultContext(), jobInfoProp.getProperty("contextName"));
|
||||
|
||||
final String technicalLabel = ProjectManager.getInstance().getCurrentProject().getTechnicalLabel();
|
||||
assertEquals(technicalLabel, jobInfoProp.getProperty("project"));
|
||||
|
||||
ZipEntry libEntry = zip.getEntry("lib");
|
||||
assertNotNull("No lib folder", libEntry);
|
||||
if (jobItem == jobWithChildrenItem) {
|
||||
String dependencyFromParent = "commons-lang-2.5.jar";
|
||||
ZipEntry dependencyEntry = zip.getEntry("lib/" + dependencyFromParent);
|
||||
assertNotNull("No parent job dependency in lib folder", dependencyEntry);
|
||||
String dependencyFromChild = "commons-lang-2.6.jar";
|
||||
dependencyEntry = zip.getEntry("lib/" + dependencyFromChild);
|
||||
assertNotNull("No child job dependency in lib folder", dependencyEntry);
|
||||
}
|
||||
if (jobItem == jobWithJobletItem) {
|
||||
String dependencyFromJoblet = "commons-beanutils-1.9.2.jar";
|
||||
ZipEntry dependencyEntry = zip.getEntry("lib/" + dependencyFromJoblet);
|
||||
assertNotNull("No joblet dependency in lib folder", dependencyEntry);
|
||||
}
|
||||
if (jobItem == jobWithTestcaseItem) {
|
||||
String dependencyFromTestcase = "c3p0-0.9.1.2.jar";
|
||||
ZipEntry dependencyEntry = zip.getEntry("lib/" + dependencyFromTestcase);
|
||||
assertNull("Should not have testcase dependency in lib folder", dependencyEntry);
|
||||
String dependencyFromJobAndTestcase = "commons-io-2.4.jar";
|
||||
dependencyEntry = zip.getEntry("lib/" + dependencyFromJobAndTestcase);
|
||||
assertNotNull("No job dependency in lib folder", dependencyEntry);
|
||||
}
|
||||
|
||||
// log4j
|
||||
ZipEntry log4jXmlEntry = zip.getEntry(jobName + "/log4j.xml");
|
||||
assertNotNull("No log4j.xml", log4jXmlEntry);
|
||||
|
||||
// shell, ps1, bat
|
||||
ZipEntry batEntry = zip.getEntry(jobName + "/" + jobName + "_run.bat");
|
||||
assertNotNull("No bat file", batEntry);
|
||||
|
||||
ZipEntry ps1Entry = zip.getEntry(jobName + "/" + jobName + "_run.ps1");
|
||||
assertNotNull("No ps1 file", ps1Entry);
|
||||
|
||||
ZipEntry shEntry = zip.getEntry(jobName + "/" + jobName + "_run.sh");
|
||||
assertNotNull("No shell file", shEntry);
|
||||
|
||||
String jobJarName = JavaResourcesHelper.getJobJarName(jobName, jobVersion);
|
||||
ZipEntry jarEntry = zip.getEntry(jobName + "/" + jobJarName + ".jar");
|
||||
assertNotNull("No job jar file", jarEntry);
|
||||
if (jobItem == jobWithChildrenItem) {
|
||||
String subJobJarName = JavaResourcesHelper.getJobJarName(childJobItem.getProperty().getLabel(),
|
||||
childJobItem.getProperty().getVersion());
|
||||
ZipEntry subjobJarEntry = zip.getEntry(jobName + "/" + subJobJarName + ".jar");
|
||||
assertNotNull("No sub job jar file", subjobJarEntry);
|
||||
}
|
||||
|
||||
// src
|
||||
String jobFolderName = JavaResourcesHelper.getJobFolderName(jobName, jobVersion);
|
||||
ZipEntry javaEntry = zip.getEntry(
|
||||
jobName + "/src/main/java/" + technicalLabel.toLowerCase() + "/" + jobFolderName + "/" + jobName + ".java");
|
||||
assertNotNull("No job source code file", javaEntry);
|
||||
|
||||
ZipEntry contextEntry = zip.getEntry(jobName + "/src/main/resources/" + technicalLabel.toLowerCase()
|
||||
+ "/" + jobFolderName + "/contexts/Default.properties");
|
||||
assertNotNull("No context file", contextEntry);
|
||||
|
||||
if (jobItem == jobWithTdqItem) {
|
||||
// dq
|
||||
ZipEntry tdq = zip.getEntry(jobName + "/items/reports/");
|
||||
assertNotNull("Can't find the dq reports items", tdq);
|
||||
assertTrue(tdq.isDirectory());
|
||||
}
|
||||
|
||||
if (jobItem == jobWithTdmItem) {
|
||||
// if the tdm is load
|
||||
boolean isTDM = false;
|
||||
IDesignerCoreService coreService = CorePlugin.getDefault().getDesignerCoreService();
|
||||
if (coreService != null) {
|
||||
IProcess process = coreService.getProcessFromProcessItem(jobItem);
|
||||
for (INode node : process.getGeneratingNodes()) {
|
||||
IElementParameter param = node.getElementParameter("COMPONENT_NAME");
|
||||
if ("tHMap".equals(param.getValue())) {
|
||||
isTDM = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
assertTrue("Not TDM item", isTDM);
|
||||
|
||||
ZipEntry tdmSettingEntry = zip.getEntry(
|
||||
jobName + "/items/" + technicalLabel.toLowerCase() + "/.settings/com.oaklandsw.base.projectProps");
|
||||
assertNotNull("Can't export tdm rightly", tdmSettingEntry);
|
||||
// the __tdm has been moved into job jar. so need test it in jar.
|
||||
// testbuildWithXXX_0_1.jar!/__tdm/...
|
||||
JarInputStream jarStream = null;
|
||||
try {
|
||||
jarStream = new JarInputStream(zip.getInputStream(jarEntry));
|
||||
boolean found = false;
|
||||
JarEntry entry;
|
||||
while ((entry = jarStream.getNextJarEntry()) != null) {
|
||||
if (entry.getName().equals("__tdm/") && entry.isDirectory()) {
|
||||
found = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
assertTrue("Can't find __tdm folder in job jar after build", found);
|
||||
} finally {
|
||||
if (jarStream != null) {
|
||||
jarStream.close();
|
||||
}
|
||||
}
|
||||
}
|
||||
} finally {
|
||||
if (zip != null) {
|
||||
zip.close();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@After
|
||||
public void tearDown() throws Exception {
|
||||
ReponsitoryContextBridge.setProject(bridgeProject);
|
||||
|
||||
if (!testItems.isEmpty()) {
|
||||
for (Item item : testItems) {
|
||||
IProxyRepositoryFactory factory = ProxyRepositoryFactory.getInstance();
|
||||
IRepositoryViewObject repObj = factory.getLastVersion(item.getProperty().getId());
|
||||
if (repObj != null) {
|
||||
factory.deleteObjectPhysical(repObj);
|
||||
}
|
||||
}
|
||||
testItems.clear();
|
||||
}
|
||||
|
||||
ExportJobUtil.deleteTempFiles();
|
||||
|
||||
if (!destinationPaths.isEmpty()) {
|
||||
for (String destinationPath : destinationPaths) {
|
||||
File file = new File(destinationPath);
|
||||
if (file.exists()) {
|
||||
file.delete();
|
||||
}
|
||||
}
|
||||
destinationPaths.clear();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
package org.talend.repository.handler;
|
||||
|
||||
import static org.junit.Assert.*;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.InputStream;
|
||||
import java.net.URL;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Properties;
|
||||
import java.util.jar.JarEntry;
|
||||
import java.util.jar.JarInputStream;
|
||||
import java.util.zip.ZipEntry;
|
||||
import java.util.zip.ZipFile;
|
||||
|
||||
import org.eclipse.core.runtime.FileLocator;
|
||||
import org.eclipse.core.runtime.NullProgressMonitor;
|
||||
import org.eclipse.core.runtime.Path;
|
||||
import org.eclipse.core.runtime.Platform;
|
||||
import org.junit.After;
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
import org.talend.commons.exception.PersistenceException;
|
||||
import org.talend.core.CorePlugin;
|
||||
import org.talend.core.GlobalServiceRegister;
|
||||
import org.talend.core.model.process.IElementParameter;
|
||||
import org.talend.core.model.process.INode;
|
||||
import org.talend.core.model.process.IProcess;
|
||||
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.IRepositoryViewObject;
|
||||
import org.talend.core.model.utils.JavaResourcesHelper;
|
||||
import org.talend.core.repository.model.ProxyRepositoryFactory;
|
||||
import org.talend.designer.core.IDesignerCoreService;
|
||||
import org.talend.designer.runprocess.IRunProcessService;
|
||||
import org.talend.model.bridge.ReponsitoryContextBridge;
|
||||
import org.talend.repository.ProjectManager;
|
||||
import org.talend.repository.items.importexport.handlers.ImportExportHandlersManager;
|
||||
import org.talend.repository.items.importexport.handlers.model.ImportItem;
|
||||
import org.talend.repository.items.importexport.manager.ResourcesManager;
|
||||
import org.talend.repository.items.importexport.ui.managers.FileResourcesUnityManager;
|
||||
import org.talend.repository.items.importexport.ui.managers.ResourcesManagerFactory;
|
||||
import org.talend.repository.model.IProxyRepositoryFactory;
|
||||
import org.talend.repository.ui.wizards.exportjob.JavaJobScriptsExportWSWizardPage.JobExportType;
|
||||
import org.talend.repository.ui.wizards.exportjob.scriptsmanager.BuildJobManager;
|
||||
import org.talend.repository.ui.wizards.exportjob.scriptsmanager.JobScriptsManager.ExportChoice;
|
||||
import org.talend.repository.ui.wizards.exportjob.util.ExportJobUtil;
|
||||
|
||||
public class BuildJobHandlerTest {
|
||||
|
||||
private ProcessItem jobWithTdqItem;
|
||||
|
||||
private ProcessItem jobWithTdmItem;
|
||||
|
||||
private ProcessItem jobWithChildrenItem;
|
||||
|
||||
private ProcessItem jobWithJobletItem;
|
||||
|
||||
private ProcessItem jobWithTestcaseItem;
|
||||
|
||||
private ProcessItem childJobItem;
|
||||
|
||||
private Item jobletItem;
|
||||
|
||||
private List<Item> testItems;
|
||||
|
||||
private List<String> destinationPaths;
|
||||
|
||||
private Project bridgeProject;
|
||||
|
||||
private Map<ExportChoice, Object> exportChoiceMap;
|
||||
|
||||
private IRunProcessService runProcessService;
|
||||
|
||||
private static final String JOB_WITH_TDQ_ID = "_3TtbgD7OEeiHhJsSj16U_A";
|
||||
|
||||
private static final String JOB_WITH_TDM_ID = "_bWyBUAYbEeapTZ0aKwL_YA";
|
||||
|
||||
private static final String JOB_WITH_CHILDREN_ID = "_HGAFAD7OEeiNfpYj4K_XrA";
|
||||
|
||||
private static final String JOB_WITH_JOBLET_ID = "_FKbJID7OEeiNfpYj4K_XrA";
|
||||
|
||||
private static final String JOB_WITH_TESTCASE_ID = "_YmcxoHniEeiA8rKAx4YxMw";
|
||||
|
||||
private static final String JOB_CHILD_ID = "_JJsbED7OEeiNfpYj4K_XrA";
|
||||
|
||||
private static final String JOBLET_ID = "_V92qED7OEeiNfpYj4K_XrA";
|
||||
|
||||
@Before
|
||||
public void setUp() throws Exception {
|
||||
if (GlobalServiceRegister.getDefault().isServiceRegistered(IRunProcessService.class)) {
|
||||
runProcessService = GlobalServiceRegister.getDefault().getService(IRunProcessService.class);
|
||||
}
|
||||
assertNotNull(runProcessService);
|
||||
|
||||
// Fix the NPE for org.talend.designer.core.ui.editor.process.Process.createMainParameters(Process.java:401)
|
||||
bridgeProject = ReponsitoryContextBridge.getProject();
|
||||
ReponsitoryContextBridge.setProject(ProjectManager.getInstance().getCurrentProject().getEmfProject());
|
||||
|
||||
ImportExportHandlersManager importManager = new ImportExportHandlersManager();
|
||||
|
||||
URL testJobURL = FileLocator.find(Platform.getBundle("org.talend.repository.test"),
|
||||
new Path("/resources/testBuildJob.zip"), null);
|
||||
if (testJobURL != null) {
|
||||
testJobURL = FileLocator.toFileURL(testJobURL);
|
||||
}
|
||||
File srcFile = new File(testJobURL.getFile());
|
||||
FileResourcesUnityManager fileUnityManager = ResourcesManagerFactory.getInstance().createFileUnityManager(srcFile);
|
||||
ResourcesManager resManager = fileUnityManager.doUnify();
|
||||
List<ImportItem> projectRecords = importManager.populateImportingItems(resManager, true, new NullProgressMonitor());
|
||||
assertTrue(projectRecords.size() > 0);
|
||||
importManager.importItemRecords(new NullProgressMonitor(), resManager, projectRecords, true,
|
||||
projectRecords.toArray(new ImportItem[0]), null);
|
||||
|
||||
jobWithTdqItem = (ProcessItem) getItemById(JOB_WITH_TDQ_ID);
|
||||
jobWithTdmItem = (ProcessItem) getItemById(JOB_WITH_TDM_ID);
|
||||
jobWithChildrenItem = (ProcessItem) getItemById(JOB_WITH_CHILDREN_ID);
|
||||
jobWithJobletItem = (ProcessItem) getItemById(JOB_WITH_JOBLET_ID);
|
||||
jobWithTestcaseItem = (ProcessItem) getItemById(JOB_WITH_TESTCASE_ID);
|
||||
childJobItem = (ProcessItem) getItemById(JOB_CHILD_ID);
|
||||
jobletItem = getItemById(JOBLET_ID);
|
||||
|
||||
testItems = new ArrayList<>();
|
||||
testItems.add(jobWithTdqItem);
|
||||
testItems.add(jobWithTdmItem);
|
||||
testItems.add(jobWithChildrenItem);
|
||||
testItems.add(jobWithJobletItem);
|
||||
testItems.add(jobWithTestcaseItem);
|
||||
testItems.add(childJobItem);
|
||||
testItems.add(jobletItem);
|
||||
|
||||
initExportChoice();
|
||||
|
||||
destinationPaths = new ArrayList<>();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testBuildJobWithTDQ() throws Exception {
|
||||
String destinationPath = getDestinationPath(jobWithTdqItem);
|
||||
destinationPaths.add(destinationPath);
|
||||
BuildJobManager.getInstance().buildJob(destinationPath, jobWithTdqItem, "0.1", "Default", exportChoiceMap,
|
||||
JobExportType.POJO, new NullProgressMonitor());
|
||||
validateBuildResult(jobWithTdqItem, destinationPath);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testBuildJobWithTDM() throws Exception {
|
||||
String destinationPath = getDestinationPath(jobWithTdmItem);
|
||||
destinationPaths.add(destinationPath);
|
||||
BuildJobManager.getInstance().buildJob(destinationPath, jobWithTdmItem, "0.1", "Default", exportChoiceMap,
|
||||
JobExportType.POJO, new NullProgressMonitor());
|
||||
validateBuildResult(jobWithTdmItem, destinationPath);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testBuildJobWithChildren() throws Exception {
|
||||
String destinationPath = getDestinationPath(jobWithChildrenItem);
|
||||
destinationPaths.add(destinationPath);
|
||||
BuildJobManager.getInstance().buildJob(destinationPath, jobWithChildrenItem, "0.1", "Default", exportChoiceMap,
|
||||
JobExportType.POJO, new NullProgressMonitor());
|
||||
validateBuildResult(jobWithChildrenItem, destinationPath);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testBuildJobWithJoblet() throws Exception {
|
||||
String destinationPath = getDestinationPath(jobWithJobletItem);
|
||||
destinationPaths.add(destinationPath);
|
||||
BuildJobManager.getInstance().buildJob(destinationPath, jobWithJobletItem, "0.1", "Default", exportChoiceMap,
|
||||
JobExportType.POJO, new NullProgressMonitor());
|
||||
validateBuildResult(jobWithJobletItem, destinationPath);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testBuildJobWithTestcase() throws Exception {
|
||||
String destinationPath = getDestinationPath(jobWithTestcaseItem);
|
||||
destinationPaths.add(destinationPath);
|
||||
BuildJobManager.getInstance().buildJob(destinationPath, jobWithTestcaseItem, "0.1", "Default", exportChoiceMap,
|
||||
JobExportType.POJO, new NullProgressMonitor());
|
||||
validateBuildResult(jobWithTestcaseItem, destinationPath);
|
||||
}
|
||||
|
||||
private Map<ExportChoice, Object> initExportChoice() {
|
||||
exportChoiceMap = new HashMap<ExportChoice, Object>();
|
||||
exportChoiceMap.put(ExportChoice.needLauncher, true);
|
||||
exportChoiceMap.put(ExportChoice.needSystemRoutine, true);
|
||||
exportChoiceMap.put(ExportChoice.needUserRoutine, true);
|
||||
exportChoiceMap.put(ExportChoice.needTalendLibraries, true);
|
||||
exportChoiceMap.put(ExportChoice.needJobItem, false);
|
||||
exportChoiceMap.put(ExportChoice.needJobScript, true);
|
||||
exportChoiceMap.put(ExportChoice.needSourceCode, true);
|
||||
exportChoiceMap.put(ExportChoice.includeLibs, true);
|
||||
exportChoiceMap.put(ExportChoice.includeTestSource, false);
|
||||
exportChoiceMap.put(ExportChoice.executeTests, false);
|
||||
exportChoiceMap.put(ExportChoice.binaries, true);
|
||||
exportChoiceMap.put(ExportChoice.needContext, true);
|
||||
exportChoiceMap.put(ExportChoice.contextName, "Default");
|
||||
exportChoiceMap.put(ExportChoice.applyToChildren, false);
|
||||
exportChoiceMap.put(ExportChoice.needLog4jLevel, false);
|
||||
exportChoiceMap.put(ExportChoice.log4jLevel, null);
|
||||
exportChoiceMap.put(ExportChoice.needDependencies, true);
|
||||
exportChoiceMap.put(ExportChoice.needParameterValues, false);
|
||||
return exportChoiceMap;
|
||||
}
|
||||
|
||||
private Item getItemById(String jobId) throws PersistenceException {
|
||||
IRepositoryViewObject obj = ProxyRepositoryFactory.getInstance().getLastVersion(jobId);
|
||||
return obj.getProperty().getItem();
|
||||
}
|
||||
|
||||
private String getDestinationPath(Item item) {
|
||||
return ExportJobUtil.getTmpFolderPath() + "/" + item.getProperty().getLabel() + ".zip";
|
||||
}
|
||||
|
||||
private void validateBuildResult(ProcessItem jobItem, String destinationPath) throws Exception {
|
||||
assertTrue(new File(destinationPath).exists());
|
||||
ZipFile zip = null;
|
||||
try {
|
||||
zip = new ZipFile(destinationPath);
|
||||
// jobInfo
|
||||
ZipEntry jobInfoEntry = zip.getEntry("jobInfo.properties");
|
||||
assertNotNull("Can't find the jobInfo.properties", jobInfoEntry);
|
||||
final InputStream jobInfoStream = zip.getInputStream(jobInfoEntry);
|
||||
|
||||
Property property = jobItem.getProperty();
|
||||
String jobName = property.getLabel();
|
||||
String jobVersion = property.getVersion();
|
||||
|
||||
Properties jobInfoProp = new Properties();
|
||||
jobInfoProp.load(jobInfoStream);
|
||||
jobInfoStream.close();
|
||||
|
||||
assertEquals(property.getId(), jobInfoProp.getProperty("jobId"));
|
||||
assertEquals(jobName, jobInfoProp.getProperty("job"));
|
||||
assertEquals(jobVersion, jobInfoProp.getProperty("jobVersion"));
|
||||
assertEquals(jobItem.getProcess().getJobType(), jobInfoProp.getProperty("jobType"));
|
||||
assertEquals(jobItem.getProcess().getDefaultContext(), jobInfoProp.getProperty("contextName"));
|
||||
|
||||
final String technicalLabel = ProjectManager.getInstance().getCurrentProject().getTechnicalLabel();
|
||||
assertEquals(technicalLabel, jobInfoProp.getProperty("project"));
|
||||
|
||||
ZipEntry libEntry = zip.getEntry("lib");
|
||||
assertNotNull("No lib folder", libEntry);
|
||||
if (jobItem == jobWithChildrenItem) {
|
||||
String dependencyFromParent = "commons-lang-2.5.jar";
|
||||
ZipEntry dependencyEntry = zip.getEntry("lib/" + dependencyFromParent);
|
||||
assertNotNull("No parent job dependency in lib folder", dependencyEntry);
|
||||
String dependencyFromChild = "commons-lang-2.6.jar";
|
||||
dependencyEntry = zip.getEntry("lib/" + dependencyFromChild);
|
||||
assertNotNull("No child job dependency in lib folder", dependencyEntry);
|
||||
}
|
||||
if (jobItem == jobWithJobletItem) {
|
||||
String dependencyFromJoblet = "commons-beanutils-1.9.2.jar";
|
||||
ZipEntry dependencyEntry = zip.getEntry("lib/" + dependencyFromJoblet);
|
||||
assertNotNull("No joblet dependency in lib folder", dependencyEntry);
|
||||
}
|
||||
if (jobItem == jobWithTestcaseItem) {
|
||||
String dependencyFromTestcase = "c3p0-0.9.1.2.jar";
|
||||
ZipEntry dependencyEntry = zip.getEntry("lib/" + dependencyFromTestcase);
|
||||
assertNull("Should not have testcase dependency in lib folder", dependencyEntry);
|
||||
String dependencyFromJobAndTestcase = "commons-io-2.4.jar";
|
||||
dependencyEntry = zip.getEntry("lib/" + dependencyFromJobAndTestcase);
|
||||
assertNotNull("No job dependency in lib folder", dependencyEntry);
|
||||
}
|
||||
|
||||
// log4j
|
||||
ZipEntry log4jXmlEntry = zip.getEntry(jobName + "/log4j.xml");
|
||||
assertNotNull("No log4j.xml", log4jXmlEntry);
|
||||
|
||||
// shell, ps1, bat
|
||||
ZipEntry batEntry = zip.getEntry(jobName + "/" + jobName + "_run.bat");
|
||||
assertNotNull("No bat file", batEntry);
|
||||
|
||||
ZipEntry ps1Entry = zip.getEntry(jobName + "/" + jobName + "_run.ps1");
|
||||
assertNotNull("No ps1 file", ps1Entry);
|
||||
|
||||
ZipEntry shEntry = zip.getEntry(jobName + "/" + jobName + "_run.sh");
|
||||
assertNotNull("No shell file", shEntry);
|
||||
|
||||
String jobJarName = JavaResourcesHelper.getJobJarName(jobName, jobVersion);
|
||||
ZipEntry jarEntry = zip.getEntry(jobName + "/" + jobJarName + ".jar");
|
||||
assertNotNull("No job jar file", jarEntry);
|
||||
if (jobItem == jobWithChildrenItem) {
|
||||
String subJobJarName = JavaResourcesHelper.getJobJarName(childJobItem.getProperty().getLabel(),
|
||||
childJobItem.getProperty().getVersion());
|
||||
ZipEntry subjobJarEntry = zip.getEntry(jobName + "/" + subJobJarName + ".jar");
|
||||
assertNotNull("No sub job jar file", subjobJarEntry);
|
||||
}
|
||||
|
||||
// src
|
||||
String jobFolderName = JavaResourcesHelper.getJobFolderName(jobName, jobVersion);
|
||||
ZipEntry javaEntry = zip.getEntry(
|
||||
jobName + "/src/main/java/" + technicalLabel.toLowerCase() + "/" + jobFolderName + "/" + jobName + ".java");
|
||||
assertNotNull("No job source code file", javaEntry);
|
||||
|
||||
ZipEntry contextEntry = zip.getEntry(jobName + "/src/main/resources/" + technicalLabel.toLowerCase()
|
||||
+ "/" + jobFolderName + "/contexts/Default.properties");
|
||||
assertNotNull("No context file", contextEntry);
|
||||
|
||||
if (jobItem == jobWithTdqItem) {
|
||||
// dq
|
||||
ZipEntry tdq = zip.getEntry(jobName + "/items/reports/");
|
||||
assertNotNull("Can't find the dq reports items", tdq);
|
||||
assertTrue(tdq.isDirectory());
|
||||
}
|
||||
|
||||
if (jobItem == jobWithTdmItem) {
|
||||
// if the tdm is load
|
||||
boolean isTDM = false;
|
||||
IDesignerCoreService coreService = CorePlugin.getDefault().getDesignerCoreService();
|
||||
if (coreService != null) {
|
||||
IProcess process = coreService.getProcessFromProcessItem(jobItem);
|
||||
for (INode node : process.getGeneratingNodes()) {
|
||||
IElementParameter param = node.getElementParameter("COMPONENT_NAME");
|
||||
if ("tHMap".equals(param.getValue())) {
|
||||
isTDM = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
assertTrue("Not TDM item", isTDM);
|
||||
|
||||
ZipEntry tdmSettingEntry = zip.getEntry(
|
||||
jobName + "/items/" + technicalLabel.toLowerCase() + "/.settings/com.oaklandsw.base.projectProps");
|
||||
assertNotNull("Can't export tdm rightly", tdmSettingEntry);
|
||||
// the __tdm has been moved into job jar. so need test it in jar.
|
||||
// testbuildWithXXX_0_1.jar!/__tdm/...
|
||||
JarInputStream jarStream = null;
|
||||
try {
|
||||
jarStream = new JarInputStream(zip.getInputStream(jarEntry));
|
||||
boolean found = false;
|
||||
JarEntry entry;
|
||||
while ((entry = jarStream.getNextJarEntry()) != null) {
|
||||
if (entry.getName().equals("__tdm/") && entry.isDirectory()) {
|
||||
found = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
assertTrue("Can't find __tdm folder in job jar after build", found);
|
||||
} finally {
|
||||
if (jarStream != null) {
|
||||
jarStream.close();
|
||||
}
|
||||
}
|
||||
}
|
||||
} finally {
|
||||
if (zip != null) {
|
||||
zip.close();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@After
|
||||
public void tearDown() throws Exception {
|
||||
ReponsitoryContextBridge.setProject(bridgeProject);
|
||||
|
||||
if (!testItems.isEmpty()) {
|
||||
for (Item item : testItems) {
|
||||
IProxyRepositoryFactory factory = ProxyRepositoryFactory.getInstance();
|
||||
IRepositoryViewObject repObj = factory.getLastVersion(item.getProperty().getId());
|
||||
if (repObj != null) {
|
||||
factory.deleteObjectPhysical(repObj);
|
||||
}
|
||||
}
|
||||
testItems.clear();
|
||||
}
|
||||
|
||||
ExportJobUtil.deleteTempFiles();
|
||||
|
||||
if (!destinationPaths.isEmpty()) {
|
||||
for (String destinationPath : destinationPaths) {
|
||||
File file = new File(destinationPath);
|
||||
if (file.exists()) {
|
||||
file.delete();
|
||||
}
|
||||
}
|
||||
destinationPaths.clear();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user