Compare commits

...

136 Commits

Author SHA1 Message Date
Zhiwei Xue
f62e85356c feat(TUP-29014): bugfix 2021-03-11 (#4116)
* feat(TUP-29014):init custom jar cache before migration tasks

* feat(TUP-29014): bugfix 2021-03-11
2021-03-11 16:24:47 +08:00
Chao MENG
81a6422c0b item(TUP-30180): Studio slowness on merge operation (#4066)
* fix(TUP-29390): Improve the file commit logic in RepositoryWorkUnit (#3901)

fix(TUP-29390): Improve the file commit logic in RepositoryWorkUnit during Pull and Merge
https://jira.talendforge.org/browse/TUP-29390

* fix(TUP-30103): [7.1.1] Studio somtimes hangs for 20 seconds
https://jira.talendforge.org/browse/TUP-30103

* fix(TUP-30103): [7.1.1] Studio somtimes hangs for 20 seconds
https://jira.talendforge.org/browse/TUP-30103

Conflicts:
	main/plugins/org.talend.designer.maven/src/main/java/org/talend/designer/maven/tools/AggregatorPomsHelper.java
2021-03-11 09:51:38 +08:00
Zhiwei Xue
941c36921b feat(TUP-29014):fix junit failure (#4112) 2021-03-10 11:43:05 +08:00
sbliu
e01cecfb68 feat(TUP-30338) Data Collector improvement step 1
* log action activation, log perspective switch.
* reset performance record after install patch, read/write info from/to new performance file location.
* set default DATA_COLLECTOR_UPLOAD_PERIOD to 5.
* don't send data when closing studio.
* When there is no action or dialog popped , check data collector enable, network enable, data send period, if need sent, try to send data.
2021-03-10 10:34:56 +08:00
Zhiwei Xue
9d3fb2213b feat(TUP-29014): Add only compile code projects function for TDM (#4109) 2021-03-09 15:51:25 +08:00
sbliu
aa4ccadbaf fix(TUP-29586) Change repository context variable type would pop up job update dialog. 2021-03-09 14:22:49 +08:00
Zhiwei Xue
1c7f2a311c feat(TUP-29014): Only build and package beans/routines that are used in Route/Job (#4028)
* feat(TUP-29018): Rearrange single routines into jars

* feat(TUP-29019): Generation and Build: Build routine jars in different
maven projects.

* feat(TUP-29019): Build routine jars in different maven projects

* feat(TUP-29019): fix codesjar cache and update job maven project problem

* feat(TUP-29019): fix several issues

* feat(TUP-29943):codejars under recycle bin should be hierarchy (#3979)

* feat(TUP-29943):codejars under recycle bin should be hierarchy
https://jira.talendforge.org/browse/TUP-29943

Signed-off-by: jding-tlnd <jding@talend.com>

* feat(TUP-29943):codejars under recycle bin should be hierarchy
https://jira.talendforge.org/browse/TUP-29943

Signed-off-by: jding-tlnd <jding@talend.com>

* feat(TUP-29014): refactor codesjar resource cache

* feat(TUP-29943):delete codejar forever should also delete child code (#3985)

items, include delete forever from recycle bin and empty recycle bin
Restore code should also restore parent node codeJar
https://jira.talendforge.org/browse/TUP-29943
Signed-off-by: jding-tlnd <jding@talend.com>

* feat(TUP-29943):Fail to import custom Routine jar (#3987)

https://jira.talendforge.org/browse/TUP-29943

Signed-off-by: jding-tlnd <jding@talend.com>

* feat(TUP-29014): fix codesjar dependencies can't set required issue

* feat(TUP-29943):delete forever should also delete codejar folder (#3991)

should not have duplicate nodes in import dialog
https://jira.talendforge.org/browse/TUP-29943

Signed-off-by: jding-tlnd <jding@talend.com>

* feat(TUP-29943):delete forever should also delete codejar folder (#3992)

https://jira.talendforge.org/browse/TUP-29943

Signed-off-by: jding-tlnd <jding@talend.com>

* feat(TUP-29943):import no value present issue and import to change inner (#4000)

code
https://jira.talendforge.org/browse/TUP-29943

Signed-off-by: jding-tlnd <jding@talend.com>

* feat(TUP-29019):fix missing codesjar module in CI without -pl

* feat(TUP-29019): improve update codesjar project logic

* feat(TUP-29014): fix generate pom and sync inner code issues

* feat(TUP-29014): fix opeing ref inner codes issue

* feat(TUP-29014): fix missing codesjars module for regenerate poms issue

* feat(TUP-29943):delete folder issue and build job routinesJar (#4003)

* feat(TUP-29943):delete folder issue and build job routinesJar
relationship
https://jira.talendforge.org/browse/TUP-29943

Signed-off-by: jding-tlnd <jding@talend.com>

* feat(TUP-29943):make impact analysis work for beansjar
https://jira.talendforge.org/browse/TUP-29943

Signed-off-by: jding-tlnd <jding@talend.com>

* feat(TUP-29014):fix several import issue and build code jar problem

* feat(TUP-29014): avoid to fail all install if some code jar projects got
problem

* feat(TUP-29943): rename codejar should update package and folder path (#4012)

for inner code
https://jira.talendforge.org/browse/TUP-29943

Signed-off-by: jding-tlnd <jding@talend.com>

* feat(TUP-29943):export and import to deploy libs issue (#4020)

https://jira.talendforge.org/browse/TUP-29943

Signed-off-by: jding-tlnd <jding@talend.com>

* feat(TUP-29014):fix retrieve jar from nexus and aggregate build code jar
project issues

* feat(TUP-29014):fix several missing class in jar for custom jar issues

* feat(TUP-29014): update ref code projects after resolved dependencies

* Revert "feat(TUP-29014): update ref code projects after resolved dependencies"

This reverts commit e9256e359f.

* feat(TUP-29014): support shot class name for custom jars in component

* feat(TUP-29943):rename issues (#4044)

* feat(TUP-29943):rename issues
https://jira.talendforge.org/browse/TUP-29943

Signed-off-by: jding-tlnd <jding@talend.com>

* feat(TUP-29943)disable duplicate for codejar and innercode
https://jira.talendforge.org/browse/TUP-29943

Signed-off-by: jding-tlnd <jding@talend.com>

* fix(TUP-29014):fix generating code error.

* feat(TUP-29014): improve update codesjar project performance and fix
regression

* feat(TUP-29014):fix rename regressions and improve import performance

* feat(TUP-29943):fix some copy paste issues (#4069)

https://jira.talendforge.org/browse/TUP-29943

Signed-off-by: jding-tlnd <jding@talend.com>

* feat(TUP-29014):fix codesjar modules not share problem

* feat(TUP-29014):fix git collaborative work issues

* feat(TUP-29943):image issue (#4071)

https://jira.talendforge.org/browse/TUP-29943

Signed-off-by: jding-tlnd <jding@talend.com>

* feat(TUP-29014):fix compilation error

* feat(TUP-29014):fix git pull deadlock and ref inner code sync issues

* fix(TESB-32252):Bundle is not compatible with this blueprint extender

* fix(TUP-30597):Fix junit failures caused by dependency management (#4099)

feature

* feat(TUP-29014):fix several git reset issues

* feat(TUP-29014): bugfix 2021-03-05

* feat(TUP-29014): bugfix 2021-03-08

* feat(TUP-29014): bugfix 2021-03-08 2

* feat(TUP-29014):bugfix 2021-03-09

Co-authored-by: Jane Ding <jding@talend.com>
2021-03-09 12:12:58 +08:00
hzhao-talendbj
0b7cba2a9d fix(TUP-29719): upgrade jackson to 2.11.4 (#4077) 2021-03-09 11:59:36 +08:00
nrousseau
f8dd9f0c1a Jzhang/73/tup 30093 (#4084)
* fix(TUP-30093)upgrade the commons-codec plugin

* TUP-30093 change crypto-utils

Co-authored-by: jiezhang-tlnd <jie.zhang@talend.com>
Co-authored-by: hzhao-talendbj <hzhao@talend.com>
2021-03-09 11:53:17 +08:00
bhe-talendbj
9c12a2e19e chore(TUP-27154): Upgrade commons-beanutils (#4017)
* chore(TUP-27154): Upgrade commons-beanutils

* TUP-27154 add include GroupIds to filter beanutils in generated in lib
folder

Co-authored-by: hzhao-talendbj <hzhao@talend.com>
2021-03-08 14:32:11 +08:00
Dmytro Sylaiev
a2132cb833 feat(TDI-45721): Bump TCK version for monthly (#4105) 2021-03-05 14:02:06 +02:00
jiezhang-tlnd
ed4655f2aa chore(TUP-27791 )remove feature (#4039) 2021-03-05 17:11:55 +08:00
jiezhang-tlnd
910e3fb601 TUP-26534 (#3400) (#4016)
* TUP-26534

* TUP-26534  revert for EHiveWithTezJars

* remove unknown version

Co-authored-by: hzhao-talendbj <49395568+hzhao-talendbj@users.noreply.github.com>
Co-authored-by: hzhao-talendbj <hzhao@talend.com>
2021-03-05 14:43:20 +08:00
hzhao-talendbj
bda6b0a1a7 fix(TUP-30269) Snowflake components having schema cannot retrieve column (#4076)
* fix(TUP-30269) Snowflake components having schema cannot retrieve column
name in Japanese

* TUP-30269 fix when uncheck allowspecialchar will generate column0 always

* TUP-30269 add junit
2021-03-04 15:29:25 +08:00
Emmanuel GALLOIS
4ad4d3e5b2 feat(TDI-45704): bump component-runtime to 1.30.0 (#4091) 2021-03-03 10:05:59 +01:00
wang wei
8031d9adb3 fix(TDI-45563): Runtime Lineage: Compile error seen with "RESPONSE_HEADERS"(#4046) 2021-03-03 16:11:02 +08:00
jiezhang-tlnd
74232f3dc3 chore(TUP-27224)Update Daikon Crypto Utils to 1.15.0 (#4034)
* chore(TUP-27224)Update Daikon Crypto Utils to 1.15.0

* chore(TUP-27224)Update Daikon Crypto Utils to 1.15.0

* fix(TUP-27224)Update Daikon Crypto Utils to 1.15.0
2021-03-01 15:04:33 +08:00
bhe-talendbj
b2e5ab5630 chore(TUP-30230): Remove org.talend.libraries.apache.batik (#4014)
* chore(TUP-30230): Remove org.talend.libraries.apache.batik

* chore(TUP-30230): Remove org.talend.libraries.apache.batik
2021-02-26 14:39:18 +08:00
jiezhang-tlnd
f1b9ed2e86 fix(TUP-30273)tDBOutput component compilation error (#4029)
* fix(TUP-30273)tDBOutput component compilation error
https://jira.talendforge.org/browse/TUP-30273

* fix(TUP-30273)tDBOutput component compilation error
2021-02-23 16:33:05 +08:00
wang wei
de48a67805 fix(TDI-45664): meet an build issue when build studio patch for 7.3.1 (#4070) 2021-02-22 16:21:57 +08:00
bhe-talendbj
55723c1a48 fix(TUP-30416): compact project folders if compactProjectFolders is set (#4056)
* fix(TUP-30416): compact project folders if compactProjectFolders is set

* fix(TUP-30416): add project settings

* fix(TUP-30416): fix typo
2021-02-19 17:39:09 +08:00
apoltavtsev
7bb5692418 bugfix(TESB-31529) cleanup Studio artifact sensitive parameters in contexts files during publish to Cloud [2] 2021-02-17 09:35:40 +01:00
Laurent BOURGEOIS
4010656564 TBD(11971):Add method to find Node by unique name (#4047) 2021-02-12 11:22:59 +01:00
Emmanuel GALLOIS
966becc5e5 feat(TDI-45225): bump component-runtime to 1.29.1 (#4035)
* feat(TDI-45225): bump component-runtime to 1.28.2 for bouncycastle CVE
2021-02-12 09:56:22 +01:00
bhe-talendbj
8bd1fd724f fix(TUP-30360): add preference to disable sharing libs from components (#4043)
* fix(TUP-30360): add preference to disable sharing libs from components

* fix(TUP-30360): install libfile
2021-02-09 16:40:37 +08:00
hcyi
92d31aa477 fix(TUP-30067):Dataproc Hive metadata not in sync with Hive component. (#4032) 2021-02-08 15:39:22 +08:00
vdrokov
b4f77effd8 TESB-31044: Data service's endpoint can't be updated if passed as a context variable (#4019) 2021-02-03 09:58:34 +02:00
pyzhou
3086f9be45 feat(TDI-45463):Add Delta Lake SQL Template (#4009)
* feat(TDI-45463):Add Delta Lake SQL Template

* correct sqltemplate

* wrong place of using delta
2021-02-02 17:41:24 +08:00
jiezhang-tlnd
8dc5f853fd fix(TUP-28519):Update org.talend.libraries.apache.google jars (#3631) (#4033)
remove org.talend.libraries.apache.google plugin
https://jira.talendforge.org/browse/TUP-28519

Conflicts:
	main/plugins/org.talend.libraries.apache.google/META-INF/MANIFEST.MF
	main/plugins/org.talend.libraries.apache.google/pom.xml

Co-authored-by: Jane Ding <jding@talend.com>
2021-02-02 16:16:37 +08:00
Laurent BOURGEOIS
dfae595cbe feat(TBD-10921):Add Spark local 3.0.x (#3932) 2021-01-29 18:15:57 +01:00
kjwang
b3271f70e0 Fix TUP-29885 ERROR: Some patches are not compatible with current product (#3970)
* Fix TUP-29885 ERROR: Some patches are not compatible with current
product
https://jira.talendforge.org/browse/TUP-29885
2021-01-29 17:29:36 +08:00
Jane Ding
486650da91 fix(TUP-23738):The couchbase icon is not correct when import (#3971)
https://jira.talendforge.org/browse/TUP-23738

Signed-off-by: jding-tlnd <jding@talend.com>
2021-01-29 10:05:00 +08:00
zyuan-talend
2885482d6f fix(TUP-23477):fix TreeToTable connection line issue on Mac with BigSur. (#4023) 2021-01-29 09:53:28 +08:00
zyuan-talend
e35338ca0a fix(TUP-29835):avoid the password autofill dialog in Big Sur. (#4013) 2021-01-28 16:36:27 +08:00
vdrokov
76452e3799 TESB-31563: Microservice: ClassNotFoundException: org.eclipse.jetty.client.HttpClientTransport (#3945) 2021-01-21 16:55:44 +02:00
bkatiukhov
4b0c75070d TESB-30620 Add constants (#3984)
Co-authored-by: Bohdan Katiukhov <bohdan.katiukhov@synapse.com>
2021-01-20 07:54:32 +01:00
bhe-talendbj
1ac63975c1 feat(TUP-29700): move preference settings to libraries page (#3990) 2021-01-15 10:29:28 +08:00
Dmytro Sylaiev
dffa6d97c9 fix(TDI-45470): Bump TCK version for maintenance/7.3 (#3989)
* fix(TDI-45470): Bump TCK version for maintenance/7.3

* fix(TDI-45470): bump connectors version to 1.17.1

Co-authored-by: Maksym Basiuk <mbasiuk@talend.com>
2021-01-14 18:09:27 +08:00
Emmanuel GALLOIS
eee0169c90 feat(TDI-45225): upgrade component-runtime to 1.1.29 (#3900)
* feat(TDI-45225): bump component-runtime to 1.28.1
2021-01-14 10:23:43 +01:00
zshen-talend
124ec1357d Zshen/feat/tdq 19005 implement calculation view (#3977)
* feat(TDQ-19005): Support SAP Hana calculation views on DQ profiling in
Studio
2021-01-11 16:29:50 +08:00
wang wei
3e2f12848c Revert "fix(TDI-45465): upgrade tcompv0 for studio 7.3 patch and master (#3981)" (#3983)
This reverts commit 5780ce2693.
2021-01-08 15:37:00 +08:00
bhe-talendbj
22e607210d fix(TUP-30069): Fix repository tree (#3980) 2021-01-08 14:27:40 +08:00
wang wei
5780ce2693 fix(TDI-45465): upgrade tcompv0 for studio 7.3 patch and master (#3981) 2021-01-08 11:16:14 +08:00
apoltavtsev
04c0e2f42c Update ProcessUtils.java (#3894) 2021-01-07 15:16:49 +01:00
hzhao-talendbj
3b6ffd8f49 remove axis (#3930) (#3951) 2021-01-05 18:21:50 +08:00
jiezhang-tlnd
61d8e73084 feat(TUP-29845)Remove useless "Remove" button on module view (#3965)
https://jira.talendforge.org/browse/TUP-29845
2021-01-05 14:21:45 +08:00
Chao MENG
fffdd9a78e fix(TUP-29595): Slow start of studio when install all additional (#3962)
fix(TUP-29595): Slow start of studio when install all additional packages
https://jira.talendforge.org/browse/TUP-29595
2021-01-05 10:21:55 +08:00
bhe-talendbj
9186869001 feat(TUP-29700): Don't share libraries during logon studio (#3937)
* feat(TUP-29700): initial implement

* feat(TUP-29700): add synch check

* feat(TUP-29700): Share CI jars at startup always

* feat(TUP-29700): Add share gif

* feat(TUP-29700): Improve UI

* feat(TUP-29700): Replace gif by png

* feat(TUP-29700): hide icon if no artifact repository or can not be connected
2021-01-05 10:00:13 +08:00
vdrokov
c3f8ae1d53 TESB-31277 (#3896)
[7.3.1] After publish to cloud, job with context password fails with NullPointer exception
2020-12-30 17:13:14 +02:00
zyuan-talend
294e8a23f5 fix(TUP-29350): fixed the tMap display issues with Big Sur (#3911) 2020-12-30 16:01:10 +08:00
hzhao-talendbj
637a2423a0 fix routine dependency issue (#3946)
* fix routine dependency issue

* code change

* code change

* code change

* fix junit

* fix junit
2020-12-29 15:42:44 +08:00
hzhao-talendbj
6ad0a9ac92 chore(TUP-29559): upgrade h2 (#3920) (#3941)
* chore(TUP-29559): upgrade h2

* change database version 4 drivers
2020-12-28 17:59:02 +08:00
zshen-talend
161e5d97a7 feat(TDQ-18757): Support SAP Hana on DQ profiling in Studio (#3899) 2020-12-25 17:21:42 +08:00
kjwang
e6a9513d45 TUP-29426 Shared Studio: We should not display button "Installation of BPM is required..." on toolbar and task status area. (#3919)
* TUP-29426 Shared Studio: We should not display button "Installation of
BPM is required..." on toolbar and task status area.
https://jira.talendforge.org/browse/TUP-29426
2020-12-23 15:46:18 +08:00
Jane Ding
74174c14c6 fix(TUP-29548):[7.3.1][R2020-10] dependency jar file renamed during (#3917)
maven build
https://jira.talendforge.org/browse/TUP-29548

Signed-off-by: jding-tlnd <jding@talend.com>
2020-12-21 09:20:56 +08:00
Liu Xinquan
2ec51860a5 fix(TDQ-18952) don't save talend.project when moving item (#3922) 2020-12-18 10:10:41 +08:00
mbasiuk-talend
bc3e338910 fix(TDI-45260): update library version (#3908)
* fix(TDI-45260): update library version

* fix(TDI-45260): one missing place
2020-12-16 17:55:02 +02:00
Laurent BOURGEOIS
a823899d39 fix(TUP-29694):Studio fails to download jar with classifier in mvn uri (#3913) 2020-12-15 16:53:03 +08:00
Dietmar Wolz
436af2427e TPSVC-15823 (#3890) 2020-12-14 16:14:08 +08:00
zshen-talend
d7252412ed fix(TDQ-18817): support context in Confidence Weight on 7.3 and 7.4 (#3906) 2020-12-10 17:25:46 +08:00
ypiel
af38e2a0b6 chore(TDI-45347) : bump connectors 1.16.0 2020-12-10 09:02:37 +01:00
Mike Yan
c3d3fcf665 fix(TESB-30556): Exclude SOAP service provider in root pom (#3781)
* fix(TESB-30556): Exclude SOAP service provider in root pom

* fix(TESB-30556):[CI] SOAP service operation job is duplicated in the
reactor
2020-12-10 11:52:13 +08:00
apoltavtsev
987c6667ac TESB-31234 context variables corresponding to TMC connections are not cleaned up in Studio during publish to Cloud (#3883) 2020-12-09 14:09:10 +01:00
Jane Ding
f0401b97d1 fix(TUP-29344):Local context variables of new context envs inherited (#3880)
* fix(TUP-29344):Local context variables of new context envs inherited
from Metadata Connection are read-only
https://jira.talendforge.org/browse/TUP-29344

Signed-off-by: jding-tlnd <jding@talend.com>

* fix(TUP-29344):Local context variables of new context envs inherited
from Metadata Connection are read-only
https://jira.talendforge.org/browse/TUP-29344

Signed-off-by: jding-tlnd <jding@talend.com>
2020-12-02 14:46:01 +08:00
Jane Ding
26992f7cf9 fix(TUP-29368):[SingleStore]Mapping file missing for metadata when (#3853)
install new monthly 11 patch
https://jira.talendforge.org/browse/TUP-29368

Signed-off-by: jding-tlnd <jding@talend.com>
2020-12-02 14:43:42 +08:00
kjwang
169ab1c4cc TUP-29231 Shared Studio: Check Exchange related functions after Exchange websevice issue resolved
TUP-29231 Shared Studio: Check Exchange related functions after Exchange websevice issue resolved
https://jira.talendforge.org/browse/TUP-29231
2020-12-01 18:20:47 +08:00
vdrokov
f04049abc0 TESB-31128: Talend 731 Regeression : VIEW with quotes give compilatio… (#3876)
* TESB-31128: Talend 731 Regeression : VIEW with quotes give compilation error for Camel components

* TESB-31128: Talend 731 Regeression : VIEW with quotes give compilation error for Camel components
2020-11-27 11:20:13 +02:00
kjwang
7e6f2dee19 Kjwang/feat tup 28891 temp folder (#3799)
* TUP-28891:Shared Studio: Check which functions will write data into
folder "temp" of Studio installation folder from code
https://jira.talendforge.org/browse/TUP-28891
2020-11-27 14:47:11 +08:00
apoltavtsev
2dd7ce6fac TESB-31177 Compile error if configure 'Use Custom GroupId' for parent job (#3874) 2020-11-25 09:53:08 +08:00
bhe-talendbj
be373dd141 fix(TUP-29157): Recreate project if project can not be opened correctly (#3806) 2020-11-25 09:51:49 +08:00
bhe-talendbj
43876863e6 fix(TUP-29165): Add cache for all of current project nodes (#3827)
* fix(TUP-29165): Add cache for all of current project nodes

* fix(TUP-29165): Add cache for loaded nodes

* fix(TUP-29165): Not cache emfproject

* fix(TUP-29165): add projectlabel to key

* fix(TUP-29165): add object as key
2020-11-25 09:41:08 +08:00
Chao MENG
4ac2a830a9 fix(TUP-28314): Talend Studio - Git Pull and Merge not showing branches (#3836)
https://jira.talendforge.org/browse/TUP-28314
2020-11-24 09:45:25 +08:00
hzhao-talendbj
3d6d3e77e3 fix(TUP-29149): add override method to remove db name (#3838)
* add override method to remove db name

* fix junit failed
2020-11-23 12:04:00 +08:00
Zhiwei Xue
71b4ccc531 fix(TUP-29360): Missing log4j2 jar on user routines (#3858)
* fix(TUP-29360): Missing log4j2 jar on user routines

* fix(TUP-29360): fix switch log4j level problem
2020-11-20 17:12:52 +08:00
Chao MENG
48289a3c72 chore(TUP-28935): fix null project in RepositoryContext (#3865)
* chore: fix null project in RepositoryContext

* chore: fix null project in RepositoryContext
2020-11-20 12:56:05 +08:00
cbadillo1603
9a219873f1 fix(TBD-11038): The distribution AMAZON_EMR with the version APACHE_2_4_0_EMR doesn't exist (#3694)
* fix(TBD-11038): The distribution AMAZON_EMR with the version APACHE_2_4_0_EMR doesn't exist

* fix(TBD-11038): The distribution AMAZON_EMR with the version APACHE_2_4_0_EMR doesn't exist

* fix(TBD-11038): The distribution AMAZON_EMR with the version APACHE_2_4_0_EMR doesn't exist
2020-11-19 08:59:05 +01:00
bhe-talendbj
d013d08bdc fix(TUP-29227): Set prompt value if it is null (#3811) 2020-11-19 10:44:21 +08:00
apoltavtsev
761dcc7902 fix(TESB-29553, TESB-31088) Could not generate ctalenjob microservice jar 2020-11-18 13:27:36 +01:00
zyuan-talend
0a85c8056c TUP-28024: add automatic Nexus3 testing (#3843) 2020-11-17 10:03:29 +08:00
kjwang
3df4cf1348 Fix TUP-29290 "Detect and Update all jobs " is not identifying the changes in imported projects. (#3833)
* Fix TUP-29290 "Detect and Update all jobs " is not identifying the
changes in imported projects.
https://jira.talendforge.org/browse/TUP-29290
2020-11-16 17:33:58 +08:00
apoltavtsev
c7965cf552 fix(TESB-29553) Publishing a route with cTalendJob from Studio and commandline gives different results 2020-11-12 11:06:44 +01:00
Chao MENG
61b55c0d2a fix(TUP-29285): Improve reloading logic of Custom Uri Mapping (#3830)
https://jira.talendforge.org/browse/TUP-29285
2020-11-12 17:09:53 +08:00
bhe-talendbj
be41bcbef3 feat(TESB-28330): remove workaround for cConfig (#3754)
* feat(TESB-28330): remove workaround for cConfig

* TESB-28330:cConfig/Beans - Support customer groupid and artifact name
(additional to custom version)

* TESB-28330:cConfig/Beans - Support customer groupid and artifact name
(additional to custom version)

Co-authored-by: SunChaoqun <csun@talend.com>
2020-11-12 16:31:56 +08:00
Zhiwei Xue
2827919dae fix(TUP-29265):"<routine_name> cannot be resolved" error after (#3825)
installing latest R2020-10 patch
2020-11-12 09:55:16 +08:00
jiezhang-tlnd
33848db788 Jzhang/bufix/73/tup 28893 support more typesfor share libs1 (#3816)
* fix(TUP-28893)Support more types of artifact for share libs
https://jira.talendforge.org/browse/TUP-28893

* ignore snapshot

* Maintenance/7.3 (#3774)

* fix(TUP-28983):Can't switch to another version on Impala connection (#3741) (#3758)

* fix(TUP-28846): Export Type Dropdown is empty when publishing Big Data (#3703)

Batch jobs job into Artifact Repository for Talend Studio 7.2 and 7.3

* bugfix(TESB-30661) Wrong artifact version of the job called by a route

* bugfix(TESB-30661) Wrong artifact version of the job called by a route

* Revert bugfix(TESB-30661) Wrong artifact version of the job called by a route

* Revert bugfix(TESB-30661) Wrong artifact version of the job called by a route

Co-authored-by: hcyi <hcyi@talend.com>
Co-authored-by: Zhiwei Xue <zwxue@talend.com>
Co-authored-by: apoltavtsev <apoltavtsev@gmail.com>

* Maintenance/7.3 (#3775)

* fix(TUP-28983):Can't switch to another version on Impala connection (#3741) (#3758)

* fix(TUP-28846): Export Type Dropdown is empty when publishing Big Data (#3703)

Batch jobs job into Artifact Repository for Talend Studio 7.2 and 7.3

* bugfix(TESB-30661) Wrong artifact version of the job called by a route

* bugfix(TESB-30661) Wrong artifact version of the job called by a route

* Revert bugfix(TESB-30661) Wrong artifact version of the job called by a route

* Revert bugfix(TESB-30661) Wrong artifact version of the job called by a route

Co-authored-by: hcyi <hcyi@talend.com>
Co-authored-by: Zhiwei Xue <zwxue@talend.com>
Co-authored-by: apoltavtsev <apoltavtsev@gmail.com>

* Maintenance/7.3 (#3776)

* fix(TUP-28983):Can't switch to another version on Impala connection (#3741) (#3758)

* fix(TUP-28846): Export Type Dropdown is empty when publishing Big Data (#3703)

Batch jobs job into Artifact Repository for Talend Studio 7.2 and 7.3

* bugfix(TESB-30661) Wrong artifact version of the job called by a route

* bugfix(TESB-30661) Wrong artifact version of the job called by a route

* Revert bugfix(TESB-30661) Wrong artifact version of the job called by a route

* Revert bugfix(TESB-30661) Wrong artifact version of the job called by a route

Co-authored-by: hcyi <hcyi@talend.com>
Co-authored-by: Zhiwei Xue <zwxue@talend.com>
Co-authored-by: apoltavtsev <apoltavtsev@gmail.com>

* bugfix(TESB-30661) Wrong artifact version of the job called by a route

* bugfix(TESB-30661) Wrong artifact version of the job called by a route

* Revert bugfix(TESB-30661) Wrong artifact version of the job called by a route

* Revert bugfix(TESB-30661) Wrong artifact version of the job called by a route

* modify for nexus2

* support classifier for artifact repository

* add getClassifier and junits

* remove snapshot judgment

* fix(TUP-28893)Support more types of artifact for share libs

* fix(TUP-28893)Support more types of artifact for share libs

* fix(TUP-28893)Support more types of artifact for share libs

* fix pom deploy fail on artifactory

* revert the fix of redeploy pom file

* revert the fix of redeploy pom file

Co-authored-by: hcyi <hcyi@talend.com>
Co-authored-by: Zhiwei Xue <zwxue@talend.com>
Co-authored-by: apoltavtsev <apoltavtsev@gmail.com>
2020-11-11 13:00:41 +08:00
apoltavtsev
ac359e295a fix(TESB-30691) Incorrect Route version in Runtime after sequential publish from Studio 2020-11-10 16:45:36 +01:00
apoltavtsev
6965eb79fa bugfix(TESB-30661) Wrong artifact version of the job called by a route 2020-11-10 15:59:21 +01:00
apoltavtsev
80f02ef1e7 feat(TESB-29949) Pass the data source to a job using a context variable 2020-11-10 15:58:06 +01:00
hzhao-talendbj
7c50efdf21 bugfix(TUP-26868):xmlMapping file are not correctly add to class path in (#3229) (#3810)
bugfix(TUP-26868):xmlMapping file are not correctly add to class path in debug mode

Co-authored-by: hwang-talend <hwang@talend.com>
2020-11-10 15:38:16 +08:00
chmyga
7f40393753 chore(TDI-45157): bump TCK components version (#3821)
Co-authored-by: Dmytro Chmyga <dmytro.chmyga@synapse.com>
2020-11-10 08:44:41 +02:00
Jane Ding
356dba9940 Fix junit failure (#3820)
Signed-off-by: jding-tlnd <jding@talend.com>
2020-11-09 19:24:48 +08:00
Chao MENG
83f7a577d9 feat(TUP-28790): Enhance detection of localhost (#3729)
* feat(TUP-28790): Enhance detection of localhost

https://jira.talendforge.org/browse/TUP-28790

* feat(TUP-28790): Enhance detection of localhost

https://jira.talendforge.org/browse/TUP-28790

* feat(TUP-28790): Enhance detection of localhost

https://jira.talendforge.org/browse/TUP-28790

* feat(TUP-28790): Enhance detection of localhost

https://jira.talendforge.org/browse/TUP-28790

* feat(TUP-28790): Enhance detection of localhost

https://jira.talendforge.org/browse/TUP-28790
2020-11-09 17:32:13 +08:00
Chao MENG
e87f557a49 feat(TUP-29126): Github Renaming the default branch from master (#3793)
* feat(TUP-29126): Github Renaming the default branch from master
https://jira.talendforge.org/browse/TUP-29126

* feat(TUP-29126): Github Renaming the default branch from master
https://jira.talendforge.org/browse/TUP-29126
2020-11-09 10:10:52 +08:00
Zhiwei Xue
a51b3316d3 fix(TUP-28852):Keytab fields missing for impala metadata (#3743) 2020-11-07 15:44:29 +08:00
bkatiukhov
46a22c4ad0 TESB-30649 Fix NPE for bean relation (#3805)
Co-authored-by: bohdan.katiukhov <bohdan.katiukhov@KBP1-LHP-A00322.synapse.com>
2020-11-06 16:52:05 +02:00
sbliu
f8cc600d06 TUP-28904 CI/CD build for DI jobs that contain 2 different versions of httpcore and httpclient are inconsistent with Studio build。
Add dependency jars from parent job, child job to ci job dependencies, the dependency jars is the latest version in parent and the latest version in child job, others is optional.
2020-11-06 17:22:16 +08:00
bhe-talendbj
3146ed307f fix(TUP-29208): add warning message for checking remote artifactory (#3803)
* fix(TUP-29208): add warning message for checking remote artifactory

* fix(TUP-29208): share module based on gavtc and sha1

* fix(TUP-29208): resolve comments
2020-11-06 15:40:57 +08:00
kjwang
f4f91a5323 TUP-28833 Multi-User: support custom javajet component in shared studio
TUP-28833 Multi-User: support custom javajet component in shared studio
https://jira.talendforge.org/browse/TUP-28833
2020-11-06 15:02:50 +08:00
Jane Ding
2aee38595f feat(TUP-29076):support memsql in studio metadata and components (#3779)
https://jira.talendforge.org/browse/TUP-29076

Signed-off-by: jding-tlnd <jding@talend.com>
2020-11-06 10:52:43 +08:00
wang wei
dde32c8b49 fix(TDI-44910): add memsql mapping (#3757)
* fix(TDI-44910): add memsql mapping

* rename it
2020-11-06 10:51:56 +08:00
jiezhang-tlnd
563b69231f Jzhang/bufix/73/tup 28893 support more typesfor share libs1 (#3777)
* fix(TUP-28893)Support more types of artifact for share libs
https://jira.talendforge.org/browse/TUP-28893

* ignore snapshot

* Maintenance/7.3 (#3774)

* fix(TUP-28983):Can't switch to another version on Impala connection (#3741) (#3758)

* fix(TUP-28846): Export Type Dropdown is empty when publishing Big Data (#3703)

Batch jobs job into Artifact Repository for Talend Studio 7.2 and 7.3

* bugfix(TESB-30661) Wrong artifact version of the job called by a route

* bugfix(TESB-30661) Wrong artifact version of the job called by a route

* Revert bugfix(TESB-30661) Wrong artifact version of the job called by a route

* Revert bugfix(TESB-30661) Wrong artifact version of the job called by a route

Co-authored-by: hcyi <hcyi@talend.com>
Co-authored-by: Zhiwei Xue <zwxue@talend.com>
Co-authored-by: apoltavtsev <apoltavtsev@gmail.com>

* Maintenance/7.3 (#3775)

* fix(TUP-28983):Can't switch to another version on Impala connection (#3741) (#3758)

* fix(TUP-28846): Export Type Dropdown is empty when publishing Big Data (#3703)

Batch jobs job into Artifact Repository for Talend Studio 7.2 and 7.3

* bugfix(TESB-30661) Wrong artifact version of the job called by a route

* bugfix(TESB-30661) Wrong artifact version of the job called by a route

* Revert bugfix(TESB-30661) Wrong artifact version of the job called by a route

* Revert bugfix(TESB-30661) Wrong artifact version of the job called by a route

Co-authored-by: hcyi <hcyi@talend.com>
Co-authored-by: Zhiwei Xue <zwxue@talend.com>
Co-authored-by: apoltavtsev <apoltavtsev@gmail.com>

* Maintenance/7.3 (#3776)

* fix(TUP-28983):Can't switch to another version on Impala connection (#3741) (#3758)

* fix(TUP-28846): Export Type Dropdown is empty when publishing Big Data (#3703)

Batch jobs job into Artifact Repository for Talend Studio 7.2 and 7.3

* bugfix(TESB-30661) Wrong artifact version of the job called by a route

* bugfix(TESB-30661) Wrong artifact version of the job called by a route

* Revert bugfix(TESB-30661) Wrong artifact version of the job called by a route

* Revert bugfix(TESB-30661) Wrong artifact version of the job called by a route

Co-authored-by: hcyi <hcyi@talend.com>
Co-authored-by: Zhiwei Xue <zwxue@talend.com>
Co-authored-by: apoltavtsev <apoltavtsev@gmail.com>

* bugfix(TESB-30661) Wrong artifact version of the job called by a route

* bugfix(TESB-30661) Wrong artifact version of the job called by a route

* Revert bugfix(TESB-30661) Wrong artifact version of the job called by a route

* Revert bugfix(TESB-30661) Wrong artifact version of the job called by a route

* modify for nexus2

* support classifier for artifact repository

* add getClassifier and junits

* remove snapshot judgment

Co-authored-by: hcyi <hcyi@talend.com>
Co-authored-by: Zhiwei Xue <zwxue@talend.com>
Co-authored-by: apoltavtsev <apoltavtsev@gmail.com>
2020-11-05 14:19:31 +08:00
bhe-talendbj
1ea6227f59 bugfix(TUP-26278): Validate table name before persisting (#3108) (#3789)
* fix(TUP-26278): Validate table name before persisting

* fix(TUP-26278): Remove validating table name
2020-11-03 17:28:20 +08:00
kjwang
148e9e9253 Fix a NPE issue (#3795)
Fix TUP-28050 Multi-User: Avoid possible actions that are not supported on shared studio (Fix a NPE issue)
https://jira.talendforge.org/browse/TUP-28050
2020-11-03 15:25:25 +08:00
kjwang
1e6a43650f Kjwang/fix tup 28050 avoid possible actions (#3683)
* TUP-28274 Shared Studio: Can't find EMR 5.29 option in Hadoop Cluster
wizard after enable shared studio mode
https://jira.talendforge.org/browse/TUP-28274
2020-11-03 11:21:43 +08:00
jiezhang-tlnd
67616537b2 fix(TUP-28839)NPE when retrieve schema for JDBC connection of postgresql (#3700) (#3745)
https://jira.talendforge.org/browse/TUP-28839
2020-11-03 09:08:31 +08:00
bhe-talendbj
1df4e819e0 fix(TUP-29170): Fix jarpath change (#3786) 2020-11-02 17:30:12 +08:00
sbliu
b3d6c45f2d TUP-29059 Add logon project name to performance log. 2020-11-02 16:49:09 +08:00
wang wei
f1341cd69f fix(TDI-45038): add "timestamp" info for component start event for studio audit log(#3742) 2020-11-02 09:36:06 +08:00
bhe-talendbj
a64bcecb0c bugfix(TUP-28978): Add migration and make module name consistent (#3753)
* fix(TUP-28978): search local support other type and strip snapshot version

* fix(TUP-28978): Fix strip timestamp

* fix(TUP-2897): search remote dll, strip timestamp

* fix(TUP-28978): search local filtering timestamp

* fix(TUP-28978): Revert unnecessary changed files
2020-10-29 15:55:58 +08:00
apoltavtsev
5707d4db94 Revert bugfix(TESB-30661) Wrong artifact version of the job called by a route 2020-10-27 14:00:05 +01:00
apoltavtsev
5e20a78752 Revert bugfix(TESB-30661) Wrong artifact version of the job called by a route 2020-10-27 13:59:10 +01:00
apoltavtsev
85e44cd5c6 bugfix(TESB-30661) Wrong artifact version of the job called by a route 2020-10-27 13:53:20 +01:00
apoltavtsev
8582c20f1a bugfix(TESB-30661) Wrong artifact version of the job called by a route 2020-10-27 13:52:46 +01:00
Zhiwei Xue
6216fd76ea fix(TUP-28846): Export Type Dropdown is empty when publishing Big Data (#3703)
Batch jobs job into Artifact Repository for Talend Studio 7.2 and 7.3
2020-10-27 18:18:36 +08:00
hcyi
71d339fc0a fix(TUP-28983):Can't switch to another version on Impala connection (#3741) (#3758) 2020-10-27 15:54:23 +08:00
Jane Ding
d286276e6d fix(TUP-28952):TOS: NPE when delete items to recycle bin (#3737)
https://jira.talendforge.org/browse/TUP-28952

Signed-off-by: jding-tlnd <jding@talend.com>
2020-10-20 10:15:38 +08:00
bhe-talendbj
3996d24893 feat(TUP-25246): Automatically detect custom maven URI for external jars (#3636)
* feat(TUP-25246): Automatically detect custom maven URI for external dependencies

* feat(TUP-25246): add Jar detector

* feat(TUP-25246): fix NPE

* feat(TUP-25246): fix NPE

* feat(TUP-25246): refactor

* feat(TUP-25246): fix error selections

* feat(TUP-25246): set default value for custom uri

* feat(TUP-25246): call LibManagerUiPlugin.getDefault().getLibrariesService() to deploy jar

* feat(TUP-25246): fix customuri for tLibraryload

* feat(TUP-25246): autofill custom uri if detected

* feat(TUP-25246): autofill default uri if detected

* feat(TUP-25246): Update metadata driver jar

* feat(TUP-25246): hide remote search if no remote repositoris

* feat(TUP-28342):Save maven url for components with parameter MODULE_LIST

* feat(TUP-25246): Fix dialog and moduleNeed

* feat(TUP-25246): set error message if module was already installed

* feat(TUP-25246): remove error message if module is already installed

* feat(TUP-25246): Fix metadata driver path

* feat(TUP-25246): add check for copy

* feat(TUP-25246): Fix cConfig and UI

* feat(TUP-25246): TUP-28910

* feat(TUP-25246): fix retrieve jar

* feat(TUP-25246): add migration

* feat(TUP-25246): fix diaglog behavior

* feat(TUP-25246): Fix jar path inside context

* feat(TUP-25246): remove quotes for jar

* feat(): Fix config dialog and revert TalendLibsServerManager

* feat(TUP-25246): fix configdialog

* feat(TUP-25246): remove nl plugin

* feat(TUP-25246): fix resolve local jar

* feat(TUP-25246): fix resolve local jar

Co-authored-by: Zhiwei Xue <zwxue@talend.com>
2020-10-16 16:22:56 +08:00
sbliu
f37b5b6073 TUP-28944 Issue with performance tracking with french locale (#3723)
* TUP-28944 fix the number format problem introduced by different locale.

* TUP-28944 make format method suitable to test.

* TUP-28944 add unit test for format a number.

* TUP-28944 fix the unit test.
2020-10-16 10:42:14 +08:00
jiezhang-tlnd
060a9c7f9e feat(TUP-28758)Add a warning when we login to a project and if there is (#3675)
* feat(TUP-28758)Add a warning when we login to a project and if there is
migration to do

* feat(TUP-28758)Add a warning when we login to a project and if there is
migration to do

* update warning info

* format code

* Add a warning when we login to a project and if there is migration to do

* collect warnings in one dialog

* remove nexus warning dialog

* update login info

* adjust warning content

* adjust warning content

* adjust warning content

* remove useless cases

* add junits

* update method and junits

* modify the text

* get right monthly patch name

* modify project patch version name

* remove Talend word in warning message
2020-10-15 15:18:29 +08:00
hzhao-talendbj
789b4c02c0 backport 27849 to 73 (#3707) 2020-10-14 16:52:29 +08:00
Chao MENG
4c3e3dfb2c fix(TUP-28903): NPE exception when clicking on context (#3711)
https://jira.talendforge.org/browse/TUP-28903
2020-10-14 11:40:24 +08:00
bhe-talendbj
7b3a20a3b3 fix(TUP-28659): Remove snapshot version of jars (#3664) 2020-10-14 09:44:21 +08:00
Jane Ding
e3880f3904 feat(TUP-28640):Improve JDBC database support framework to load (#3686)
* feat(TUP-28640):Improve JDBC database support framework to load
supported DBs and components automatically
https://jira.talendforge.org/browse/TUP-28640

* feat(TUP-28640):Improve JDBC database support framework to load
supported DBs and components automatically
https://jira.talendforge.org/browse/TUP-28640
2020-10-13 16:22:28 +08:00
Jane Ding
d54ed2a62c fix(TUP-28618):[Bug] db type dont show Delta in impact page. (#3676)
https://jira.talendforge.org/browse/TUP-28618
2020-10-13 16:20:23 +08:00
Mike Yan
cde1129ce4 Yyan/feat/tesb 29271 route debug 731 (#3709)
* feat(TESB-29271): Add camel breakpoint category

* fix(TESB-30624)[Debugging for Routes] NameAlreadyBoundException when
debug the ctalendjob
2020-10-13 15:15:33 +08:00
kjwang
1081ae3680 Kjwang/feat tup 27762 new version of ci (#3656)
* TUP-28274 Shared Studio: Can't find EMR 5.29 option in Hadoop Cluster
wizard after enable shared studio mode
https://jira.talendforge.org/browse/TUP-28274
2020-10-13 10:41:54 +08:00
chmyga
3e02adb157 fix(TDI-44962): fix stream closed exception (#3692)
* Recreate FileWriter with append after writing header

* Add csv writer to shared writer map

Co-authored-by: Dmytro Chmyga <dmytro.chmyga@synapse.com>
2020-10-12 11:24:55 +03:00
hzhao-talendbj
c212142789 change to filter CI case (#3697) 2020-10-12 12:46:38 +08:00
wang wei
ab67a4cc91 fix(TDI-44937): TalendDate.formatDateLocale()gives random value for FR country code in java 11.(#3679) 2020-10-12 10:20:41 +08:00
Chao MENG
675da3fc7d fix(TUP-27076): Unable to connect to codecommit GIT after the first (#3673)
login.
https://jira.talendforge.org/browse/TUP-27076
2020-10-10 10:40:59 +08:00
hzhao-talendbj
6f9ad53b0d remove exception log (#3688) 2020-10-09 11:10:19 +08:00
Mike Yan
6cfffe1775 feat(TESB-29271): Add camel breakpoint category (#3680) 2020-10-07 21:50:29 +08:00
chmyga
3c2d416677 Revert "fix(TDI-44826): Missing line in Resume log (#3640)" (#3691)
This reverts commit cf52e1e004.

Co-authored-by: Dmytro Chmyga <dmytro.chmyga@synapse.com>
2020-10-05 14:17:44 +03:00
vyu-talend
f7f5627679 fix(TDI-44726):add some necessary annotation. (#3666) 2020-09-27 15:14:19 +08:00
kjwang
939c328d1b Fix TUP-28603 'Export item' missing signature (#3643)
* Fix TUP-28603 'Export item' missing signature
https://jira.talendforge.org/browse/TUP-28603
2020-09-27 10:36:44 +08:00
Jane Ding
cb31b968bf feat(TUP-27654):Databricks Delta Lake - Support ELT & MERGE (#3670)
https://jira.talendforge.org/browse/TUP-27654
2020-09-23 14:20:02 +08:00
394 changed files with 11706 additions and 2419 deletions

View File

@@ -6,14 +6,12 @@
<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"/>
<plugin id="org.talend.libraries.jdbc.ingres" download-size="0" install-size="0" version="0.0.0"/>
<plugin id="org.talend.libraries.jdbc.mysql" download-size="0" install-size="0" version="0.0.0"/>
<plugin id="org.talend.libraries.jdbc.paraccel" download-size="0" install-size="0" version="0.0.0"/>
<plugin id="org.talend.libraries.jdbc.postgresql" download-size="0" install-size="0" version="0.0.0"/>
<plugin id="org.talend.libraries.jdbc.sqlite3" download-size="0" install-size="0" version="0.0.0"/>
<plugin id="org.talend.libraries.jdbc.teradata" download-size="0" install-size="0" version="0.0.0"/>
</feature>

View File

@@ -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"/>

Binary file not shown.

After

Width:  |  Height:  |  Size: 768 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

View File

@@ -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$
@@ -166,6 +167,7 @@ public enum ECoreImage implements IImage {
RECYCLE_BIN_OVERLAY("/icons1/recycle_bin_overlay.gif"), //$NON-NLS-1$
DELETED_OVERLAY("/icons1/deleted_overlay.gif"), //$NON-NLS-1$
IMPORT_JAR("/icons1/importjar.gif"), //$NON-NLS-1$
SHARE_LIBS("/icons1/share.png"), //$NON-NLS-1$
REFERENCED_ICON("/icons1/referenced.png"), //$NON-NLS-1$
CDC_ADDED_OVERLAY("/icons1/cdc_added_overlay.png"), //$NON-NLS-1$

View File

@@ -16,6 +16,8 @@ import org.eclipse.core.internal.runtime.InternalPlatform;
import org.eclipse.core.runtime.Platform;
import org.osgi.framework.BundleContext;
/**
*
* DOC root class global comment. Detailled comment <br/>
@@ -52,5 +54,9 @@ public class WindowSystem {
public static boolean isOSX() {
return Platform.WS_CARBON.equals(ws) || Platform.WS_COCOA.equals(ws);
}
public static boolean isBigSurOrLater () {
return isOSX() && ("10.16".compareTo(System.getProperty("os.version","0")) <= 0);
}
}

View File

@@ -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>

View File

@@ -232,10 +232,50 @@ public class VersionUtils {
* Check if studio version < other studio version record in remote project.
*/
public static boolean isInvalidProductVersion(String remoteFullProductVersion) {
String localProductVersion = getInternalVersion();
return isInvalidProductVersion(localProductVersion, remoteFullProductVersion);
}
protected static boolean isInvalidProductVersion(String localProductVersion, String remoteFullProductVersion) {
if (remoteFullProductVersion == null) {
return false;
}
return getInternalVersion().compareTo(getProductVersionWithoutBranding(remoteFullProductVersion)) < 0;
if (skipCheckingNightlyBuilds(localProductVersion, remoteFullProductVersion)) {
return false;
}
return localProductVersion.compareTo(getProductVersionWithoutBranding(remoteFullProductVersion)) < 0;
}
public static boolean productVersionIsNewer(String remoteFullProductVersion) {
String localProductVersion = getInternalVersion();
return productVersionIsNewer(localProductVersion, remoteFullProductVersion);
}
protected static boolean productVersionIsNewer(String localProductVersion, String remoteFullProductVersion) {
if (remoteFullProductVersion == null) {
return false;
}
if (skipCheckingNightlyBuilds(localProductVersion, remoteFullProductVersion)) {
return false;
}
return localProductVersion.compareTo(getProductVersionWithoutBranding(remoteFullProductVersion)) > 0;
}
private static boolean skipCheckingNightlyBuilds(String localProductVersion, String remoteFullProductVersion) {
String separator = "-"; //$NON-NLS-1$
String localSuffix = StringUtils.substringAfterLast(localProductVersion, separator);
String remoteProductVersion = getProductVersionWithoutBranding(remoteFullProductVersion);
String remoteSuffix = StringUtils.substringAfterLast(remoteProductVersion, separator);
String nightly = "SNAPSHOT"; //$NON-NLS-1$
String milestone = "M"; //$NON-NLS-1$
if ((localSuffix.equals(nightly) || localSuffix.startsWith(milestone))
&& (remoteSuffix.equals(nightly) || remoteSuffix.startsWith(milestone))) {
// skip checking between nightly/milestone build.
return true;
}
return false;
}
public static String getTalendVersion(String productVersion) {
@@ -310,4 +350,24 @@ public class VersionUtils {
}
}
public static String getSimplifiedPatchName(String projectPatchName) {
if (projectPatchName != null) {
String result = null;
if (projectPatchName.contains("_") && projectPatchName.split("_").length >= 3) {
result = projectPatchName.split("_")[2];
if (!result.startsWith("R")) {
return null;
}
}
if (projectPatchName.contains("-")) {
String[] split = projectPatchName.split("-");
if (split != null && split.length > 0) {
return result + "-" + split[split.length - 1];
}
}
}
return null;
}
}

View File

@@ -148,7 +148,7 @@ public class SAPHanaDataBaseMetadata extends FakeDatabaseMetaData {
}
// For Calculation View
if (ArrayUtils.contains(neededTypes, NEEDED_TYPES[3])) {
if (ArrayUtils.contains(neededTypes, NEEDED_TYPES[3]) && "_SYS_BIC".equalsIgnoreCase(schemaPattern)) { //$NON-NLS-1$
// check if the type is contained is in the types needed.
String sqlcv = "SELECT OBJECT_NAME,PACKAGE_ID FROM _SYS_REPO.ACTIVE_OBJECT WHERE OBJECT_SUFFIX = 'calculationview'"; //$NON-NLS-1$
if (tableNamePattern != null && !tableNamePattern.equals("%")) { //$NON-NLS-1$
@@ -171,7 +171,7 @@ public class SAPHanaDataBaseMetadata extends FakeDatabaseMetaData {
packageId = packageId.trim();
}
String name = packageId + "/" + objectName; //$NON-NLS-1$
String[] r = new String[] { "", "_SYS_BIC", name, NEEDED_TYPES[3], "", packageId }; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
String[] r = new String[] { "", schemaPattern, name, NEEDED_TYPES[3], "", packageId }; //$NON-NLS-1$ //$NON-NLS-2$
listcv.add(r);
}
} catch (SQLException e) {
@@ -355,4 +355,16 @@ public class SAPHanaDataBaseMetadata extends FakeDatabaseMetaData {
tableResultSet.setData(list);
return tableResultSet;
}
@Override
public String getDatabaseProductName() throws SQLException {
return this.connection.getMetaData().getDatabaseProductName();
}
@Override
public String getDatabaseProductVersion() throws SQLException {
return this.connection.getMetaData().getDatabaseProductVersion();
}
}

View File

@@ -15,6 +15,7 @@ package org.talend.commons.utils.network;
import java.lang.reflect.Field;
import java.net.Authenticator;
import java.net.HttpURLConnection;
import java.net.Inet6Address;
import java.net.InetAddress;
import java.net.NetworkInterface;
import java.net.PasswordAuthentication;
@@ -22,7 +23,11 @@ import java.net.SocketException;
import java.net.URI;
import java.net.URL;
import java.net.UnknownHostException;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Set;
import java.util.regex.Pattern;
import org.apache.commons.lang.StringUtils;
@@ -150,6 +155,28 @@ public class NetworkUtil {
@Override
protected PasswordAuthentication getPasswordAuthentication() {
String httpProxyHost = System.getProperty("http.proxyHost"); //$NON-NLS-1$
String httpProxyPort = System.getProperty("http.proxyPort"); //$NON-NLS-1$
String httpsProxyHost = System.getProperty("https.proxyHost"); //$NON-NLS-1$
String httpsProxyPort = System.getProperty("https.proxyPort"); //$NON-NLS-1$
String requestingHost = getRequestingHost();
int requestingPort = getRequestingPort();
String proxyHost = null;
String proxyPort = null;
boolean isHttp = false;
if ("http".equalsIgnoreCase(getRequestingScheme())) {
isHttp = true;
}
if (isHttp && StringUtils.isNotBlank(httpProxyHost)) {
proxyHost = httpProxyHost;
proxyPort = httpProxyPort;
} else {
proxyHost = httpsProxyHost;
proxyPort = httpsProxyPort;
}
if (!StringUtils.equals(proxyHost, requestingHost) || !StringUtils.equals(proxyPort, "" + requestingPort)) {
return null;
}
String httpProxyUser = System.getProperty("http.proxyUser"); //$NON-NLS-1$
String httpProxyPassword = System.getProperty("http.proxyPassword"); //$NON-NLS-1$
String httpsProxyUser = System.getProperty("https.proxyUser"); //$NON-NLS-1$
@@ -167,7 +194,11 @@ public class NetworkUtil {
proxyPassword = httpsProxyPassword.toCharArray();
}
}
return new PasswordAuthentication(proxyUser, proxyPassword);
if (StringUtils.isBlank(proxyUser)) {
return null;
} else {
return new PasswordAuthentication(proxyUser, proxyPassword);
}
}
});
@@ -206,6 +237,54 @@ public class NetworkUtil {
}
}
public static List<String> getLocalLoopbackAddresses(boolean wrapIpV6) {
Set<String> addresses = new LinkedHashSet<>();
try {
addresses.add(getIp(InetAddress.getLoopbackAddress(), wrapIpV6));
} catch (Exception e) {
ExceptionHandler.process(e);
}
try {
Enumeration<NetworkInterface> networkInterfaces = NetworkInterface.getNetworkInterfaces();
while (networkInterfaces.hasMoreElements()) {
NetworkInterface networkInterface = networkInterfaces.nextElement();
Enumeration<InetAddress> inetAddresses = networkInterface.getInetAddresses();
while (inetAddresses.hasMoreElements()) {
InetAddress inetAddress = inetAddresses.nextElement();
if (inetAddress != null && inetAddress.isLoopbackAddress()) {
addresses.add(getIp(inetAddress, wrapIpV6));
}
}
}
} catch (Exception e) {
ExceptionHandler.process(e);
}
if (addresses.isEmpty()) {
addresses.add("127.0.0.1");
String ipv6Loopback = "::1";
if (wrapIpV6) {
ipv6Loopback = "[" + ipv6Loopback + "]";
}
addresses.add(ipv6Loopback);
}
return new ArrayList<>(addresses);
}
private static String getIp(InetAddress inetAddress, boolean wrapIpV6) {
if (wrapIpV6 && Inet6Address.class.isInstance(inetAddress)) {
String addr = inetAddress.getHostAddress();
if (!addr.startsWith("[") || !addr.endsWith("]")) {
addr = "[" + addr + "]";
}
return addr;
} else {
return inetAddress.getHostAddress();
}
}
public static boolean isSelfAddress(String addr) {
if (addr == null || addr.isEmpty()) {
return false; // ?

View File

@@ -25,6 +25,7 @@ import java.net.URISyntaxException;
import java.security.AccessController;
import java.security.PrivilegedAction;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
@@ -38,6 +39,8 @@ import java.util.Set;
import org.apache.commons.lang.StringUtils;
import org.apache.log4j.Priority;
import org.eclipse.core.internal.net.ProxyManager;
import org.eclipse.core.internal.net.ProxyType;
import org.eclipse.core.net.proxy.IProxyChangeEvent;
import org.eclipse.core.net.proxy.IProxyService;
import org.talend.commons.CommonsPlugin;
import org.talend.commons.exception.ExceptionHandler;
@@ -77,6 +80,14 @@ public class TalendProxySelector extends ProxySelector {
private static final String PROP_DISABLE_DEFAULT_SELECTOR_PROVIDER = "talend.studio.proxy.disableDefaultSelectorProvider";
private static final String PROP_PROXY_EXCLUDE_LOOPBACK_ADDRESS_AUTOMATICALLY = "talend.studio.proxy.excludeLoopbackAutomatically";
private static final String PROP_PROXY_EXCLUDE_LOOPBACK_ADDRESS_AUTOMATICALLY_DEFAULT = "true";
private static final String PROP_PROXY_HTTP_NON_PROXYHOSTS = "http.nonProxyHosts";
private static final String PROP_PROXY_HTTPS_NON_PROXYHOSTS = "https.nonProxyHosts";
/**
* Example: update.talend.com,socket:http,https:http;nexus.talend.com,socket,http;,socket:http
*/
@@ -104,6 +115,8 @@ public class TalendProxySelector extends ProxySelector {
private EProxySelector eProxySelector;
private IProxyService proxyManager;
final private Map<Object, Collection<IProxySelectorProvider>> selectorProviders;
private Map<String, Map<String, String>> hostMap;
@@ -114,6 +127,10 @@ public class TalendProxySelector extends ProxySelector {
private static Object instanceLock = new Object();
private List<String> localLoopbackAddresses;
private Object localLoopbackAddressesLock = new Object();
private boolean printProxyLog = false;
private boolean allowProxyRedirect = false;
@@ -126,6 +143,8 @@ public class TalendProxySelector extends ProxySelector {
private boolean updateSystemPropertiesForJre = true;
private boolean excludeLoopbackAddressAutomatically = false;
private TalendProxySelector(final ProxySelector eclipseDefaultSelector) {
this.eclipseDefaultSelector = eclipseDefaultSelector;
this.jreDefaultSelector = new DefaultProxySelector();
@@ -139,6 +158,8 @@ public class TalendProxySelector extends ProxySelector {
executeConnectionFailed = Boolean.valueOf(System.getProperty(PROP_EXECUTE_CONNECTION_FAILED, Boolean.TRUE.toString()));
updateSystemPropertiesForJre = Boolean
.valueOf(System.getProperty(PROP_UPDATE_SYSTEM_PROPERTIES_FOR_JRE, Boolean.TRUE.toString()));
excludeLoopbackAddressAutomatically = Boolean.valueOf(System.getProperty(
PROP_PROXY_EXCLUDE_LOOPBACK_ADDRESS_AUTOMATICALLY, PROP_PROXY_EXCLUDE_LOOPBACK_ADDRESS_AUTOMATICALLY_DEFAULT));
switch (System.getProperty(PROP_PROXY_SELECTOR, PROP_PROXY_SELECTOR_DEFAULT).toLowerCase()) {
case PROP_PROXY_SELECTOR_JRE:
@@ -148,11 +169,83 @@ public class TalendProxySelector extends ProxySelector {
this.eProxySelector = EProxySelector.eclipse_default;
break;
}
proxyManager = ProxyManager.getProxyManager();
checkProxyManager(IProxyChangeEvent.PROXY_DATA_CHANGED);
proxyManager.addProxyChangeListener(event -> checkProxyManager(event.getChangeType()));
initHostMap();
initRedirectList();
}
private void checkProxyManager(int changeEvent) {
try {
if (IProxyChangeEvent.PROXY_DATA_CHANGED == changeEvent
|| IProxyChangeEvent.NONPROXIED_HOSTS_CHANGED == changeEvent) {
if (this.excludeLoopbackAddressAutomatically && proxyManager.isProxiesEnabled()) {
List<String> addresses = getLocalLoopbackAddresses();
if (addresses != null && !addresses.isEmpty()) {
if (org.eclipse.core.internal.net.ProxySelector
.canSetBypassHosts(org.eclipse.core.internal.net.ProxySelector.getDefaultProvider())) {
List<String> configuredProxies = Arrays.asList(proxyManager.getNonProxiedHosts());
if (!configuredProxies.containsAll(addresses)) {
Set<String> nonProxyHosts = new HashSet<>(addresses);
nonProxyHosts.addAll(configuredProxies);
ExceptionHandler.log(
this.getClass().getName() + ":" + "-D" + PROP_PROXY_EXCLUDE_LOOPBACK_ADDRESS_AUTOMATICALLY
+ "=true, adding missing loopback addresses into eclipse nonProxyHosts: "
+ nonProxyHosts);
proxyManager.setNonProxiedHosts(nonProxyHosts.toArray(new String[0]));
}
} else {
updateNonProxyHosts(addresses, PROP_PROXY_HTTP_NON_PROXYHOSTS);
updateNonProxyHosts(addresses, PROP_PROXY_HTTPS_NON_PROXYHOSTS);
}
}
}
}
} catch (Exception e) {
ExceptionHandler.process(e);
}
}
private void updateNonProxyHosts(List<String> localLoopbackAddresses, final String nonProxyProperty) {
if (localLoopbackAddresses != null && !localLoopbackAddresses.isEmpty()) {
Set<String> nonProxyHosts = new HashSet<>(localLoopbackAddresses);
String property = System.getProperty(nonProxyProperty);
boolean update = true;
if (StringUtils.isNotBlank(property)) {
List<String> configuredProxies = Arrays.asList(ProxyType.convertPropertyStringToHosts(property));
if (configuredProxies.containsAll(localLoopbackAddresses)) {
update = false;
} else {
nonProxyHosts.addAll(configuredProxies);
}
}
if (update) {
ExceptionHandler.log(this.getClass().getName() + ":" + "-D" + PROP_PROXY_EXCLUDE_LOOPBACK_ADDRESS_AUTOMATICALLY
+ "=true, adding missing loopback addresses into " + nonProxyProperty + ": " + nonProxyHosts);
System.setProperty(nonProxyProperty,
ProxyType.convertHostsToPropertyString(nonProxyHosts.toArray(new String[0])));
}
}
}
private List<String> getLocalLoopbackAddresses() {
if (this.localLoopbackAddresses == null) {
synchronized (localLoopbackAddressesLock) {
if (this.localLoopbackAddresses == null) {
List<String> addresses = NetworkUtil.getLocalLoopbackAddresses(false);
final String localhost = "localhost";
if (!addresses.contains(localhost)) {
addresses.add(localhost);
}
this.localLoopbackAddresses = addresses;
}
}
}
return this.localLoopbackAddresses;
}
private void initHostMap() {
try {
hostMap = new HashMap<>();
@@ -282,7 +375,27 @@ public class TalendProxySelector extends ProxySelector {
ExceptionHandler.log("TalendProxySelector.select " + uri);
}
if (uri == null) {
return Collections.EMPTY_LIST;
List<Proxy> result = new ArrayList<>();
result.add(Proxy.NO_PROXY);
return result;
}
try {
if (this.excludeLoopbackAddressAutomatically) {
List<String> addresses = getLocalLoopbackAddresses();
if (addresses != null) {
String host = uri.getHost();
if (addresses.contains(host)) {
if (printProxyLog) {
ExceptionHandler.log(uri + " is excluded from proxy");
}
List<Proxy> result = new ArrayList<>();
result.add(Proxy.NO_PROXY);
return result;
}
}
}
} catch (Exception e) {
ExceptionHandler.process(e);
}
URI validatedUri = validateUri(uri);
Set<Proxy> results = new LinkedHashSet<>();
@@ -332,6 +445,9 @@ public class TalendProxySelector extends ProxySelector {
ExceptionHandler.log("Selected proxys for " + uri + ", " + proxys);
ExceptionHandler.process(new Exception("Proxy call stacks"), Priority.INFO);
}
if (results.isEmpty()) {
results.add(Proxy.NO_PROXY);
}
return new LinkedList<Proxy>(results);
}

View File

@@ -13,12 +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.text.DecimalFormat;
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;
@@ -36,8 +37,6 @@ import org.talend.commons.exception.CommonExceptionHandler;
*/
public class PerformanceStatisticUtil {
private static final DecimalFormat DF = new DecimalFormat("###.##");
private static final int MEGABYTE = 1024 * 1024;// MB = 1024*1024 byte
private static final int KILOBYTE = 1024;// kb=1024 byte
@@ -83,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");
@@ -100,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() {
@@ -109,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();
@@ -211,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();
@@ -222,7 +187,7 @@ public class PerformanceStatisticUtil {
measureWrite(props, testFile);
measureRead(props, testFile);
store(file, props);
PropertiesFileUtil.store(file, props);
}
}
@@ -250,8 +215,8 @@ public class PerformanceStatisticUtil {
digital_ioWAverageMbSec = (digital_ioWAverageMbSec * digital_ioCount + bwMbSec) / (digital_ioCount + 1);
digital_ioWMbSec = bwMbSec;
props.setProperty(StatisticKeys.IO_W_AVERAGE_MB_SEC.get(), "" + DF.format(digital_ioWAverageMbSec));
props.setProperty(StatisticKeys.IO_W_MB_SEC.get(), "" + DF.format(digital_ioWMbSec));
props.setProperty(StatisticKeys.IO_W_AVERAGE_MB_SEC.get(), format(digital_ioWAverageMbSec));
props.setProperty(StatisticKeys.IO_W_MB_SEC.get(), format(digital_ioWMbSec));
}
private static long writeIO(int numOfBlocks, BlockSequence blockSequence, int blockSize, File testFile) {
@@ -324,11 +289,15 @@ public class PerformanceStatisticUtil {
digital_ioRMbSec = bwMbSec;
digital_ioCount++;
props.setProperty(StatisticKeys.IO_R_AVERAGE_MB_SEC.get(), "" + DF.format(digital_ioRAverageMbSec));
props.setProperty(StatisticKeys.IO_R_MB_SEC.get(), "" + DF.format(digital_ioRMbSec));
props.setProperty(StatisticKeys.IO_R_AVERAGE_MB_SEC.get(), format(digital_ioRAverageMbSec));
props.setProperty(StatisticKeys.IO_R_MB_SEC.get(), format(digital_ioRMbSec));
props.setProperty(StatisticKeys.IO_COUNT.get(), "" + digital_ioCount);
}
public static String format(double dvalue) {
return BigDecimal.valueOf(dvalue).setScale(2, RoundingMode.HALF_UP).toString();
}
private static long readIO(int numOfBlocks, BlockSequence blockSequence, int blockSize, File testFile) {
long totalBytesReadInMark = 0;

View File

@@ -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;
}
}

View File

@@ -28,7 +28,7 @@ public class TimeMeasurePerformance extends TimeMeasure{
private static int indent = 0;
public static void begin(String idTimer) {
public static void begin(String idTimer, String description) {
startTime = System.nanoTime();
init();
@@ -38,7 +38,12 @@ public class TimeMeasurePerformance extends TimeMeasure{
indent++;
TimeStack times = new TimeStack();
timers.put(idTimer, times);
log(indent(indent) + "Start '" + idTimer + "' ..."); //$NON-NLS-1$ //$NON-NLS-2$
String message = "Start '" + idTimer + "' ...";
if (description != null) {
message = "Start '" + idTimer + "', " + description + " ...";
}
log(indent(indent) + message); //$NON-NLS-1$ //$NON-NLS-2$
}
}

View File

@@ -240,7 +240,11 @@ public class BackgroundRefresher implements IBackgroundRefresher {
gc.dispose();
drawableComposite.getBgDrawableComposite().setBackgroundImage(newImage);
if (WindowSystem.isBigSurOrLater()) {
drawableComposite.refreshBgDrawableCompsite(newImage);
} else {
drawableComposite.getBgDrawableComposite().setBackgroundImage(newImage);
}
clearImage(oldImage);
oldImage = newImage;

View File

@@ -13,6 +13,7 @@
package org.talend.commons.ui.swt.drawing.background;
import org.eclipse.swt.graphics.GC;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.widgets.Composite;
@@ -28,6 +29,8 @@ public interface IBgDrawableComposite {
public Composite getBgDrawableComposite();
public void refreshBgDrawableCompsite(Image image);
public void setOffset(Point offsetPoint);
public Point getOffset();

View File

@@ -26,6 +26,7 @@ import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Listener;
import org.eclipse.swt.widgets.Text;
import org.talend.commons.ui.runtime.ws.WindowSystem;
/**
* Create a Label and a Text.
@@ -153,7 +154,14 @@ public class LabelledText {
});
GridDataFactory.swtDefaults().applyTo(label);
text = new Text(composite, styleField);
// For Big Sur, to avoid the password autofill dialog.
if (WindowSystem.isBigSurOrLater() && ((styleField & SWT.PASSWORD) != 0)) {
styleField ^= SWT.PASSWORD;
text = new Text(composite, styleField);
text.setEchoChar('*');
} else {
text = new Text(composite, styleField);
}
text.selectAll(); // enable fast erase use
int gridDataStyle = SWT.NONE;
if (isFill) {

View File

@@ -12,7 +12,12 @@
// ============================================================================
package org.talend.commons.ui.swt.linking;
import org.eclipse.swt.events.DisposeEvent;
import org.eclipse.swt.events.DisposeListener;
import org.eclipse.swt.events.PaintEvent;
import org.eclipse.swt.events.PaintListener;
import org.eclipse.swt.graphics.GC;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.widgets.Composite;
import org.talend.commons.ui.swt.drawing.background.IBgDrawableComposite;
@@ -28,6 +33,8 @@ public abstract class BgDrawableComposite implements IBgDrawableComposite {
private Composite commonParent;
private Point offsetPoint = new Point(0, 0);
private Image backgroundImage;
/**
* DOC amaumont DrawableBackground constructor comment.
@@ -36,9 +43,36 @@ public abstract class BgDrawableComposite implements IBgDrawableComposite {
*/
public BgDrawableComposite(Composite commonParent) {
this.commonParent = commonParent;
this.commonParent.addPaintListener(new PaintListener() {
@Override
public void paintControl(PaintEvent arg0) {
if (backgroundImage != null) {
arg0.gc.drawImage(backgroundImage, 0, 0);
}
}
});
this.commonParent.addDisposeListener(new DisposeListener() {
@Override
public void widgetDisposed(DisposeEvent arg0) {
if (backgroundImage != null && !backgroundImage.isDisposed()) {
backgroundImage.dispose();
}
}
});
}
/*
@Override
public void refreshBgDrawableCompsite(Image image) {
if (backgroundImage != null) {
backgroundImage.dispose();
}
backgroundImage = image;
this.commonParent.redraw();
}
/*
* (non-Javadoc)
*
* @see org.talend.commons.ui.swt.drawing.background.IDrawableComposite#drawBackground(org.eclipse.swt.graphics.GC)

View File

@@ -15,6 +15,7 @@ package org.talend.commons.ui.swt.linking;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Comparator;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
@@ -77,6 +78,8 @@ public class TreeToTablesLinker<D1, D2> extends BgDrawableComposite implements I
private List<LinkableTable> linkableTableList;
private HashMap<Table, Point> tableToCommonPointMap = new HashMap<Table, Point>();
/**
* DOC amaumont TreeToTableLinker constructor comment.
*
@@ -258,8 +261,34 @@ public class TreeToTablesLinker<D1, D2> extends BgDrawableComposite implements I
Point offset = getOffset();
gc.drawLine(pointStartStraight.x + offset.x, pointStartStraight.y + offset.y, pointEndStraight.x + offset.x,
pointEndStraight.y + offset.y);
if (WindowSystem.isBigSurOrLater()) {
if (yStraight < tree.getBounds().y + treeItemHeight) {
yStraight = tree.getBounds().y + treeItemHeight;
}
if (yStraight > tree.getBounds().height + tree.getBounds().y + treeItemHeight) {
yStraight = tree.getBounds().height + tree.getBounds().y + treeItemHeight;
}
pointEndStraight = new Point(treeToCommonPoint.x + tree.getClientArea().width, yStraight);
if (tableToCommonPointMap.get(table) == null) {
tableToCommonPointMap.put(table, display.map(table, getBgDrawableComposite(), new Point(0, 0)));
}
// scroll issue for table
if (tableToCommonPoint.y != tableToCommonPointMap.get(table).y) {
pointEndCentralCurve.y = tableToCommonPoint.y + tableItemBounds.y
+ table.getItemHeight() / 2;
}
if (pointEndCentralCurve.y < tableToCommonPointMap.get(table).y) {
pointEndCentralCurve.y = tableToCommonPointMap.get(table).y;
}
if (pointEndCentralCurve.y > tableToCommonPointMap.get(table).y + tableBounds.height - table.getBorderWidth()
- table.getHeaderHeight()) {
pointEndCentralCurve.y = tableToCommonPointMap.get(table).y + tableBounds.height - table.getBorderWidth()
- table.getHeaderHeight();
}
} else {
gc.drawLine(pointStartStraight.x + offset.x, pointStartStraight.y + offset.y, pointEndStraight.x + offset.x,
pointEndStraight.y + offset.y);
}
pointEndStraight.x += offset.x;
pointEndStraight.y += offset.y;

View File

@@ -109,4 +109,8 @@ public interface FileConstants {
String SPRING_FOLDER_NAME = "META-INF/spring"; //$NON-NLS-1$
String TALEND_FOLDER_NAME = "TALEND-INF"; //$NON-NLS-1$
String MAVEN_FOLDER_NAME = "MAVEN-INF";
}

View File

@@ -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);

View File

@@ -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>.

View File

@@ -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".
*

View File

@@ -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;
@@ -132,10 +134,13 @@ import org.talend.core.repository.utils.RepositoryPathProvider;
import org.talend.core.repository.utils.XmiResourceManager;
import org.talend.core.runtime.CoreRuntimePlugin;
import org.talend.core.runtime.repository.item.ItemProductKeys;
import org.talend.core.runtime.services.IGenericWizardService;
import org.talend.core.runtime.services.IMavenUIService;
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;
@@ -1346,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);
@@ -1798,9 +1838,12 @@ public final class ProxyRepositoryFactory implements IProxyRepositoryFactory {
* @throws PersistenceException
*/
private void emptyTempFolder(Project project) throws PersistenceException {
String str = (System.getProperty("eclipse.home.location") + "temp").substring(5);
FilesUtils.deleteFolder(new File(str), false);
try {
String str = SharedStudioUtils.getTempFolderPath().toPortableString();
FilesUtils.deleteFolder(new File(str), false);
}catch (Exception ex) {
ExceptionHandler.process(ex);
}
long start = System.currentTimeMillis();
IProject fsProject = ResourceUtils.getProject(project);
IFolder folder = ResourceUtils.getFolder(fsProject, RepositoryConstants.TEMP_DIRECTORY, false);
@@ -2089,7 +2132,7 @@ public final class ProxyRepositoryFactory implements IProxyRepositoryFactory {
*/
public void logOnProject(Project project, IProgressMonitor monitor) throws LoginException, PersistenceException {
try {
TimeMeasurePerformance.begin("logOnProject"); //$NON-NLS-1$
TimeMeasurePerformance.begin("logOnProject", "logon project name '" + project.getLabel()+"'"); //$NON-NLS-1$ //$NON-NLS-2$
try {
/**
* init/check proxy selector, in case default proxy selector is not registed yet
@@ -2140,6 +2183,20 @@ public final class ProxyRepositoryFactory implements IProxyRepositoryFactory {
ProjectDataJsonProvider.checkAndRectifyRelationShipSetting(project.getEmfProject());
try {
// load additional jdbc
if (GlobalServiceRegister.getDefault().isServiceRegistered(IGenericWizardService.class)) {
IGenericWizardService service = GlobalServiceRegister.getDefault()
.getService(IGenericWizardService.class);
if (service != null) {
service.loadAdditionalJDBC();
}
}
} catch (Exception e) {
// in case, to avoid block logon
ExceptionHandler.process(e);
}
// init dynamic distirbution after `beforeLogon`, before loading libraries.
initDynamicDistribution(monitor);
@@ -2186,6 +2243,16 @@ public final class ProxyRepositoryFactory implements IProxyRepositoryFactory {
TimeMeasurePerformance.step("logOnProject", "Sync components libraries"); //$NON-NLS-1$
}
try {
// for new added mapping file, sync to project mapping folder
MetadataTalendType.syncNewMappingFileToProject();
} catch (SystemException e) {
// ignore
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();
@@ -2287,8 +2354,6 @@ public final class ProxyRepositoryFactory implements IProxyRepositoryFactory {
// set the project mappings url
System.setProperty("talend.mappings.url", url.toString()); // $NON-NLS-1$
}
// for new added mapping file, sync to project mapping folder
MetadataTalendType.syncNewMappingFileToProject();
} catch (SystemException e) {
// ignore
ExceptionHandler.process(e);

View File

@@ -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);
}
}

View File

@@ -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)) {

View File

@@ -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 {

View File

@@ -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

View File

@@ -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) {

View File

@@ -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);
}
}

View File

@@ -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) {

View File

@@ -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();
}

View File

@@ -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);
}

View File

@@ -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) {

View File

@@ -205,6 +205,27 @@ public class StandaloneConnectionContextUtils {
cloneConn.getParameters().put(ConnParameterKeys.CONN_PARA_KEY_HIVE_ADDITIONAL_JDBC_SETTINGS,
getOriginalValue(contextProperties, additionalJDBCSettings));
String dataprocProjectId = cloneConn.getParameters().get(ConnParameterKeys.CONN_PARA_KEY_HIVE_GOOGLE_PROJECT_ID);
cloneConn.getParameters().put(ConnParameterKeys.CONN_PARA_KEY_HIVE_GOOGLE_PROJECT_ID,
getOriginalValue(contextProperties, dataprocProjectId));
String dataprocClusterId = cloneConn.getParameters().get(ConnParameterKeys.CONN_PARA_KEY_HIVE_GOOGLE_CLUSTER_ID);
cloneConn.getParameters().put(ConnParameterKeys.CONN_PARA_KEY_HIVE_GOOGLE_CLUSTER_ID,
getOriginalValue(contextProperties, dataprocClusterId));
String dataprocRegion = cloneConn.getParameters().get(ConnParameterKeys.CONN_PARA_KEY_HIVE_GOOGLE_REGION);
cloneConn.getParameters().put(ConnParameterKeys.CONN_PARA_KEY_HIVE_GOOGLE_REGION,
getOriginalValue(contextProperties, dataprocRegion));
String dataprocJarsBucket = cloneConn.getParameters().get(ConnParameterKeys.CONN_PARA_KEY_HIVE_GOOGLE_JARS_BUCKET);
cloneConn.getParameters().put(ConnParameterKeys.CONN_PARA_KEY_HIVE_GOOGLE_JARS_BUCKET,
getOriginalValue(contextProperties, dataprocJarsBucket));
String dataprocPathToCredentials = cloneConn.getParameters()
.get(ConnParameterKeys.CONN_PARA_KEY_HIVE_AUTHENTICATION_PATH_TO_GOOGLE_CREDENTIALS);
cloneConn.getParameters().put(ConnParameterKeys.CONN_PARA_KEY_HIVE_AUTHENTICATION_PATH_TO_GOOGLE_CREDENTIALS,
getOriginalValue(contextProperties, dataprocPathToCredentials));
String hiveEnableHa = cloneConn.getParameters().get(ConnParameterKeys.CONN_PARA_KEY_HIVE_ENABLE_HA);
cloneConn.getParameters().put(ConnParameterKeys.CONN_PARA_KEY_HIVE_ENABLE_HA,
getOriginalValue(contextProperties, hiveEnableHa));

View File

@@ -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());

View File

@@ -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,
@@ -122,7 +123,8 @@ Require-Bundle: org.eclipse.jdt.core,
org.talend.components.api,
org.apache.servicemix.bundles.avro,
jackson-core-asl,
org.talend.libraries.jackson
org.talend.libraries.jackson,
org.talend.libraries.apache.common
Bundle-Activator: org.talend.core.runtime.CoreRuntimePlugin
Bundle-ActivationPolicy: lazy
Bundle-ClassPath: .,

View File

@@ -0,0 +1,288 @@
<?xml version="1.0"?>
<mapping>
<dbms product="SINGLESTORE" id="singlestore_id" label="Mapping SingleStore"
default="true">
<dbTypes>
<dbType type="BOOL" ignoreLen="true" ignorePre="true" />
<dbType type="BOOLEAN" ignoreLen="true" ignorePre="true" />
<dbType type="BIGINT" ignorePre="true"/>
<dbType type="BIGINT UNSIGNED" ignoreLen="true" ignorePre="true" />
<dbType type="BINARY" ignorePre="true"/>
<dbType type="BIT" ignorePre="true" />
<dbType type="BLOB" ignoreLen="true" ignorePre="true" />
<dbType type="CHAR" defaultLength="200" ignorePre="true"/>
<dbType type="DATE" ignoreLen="true" ignorePre="true" />
<dbType type="DATETIME" ignoreLen="true" ignorePre="false" />
<dbType type="DECIMAL" defaultLength="20" defaultPrecision="10" preBeforelen="false"/>
<dbType type="DOUBLE" defaultLength="20" defaultPrecision="10"/>
<dbType type="DOUBLE UNSIGNED" ignoreLen="true" ignorePre="true" />
<dbType type="ENUM" ignoreLen="true" ignorePre="true" />
<dbType type="FLOAT" defaultPrecision="2"/>
<dbType type="FLOAT UNSIGNED" ignoreLen="true" ignorePre="true" />
<dbType type="GEOGRAPHY" ignoreLen="true" ignorePre="true" />
<dbType type="GEOGRAPHYPOINT" ignoreLen="true" ignorePre="true" />
<dbType type="INT" ignorePre="true" />
<dbType type="INT UNSIGNED" ignoreLen="true" ignorePre="true" />
<dbType type="INTEGER" ignorePre="true" />
<dbType type="INTEGER UNSIGNED" ignoreLen="true" ignorePre="true" />
<dbType type="LONGTEXT" ignoreLen="true" ignorePre="true" />
<dbType type="LONGBLOB" ignoreLen="true" ignorePre="true"/>
<dbType type="MEDIUMBLOB" ignoreLen="true" ignorePre="true" />
<dbType type="MEDIUMINT" ignorePre="true" />
<dbType type="MEDIUMINT UNSIGNED" ignoreLen="true" ignorePre="true" />
<dbType type="MEDIUMTEXT" ignoreLen="true" ignorePre="true" />
<dbType type="SMALLINT" ignorePre="true" />
<dbType type="SMALLINT UNSIGNED" ignoreLen="true" ignorePre="true" />
<dbType type="SET" ignoreLen="true" ignorePre="true" />
<dbType type="TEXT" ignoreLen="true" ignorePre="true" />
<dbType type="TIME" ignoreLen="true" ignorePre="true" />
<dbType type="TIMESTAMP" ignoreLen="true" ignorePre="false" />
<dbType type="TINYBLOB" ignoreLen="true" ignorePre="true" />
<dbType type="TINYINT" ignorePre="true" />
<dbType type="TINYINT UNSIGNED" ignoreLen="true" ignorePre="true" />
<dbType type="TINYTEXT" ignoreLen="true" ignorePre="true" />
<dbType type="VARBINARY" ignorePre="true" />
<dbType type="VARCHAR" default="true" defaultLength="100" ignorePre="true"/>
<dbType type="YEAR" ignorePre="true"/>
<dbType type="JSON" ignoreLen="true" ignorePre="true"/>
</dbTypes>
<language name="java">
<talendToDbTypes><!-- Adviced mappings -->
<talendType type="id_List"/>
<talendType type="id_Boolean">
<dbType type="BOOL" default="true" />
</talendType>
<talendType type="id_Byte">
<dbType type="TINYINT" default="true" />
<dbType type="BIGINT" />
<dbType type="INT" />
<dbType type="MEDIUMINT" />
<dbType type="SMALLINT" />
</talendType>
<talendType type="id_byte[]">
<dbType type="VARBINARY" default="true" />
<dbType type="BINARY" />
<dbType type="BIT" />
<dbType type="BLOB" />
<dbType type="LONGBLOB" />
<dbType type="MEDIUMBLOB" />
<dbType type="TINYBLOB" />
</talendType>
<talendType type="id_Character">
<dbType type="CHAR" default="true" />
<dbType type="VARCHAR"/>
</talendType>
<talendType type="id_Date">
<dbType type="DATE" />
<dbType type="DATETIME" default="true" />
<dbType type="TIME" />
<dbType type="YEAR" />
<dbType type="TIMESTAMP" />
</talendType>
<talendType type="id_BigDecimal">
<dbType type="DECIMAL" default="true" />
<dbType type="FLOAT"/>
<dbType type="DOUBLE" />
</talendType>
<talendType type="id_Double">
<dbType type="DOUBLE" default="true" />
<dbType type="FLOAT"/>
<dbType type="DECIMAL" />
</talendType>
<talendType type="id_Float">
<dbType type="FLOAT" default="true" />
<dbType type="DOUBLE"/>
<dbType type="DECIMAL" />
</talendType>
<talendType type="id_Integer">
<dbType type="INT" default="true" />
<dbType type="BIGINT" />
</talendType>
<talendType type="id_Long">
<dbType type="BIGINT" default="true" />
</talendType>
<talendType type="id_Object">
<dbType type="BLOB" default="true"/>
<dbType type="ENUM" />
<dbType type="GEOGRAPHY" />
<dbType type="GEOGRAPHYPOINT" />
<dbType type="MEDIUMINT" />
<dbType type="LONGBLOB" />
<dbType type="MEDIUMBLOB" />
<dbType type="SET" />
<dbType type="TINYBLOB" />
</talendType>
<talendType type="id_Short">
<dbType type="SMALLINT" default="true" />
<dbType type="INT" />
<dbType type="BIGINT"/>
<dbType type="MEDIUMINT" />
</talendType>
<talendType type="id_String">
<dbType type="VARCHAR" default="true" />
<dbType type="LONGTEXT"/>
<dbType type="MEDIUMTEXT" />
<dbType type="TEXT" />
<dbType type="TINYTEXT" />
<dbType type="CHAR" />
<dbType type="JSON" />
</talendType>
</talendToDbTypes>
<dbToTalendTypes>
<dbType type="BOOL">
<talendType type="id_Boolean" default="true" />
</dbType>
<dbType type="BOOLEAN">
<talendType type="id_Boolean" default="true" />
</dbType>
<dbType type="BIGINT">
<talendType type="id_Long" default="true" />
</dbType>
<dbType type="BINARY">
<talendType type="id_byte[]" />
<talendType type="id_Boolean" default="true" />
</dbType>
<dbType type="BIT">
<talendType type="id_byte[]" />
<talendType type="id_Boolean" default="true" />
</dbType>
<dbType type="BLOB">
<talendType type="id_byte[]" default="true" />
<talendType type="id_Object" />
</dbType>
<dbType type="CHAR">
<talendType type="id_String" default="true" />
</dbType>
<dbType type="DATE">
<talendType type="id_Date" default="true" />
</dbType>
<dbType type="DATETIME">
<talendType type="id_Date" default="true" />
</dbType>
<dbType type="DECIMAL">
<talendType type="id_Float"/>
<talendType type="id_Double"/>
<talendType type="id_BigDecimal" default="true"/>
</dbType>
<dbType type="DOUBLE">
<talendType type="id_Double" default="true" />
<talendType type="id_BigDecimal"/>
</dbType>
<dbType type="ENUM">
<talendType type="id_Object" default="true" />
</dbType>
<dbType type="FLOAT">
<talendType type="id_Float" default="true" />
<talendType type="id_Double"/>
<talendType type="id_BigDecimal"/>
</dbType>
<dbType type="GEOGRAPHY">
<talendType type="id_Object" default="true" />
</dbType>
<dbType type="GEOGRAPHYPOINT">
<talendType type="id_Object" default="true" />
</dbType>
<dbType type="JSON">
<talendType type="id_String" default="true" />
<talendType type="id_Object" />
</dbType>
<dbType type="INT">
<talendType type="id_Integer" default="true" />
<talendType type="id_Long"/>
</dbType>
<dbType type="INTEGER">
<talendType type="id_Integer" default="true" />
<talendType type="id_Long"/>
</dbType>
<dbType type="LONGTEXT">
<talendType type="id_String" default="true" />
</dbType>
<dbType type="LONGBLOB">
<talendType type="id_byte[]" default="true" />
<talendType type="id_Object" />
</dbType>
<dbType type="MEDIUMBLOB">
<talendType type="id_byte[]" default="true" />
<talendType type="id_Object" />
</dbType>
<dbType type="MEDIUMINT">
<talendType type="id_Integer" default="true" />
<talendType type="id_Long"/>
</dbType>
<dbType type="MEDIUMTEXT">
<talendType type="id_String" default="true" />
</dbType>
<dbType type="SMALLINT">
<talendType type="id_Short" default="true" />
<talendType type="id_Long"/>
<talendType type="id_Integer"/>
</dbType>
<dbType type="SET">
<talendType type="id_Object" default="true" />
</dbType>
<dbType type="TEXT">
<talendType type="id_String" default="true" />
</dbType>
<dbType type="TIME">
<talendType type="id_Date" default="true" />
</dbType>
<dbType type="TIMESTAMP">
<talendType type="id_Date" default="true" />
</dbType>
<dbType type="TINYBLOB">
<talendType type="id_byte[]" default="true" />
<talendType type="id_Object" />
</dbType>
<dbType type="TINYINT">
<talendType type="id_Byte" default="true" />
<talendType type="id_Integer"/>
<talendType type="id_Long"/>
<talendType type="id_Short"/>
</dbType>
<dbType type="TINYTEXT">
<talendType type="id_String" default="true" />
</dbType>
<dbType type="VARBINARY">
<talendType type="id_byte[]" default="true" />
</dbType>
<dbType type="VARCHAR">
<talendType type="id_String" default="true" />
</dbType>
<dbType type="YEAR">
<talendType type="id_Date" default="true" />
</dbType>
<dbType type="BIGINT UNSIGNED" >
</dbType>
<dbType type="DOUBLE UNSIGNED" >
<talendType type="id_Double" default="true" />
<talendType type="id_BigDecimal"/>
</dbType>
<dbType type="FLOAT UNSIGNED" >
<talendType type="id_Double" default="true" />
<talendType type="id_BigDecimal"/>
</dbType>
<dbType type="INT UNSIGNED" >
<talendType type="id_Long" default="true" />
</dbType>
<dbType type="INTEGER UNSIGNED" >
<talendType type="id_Long" default="true" />
</dbType>
<dbType type="MEDIUMINT UNSIGNED" >
<talendType type="id_Integer" default="true" />
<talendType type="id_Long" />
</dbType>
<dbType type="SMALLINT UNSIGNED" >
<talendType type="id_Integer" default="true" />
<talendType type="id_Long" />
</dbType>
<dbType type="TINYINT UNSIGNED" >
<talendType type="id_Short" default="true" />
<talendType type="id_Integer" />
<talendType type="id_Long" />
</dbType>
</dbToTalendTypes>
</language>
</dbms>
</mapping>

View File

@@ -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$

View File

@@ -42,6 +42,7 @@ import java.util.Enumeration;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
@@ -50,11 +51,16 @@ import org.eclipse.core.resources.IContainer;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IFolder;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.resources.IWorkspace;
import org.eclipse.core.resources.IWorkspaceRunnable;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.FileLocator;
import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.OperationCanceledException;
import org.eclipse.core.runtime.jobs.ISchedulingRule;
import org.eclipse.core.runtime.jobs.Job;
import org.osgi.framework.Bundle;
import org.talend.commons.exception.CommonExceptionHandler;
import org.talend.commons.exception.ExceptionHandler;
@@ -1173,4 +1179,33 @@ public class FilesUtils {
}
}
public static void executeFolderAction(IProgressMonitor monitor, IResource parentFolder, IWorkspaceRunnable run)
throws CoreException {
if (Job.getJobManager().currentRule() == null) {
IWorkspace workspace = ResourcesPlugin.getWorkspace();
ISchedulingRule defaultRule = workspace.getRuleFactory().modifyRule(parentFolder);
ISchedulingRule noBlockRule = new ISchedulingRule() {
@Override
public boolean isConflicting(ISchedulingRule rule) {
return this.contains(rule);
}
@Override
public boolean contains(ISchedulingRule rule) {
if (this.equals(rule)) {
return true;
}
if (defaultRule.contains(rule)) {
return true;
}
return false;
}
};
workspace.run(run, noBlockRule, IWorkspace.AVOID_UPDATE, monitor);
} else {
run.run(monitor);
}
}
}

View File

@@ -94,4 +94,6 @@ public interface IESBService extends IService {
* @return
*/
public IProcessor createOSGIJavaProcessor(IProcess process, Property property, boolean filenameFromLabel);
public boolean isSOAPServiceProvider(Item item);
}

View File

@@ -126,6 +126,8 @@ public class PluginChecker {
public static final String BDEE_PLUGIN_ID = "org.talend.designer.bigdata"; //$NON-NLS-1$
public static final String BD_ROUTINE_PLUGIN_ID = "org.talend.designer.routines.bigdata"; //$NON-NLS-1$
public static final String DOCKER_PLUGIN_ID = "org.talend.designer.docker"; //$NON-NLS-1$
public static final String HELP_DI_EE_PLUGIN_ID = "org.talend.help.dataprep"; //$NON-NLS-1$
@@ -364,6 +366,10 @@ public class PluginChecker {
return isPluginLoaded(ESBSE_PLUGIN_ID);
}
public static boolean isBigdataRoutineLoaded() {
return isPluginLoaded(BD_ROUTINE_PLUGIN_ID);
}
public static String getBundlePath(String bundleName) {
String bundlePath = ""; //$NON-NLS-1$
Bundle refBundle = Platform.getBundle(bundleName);

View File

@@ -163,6 +163,18 @@ public class ConnParameterKeys {
public static final String CONN_PARA_KEY_HIVE_AUTHENTICATION_MAPRTICKET_DURATION = "CONN_PARA_KEY_HIVE_AUTHENTICATION_MAPRTICKET_DURATION";//$NON-NLS-1$
public static final String CONN_PARA_KEY_HIVE_GOOGLE_PROJECT_ID = "CONN_PARA_KEY_HIVE_GOOGLE_PROJECT_ID";//$NON-NLS-1$
public static final String CONN_PARA_KEY_HIVE_GOOGLE_CLUSTER_ID = "CONN_PARA_KEY_HIVE_GOOGLE_CLUSTER_ID";//$NON-NLS-1$
public static final String CONN_PARA_KEY_HIVE_GOOGLE_REGION = "CONN_PARA_KEY_HIVE_GOOGLE_REGION";//$NON-NLS-1$
public static final String CONN_PARA_KEY_HIVE_GOOGLE_JARS_BUCKET = "CONN_PARA_KEY_HIVE_GOOGLE_JARS_BUCKET";//$NON-NLS-1$
public static final String CONN_PARA_KEY_HIVE_AUTHENTICATION_DEFINE_PATH_TO_GOOGLE_CREDENTIALS = "CONN_PARA_KEY_HIVE_AUTHENTICATION_DEFINE_PATH_TO_GOOGLE_CREDENTIALS";//$NON-NLS-1$
public static final String CONN_PARA_KEY_HIVE_AUTHENTICATION_PATH_TO_GOOGLE_CREDENTIALS = "CONN_PARA_KEY_HIVE_AUTHENTICATION_PATH_TO_GOOGLE_CREDENTIALS";//$NON-NLS-1$
/**
* The key is for metastore server.
*/

View File

@@ -224,6 +224,7 @@ public class DatabaseConnStrUtil {
if (template.startsWith(DbConnStrForHive.URL_HIVE_2_TEMPLATE)) {
url = getImpalaURLString(false, server, port, sidOrDatabase, impalaPrincipal);
}
url = attachAdditionalHiveParameters(url, dbConn, false);
return url;
}

View File

@@ -23,6 +23,7 @@ import org.talend.core.database.EDatabaseTypeName;
import org.talend.core.database.conn.version.EDatabaseVersion4Drivers;
import org.talend.core.model.repository.ERepositoryObjectType;
import org.talend.core.runtime.services.IGenericDBService;
import org.talend.core.runtime.services.IGenericWizardService;
/**
* cli class global comment. Detailled comment
@@ -326,6 +327,16 @@ public enum EDatabaseConnTemplate {
databaseType.add(typeName);
}
}
// add additional jdbc (actually JDBC RepositoryObjectType)
if (GlobalServiceRegister.getDefault().isServiceRegistered(IGenericWizardService.class)) {
IGenericWizardService service = GlobalServiceRegister.getDefault().getService(IGenericWizardService.class);
if (service != null) {
List<String> allAdditionalJDBCTypes = service.getAllAdditionalJDBCTypes();
if (!allAdditionalJDBCTypes.isEmpty()) {
databaseType.addAll(allAdditionalJDBCTypes);
}
}
}
if (sort) {
String[] sortedArray = databaseType.toArray(new String[0]);
Arrays.sort(sortedArray, new Comparator<String>() {

View File

@@ -58,7 +58,7 @@ public enum EDatabaseVersion4Drivers {
HSQLDB_SERVER(new DbVersion4Drivers(EDatabaseTypeName.HSQLDB_SERVER, "hsqldb.jar")), //$NON-NLS-1$
HSQLDB_WEBSERVER(new DbVersion4Drivers(EDatabaseTypeName.HSQLDB_WEBSERVER, "hsqldb.jar")), //$NON-NLS-1$
H2(new DbVersion4Drivers(EDatabaseTypeName.H2, "h2-1.3.160.jar")), //$NON-NLS-1$
H2(new DbVersion4Drivers(EDatabaseTypeName.H2, "h2-1.4.198.jar")), //$NON-NLS-1$
//
JAVADB_EMBEDED(new DbVersion4Drivers(EDatabaseTypeName.JAVADB_EMBEDED, "derby.jar")), //$NON-NLS-1$
@@ -102,12 +102,12 @@ public enum EDatabaseVersion4Drivers {
GREENPLUM(new DbVersion4Drivers(EDatabaseTypeName.GREENPLUM, "postgresql-8.4-703.jdbc4.jar")), //$NON-NLS-1$
// PSQL_V10(new DbVersion4Drivers(EDatabaseTypeName.PSQL, "v10", "V10", "postgresql-42.2.5.jar")),
PSQL_V9_X(new DbVersion4Drivers(EDatabaseTypeName.PSQL, "v9 and later", "V9_X", "postgresql-42.2.9.jar")), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
PSQL_V9_X(new DbVersion4Drivers(EDatabaseTypeName.PSQL, "v9 and later", "V9_X", "postgresql-42.2.14.jar")), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
PSQL_PRIOR_TO_V9(new DbVersion4Drivers(EDatabaseTypeName.PSQL, "Prior to v9", "PRIOR_TO_V9", "postgresql-8.4-703.jdbc4.jar")), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
PLUSPSQL_PRIOR_TO_V9(new DbVersion4Drivers(EDatabaseTypeName.PLUSPSQL,
"Prior to v9", "PRIOR_TO_V9", "postgresql-8.4-703.jdbc4.jar")), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
PLUSPSQL_V9_X(new DbVersion4Drivers(EDatabaseTypeName.PLUSPSQL, "v9 and later", "V9_X", "postgresql-9.4-1201.jdbc41.jar")), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
PLUSPSQL_V9_X(new DbVersion4Drivers(EDatabaseTypeName.PLUSPSQL, "v9 and later", "V9_X", "postgresql-42.2.14.jar")), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
IBMDB2(new DbVersion4Drivers(EDatabaseTypeName.IBMDB2, new String[] { "db2jcc4.jar", "db2jcc_license_cu.jar", //$NON-NLS-1$ //$NON-NLS-2$
"db2jcc_license_cisuz.jar" })), //$NON-NLS-1$
IBMDB2ZOS(new DbVersion4Drivers(EDatabaseTypeName.IBMDB2ZOS, new String[] { "db2jcc4.jar", "db2jcc_license_cu.jar", //$NON-NLS-1$ //$NON-NLS-2$

View File

@@ -20,6 +20,8 @@ package org.talend.core.hadoop;
public class HadoopConstants {
public static final String SPARK_LOCAL_MODE = "SPARK_LOCAL_MODE";
public static final String SPARK_LOCAL_VERSION = "SPARK_LOCAL_VERSION";
public static final String SPARK_MODE = "SPARK_MODE";

View File

@@ -81,6 +81,11 @@ public final class ComponentUtilities {
public static void setNodeValue(NodeType node, String name, String value) {
ElementParameterType property = getNodeProperty(node, name);
if (property == null) {
throw new IllegalArgumentException( "The component node "+node.getComponentName()+" doesn't have the property "+name );
}
property.setValue(value);
}

View File

@@ -111,6 +111,6 @@ public interface IComponentsFactory {
public Map<String, File> getComponentsProvidersFolder();
public List<ComponentProviderInfo> getComponentsProvidersInfo();
public IComponent getComponentByDisplayName(String displayName, String paletteType);
public String getCustomComponentBundlePath();
}

View File

@@ -72,7 +72,7 @@ public class ContextUtils {
"static", "void", "class", "finally", "long", "strictfp", "volatile", "const", "float", "native", "super", "while")); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$ //$NON-NLS-6$ //$NON-NLS-7$ //$NON-NLS-8$ //$NON-NLS-9$ //$NON-NLS-10$ //$NON-NLS-11$ //$NON-NLS-12$
private static final Set<String> SECURE_SENSITIVE_CONTEXT_NAMES_EXP = new HashSet<String>(Arrays.asList("resource_flow_temp_folder", "resource_webhook_payload", "resource_file_[\\w]+",
"resource_directory_[\\w]+", "connection_[a-zA-Z0-9]+_[\\w]"));
"resource_directory_[\\w]+", "connection_[a-zA-Z0-9]+_[\\w]+"));
/**
@@ -594,7 +594,7 @@ public class ContextUtils {
return false;
}
// need check the raw value, because in sourceParam, it's raw
if (!sourceParam.getValue().equals(targetParamType.getRawValue())) {
if (!StringUtils.equals(sourceParam.getValue(), targetParamType.getRawValue())) {
return false;
}

View File

@@ -320,7 +320,8 @@ public class JobContextManager implements IContextManager {
contextParam = new JobContextParameter();
contextParam.setContext(context);
contextParam.setName(contextParamType.getName());
contextParam.setPrompt(contextParamType.getPrompt());
contextParam.setPrompt(
contextParamType.getPrompt() == null ? (contextParamType.getName() + "?") : contextParamType.getPrompt());
contextParam.setInternalId(contextParamType.getInternalId());
originalParamerters.add(contextParam.getName());
boolean exists = true;

View File

@@ -20,12 +20,14 @@ import java.util.Set;
import org.eclipse.core.runtime.IProgressMonitor;
import org.talend.commons.exception.BusinessException;
import org.talend.core.GlobalServiceRegister;
import org.talend.core.IService;
import org.talend.core.model.general.ModuleNeeded.ELibraryInstallStatus;
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;
@@ -116,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;
@@ -133,4 +139,14 @@ public interface ILibrariesService extends IService {
public void afterChangingLibraries();
}
public static ILibrariesService get() {
GlobalServiceRegister gsr = GlobalServiceRegister.getDefault();
if (gsr != null) {
if (gsr.isServiceRegistered(ILibrariesService.class)) {
return gsr.getService(ILibrariesService.class);
}
}
return null;
}
}

View File

@@ -28,6 +28,7 @@ import org.talend.core.runtime.CoreRuntimePlugin;
import org.talend.core.runtime.maven.MavenArtifact;
import org.talend.core.runtime.maven.MavenConstants;
import org.talend.core.runtime.maven.MavenUrlHelper;
import org.talend.core.utils.TalendQuoteUtils;
/**
* This bean is use to manage needed moduless (perl) and libraries (java).<br/>
@@ -110,6 +111,15 @@ public class ModuleNeeded {
}
public static ModuleNeeded newInstance(String context, String value, String informationMsg, boolean required) {
String val = TalendQuoteUtils.removeQuotesIfExist(value);
if (val.startsWith(MavenUrlHelper.MVN_PROTOCOL)) {
return new ModuleNeeded(context, informationMsg, required, val);
}
// won't do migration for old MODULE_LIST but still make it compatible
return new ModuleNeeded(context, val, informationMsg, required);
}
/**
* DOC smallet ModuleNeeded constructor comment.
*

View File

@@ -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);

View File

@@ -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);

View File

@@ -31,6 +31,7 @@ import org.talend.core.database.conn.ConnParameterKeys;
import org.talend.core.database.conn.DatabaseConnStrUtil;
import org.talend.core.database.conn.version.EDatabaseVersion4Drivers;
import org.talend.core.model.components.EComponentType;
import org.talend.core.model.metadata.Dbms;
import org.talend.core.model.metadata.IMetadataTable;
import org.talend.core.model.metadata.MetadataTalendType;
import org.talend.core.model.metadata.builder.ConvertionHelper;
@@ -155,6 +156,17 @@ public class ComponentToRepositoryProperty {
conn.setDbmsId(mapping);
}
}
// set default mapping for additional jdbc
if (GlobalServiceRegister.getDefault().isServiceRegistered(IGenericWizardService.class)) {
IGenericWizardService service = GlobalServiceRegister.getDefault().getService(IGenericWizardService.class);
if (service != null) {
Dbms dbms4AdditionalJDBC = service.getDbms4AdditionalJDBC(conn.getProductId());
if (dbms4AdditionalJDBC != null) {
conn.setDbmsId(dbms4AdditionalJDBC.getId());
}
}
}
}
for (IElementParameter param : node.getElementParameters()) {
String repositoryValue = param.getRepositoryValue();
@@ -368,19 +380,18 @@ public class ComponentToRepositoryProperty {
if (para.getRepositoryValue().endsWith(EDatabaseTypeName.GENERAL_JDBC.getProduct())) {
connection.setDatabaseType(EDatabaseTypeName.GENERAL_JDBC.getProduct());
connection.setProductId(EDatabaseTypeName.GENERAL_JDBC.getProduct());
if (!node.getComponent().getDisplayName().equals(node.getComponent().getName())) {
// additional JDBC e.g. Delta Lake
if (GlobalServiceRegister.getDefault().isServiceRegistered(IGenericWizardService.class)) {
IGenericWizardService service = GlobalServiceRegister.getDefault()
.getService(IGenericWizardService.class);
if (service != null) {
String database = service.getDatabseNameByNode(node);
if (StringUtils.isNotBlank(database)) {
connection.setProductId(database);
}
}
// additional JDBC e.g. Delta Lake
if (GlobalServiceRegister.getDefault().isServiceRegistered(IGenericWizardService.class)) {
IGenericWizardService service = GlobalServiceRegister.getDefault()
.getService(IGenericWizardService.class);
if (service != null) {
String database = service.getDatabseNameByNode(node);
if (StringUtils.isNotBlank(database) && service.getIfAdditionalJDBCDBType(database)) {
connection.setProductId(database);
}
}
}
}

View File

@@ -1490,21 +1490,24 @@ public class RepositoryToComponentProperty {
}
if (value.equals("USE_SSL") && (EDatabaseTypeName.HIVE.getDisplayName().equals(databaseType)
|| EDatabaseTypeName.ORACLE_CUSTOM.getDisplayName().equals(databaseType))) {
|| EDatabaseTypeName.ORACLE_CUSTOM.getDisplayName().equals(databaseType)
|| EDatabaseTypeName.IMPALA.getDisplayName().equals(databaseType))) {
String message = connection.getParameters().get(ConnParameterKeys.CONN_PARA_KEY_USE_SSL);
return Boolean.parseBoolean(message);
}
if ((value.equals("SSL_TRUST_STORE") || value.equals("SSL_TRUSTSERVER_TRUSTSTORE"))
&& (EDatabaseTypeName.HIVE.getDisplayName().equals(databaseType)
|| EDatabaseTypeName.ORACLE_CUSTOM.getDisplayName().equals(databaseType))) {
|| EDatabaseTypeName.ORACLE_CUSTOM.getDisplayName().equals(databaseType)
|| EDatabaseTypeName.IMPALA.getDisplayName().equals(databaseType))) {
return getAppropriateValue(connection,
connection.getParameters().get(ConnParameterKeys.CONN_PARA_KEY_SSL_TRUST_STORE_PATH));
}
if ((value.equals("SSL_TRUST_STORE_PASSWORD") || value.equals("SSL_TRUSTSERVER_PASSWORD"))
&& (EDatabaseTypeName.HIVE.getDisplayName().equals(databaseType)
|| EDatabaseTypeName.ORACLE_CUSTOM.getDisplayName().equals(databaseType))) {
|| EDatabaseTypeName.ORACLE_CUSTOM.getDisplayName().equals(databaseType)
|| EDatabaseTypeName.IMPALA.getDisplayName().equals(databaseType))) {
return getAppropriateValue(connection, connection
.getValue(connection.getParameters().get(ConnParameterKeys.CONN_PARA_KEY_SSL_TRUST_STORE_PASSWORD), false));
}
@@ -1766,6 +1769,38 @@ public class RepositoryToComponentProperty {
if ("IMPALA_DRIVER".equals(value)) {
return connection.getParameters().get(ConnParameterKeys.IMPALA_DRIVER);
}
if (value.equals("GOOGLE_PROJECT_ID")) {
String projectId = connection.getParameters().get(ConnParameterKeys.CONN_PARA_KEY_HIVE_GOOGLE_PROJECT_ID);
return getAppropriateValue(connection, projectId);
}
if (value.equals("GOOGLE_CLUSTER_ID")) {
String clusterId = connection.getParameters().get(ConnParameterKeys.CONN_PARA_KEY_HIVE_GOOGLE_CLUSTER_ID);
return getAppropriateValue(connection, clusterId);
}
if (value.equals("GOOGLE_REGION")) {
String region = connection.getParameters().get(ConnParameterKeys.CONN_PARA_KEY_HIVE_GOOGLE_REGION);
return getAppropriateValue(connection, region);
}
if (value.equals("GOOGLE_JARS_BUCKET")) {
String jarsBucket = connection.getParameters().get(ConnParameterKeys.CONN_PARA_KEY_HIVE_GOOGLE_JARS_BUCKET);
return getAppropriateValue(connection, jarsBucket);
}
if (value.equals("DEFINE_PATH_TO_GOOGLE_CREDENTIALS")) {
String usePathToCredentials = connection.getParameters()
.get(ConnParameterKeys.CONN_PARA_KEY_HIVE_AUTHENTICATION_DEFINE_PATH_TO_GOOGLE_CREDENTIALS);
return Boolean.parseBoolean(usePathToCredentials);
}
if (value.equals("PATH_TO_GOOGLE_CREDENTIALS")) {
String pathToCredentials = connection.getParameters()
.get(ConnParameterKeys.CONN_PARA_KEY_HIVE_AUTHENTICATION_PATH_TO_GOOGLE_CREDENTIALS);
return getAppropriateValue(connection, pathToCredentials);
}
return null;
}

View File

@@ -44,6 +44,7 @@ public enum EComponentCategory {
DYNAMICS_SETTINGS(Messages.getString("EComponentCategory_dynamicSetting"), 13), //$NON-NLS-1$
SQL_PATTERN(Messages.getString("EComponentCategory_sqlTemplate"), 14), //$NON-NLS-1$
BREAKPOINT(Messages.getString("EComponentCategory.breakpoint"), 15), //$NON-NLS-1$
BREAKPOINT_CAMEL(Messages.getString("EComponentCategory.breakpoint"), 16), //$NON-NLS-1$
BASICRUN(Messages.getString("EComponentCategory.basicRun"), 1), //$NON-NLS-1$
DEBUGRUN(Messages.getString("EComponentCategory.debugRun"), 2), //$NON-NLS-1$
ADVANCESETTING(Messages.getString("EComponentCategory.advancedSettings"), 3), //$NON-NLS-1$

View File

@@ -113,8 +113,6 @@ public enum EParameterFieldType {
GROUPING_CAMPAIGN_CHOOSER, // htyin added for DQ Matching components
MULTI_PATTERN, // yyin added TDQ-13437
SYNC_NEXUS_BUTTON,
CHECK_NEXUS_BUTTON,
PATTERN_PROPERTY, // yyin, added TDQ-13437
UNIFIED_COMPONENTS,

View File

@@ -232,4 +232,6 @@ public interface IElementParameter {
public boolean isSerialized();
public void setSerialized(boolean isSerialized);
public boolean isSelectedFromItemValue();
}

View File

@@ -131,4 +131,6 @@ public interface IProcess extends IElement {
public void checkStartNodes();
public String getComponentsType();
public INode getNodeByUniqueName(String uniqueName);
}

View File

@@ -21,6 +21,7 @@ import java.util.List;
import java.util.Map;
import org.apache.commons.lang.StringUtils;
import org.eclipse.emf.common.util.EList;
import org.talend.commons.exception.ExceptionHandler;
import org.talend.commons.exception.PersistenceException;
import org.talend.commons.utils.VersionUtils;
@@ -53,6 +54,7 @@ import org.talend.core.utils.BitwiseOptionUtils;
import org.talend.designer.core.IDesignerCoreService;
import org.talend.designer.core.model.utils.emf.talendfile.ContextParameterType;
import org.talend.designer.core.model.utils.emf.talendfile.ContextType;
import org.talend.designer.core.model.utils.emf.talendfile.ElementParameterType;
import org.talend.designer.core.model.utils.emf.talendfile.MetadataType;
import org.talend.designer.core.model.utils.emf.talendfile.NodeType;
import org.talend.designer.core.model.utils.emf.talendfile.ProcessType;
@@ -60,6 +62,7 @@ import org.talend.designer.core.model.utils.emf.talendfile.RoutinesParameterType
import org.talend.designer.runprocess.ItemCacheManager;
import org.talend.repository.ProjectManager;
import org.talend.repository.model.IProxyRepositoryFactory;
import org.apache.commons.text.StringEscapeUtils;
/**
* DOC bqian class global comment. Detailled comment
@@ -1003,4 +1006,49 @@ public final class ProcessUtils {
}
return false;
}
public static boolean isChildRouteProcess(IProcess process) {
if (process != null) {
for (INode node : process.getGraphicalNodes()) {
if ((node.getComponent().getName() != null) &&
(node.getComponent().getName().compareTo("tRouteInput") == 0)) {
return true;
}
}
}
return false;
}
public static String escapeJava(String input) {
return StringEscapeUtils.escapeJava(input);
}
public static boolean hasJettyEndpoint(ProcessType process) {
EList<NodeType> nodesList = process.getNode();
boolean hasJettyEndpoint = hasJettyEndpoint(nodesList);
return hasJettyEndpoint;
}
private static boolean hasJettyEndpoint(EList<NodeType> nodesList) {
for (NodeType node : nodesList) {
if ("cMessagingEndpoint".equals(node.getComponentName())) {
for (Object elementParameter : node.getElementParameter()) {
ElementParameterType elementParameterType = (ElementParameterType)elementParameter;
String name = elementParameterType.getName();
String value = elementParameterType.getValue();
if ("URI".equals(name) && (value != null && StringUtils.startsWith(value.trim(), "\"jetty:"))) {
return true;
}
}
}
}
return false;
}
}

View File

@@ -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$
@@ -963,7 +966,7 @@ public class RelationshipItemBuilder {
Map<Relation, Set<Relation>> itemRelations = getRelatedRelations(item);
Set<Relation> repositoryNode = (Set<Relation>) itemRelations.get(relation);
Set<Relation> repositoryNode = (Set<Relation>) itemRelations.getOrDefault(relation, new HashSet<Relation>());
for (Relation rel : repositoryNode) {
if (rel.getType().equals("Beans")) {

View File

@@ -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;
@@ -1414,12 +1431,8 @@ public class ERepositoryObjectType extends DynaEnum<ERepositoryObjectType> {
return null;
}
public static List<ERepositoryObjectType> getAllTypesOfProcess() {
public static List<ERepositoryObjectType> getAllTypesOfBigDataProcess() {
List<ERepositoryObjectType> allTypes = new ArrayList<ERepositoryObjectType>();
if (ERepositoryObjectType.PROCESS != null) {
allTypes.add(ERepositoryObjectType.PROCESS);
}
if (ERepositoryObjectType.PROCESS_MR != null) {
allTypes.add(ERepositoryObjectType.PROCESS_MR);
}
@@ -1432,6 +1445,17 @@ public class ERepositoryObjectType extends DynaEnum<ERepositoryObjectType> {
if (ERepositoryObjectType.PROCESS_SPARKSTREAMING != null) {
allTypes.add(ERepositoryObjectType.PROCESS_SPARKSTREAMING);
}
return allTypes;
}
public static List<ERepositoryObjectType> getAllTypesOfProcess() {
List<ERepositoryObjectType> allTypes = new ArrayList<ERepositoryObjectType>();
allTypes.addAll(getAllTypesOfBigDataProcess());
if (ERepositoryObjectType.PROCESS != null) {
allTypes.add(ERepositoryObjectType.PROCESS);
}
if (ERepositoryObjectType.PROCESS_ROUTE != null) {
allTypes.add(ERepositoryObjectType.PROCESS_ROUTE);
}
@@ -1498,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;
}
}
}

View File

@@ -27,6 +27,8 @@ public interface SVNConstant {
public static final String NAME_MASTER = "master"; //$NON-NLS-1$
public static final String NAME_MAIN = "main"; //$NON-NLS-1$
public static final String NAME_ORIGIN = "origin"; //$NON-NLS-1$
/*

View File

@@ -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;
}
}

View File

@@ -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();
}

View File

@@ -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)) {

View File

@@ -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;
}
}

View File

@@ -320,24 +320,28 @@ public class RepositoryUpdateManagerHelper {
// all the jobs
for (IRepositoryViewObject process : processRep) {
Item item = process.getProperty().getItem();
boolean found = false;
for (IProcess2 open : openedProcessList) {
if (open.getId().equals(item.getProperty().getId())) {
found = true;
try {
Item item = process.getProperty().getItem();
boolean found = false;
for (IProcess2 open : openedProcessList) {
if (open.getId().equals(item.getProperty().getId())) {
found = true;
}
}
}
if (found) {
continue;
}
checkMonitorCanceled(parentMonitor);
parentMonitor.subTask(RepositoryUpdateManager.getUpdateJobInfor(item.getProperty()));
if (found) {
continue;
}
checkMonitorCanceled(parentMonitor);
parentMonitor.subTask(RepositoryUpdateManager.getUpdateJobInfor(item.getProperty()));
// List<UpdateResult> resultFromProcess = getResultFromProcess(process, types, onlySimpleShow);
// List<UpdateResult> resultFromProcess = getResultFromProcess(process, types, onlySimpleShow);
List<UpdateResult> resultFromProcess = getUpdatesNeededFromItems(parentMonitor, item, types);
if (resultFromProcess != null) {
resultList.addAll(resultFromProcess);
List<UpdateResult> resultFromProcess = getUpdatesNeededFromItems(parentMonitor, item, types);
if (resultFromProcess != null) {
resultList.addAll(resultFromProcess);
}
} catch (Exception ex) {
ExceptionHandler.process(ex);
}
parentMonitor.worked(1);
}

View File

@@ -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) {

View File

@@ -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("\"")) {

View File

@@ -15,6 +15,7 @@ package org.talend.core.model.utils;
import java.util.ArrayList;
import java.util.List;
import org.talend.core.GlobalServiceRegister;
import org.talend.core.model.metadata.builder.connection.Connection;
import org.talend.core.model.metadata.builder.connection.DatabaseConnection;
import org.talend.core.model.metadata.designerproperties.RepositoryToComponentProperty;
@@ -23,6 +24,7 @@ import org.talend.core.model.properties.ContextItem;
import org.talend.core.model.properties.Item;
import org.talend.core.model.repository.ERepositoryObjectType;
import org.talend.core.model.update.UpdatesConstants;
import org.talend.core.runtime.services.IGenericWizardService;
/**
* ggu class global comment. Detailled comment
@@ -47,6 +49,14 @@ public final class UpdateRepositoryHelper {
if (connection instanceof DatabaseConnection) {
String currentDbType = (String) RepositoryToComponentProperty.getValue(connection, UpdatesConstants.TYPE,
null);
String productId = ((DatabaseConnection) connection).getProductId();
if (GlobalServiceRegister.getDefault().isServiceRegistered(IGenericWizardService.class)) {
IGenericWizardService service = GlobalServiceRegister.getDefault()
.getService(IGenericWizardService.class);
if (service != null && service.getIfAdditionalJDBCDBType(productId)) {
currentDbType = productId;
}
}
aliasName += " (" + currentDbType + ")"; //$NON-NLS-1$ //$NON-NLS-2$
}
if (repositoryObjectType.getType().equals("SERVICES")) {

View File

@@ -73,4 +73,6 @@ public interface IRepositoryArtifactHandler {
public String resolveRemoteSha1(MavenArtifact artifact, boolean fromRelease) throws Exception;
public List<MavenArtifact> search(String name, boolean fromSnapshot) throws Exception;
}

View File

@@ -19,7 +19,9 @@ import java.io.InputStream;
import java.net.URI;
import java.net.URISyntaxException;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import org.apache.commons.lang.StringUtils;
import org.apache.http.HttpEntity;
@@ -53,6 +55,14 @@ public class NexusServerUtils {
// the max search result is 200 by defult from nexus
private static final int MAX_SEARCH_COUNT = 200;
public static final Set<String> IGNORED_TYPES = new HashSet<String>();
static {
IGNORED_TYPES.add("pom");
IGNORED_TYPES.add("sha1");
IGNORED_TYPES.add("md5");
}
/**
*
* DOC check if the repository exist or not
@@ -236,36 +246,36 @@ public class NexusServerUtils {
private static int readDocument(Document document, List<MavenArtifact> artifacts) throws Exception {
List<Node> list = document.selectNodes("/searchNGResponse/data/artifact");//$NON-NLS-1$
for (Node arNode : list) {
MavenArtifact artifact = new MavenArtifact();
artifacts.add(artifact);
artifact.setGroupId(arNode.selectSingleNode("groupId").getText());//$NON-NLS-1$
artifact.setArtifactId(arNode.selectSingleNode("artifactId").getText());//$NON-NLS-1$
artifact.setVersion(arNode.selectSingleNode("version").getText());//$NON-NLS-1$
Node descNode = arNode.selectSingleNode("description");//$NON-NLS-1$
if (descNode != null) {
artifact.setDescription(descNode.getText());
}
Node urlNode = arNode.selectSingleNode("url");//$NON-NLS-1$
if (urlNode != null) {
artifact.setUrl(urlNode.getText());
}
Node licenseNode = arNode.selectSingleNode("license");//$NON-NLS-1$
if (licenseNode != null) {
artifact.setLicense(licenseNode.getText());
}
Node licenseUrlNode = arNode.selectSingleNode("licenseUrl");//$NON-NLS-1$
if (licenseUrlNode != null) {
artifact.setLicenseUrl(licenseUrlNode.getText());
}
List<Node> artLinks = arNode.selectNodes("artifactHits/artifactHit/artifactLinks/artifactLink");//$NON-NLS-1$
for (Node link : artLinks) {
MavenArtifact artifact = new MavenArtifact();
artifact.setGroupId(arNode.selectSingleNode("groupId").getText());//$NON-NLS-1$
artifact.setArtifactId(arNode.selectSingleNode("artifactId").getText());//$NON-NLS-1$
artifact.setVersion(arNode.selectSingleNode("version").getText());//$NON-NLS-1$
Node descNode = arNode.selectSingleNode("description");//$NON-NLS-1$
if (descNode != null) {
artifact.setDescription(descNode.getText());
}
Node urlNode = arNode.selectSingleNode("url");//$NON-NLS-1$
if (urlNode != null) {
artifact.setUrl(urlNode.getText());
}
Node licenseNode = arNode.selectSingleNode("license");//$NON-NLS-1$
if (licenseNode != null) {
artifact.setLicense(licenseNode.getText());
}
Node licenseUrlNode = arNode.selectSingleNode("licenseUrl");//$NON-NLS-1$
if (licenseUrlNode != null) {
artifact.setLicenseUrl(licenseUrlNode.getText());
}
Node extensionElement = link.selectSingleNode("extension");//$NON-NLS-1$
String extension = null;
String classifier = null;
if (extensionElement != null) {
if ("pom".equals(extensionElement.getText())) {//$NON-NLS-1$
if (IGNORED_TYPES.contains(extensionElement.getText())) {// $NON-NLS-1$
continue;
}
extension = extensionElement.getText();
@@ -276,6 +286,7 @@ public class NexusServerUtils {
}
artifact.setType(extension);
artifact.setClassifier(classifier);
artifacts.add(artifact);
}
}
return list.size();
@@ -370,4 +381,37 @@ public class NexusServerUtils {
}
public static List<MavenArtifact> search(String nexusUrl, String userName, String password, String repositoryId, String name)
throws Exception {
List<MavenArtifact> artifacts = new ArrayList<MavenArtifact>();
int totalCount = 0;
String service = NexusConstants.SERVICES_SEARCH + getSearchQuery(repositoryId, null, null, null, 0, MAX_SEARCH_COUNT)
+ "&q=" + name;
URI requestURI = getSearchURI(nexusUrl, service);
Document document = downloadDocument(requestURI, userName, password);
if (document != null) {
Node countNode = document.selectSingleNode("/searchNGResponse/totalCount");
if (countNode != null) {
try {
totalCount = Integer.parseInt(countNode.getText());
} catch (NumberFormatException e) {
totalCount = 0;
}
}
int searchDone = readDocument(document, artifacts);
while (searchDone < totalCount) {
service = NexusConstants.SERVICES_SEARCH
+ getSearchQuery(repositoryId, null, null, null, searchDone, MAX_SEARCH_COUNT) + "&q=" + name;
requestURI = getSearchURI(nexusUrl, service);
document = downloadDocument(requestURI, userName, password);
searchDone = searchDone + readDocument(document, artifacts);
}
}
return artifacts;
}
}

View File

@@ -231,7 +231,12 @@ public class TalendLibsServerManager {
return canConnect;
}
public ArtifactRepositoryBean getTalentArtifactServer() {
public boolean isProxyArtifactRepoConfigured() {
ArtifactRepositoryBean serverBean = getProxyArtifactServer();
return serverBean == null ? false : true;
}
public ArtifactRepositoryBean getProxyArtifactServer() {
ArtifactRepositoryBean serverBean = new ArtifactRepositoryBean();
// get from ini file first
String url = System.getProperty(NEXUS_PROXY_URL);
@@ -255,9 +260,16 @@ public class TalendLibsServerManager {
serverBean.setType(prefManager.getValue(TalendLibsServerManager.NEXUS_PROXY_TYPE));
}
}
hasProxySetting = StringUtils.isNotEmpty(serverBean.getServer());
// use default
if (!hasProxySetting) {
if (StringUtils.isNotEmpty(serverBean.getServer())) {
return serverBean;
}
return null;
}
public ArtifactRepositoryBean getTalentArtifactServer() {
ArtifactRepositoryBean serverBean = getProxyArtifactServer();
if (serverBean == null) {
serverBean = new ArtifactRepositoryBean();
serverBean.setServer(TALEND_LIB_SERVER);
serverBean.setUserName(TALEND_LIB_USER);
serverBean.setPassword(TALEND_LIB_PASSWORD);

View File

@@ -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$
@@ -208,4 +208,8 @@ public interface ITalendCorePrefConstants {
public static final int ARTIFACT_PROXY_SETTING = 1;
public static final String NEXUS_SHARE_LIBS = "NEXUS_SHARE_LIBS";
public static final boolean NEXUS_SHARE_LIBS_DEFAULT = false;
}

View File

@@ -30,5 +30,7 @@ public interface IHDistribution {
IHDistributionVersion getHDVersion(String v, boolean byDisplay);
boolean useCustom();
boolean isSparkLocal();
}

View File

@@ -46,6 +46,8 @@ public interface MavenConstants {
static final String EXCLUDE_DELETED_ITEMS = "EXCLUDE_DELETED_ITEMS";
static final String SKIP_FOLDERS = "SKIP_FOLDERS";
/*
* for lib
*/

View File

@@ -174,7 +174,7 @@ public class MavenUrlHelper {
if (jarName != null && jarName.length() > 0) {
String artifactId = jarName;
String type = null;
if (jarName.endsWith(MavenConstants.TYPE_JAR)) { // remove the extension .jar
if (jarName.endsWith("." + MavenConstants.TYPE_JAR)) { // remove the extension .jar
artifactId = jarName.substring(0, jarName.lastIndexOf(MavenConstants.TYPE_JAR) - 1);
if (withPackage) {
type = MavenConstants.TYPE_JAR;
@@ -380,4 +380,44 @@ public class MavenUrlHelper {
}
return buffer.toString();
}
public static String getSNAPSHOTVersion(String rVersion) {
if (rVersion == null) {
return rVersion;
}
if (rVersion.contains("-")) {
return rVersion.substring(0, rVersion.indexOf("-") + 1) + MavenUrlHelper.VERSION_SNAPSHOT;
}
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;
}
}

View File

@@ -30,6 +30,8 @@ public interface ITalendProcessJavaProject {
IJavaProject getJavaProject();
boolean exists();
IProject getProject();
Property getPropery();

View File

@@ -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();

View File

@@ -51,6 +51,8 @@ public interface TalendProcessArgumentConstant {
static final String ARG_NEED_XMLMAPPINGS = "NEED_XMLMAPPINGS";
static final String ARG_NEED_RULES = "NEED_RULES";
static final String ARG_NEED_JETTY_SERVER = "NEED_JETTY_SERVER";
static final String ARG_ENABLE_WATCH = "ENABLE_WATCH";

View File

@@ -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;
}

View File

@@ -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;
}
}

View File

@@ -20,6 +20,7 @@ import org.eclipse.swt.widgets.Composite;
import org.talend.commons.ui.swt.actions.ITreeContextualAction;
import org.talend.components.api.properties.ComponentProperties;
import org.talend.core.IService;
import org.talend.core.model.metadata.Dbms;
import org.talend.core.model.metadata.IMetadataTable;
import org.talend.core.model.metadata.builder.connection.Connection;
import org.talend.core.model.metadata.builder.connection.DatabaseConnection;
@@ -149,13 +150,18 @@ public interface IGenericWizardService extends IService {
*/
public ITreeContextualAction getDefaultAction(RepositoryNode node);
public void initAdditionalJDBCRepositoryObjType();
public void loadAdditionalJDBC();
public List<String> getAllAdditionalJDBCTypes();
public boolean getIfAdditionalJDBCDBType(String dbType);
public void initAdditonalJDBCConnectionValue(DatabaseConnection connection, Composite dynamicForm, String dbType,
String propertyId);
public String getDefinitionName4AdditionalJDBC(IElement element);
public String getDatabseNameByNode(IElement node);
public Dbms getDbms4AdditionalJDBC(String typeName);
}

View File

@@ -0,0 +1,16 @@
package org.talend.core.runtime.util;
//============================================================================
//
//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
//
//============================================================================
public interface ComponentsLocationProvider {
}

View File

@@ -0,0 +1,17 @@
package org.talend.core.runtime.util;
//============================================================================
//
//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
//
//============================================================================
public interface SharedStudioInfoProvider {
public boolean isSupportCurrentMode();
}

View File

@@ -0,0 +1,171 @@
// ============================================================================
//
// 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.util;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.NullProgressMonitor;
import org.eclipse.core.runtime.Path;
import org.eclipse.core.runtime.Platform;
import org.talend.commons.exception.ExceptionHandler;
import org.talend.core.GlobalServiceRegister;
import org.talend.core.model.components.IComponentsFactory;
import org.talend.core.runtime.CoreRuntimePlugin;
import org.talend.core.service.IUpdateService;
import org.talend.utils.io.FilesUtils;
import org.talend.utils.string.DigestUtil;
public class SharedStudioUtils {
public static final String FILE_EXTRA_FEATURE_INDEX = "extra_feature.index"; //$NON-NLS-1$
public static final String SIGNATURE_FILE_NAME_SUFFIX = ".sig"; //$NON-NLS-1$
public static final String PROP_DEVMODE = "osgi.dev"; //$NON-NLS-1$
public static boolean updateExtraFeatureFile() {
File userConfigFolder = new File(Platform.getConfigurationLocation().getURL().getPath());
File studioConfigFolder = new File(Platform.getInstallLocation().getURL().getPath(), "configuration");//$NON-NLS-1$
if (!userConfigFolder.getAbsolutePath().equals(studioConfigFolder.getAbsolutePath())) {
File studioExtraFile = new File(studioConfigFolder, FILE_EXTRA_FEATURE_INDEX);
File studioExtraSignFile = new File(studioConfigFolder, FILE_EXTRA_FEATURE_INDEX + SIGNATURE_FILE_NAME_SUFFIX);
File userExtraFile = new File(userConfigFolder, FILE_EXTRA_FEATURE_INDEX);
File userExtraSignFile = new File(userConfigFolder, FILE_EXTRA_FEATURE_INDEX + SIGNATURE_FILE_NAME_SUFFIX);
boolean isNeedUpdate = false;
if (!studioExtraSignFile.exists() && userExtraSignFile.exists()) {
userExtraSignFile.delete();
if (userExtraFile.exists()) {
userExtraFile.delete();
}
return true;
} else if (studioExtraSignFile.exists()) {
isNeedUpdate = true;
}
if (isNeedUpdate) {
try {
FilesUtils.copyFile(studioExtraFile, userExtraFile);
FilesUtils.copyFile(studioExtraSignFile, userExtraSignFile);
} catch (IOException ex) {
ExceptionHandler.process(ex);
}
return true;
}
}
return false;
}
public static boolean isSharedStudioMode() {
if (isDevEnvironment()) {
return false;
}
File configFolder = new File (Platform.getConfigurationLocation().getURL().getFile());
File studioFolder = new File (Platform.getInstallLocation().getURL().getFile());
if (configFolder != null && studioFolder != null && configFolder.getParentFile() != null
&& configFolder.getParentFile().getAbsolutePath().equals(studioFolder.getAbsolutePath())) {
return false;
}
return true;
}
private static boolean isDevEnvironment() {
if (CoreRuntimePlugin.getInstance().getBundle().getBundleContext().getProperty(PROP_DEVMODE) != null) {
return true;
}
return false;
}
public static boolean isNeedCleanOnSharedMode() {
if (SharedStudioUtils.isSharedStudioMode()) {
boolean isNeedClean = installedPatch();
String studioArtifactsFileSha256Hex = getStudioArtifactsFileSha256Hex();
if (updateArtifactsFileSha256Hex(studioArtifactsFileSha256Hex)) {
isNeedClean = true;
}
return isNeedClean;
}
return false;
}
public static boolean updateArtifactsFileSha256Hex(String studioArtifactsFileSha256Hex) {
if (GlobalServiceRegister.getDefault().isServiceRegistered(IUpdateService.class)) {
IUpdateService updateService = GlobalServiceRegister.getDefault().getService(IUpdateService.class);
try {
return updateService.updateArtifactsFileSha256Hex(new NullProgressMonitor(), studioArtifactsFileSha256Hex);
} catch (Exception e) {
ExceptionHandler.process(e);
}
}
return false;
}
public static boolean installedPatch() {
if (GlobalServiceRegister.getDefault().isServiceRegistered(IUpdateService.class)) {
IUpdateService updateService = GlobalServiceRegister.getDefault().getService(IUpdateService.class);
try {
return updateService.syncSharedStudioLibraryInPatch(new NullProgressMonitor());
} catch (Exception e) {
ExceptionHandler.process(e);
}
}
return false;
}
public static File getSharedStudioComponentsParentFolder() {
File configFolder = new File(Platform.getConfigurationLocation().getURL().getFile());
return configFolder;
}
public static File getSharedStudioComponentsExtFolder() {
File componentFolder = SharedStudioUtils.getSharedStudioComponentsParentFolder();
IPath path = new Path(IComponentsFactory.COMPONENTS_INNER_FOLDER);
path = path.append(IComponentsFactory.EXTERNAL_COMPONENTS_INNER_FOLDER);
File extchangeFolder = new File (componentFolder, path.toOSString());
return extchangeFolder;
}
public static IPath getTempFolderPath() {
if (SharedStudioUtils.isSharedStudioMode()) {
Path wsPath = new Path(Platform.getInstanceLocation().getURL().getPath());
return wsPath.append("temp");
} else {
return new Path(System.getProperty("user.dir")).append("temp");
}
}
public static String getStudioArtifactsFileSha256Hex() {
File studioArtifactsFile = new File(Platform.getInstallLocation().getURL().getPath(), "artifacts.xml");//$NON-NLS-1$
if (studioArtifactsFile.exists()) {
InputStream inputStream = null;
try {
inputStream = new FileInputStream(studioArtifactsFile);
return DigestUtil.sha256Hex(inputStream);
} catch (FileNotFoundException e) {
ExceptionHandler.process(e);
} catch (IOException e) {
ExceptionHandler.process(e);
} finally {
if (inputStream != null) {
try {
inputStream.close();
} catch (IOException ex) {
ExceptionHandler.process(ex);
}
}
}
}
return "";
}
}

View File

@@ -38,4 +38,12 @@ public interface IDQComponentService extends IService {
* @param node The node which need to be modified
*/
void correctlyCustomMatcherParameter(NodeType node);
/**
* Change the attribute of MatchingData and use Integer value instead of double value.
*
* @param node The node which need to be modified
*/
void covertConfindWeight2Int(NodeType node);
}

View File

@@ -17,9 +17,11 @@ import java.nio.file.Path;
import java.util.Set;
import java.util.stream.Stream;
import org.eclipse.swt.graphics.Image;
import org.talend.core.IService;
import org.talend.core.model.components.IComponent;
import org.talend.core.model.properties.Item;
import org.talend.core.model.repository.ERepositoryObjectType;
/**
* For documentation, see implementation in org.talend.sdk.component.studio-integration plugin
@@ -33,4 +35,6 @@ public interface ITaCoKitDependencyService extends IService {
Stream<IComponent> getJobComponents(Item item);
Path findM2Path();
Image getTaCoKitImageByRepositoryType(ERepositoryObjectType repObjType);
}

View File

@@ -20,5 +20,11 @@ public interface IUpdateService extends IService {
boolean checkComponentNexusUpdate();
void syncComponentM2Jars(IProgressMonitor monitor);
public boolean syncSharedStudioLibraryInPatch(IProgressMonitor monitor) throws Exception;
public String getSharedStudioMissingPatchVersion();
public boolean updateArtifactsFileSha256Hex(IProgressMonitor monitor, String studioArtifactsFileShaCodeHex);
}

View File

@@ -13,6 +13,7 @@
package org.talend.core.ui;
import org.talend.core.IService;
import org.talend.core.runtime.maven.MavenArtifact;
/**
* @author hwang
@@ -21,5 +22,7 @@ import org.talend.core.IService;
public interface IInstalledPatchService extends IService {
public String getLatestInstalledVersion(boolean isBar);
public MavenArtifact getLastIntalledP2Patch();
}

View File

@@ -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;
}
}

View File

@@ -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;
}
}
}
}
}
}
}

View File

@@ -0,0 +1,60 @@
package org.talend.core.utils;
import java.util.Arrays;
import java.util.List;
import org.eclipse.core.runtime.OperationCanceledException;
import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Display;
import org.talend.commons.CommonsPlugin;
public class DialogUtils {
private static ELoginInfoCase finalCase;
public static void setWarningInfo(ELoginInfoCase warnningInfo) {
finalCase = warnningInfo;
}
public static void syncOpenWarningDialog(String title) {
if (CommonsPlugin.isHeadless() || DialogUtils.finalCase == null) {
return;
}
int dialogType = DialogUtils.finalCase.getDialogType();
String[] contents = DialogUtils.finalCase.getContents();
List<String> asList = Arrays.asList(contents);
StringBuffer sb = new StringBuffer();
asList.forEach(w -> {
sb.append(w);
sb.append("\n");// $NON-NLS-1$
});
int[] selectIndex = new int[1];
Display.getDefault().syncExec(new Runnable() {
@Override
public void run() {
String[] dialogButtonLabels = new String[] { IDialogConstants.OK_LABEL, IDialogConstants.CANCEL_LABEL, };
if (dialogType == MessageDialog.ERROR) {
dialogButtonLabels = new String[] { IDialogConstants.CANCEL_LABEL };
}
int open = MessageDialog.open(dialogType, Display.getDefault().getActiveShell(), title, sb.toString(), SWT.NONE,
dialogButtonLabels);
selectIndex[0] = open;
}
});
DialogUtils.finalCase = null;
if (dialogType == MessageDialog.ERROR) {
throw new OperationCanceledException(""); //$NON-NLS-1$
}
if (1 == selectIndex[0]) {
throw new OperationCanceledException(""); //$NON-NLS-1$
}
}
}

View File

@@ -0,0 +1,40 @@
package org.talend.core.utils;
import org.eclipse.jface.dialogs.MessageDialog;
public enum ELoginInfoCase {
STUDIO_LOWER_THAN_PROJECT(MessageDialog.ERROR),
STUDIO_HIGHER_THAN_PROJECT(MessageDialog.WARNING);
private int dialogType;
private String[] contents;
ELoginInfoCase(int dialogType) {
this.dialogType = dialogType;
}
ELoginInfoCase(int dialogType, String[] contents) {
this.dialogType = dialogType;
this.contents = contents;
}
public int getDialogType() {
return dialogType;
}
public void setDialogType(int dialogType) {
this.dialogType = dialogType;
}
public String[] getContents() {
return contents;
}
public void setContents(String[] contents) {
this.contents = contents;
}
}

View File

@@ -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) {

View File

@@ -53,4 +53,8 @@ public interface ITalendSynchronizer {
void deleteRoutinefile(IRepositoryViewObject objToDelete);
void syncAllInnerCodes() throws SystemException;
void syncAllInnerCodesForLogOn() throws SystemException;
}

View File

@@ -43,6 +43,8 @@ public interface ICamelDesignerCoreService extends IService {
public boolean isInstanceofCamelBeans(Item item);
boolean isInstanceofCamelBeansJar(Item item);
/**
* Synchronized Route resource
*

Some files were not shown because too many files have changed in this diff Show More