Compare commits

...

393 Commits

Author SHA1 Message Date
dochkas-talend
2c04a360a3 added bigger timeout 2022-06-20 17:56:47 +03:00
zshen-talend
89433520a1 fix(TDQ-19623): make sure project name never force lowercase (#7660) 2022-06-17 10:15:06 +08:00
sbieliaievl
e22fe46720 fix(APPINT-33830) - fixed issue with timeout param upon migration (#7603)
* fix(APPINT-33830) - added migration project task

* fix(APPINT-33830) - added migration file
2022-06-16 13:44:50 +08:00
AlixMetivier
deb67d297d feat(TBD-13823): spark local 3.2.x GA (#7652) 2022-06-15 13:45:04 +03:00
zshen-talend
a9d6a44b7f fix(TDQ-19623): make sure build job action work for reference project (#7651) 2022-06-15 18:15:03 +08:00
Dmytro Sylaiev
fc81e0bd2f feat(TDI-47398): migrate adal4j to msal4j mscrm (#7556)
* feat(TDI-47398): Change adal4j to msal4j for talend-mscrm

* feat(TDI-47398): Change dependencies for tMicrosoftCRMXXX

* feat(TDI-47398): Implement oauth token acquiring

* chore(TDI-47398): Small microbes fix
2022-06-14 22:49:00 +03:00
hcyi
8faa1bba22 fix(TUP-35508):Better to improve context prompt for JDBC. (#7623)
* fix(TUP-35508):Better to improve context prompt for JDBC.

* fix(TUP-35508):Better to improve context prompt for JDBC.

* fix(TUP-35508):Better to improve context prompt for JDBC.

* fix(TUP-35508):Better to improve context prompt for JDBC.

* fix(TUP-35508):Better to improve context prompt for JDBC.
2022-06-14 15:06:18 +08:00
wang wei
5ff663a025 fix(TCOMP-2122): [JDBC TCK]: can't get user defined schema info in tck (#7536)
runtime in studio when no data outut line
2022-06-14 10:31:48 +08:00
hzhao-talendbj
e610fc7c78 801 loc trans 2022 06 09 (#7644)
* Add localized files (#7640)

Co-authored-by: jenkins-git <jenkins-git@talend.com>

* Add localized files (#7642)

Co-authored-by: jenkins-git <jenkins-git@talend.com>

Co-authored-by: Alexiane Yvonet <ayvonet@talend.com>
Co-authored-by: jenkins-git <jenkins-git@talend.com>
Co-authored-by: Xuwei ZHU <xzhu@talend.com>
2022-06-09 19:38:14 +08:00
Dmytro Sylaiev
71adfe57ed fix(TDI-47951): Don't set null passw for sso auth (#7580)
* fix(TDI-47951): Don't set null passw for sso auth

* fix(TDI-47951): Handle possible NPE

* For tRedshiftUnload and tRedshiftBE/OBE
2022-06-09 13:47:14 +03:00
Jane Ding
6da3235e82 feat(TUP-33085):Add Icon(s) to open Help (#7571)
* feat(TUP-33085):Add Icon(s) to open Help
https://jira.talendforge.org/browse/TUP-33085

* feat(TUP-33085):Add Icon(s) to open Help
https://jira.talendforge.org/browse/TUP-33085
fix(TUP-35782):[bug] button 'Online help' can't work for some TCK
components
https://jira.talendforge.org/browse/TUP-35782
2022-06-09 17:56:01 +08:00
Dmytro Grygorenko
9a9348dbd7 fix(TDI-47935): bump "nimbus-jose-jwt" lib to fix CVE. (#7641) 2022-06-09 10:47:46 +03:00
Chao MENG
ef141d231f item(TUP-35556): Handle demo feedbacks for update from TMC (#7596)
https://jira.talendforge.org/browse/TUP-35556
2022-06-09 10:50:22 +08:00
jiezhang-tlnd
ba9b07a7ef export dataset need with datastore (#7579)
* export dataset need with datastore

* issue is that deleting datastore but dataset not be deleted

* fix selection issue on export wizard

* fomat code

* format code

* improve performance

* improve performance by adding objectType

* improve code and handle import issue

* code format
2022-06-09 10:01:35 +08:00
jiezhang-tlnd
ac33871bcf fix(TUP-35683)doc use job for route, joblet for routelet (#7630)
https://jira.talendforge.org/browse/TUP-35683
2022-06-08 15:16:13 +08:00
sbieliaievl
be61612d11 fix(APPINT-24774) - POST/PUT operations when importing API in (#7544)
tRESTRequest should declare a body parameter
2022-06-08 08:46:35 +03:00
jiezhang-tlnd
78f11e1915 feat(TUP-34931)Support Sybase 17 (#7620) 2022-06-08 09:49:45 +08:00
hzhao-talendbj
1c2cc10d46 801 loc trans 2022 06 02 (#7615)
* Add localized files (#7609)

Co-authored-by: jenkins-git <jenkins-git@talend.com>

* Add localized files (#7610)

Co-authored-by: jenkins-git <jenkins-git@talend.com>

* Add localized files (#7611)

Co-authored-by: jenkins-git <jenkins-git@talend.com>

Co-authored-by: Alexiane Yvonet <ayvonet@talend.com>
Co-authored-by: jenkins-git <jenkins-git@talend.com>
Co-authored-by: tsasada-talend <51699524+tsasada-talend@users.noreply.github.com>
Co-authored-by: jzhangbj <jzhang@talend.com>
2022-06-06 10:37:27 +08:00
zyuan-talend
a3efe44a58 fix(TUP-35622):Add missed org.talend.libraries.esb items when building studio index (#7566)
* fix(TUP-35622):Add missed org.talend.libraries.esb items when building studio index

* fix(TUP-35622):Add missed org.talend.designer.esb.components.rs.consumer
items when building studio index
2022-06-06 09:45:35 +08:00
pyzhou
ec95a0660d fix(TDI-48069):tRedshiftBulkExec wrong version (#7607) 2022-06-02 19:39:22 +08:00
wang wei
5dad003e3a fix(TDI-48037): CVE: org.postgresql:postgresql:42.2.14 (#7573) 2022-06-02 16:37:57 +08:00
hcyi
286748d5e0 feat(TUP-34854):Setup custom JKS for signature by System Property (#7367)
* feat(TUP-34854):Setup custom JKS for signature by System Property

* feat(TUP-34854):improve for Setup custom JKS for signature by System
Property

* feat(TUP-34854): upgrade version of signer-maven-plugin to 8.0.3

* feat(TUP-34855):Setup custom JKS for job signature from GUI.

* feat(TUP-34855):Setup custom JKS for job signature from GUI.

* feat(TUP-34855):Setup custom JKS for job signature from GUI.
2022-06-02 10:52:12 +08:00
Chao MENG
68e17cf5c9 Cmeng/fix/tup 35585 zero install tck 8 (#7569)
* fix(TUP-35585): Zero install fail to install custom tck component in
801.
https://jira.talendforge.org/browse/TUP-35585
2022-06-02 09:55:54 +08:00
Jill Yan
c577b2214d Jill/m80/APPINT-34618 fix: sqljdbc_auth.dll already loaded in another classloader (#7584)
* APPINT-34618 remove mssql-jdbc dependency

* APPINT-34618 add mssql-jdbc in import-package for child job

* APPINT-34618 add mssql-jdbc to import-package if used in child job

Co-authored-by: jillyan <yan955599@gmail.com>
2022-06-02 09:10:42 +08:00
Jane Ding
bca61021d8 feat(TUP-35301):[JDBC TCK]: Support MODULE_LIST field for studio tck (#7517)
* feat(TUP-35301):[JDBC TCK]: Support MODULE_LIST field for studio tck
plugin
https://jira.talendforge.org/browse/TUP-35301

* feat(TUP-35301):[JDBC TCK]: Support MODULE_LIST field for studio tck
plugin
https://jira.talendforge.org/browse/TUP-35301

* feat(TUP-35301):[JDBC TCK]: Support MODULE_LIST field for studio tck
plugin
https://jira.talendforge.org/browse/TUP-35301

* feat(TUP-35301):[JDBC TCK]: Support MODULE_LIST field for studio tck
plugin
https://jira.talendforge.org/browse/TUP-35301
fix(TUP-35716):[bug] new JDBC driver column will be always set to mvn
after reopen wizard
https://jira.talendforge.org/browse/TUP-35716
driver table contains path=mvn:xxxx/xxxx

* feat(TUP-35301):[JDBC TCK]: Support MODULE_LIST field for studio tck
plugin
https://jira.talendforge.org/browse/TUP-35301
2022-06-01 16:09:38 +08:00
wang wei
42456991d0 fix(TDI-47803): Compile error after applying Patch_20220107_R2022-01_v1-7.3.1 (#7474) 2022-06-01 11:25:33 +08:00
jiezhang-tlnd
2dfd3d1208 feat(TUP-28853)tRunjob is ok, need handle joblet (#7484)
* feat(TUP-28853)tRunjob is ok, need handle joblet

* generation document is ok from standard process

* format code

* reduce the same item to improve performance

* Remove duplicates to improve performance and fix preview picture missing
issue

* handle latest version on tRunjob

* handle version for joblet

* hanlde version

* improve performance with VersionList

* handle BD process part

* handle BD process

* handle route process

* code formate

* format code
2022-05-31 17:02:26 +08:00
Dmytro Sylaiev
9c7f9f8765 feat(TDI-44884): Correct missing label change (#7593) 2022-05-31 11:53:05 +03:00
Oleksandr Zhelezniak
d3608fce0a fix(TDI-47895): oracle input float length (#7545)
* force to use 38 as length for NUMBER (FLOAT) in oracle when getPrecision returns value bigger than 38
* getPrecision for Float Oracle returns 126.
* It's expected binary precision for FLOAT Oracle type. The decimal precision for it is 38.
2022-05-31 11:05:02 +03:00
bhe-talendbj
cf6ad2ea56 chore(TUP-35685): upgrade database driver version (#7576) 2022-05-31 11:38:49 +08:00
Chao MENG
0fc2cb145b fix(TUP-35633): 'Use local Update settings' checkbox should not be (#7578)
displayed in studio update settings when TMC update config is not set
for the project.
https://jira.talendforge.org/browse/TUP-35633
2022-05-31 10:15:03 +08:00
Oleksandr Zhelezniak
9fdefd85a8 fix(TDI-45946): greenplum mapping (#7514)
* add mapping type in XML for input and output
* migration task, replace mapping type from postgres_id to greenplum_id
2022-05-30 16:15:10 +03:00
hzhao-talendbj
841e254160 Add localized files (#7588) (#7589)
Co-authored-by: jenkins-git <jenkins-git@talend.com>

Co-authored-by: Alexiane Yvonet <ayvonet@talend.com>
Co-authored-by: jenkins-git <jenkins-git@talend.com>
2022-05-30 15:57:35 +08:00
hzhao-talendbj
b773a3822f 801 trans 2022 05 27 (#7585)
* Add localized files (#7582)

Co-authored-by: jenkins-git <jenkins-git@talend.com>

* Add localized files (#7583)

Co-authored-by: jenkins-git <jenkins-git@talend.com>

Co-authored-by: tsasada-talend <51699524+tsasada-talend@users.noreply.github.com>
Co-authored-by: jenkins-git <jenkins-git@talend.com>
Co-authored-by: jzhangbj <jzhang@talend.com>
2022-05-30 10:35:44 +08:00
Zhiwei Xue
8e7c5367d6 fix(TUP-35613):Can't display the dataset settings of AzureAdlsGen2 (#7564)
metadata wizard with CSV format in default GUI size
2022-05-27 10:35:34 +08:00
Chao MENG
285c1cd61c fix(TUP-35608): Stat and Logs screen - Database connection dropdown incorrect (#7560)
* fix(TUP-35608): Stat and Logs screen - Database connection dropdown
incorrect
https://jira.talendforge.org/browse/TUP-35608

* fix(TUP-35608): Stat and Logs screen - Database connection dropdown
incorrect
https://jira.talendforge.org/browse/TUP-35608
2022-05-26 19:44:51 +08:00
hcyi
563429e649 fix(TUP-35326):[JDBC TCK]: can't pass table value to runtime when use existed connection (#7505)
* fix(TUP-35326):[JDBC TCK]: can't pass table value to runtime when use
existed connection

* fix(TUP-35326):[JDBC TCK]: can't pass table value to runtime when use
existed connection

* Merge remote-tracking branch 'origin/maintenance/8.0' into
hcyi/TUP-35326_8.0
2022-05-26 15:29:07 +08:00
Zhiwei Xue
23b3fbdcf1 fix(TUP-31233):Routine pom is not updated after installed the required (#7543)
* fix(TUP-31233):Routine pom is not updated after installed the required
jar of user routine

* fix(TUP-31233):Routine pom is not updated after installed the required
jar of user routine

* fix(TUP-31233):Routine pom is not updated after installed the required
jar of user routine
2022-05-25 18:04:57 +08:00
Dmytro Sylaiev
954dd78d68 feat(TDI-44884): Change the label of Sybase SA (#7558) 2022-05-24 19:40:35 +03:00
wang wei
56200c66e8 fix(TDI-47958): [JDBC TCK]: support the component like tjdbcrow which have 3 modes in studio(#7501) 2022-05-23 14:01:49 +08:00
wang wei
bd99549311 fix(TDI-47966): [JDBC TCK]: We have a input/mapper which is defined by Emitter, that don't works for using existed connection(#7511) 2022-05-23 14:01:31 +08:00
hzhao-talendbj
b689b068e4 fix(TUP-28879): JDBC metadata`s modification cannot be porpagated to (#7508)
components
2022-05-20 18:14:34 +08:00
Chao MENG
a898ccc320 fix(TUP-35616): Problems on the \ processing on the password field after TUP-32821 (#7552)
* fix(TUP-35616): Problems on the \ processing on the password field after
TUP-32821
https://jira.talendforge.org/browse/TUP-35616

* Update PasswordDialog.java

* fix(TUP-35616): Problems on the \ processing on the password field after
TUP-32821
https://jira.talendforge.org/browse/TUP-35616
2022-05-19 19:25:15 +08:00
hzhao-talendbj
6280d524ff 801 loc translate 2022 05 19 (#7554)
* Add localized files (#7549)

Co-authored-by: jenkins-git <jenkins-git@talend.com>

* Add localized files (#7550)

Co-authored-by: jenkins-git <jenkins-git@talend.com>

Co-authored-by: Alexiane Yvonet <ayvonet@talend.com>
Co-authored-by: jenkins-git <jenkins-git@talend.com>
Co-authored-by: tsasada-talend <51699524+tsasada-talend@users.noreply.github.com>
2022-05-19 18:44:51 +08:00
Dmytro Ochkas
d62e535ed0 fix(TDI-47932): EncryptClientSecretMicrosoftCRMMigrationTask returns wrong value (#7491)
Added modification check
2022-05-19 11:14:30 +03:00
Dmytro Ochkas
872b792ad1 fix(TDI-47879): tExtractJSONFields NB_LINE not updated
Removed destination property from tExtractJSONFields. Created migration to remove the property from .item file
2022-05-19 10:50:43 +03:00
pyzhou
bc84f657ba feat(TDI-47152):tFileFetch upgrade v4 (#7403)
* feat(TDI-47152):tFileFetch upgrade v4

* feat(TDI-47687):promote jar imports

* feat(TDI-47687):adjust show if

* fix(TDI-47152):  compile error

* fix(TDI-47152):  read cookie

* bad content type

* error message

* compile error
2022-05-18 14:43:56 +08:00
bhe-talendbj
15cf7ddb70 fix(TUP-35590): update slf4j (#7538) 2022-05-17 18:03:15 +08:00
Jane Ding
6f4ea42405 fix(TUP-33119):SuggestionValues.Item label is received at runtime (#7535)
instead of id when used inside table
https://jira.talendforge.org/browse/TUP-33119
2022-05-17 17:44:01 +08:00
Oleksandr Zhelezniak
732d3f1479 fix(TDI-46054): support java11 mscrm onprem 2015 (#7490)
* add jaxb-api-2.3.1
* add jaxws-api-2.3.1
* add javax.annotation-api-1.3.2
* align slf4j dependencies to 1.7.29
2022-05-17 10:45:34 +03:00
Jane Ding
d504323cc1 Revert "fix(TUP-33119):SuggestionValues.Item label is received at runtime (#7320)" (#7533)
This reverts commit b521f4208a.
2022-05-16 15:51:15 +08:00
Chao MENG
474360f154 chore: fix junit failure issue (#7532) 2022-05-16 12:10:30 +08:00
Chao MENG
617f0d2e2c chore: update message (#7530) 2022-05-13 18:07:56 +08:00
Emmanuel GALLOIS
2b6b3cbd4d fix(TCOMP-2003): Maven dependency classifier considered as version in dependencies.txt by Studio (#7302) (#7303)
* fix(TCOMP-2003): fix Mvn.toLocation in GAV parsing

(cherry picked from commit 8f5d517779)
2022-05-13 11:17:34 +02:00
hzhao-talendbj
2bf70b9940 801 loc 2022 05 12 (#7526)
* Add localized files (#7524)

Co-authored-by: jenkins-git <jenkins-git@talend.com>

* Add localized files (#7525)

Co-authored-by: jenkins-git <jenkins-git@talend.com>

Co-authored-by: tsasada-talend <51699524+tsasada-talend@users.noreply.github.com>
Co-authored-by: jenkins-git <jenkins-git@talend.com>
Co-authored-by: jzhangbj <jzhang@talend.com>
2022-05-12 21:04:15 +08:00
Chao MENG
49a00f57d1 Cmeng/feat/tup 33928 tmc update 8 (#7464)
* feat(TUP-33928): Controlled Studio Updates from TMC
https://jira.talendforge.org/browse/TUP-33928
2022-05-12 18:59:01 +08:00
Chao MENG
f21f45c28d feat(TUP-32821): Credential property value in json format in tck framework (#7452)
* feat(TUP-32821): Credential property value in json format in tck
framework
https://jira.talendforge.org/browse/TUP-32821

* feat(TUP-32821): Credential property value in json format in tck
framework
https://jira.talendforge.org/browse/TUP-32821

* fix(TUP-35529): MarkLogic password display not properly
https://jira.talendforge.org/browse/TUP-35529
2022-05-12 18:35:27 +08:00
Chao MENG
0c4dfba75c fix(TUP-35400): Save snowflake metadata failed when selected table name (#7510)
start with number
https://jira.talendforge.org/browse/TUP-35400
2022-05-12 18:27:22 +08:00
hcyi
08b2202bf4 feat(TUP-34889):Support to prompt Context on Metadata Connection (#7469)
* feat(TUP-34889):Support to prompt Context on Metadata Connection

* feat(TUP-34889):improve for Support to prompt Context on Metadata
Connection

* feat(TUP-34889):improve for Support to prompt Context on Metadata

* feat(TUP-34889):fix bug TUP-35370 and TUP-35372

* feat(TUP-34889):fix bug TUP-35486

* feat(TUP-34889):fix bug TUP-35503 and TUP-35504

* feat(TUP-34889):fix bug TUP-35503 and TUP-35504
2022-05-12 17:08:29 +08:00
sponomarova
d26fb2cc29 feat(TBD-13581): Dataproc 2.x support for di jobs (#7488) 2022-05-12 11:25:23 +03:00
hcyi
7f0bc14fd6 fix(TUP-32889):Credential value with double quotes in tck framework (#7304)
* fix(TUP-32889):Credential value with double quotes in tck framework

* fix(TUP-32889):add junits

* fix(TUP-32889):Credential value with double quotes in tck framework
2022-05-12 15:18:51 +08:00
Wei Hua
ada20f06cb APPINT-34569 [801]Job including tRESTand tRESTClient deployed to runtime with error: com.sun.jersey.api.client.ClientHandlerException (#7516) 2022-05-11 14:47:37 +02:00
apoltavtsev
469fce3a70 fix(APPINT-34578) MDM components causing 'java.lang.ClassNotFoundException' (#7521) 2022-05-11 11:57:11 +02:00
hcyi
a5f73b2d14 feat(TUP-28953):move change to other util class . (#7513) 2022-05-11 11:31:03 +08:00
Jane Ding
b521f4208a fix(TUP-33119):SuggestionValues.Item label is received at runtime (#7320)
* fix(TUP-33119):SuggestionValues.Item label is received at runtime
instead of id when used inside table
https://jira.talendforge.org/browse/TUP-33119

* fix(TUP-33119):SuggestionValues.Item label is received at runtime
instead of id when used inside table
https://jira.talendforge.org/browse/TUP-33119

* fix(TUP-33119):SuggestionValues.Item label is received at runtime
instead of id when used inside table
https://jira.talendforge.org/browse/TUP-33119

* fix(TUP-33119):SuggestionValues.Item label is received at runtime
instead of id when used inside table
https://jira.talendforge.org/browse/TUP-33119

* fix(TUP-33119):SuggestionValues.Item label is received at runtime
instead of id when used inside table
https://jira.talendforge.org/browse/TUP-33119

* fix(TUP-33119):SuggestionValues.Item label is received at runtime
instead of id when used inside table
https://jira.talendforge.org/browse/TUP-33119
2022-05-11 10:38:21 +08:00
Olha V
e462d54ebb fix(TDI-47519): Kafka ssl conflict with schema registry (#7325) (#7507)
* fix(TDI-47519): Kafka ssl conflict with schema registry

* add migration task

* fix(TDI-47519): Kafka ssl conflict with schema registry

* fix schema registry ssl configuration for empty kafka tSetKeystore

* fix(TDI-47519): Kafka ssl conflict with schema registry

* add null check for schema registry use ssl property

* fix(TDI-47519): Kafka ssl conflict with schema registry

* fix migration for empty tSetKeystore in existing connection

* fix(TDI-47519): Kafka ssl conflict with schema registry

* add null check for https settings
* clean up code

* fix(TDI-47519): Kafka ssl conflict with schema registry

* fix migrated status
2022-05-09 16:32:56 +03:00
Oleksandr Zhelezniak
13ea203175 chore(TDI-47688): bump jackson (#7379)
* jackson to 2.13.2
* jackson-databind to  2.13.2.2
2022-05-09 14:47:05 +03:00
Jane Ding
e6d62056f3 fix(TUP-35252):Additional parameter can not update to the job after (#7445)
* fix(TUP-35252):Additional parameter can not update to the job after
modified.
https://jira.talendforge.org/browse/TUP-35252

* fix(TUP-35252):Additional parameter can not update to the job after
modified.
https://jira.talendforge.org/browse/TUP-35252
2022-05-07 10:05:40 +08:00
Dmytro Grygorenko
340ee0738a feat(TDI-45870): checkbox in tWriteJSONField to avoid use of scientific notation for float values. (#7502) 2022-05-06 16:06:38 +03:00
hcyi
55afb8808a fix(TUP-35248):Context password exposed when hovering over context on (#7499)
Talend 8
2022-05-06 15:56:25 +08:00
hzhao-talendbj
9fe757d8ac Add localized files (#7493) (#7497)
* Add localized files (#7493)

Co-authored-by: jenkins-git <jenkins-git@talend.com>

* Add localized files (#7496)

Co-authored-by: jenkins-git <jenkins-git@talend.com>

Co-authored-by: Alexiane Yvonet <ayvonet@talend.com>
Co-authored-by: jenkins-git <jenkins-git@talend.com>
Co-authored-by: tsasada-talend <51699524+tsasada-talend@users.noreply.github.com>
2022-05-06 09:43:08 +08:00
Emmanuel GALLOIS
c4b5674205 fix(TCOMP-1963): adapt correct Metadata from schema (#6711) (#7487)
(cherry picked from commit e556a39c4e)
2022-05-05 09:34:59 +02:00
hcyi
32ab9862cf Hcyi/tup 28953 8.0 (#7422)
* feat(TUP-28953):Spark Big Data/streaming job are missing "open another
version" action.

* feat(TUP-28953):add junits
2022-05-05 14:04:08 +08:00
wang wei
a78d75cd75 fix(TDI-47819): tJDBCInput component results in error with Dynamic schema inTalend latest versions. (#7426) 2022-05-05 13:36:22 +08:00
Dmytro Grygorenko
20589b75f2 feat(TDI-45629): add dynamic schema support for tFileOutputJSON. (#7486) 2022-04-29 17:30:56 +03:00
sbliu
0d5ce18334 Add localized files (#7483)
Co-authored-by: Alexiane Yvonet <ayvonet@talend.com>
Co-authored-by: tsasada-talend <51699524+tsasada-talend@users.noreply.github.com>
Co-authored-by: jzhangbj <jzhang@talend.com>
2022-04-28 18:34:25 +08:00
pyzhou
062c36b33c Pyzhou/tdi 43829 zip4j2 tfile archive 8.0 (#7477)
* feat(TDI-43829): Add support for zip4j 2.x libraries to tFileArchive/unArchive components

# Conflicts:
#	main/plugins/org.talend.designer.components.libs/libs_src/talendzip/pom.xml

* fix(TDI-43829): move IntegrityUtil.java

# Conflicts:
#	main/plugins/org.talend.designer.components.libs/libs_src/checkArchive/pom.xml
2022-04-28 16:44:57 +08:00
hcyi
5f9c3c089e fix(TUP-35078):tJDBCSCDELT does not work correctly on Snowflake. (#7393)
* fix(TUP-35078):tJDBCSCDELT does not work correctly on Snowflake.

* fix(TUP-35078):add junits
2022-04-25 17:19:12 +08:00
sbliu
160fe02147 Add localized files (#7471)
Co-authored-by: Alexiane Yvonet <ayvonet@talend.com>
Co-authored-by: jzhangbj <jzhang@talend.com>
2022-04-24 10:15:33 +08:00
Tetiana Meronyk
c01f9c84c7 fix(TDI-47257): tELTOracleOutput does not print messages during execution unlike other tELT***Output components (#7388) 2022-04-22 01:46:28 +03:00
AlixMetivier
3612331c6b fix(TBD-13517): set default value as 3.1 for univ (#7465) 2022-04-21 14:15:29 +02:00
vyu-talend
8de3f29911 fix(TDI-46584):modify limit label. (#7459) 2022-04-20 18:10:58 +08:00
sponomarova
69e7b7fa77 fix(TBD-13798): CVE: Replace log4j1.x by reload4j for org.talend.libraries.hadoop.mapr.5.0.0 (#7449) 2022-04-20 11:27:59 +03:00
Jane Ding
399df5fe10 fix(TUP-35238):Drag and drop Redshift metadata to list components lost (#7441)
some components
https://jira.talendforge.org/browse/TUP-35238
2022-04-19 17:42:48 +08:00
Chao MENG
2fe7acf5ac chore: fix swtbot issue (#7447) 2022-04-19 11:12:56 +08:00
Dmytro Sylaiev
d0cb6c1337 fix(TDI-47802): Fix short strings as Clobs (#7425)
* Add warning for long strings as varchar
2022-04-18 15:32:56 +03:00
Laurent BOURGEOIS
df355a4388 feat(TBD-13522):CDE - GA (#7358) 2022-04-15 17:59:10 +02:00
Dmytro Ochkas
d5cb99e5a7 fix(TDI-47539): MSCRM Application secret as password (#7437)
Update migration task
2022-04-15 12:17:18 +03:00
sbliu
eae6a2c262 Add localized files (#7434)
Co-authored-by: tsasada-talend <51699524+tsasada-talend@users.noreply.github.com>
Co-authored-by: jzhangbj <jzhang@talend.com>
2022-04-15 15:10:50 +08:00
Jane Ding
d40c50f1ba feat(TUP-35069):Upgrade Redshift driver to v2.x (#7433)
https://jira.talendforge.org/browse/TUP-35069
2022-04-14 17:45:45 +08:00
Tetiana Meronyk
33809a44b2 feat(TDI-47263): Upgrade Redshift driver to v2.x (#7056)
* feat(TDI-47263): Upgrade Redshift driver to v2.x

* Add dependency aws-java-sdk-redshift-internal-1.12.x.jar

* UI change

* Connection javajet

* Connection javajet change

* Row generate code

* Migration task

* input compile error

* input compile error

* add back jar version

* add back jar version

* class version

* migration add tCreate table

* feat(TUP-35069):Upgrade Redshift driver to v2.x (#7411)

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

Co-authored-by: pyzhou <pyzhou@talend.com>
Co-authored-by: Jane Ding <jding@talend.com>
2022-04-14 17:43:37 +08:00
yyin
e0ea03fcfe Feat TDQ-20141 add param algoVersion (#7428) 2022-04-14 16:05:45 +08:00
Jane Ding
6a5ab216e4 fix(TUP-35238):Drag and drop Redshift metadata to list components lost (#7419)
* fix(TUP-35238):Drag and drop Redshift metadata to list components lost
some components
https://jira.talendforge.org/browse/TUP-35238

* fix(TUP-35238):Drag and drop Redshift metadata to list components lost
some components
https://jira.talendforge.org/browse/TUP-35238
2022-04-14 16:04:55 +08:00
bhe-talendbj
b184ad5fa4 fix(TUP-35191): fix java path (#7394)
* fix(TUP-35191): fix java path

* fix(TUP-35191): fix java path

* fix(TUP-35191): fix java path

* fix(TUP-35191): fix java path

* fix(TUP-35191): add junit

* fix(TUP-35191): add junit

* fix(TUP-35191): add junit

* fix(TUP-35191): add junit

* fix(TUP-35191): update junit package

* fix(TUP-35191): find java instead of guess

* fix(TUP-35191): find java instead of guess
2022-04-13 17:50:03 +08:00
Jane Ding
966c4a2958 fix(TUP-34716):can't get the right (#7347)
* fix(TUP-34716):can't get the right
"ACTIVE_DATABASE_DELIMITED_IDENTIFIERS" property value in tELTMap in
javajet
https://jira.talendforge.org/browse/TUP-34716

* fix(TUP-34716):can't get the right
"ACTIVE_DATABASE_DELIMITED_IDENTIFIERS" property value in tELTMap in
javajet
https://jira.talendforge.org/browse/TUP-34716
2022-04-13 00:48:31 +08:00
wang wei
35af8a3dc5 fix(TDI-47496): Column names in a main query are not enclosed when enabling "Delimited identifiers" (#7392) 2022-04-12 18:11:02 +08:00
vyu-talend
fe3a94ae72 feat(TDI-46111):upgrade teradata jdbc driver to 17. (#7376) 2022-04-12 14:37:26 +08:00
pyzhou
7968396091 feat(TDI-47687):tScp reuse session (#7416)
* feat(TDI-47687):tScp reuse session

* feat(TDI-47687): tSCPFileList

* feat(TDI-47687): tSCPFileList compile error
2022-04-12 11:44:48 +08:00
hcyi
575670e424 feat(TUP-34849):missing a change for the d&d (#7414) 2022-04-12 09:39:55 +08:00
vyu-talend
7c5c9fd082 fix(TDI-46584): tServiceNowInput Limit disable option in Advanced settings not working (#6717) (#7412)
* fix(TDI-46584): tServiceNowInput Limit disable option in Advanced
settings not working

* fix something

* fix more

* fix(TDI-46584):fix the job won't stop issue.

* fix(TDI-46584):fix always reading-all-records issue.

Co-authored-by: vyu <vyu@talend.com>

Co-authored-by: wang wei <wwang@talend.com>
2022-04-11 17:33:54 +08:00
Tetiana Meronyk
3b04b8651d fix(TDI-47133): the log "closing the connection" in tCreateTable is not right (#7359) 2022-04-10 15:47:48 +03:00
Dmytro Ochkas
7ebc296617 chore(TDI-47539): moved EncryptClientSecretMicrosoftCRMMigrationTask.java to correct directory (#7409) 2022-04-08 15:49:13 +03:00
sbliu
d7739e23c5 Add localized files (#7398) (#7407)
Co-authored-by: tsasada-talend <51699524+tsasada-talend@users.noreply.github.com>
2022-04-08 10:06:30 +08:00
sbliu
862bf636ca Add localized files (#7405) (#7406)
Co-authored-by: jzhangbj <jzhang@talend.com>
2022-04-08 09:46:12 +08:00
Chao MENG
e59ce89834 fix(TUP-35034): CI - stop the build if custom component is missing (#7401)
https://jira.talendforge.org/browse/TUP-35034
2022-04-07 16:34:46 +08:00
sbliu
31eb56130e Add localized files (#7396) (#7399)
Co-authored-by: Alexiane Yvonet <ayvonet@talend.com>
2022-04-07 15:57:32 +08:00
Dmytro Ochkas
360bb6ad19 fix(TDI-47539): tMicrosoftCRM change application secret as a password (#7324)
Changed field type and refactored code so that 2 passwords didn't conflict. Created Migration task to encrypt client secret field
2022-04-06 15:50:15 +03:00
vyu-talend
a20d1f73cb chore(TDI-47404):bump cxf version to 3.4.4 (#7313)
* chore(TDI-47404):bump cxf version to 3.4.4

* fix(TDI-47404):delete the codes causing error.

* chore(TDI-47404):bump cxf in talend ws.
2022-04-06 15:40:44 +08:00
sbliu
9367f9e4e2 fix(TUP-27413) add junit (#7377) 2022-04-06 09:39:39 +08:00
Dmytro Grygorenko
1716c4a53d fix(TDI-47725): increment nb_line counter for "on duplicate" output action. (#7390) 2022-04-04 16:45:06 +03:00
clesaec
31abe8e412 TDI-47287 : change ftpput (#7353) 2022-04-04 07:37:50 +02:00
Laurent BOURGEOIS
dba8a49c0d chore:Fix Junit (#7375) 2022-04-01 16:36:51 +02:00
Chao MENG
fe27538b5f fix(TUP-35034): CI - stop the build if custom component is missing (#7380)
https://jira.talendforge.org/browse/TUP-35034
2022-04-01 19:14:34 +08:00
sbliu
ad56c1e790 Add localized files (#7374)
Co-authored-by: Alexiane Yvonet <ayvonet@talend.com>
Co-authored-by: tsasada-talend <51699524+tsasada-talend@users.noreply.github.com>
Co-authored-by: jzhangbj <jzhang@talend.com>
2022-04-01 16:13:47 +08:00
wang wei
64c6017cce fix(TDI-47536): CVE : logback (#7373) 2022-04-01 15:43:05 +08:00
wang wei
ff5018893a fix(TDI-47633): CVE: Replace log4j1.x by reload4j or upgrade to log4j2 (#7330) 2022-04-01 14:32:13 +08:00
jiezhang-tlnd
8faa657699 fix(TUP-34954)CVE: Replace log4j1.x by reload4j (#7329)
* fix(TUP-34954)CVE: Replace log4j1.x by reload4j

* fix(TUP-34954)CVE: Replace log4j1.x by reload4j

* update junits

* exclude log4j from slf4j-log4j12
2022-04-01 14:14:26 +08:00
sbliu
38b038211c fix(TUP-27413) SQL Builder: Graphical Editor is Empty for a specific table. (#7335) 2022-04-01 09:23:07 +08:00
Xilai Dai
3416273d30 fix(APPINT-34443) add missing import packages for tRESTClient (#7361) 2022-03-31 14:16:16 +08:00
Chao MENG
981ee4e4fc Cmeng/fix/tup 35034 err on component missing 8 (#7327)
* fix(TUP-35034): CI - stop the build if custom component is missing
https://jira.talendforge.org/browse/TUP-35034

* fix(TUP-35034): CI - stop the build if custom component is missing
https://jira.talendforge.org/browse/TUP-35034

* fix(TUP-35034): CI - stop the build if custom component is missing
https://jira.talendforge.org/browse/TUP-35034

* fix(TUP-35034): CI - stop the build if custom component is missing
https://jira.talendforge.org/browse/TUP-35034
2022-03-30 16:09:58 +08:00
Dmytro Grygorenko
1a26148bae fix(TDI-47670): BP_801: fix Xpath "count" function for unformatted XML file (#7354)
* fix(TDI-47670): use asXML() method instead of getText().

* fix(TDI-47670): use getStringValue() method instead.

* fix(TDI-47670): use isEmpty() method.
2022-03-29 16:17:01 +03:00
Dmytro Grygorenko
e2b381c4fe fix(TDI-47532): bump XercesImpl library to 2.12.2 (#7350) 2022-03-28 16:26:45 +03:00
Dmytro Ochkas
5e6ce92172 fix(TDI-47560): tSybaseOutput BigDecimal jdbc inconsistencies (#7305)
Set BigDecimal for each Sybase version. Add DBVersion field to Manager class and remove it from OracleManager
2022-03-28 14:00:06 +03:00
wang wei
18f254a8ce fix(TDI-47589): "Write Excel 2007 format" leads to tFileOutputExcel poor performance(#7261) 2022-03-28 14:30:57 +08:00
wwang-talend
15b4174ae0 fix(TDI-47154): no need to generate label code for joblet case if not
change label
2022-03-28 11:20:54 +08:00
Oleksandr Zhelezniak
09a762aff3 fix(TDI-47651): bump Redshift driver to 1.2.55.1083 (#7342) 2022-03-25 11:46:22 +02:00
sbliu
ef18108de7 Add localized files (#7343) (#7344)
Co-authored-by: jzhangbj <jzhang@talend.com>
2022-03-25 16:02:23 +08:00
sbliu
4f5dd9ea91 Add localized files (#7339)
* Add localized files (#7337)

Co-authored-by: jenkins-git <jenkins-git@talend.com>

* Add localized files (#7338)

Co-authored-by: jenkins-git <jenkins-git@talend.com>

Co-authored-by: tsasada-talend <51699524+tsasada-talend@users.noreply.github.com>
Co-authored-by: jenkins-git <jenkins-git@talend.com>
Co-authored-by: Alexiane Yvonet <ayvonet@talend.com>
2022-03-24 17:33:47 +08:00
jiezhang-tlnd
a591b3be76 chore(TUP-34977)Help links in Studio (#7316) 2022-03-21 14:49:47 +08:00
pyzhou
a8d70de160 fix(TDI-47223):CVE_axis2-kernel compile error (#7308)
* fix(TDI-47223):CVE_axis2-kernel compile error

* correct mvn path
2022-03-18 17:34:01 +08:00
Dmytro Grygorenko
8d114ee5ac fix(TDI-47073): fix description for tBigQueryOutput. (#7323) 2022-03-18 10:14:58 +02:00
sbliu
d8be371e3f Add localized files (#7322)
Co-authored-by: Alexiane Yvonet <ayvonet@talend.com>
Co-authored-by: tsasada-talend <51699524+tsasada-talend@users.noreply.github.com>
2022-03-18 11:39:03 +08:00
Chao MENG
c46bb87b51 fix(TUP-34378): Job could build out successfully if contains component which cannot be loaded (#7287)
* fix(TUP-34378): Job could build out successfully if contains component
which cannot be loaded
https://jira.talendforge.org/browse/TUP-34378
2022-03-16 16:19:57 +08:00
jzhao
bfab7d73ff fix(TDI-47373):update IBM MQ client lib to 9.2.4.0 (#7281) 2022-03-16 15:02:01 +08:00
sbliu
b25bdb5cd8 Add localized files (#7300)
* Add localized files (#7290)
* Add localized files (#7297)
* Add localized files (#7298)
2022-03-11 18:31:44 +08:00
pyzhou
c22e448f2e Pyzhou/tdi 47528 CVE mina sshd 8.0 (#7262)
* fix(TDI-47528):CVE mina-sshd

* upgrade talend-scp-helper version

* compile error

* compile error

* compile error

* compile error
2022-03-11 11:29:45 +08:00
Dmytro Sylaiev
c126c49bb0 feat(TDI-47211): Update active dir drivers for mssql (#7057)
* feat(TDI-47211): Update active dir drivers for mssql

* feat(TDI-47211): Fix the pb with component descriptor
2022-03-10 13:58:13 +02:00
Dmytro Sylaiev
a276d55584 fix(TDI-47452): Fix codegen for not valid xpath expression (#7175) 2022-03-10 13:54:38 +02:00
chmyga
b21c2e8854 feat(TDI-46441): add cassandra 4.0 support (#6703)
Co-authored-by: Dmytro Chmyga <dmytro.chmyga@globallogic.com>
Co-authored-by: Dmytro Sylaiev <dmytro.sylaiev@globallogic.com>
2022-03-10 19:07:00 +08:00
Laurent BOURGEOIS
aa58b1798c chore(TBD-13325):CVE on protobuf-java-2.5.0 (#7264) 2022-03-09 09:47:39 +01:00
Jane Ding
55a214d78b fix(TUP-28898):Drag Exasol connection to a job choose tDBOutput(Exasol) (#7260)
* fix(TUP-28898):Drag Exasol connection to a job choose tDBOutput(Exasol)
not work as tExasolOutput
https://jira.talendforge.org/browse/TUP-28898

* fix(TUP-28898):Drag Exasol connection to a job choose tDBOutput(Exasol)
not work as tExasolOutput
https://jira.talendforge.org/browse/TUP-28898
2022-03-09 16:03:40 +08:00
Jane Ding
9ca063156f feat(TUP-33990):Pendo tracking for Studio integrations with API Designer (#7227)
& API Tester
https://jira.talendforge.org/browse/TUP-33990
2022-03-09 14:43:02 +08:00
pyzhou
61d8175d80 fix(TDI-45863): remove Input limit for tck reuse connection (#7088) 2022-03-09 09:20:58 +08:00
wang wei
738b55f748 fix(TDI-47154): send exception info for audit log (#7288) 2022-03-08 22:02:07 +08:00
bhe-talendbj
0ae5d46067 feat(TUP-33809): check modulelist (#7209)
* feat(TUP-33809): check modulelist

* feat(TUP-33809): get all sub jobs
2022-03-08 10:44:03 +08:00
zshen-talend
15aff46503 Zshen/feat/tdq 20069 backport on 80 for patch3 (#7280) 2022-03-07 17:23:58 +08:00
Dmytro Sylaiev
4ca2a26c61 feat(TDI-47211): Revert from R2022-03
This reverts commit ecb8c2d693.
2022-03-07 09:53:41 +02:00
wang wei
8590938a0c fix(TDI-47230): close thread pool for spring boot case (#7272) (#7275) 2022-03-07 09:38:40 +08:00
pyzhou
fb709ec46e feat(TDI-47136):tcreateTable upgrade snowflake driver (#7241) 2022-03-04 17:56:58 +08:00
Chao MENG
2b9b21b2ed fix(TUP-30599): tMap drag and drop does not work seamlessly in Linux GUI (#7269)
as it does in Windows
https://jira.talendforge.org/browse/TUP-30599
2022-03-04 16:13:08 +08:00
Dmytro Grygorenko
54375a9349 fix(TDI-47485): update "protobuf-java" to 3.19.2 (#7187) 2022-03-04 11:09:52 +08:00
jiezhang-tlnd
fa924629aa Backport localized files 0303 (#7277)
* Add localized files (#7231)

Co-authored-by: jenkins-git <jenkins-git@talend.com>

* Add localized files (#7236)

Co-authored-by: jenkins-git <jenkins-git@talend.com>

* Add localized files (#7240)

Co-authored-by: jenkins-git <jenkins-git@talend.com>

* Add localized files (#7276)

Co-authored-by: jenkins-git <jenkins-git@talend.com>

Co-authored-by: tsasada-talend <51699524+tsasada-talend@users.noreply.github.com>
Co-authored-by: jenkins-git <jenkins-git@talend.com>
Co-authored-by: Alexiane Yvonet <ayvonet@talend.com>
2022-03-04 08:41:24 +08:00
jiezhang-tlnd
f00f9c3c39 Jzhang/80/tup 34609 (#7252)
* fix(TUP-34609)Cannot retrieve Module Name in tSalesforceInput with
password starting with double-quotes

* change condition
2022-03-02 18:26:06 +08:00
kjwang
9151de9cde Kjwang/fix tup 32950 on ubuntu (#7265)
* Fix TUP-32950 On Ubuntu 18.04.5 documentation comment is displayed as a
black box in Talend Studio designer tab
https://jira.talendforge.org/browse/TUP-32950
2022-03-02 17:28:06 +08:00
Xilai Dai
a597e57466 fix(APPINT-33965) add the rhino dependencies into OSGi build of tRESTRequest (#7257) 2022-03-02 10:28:24 +08:00
Dmytro Ochkas
e5f763b4e1 fix(TDI-46789): tMSSqlOutputBulkExec can't work with server on Linux … (#7142)
* fix(TDI-46789): tMSSqlOutputBulkExec can't work with server on Linux platform

Added new checkbox which enables/disables codepage

* fix(TDI-46789): tMSSqlOutputBulkExec can't work with server on Linux platform

Fixed formatting issues

* fix(TDI-46789): tMSSqlOutputBulkExec can't work with server on Linux platform

Fixed one more formatting issue

* fix(TDI-46789): tMSSqlOutputBulkExec can't work with server on Linux platform

Adjusted naming with tMssqlBulkExec component
2022-03-01 14:08:02 +08:00
Liu Xinquan
c3426fdd2f fix(TBD-13419) Class not found happen in spark job calling a standard… (#7163) (#7238) 2022-02-28 14:54:38 +08:00
sbliu
d3f6f5b292 fix(TUP-34769) add junit (#7254) 2022-02-28 14:24:54 +08:00
wwang-talend
941da0bc39 fix(TDI-47230): use fixedthreadpool for TDM 2022-02-28 14:06:05 +08:00
hcyi
d0f9060bd4 fix(TUP-34593):Cannot connect to Salesforce with password starting with double-quotes (#7248)
* fix(TUP-34593):Cannot connect to Salesforce with password starting with
double-quotes

* fix(TUP-34593):Cannot connect to Salesforce with password starting with
double-quotes

* fix(TUP-34593):add junits
2022-02-25 17:51:57 +08:00
wang wei
02ed52e0cc fix(TDI-46642): Observability: connector_label is not correct (#7171) 2022-02-24 18:33:53 +08:00
wang wei
e976c9bf62 fix(TDI-47230): avoid create thread for every task for twritexmlfield/twritejsonfield in loop (#7235) 2022-02-24 14:34:16 +08:00
sbliu
bfbf2bbf36 fix(TUP-34769) Error fields for Rejects get dropped from tSalesforceOutput after Sync Columns. (#7233)
fix bug TUP-33497
2022-02-23 18:01:28 +08:00
apoltavtsev
af3fd09333 fix(APPINT-34330) Deprecated build type conversion is removed 2022-02-23 05:36:56 +01:00
Dmytro Sylaiev
f16c97d6bd feat(TDI-47211): Update active dir drivers for mssql (#7057)
* feat(TDI-47211): Update active dir drivers for mssql

* feat(TDI-47211): Fix the pb with component descriptor
2022-02-21 13:58:11 +02:00
pyzhou
4c0894125f fix(TDI-47223):CVE axis2-kernel 1.8.0 (#7153)
* fix(TDI-47223):CVE axis2-kernel 1.8.0

* Other axis2 jar

* upgrade dependency

* correct compile error

* compile error
2022-02-21 17:22:07 +08:00
Dmytro Grygorenko
f56ea273f8 fix(TDI-47524): replace non-dynamic column for PosgresqlOutput with dynamic schema. (#7223) 2022-02-21 10:22:21 +02:00
Jane Ding
e52b6fd10f Revert "fix(TUP-28898):Drag Exasol connection to a job choose tDBOutput(Exasol) (#7023)" (#7217)
This reverts commit 6b82e95328.
2022-02-18 17:17:40 +08:00
unknown
51432e83c6 Revert "feat(TBD-12990): Dataproc TP"
This reverts commit 982a048e43.
2022-02-17 19:22:16 +01:00
Svitlana Ponomarova
982a048e43 feat(TBD-12990): Dataproc TP 2022-02-17 14:19:53 +02:00
AlixMetivier
b1f26c263b feat(TBD-12989): add databricks to universal plugins (#7143)
* feat(TBD-12989): add databricks to universal plugins

* feat(TBD-12989): add databricks to universal plugin
2022-02-17 11:32:16 +01:00
kjwang
5e89b28c72 Revert "Fix TUP-32950 On Ubuntu 18.04.5 documentation comment is displayed as a (#7098)" (#7211)
This reverts commit 20a1cd9476.
2022-02-17 17:32:07 +08:00
ypiel
53328080a5 fix(TDI-46848): mscrm oauth2+on-premise + client secret (#7157)
* fix(TDI-46848): add mscrm oauth2 logs

* fix(TDI-46848): Add client secret for oauth2 on-premise

* fix(TDI-46848): Fix pom version.

* fix(TDI-46848): client_secret not mandatory
2022-02-17 10:23:36 +01:00
kjwang
044548edc1 TUP-34156 UI is broken for TCK Table structures in 8.0.1 + nighty (#7202)
TUP-34156 UI is broken for TCK Table structures in 8.0.1 + nighty
https://jira.talendforge.org/browse/TUP-34156
2022-02-17 11:46:57 +08:00
Dmytro Ochkas
af479b6e6a fix(TDI-47435): tPostgreSqlOutput 'Debug query mode' and 'Upsert' (#7167)
* Modified some DB templates so they initialize unresolved variable when dataAction is 'Upsert'
2022-02-16 19:12:34 +02:00
Dmytro Grygorenko
c12301d5a3 fix(TDI-47344): update Apache Ant for tFileUnarchive. (#7208) 2022-02-16 16:30:02 +02:00
Dmytro Grygorenko
459cb23bae fix(TDI-47437): check for replaced column for Postgres Upsert action. (#7207) 2022-02-16 16:24:31 +02:00
Dmytro Ochkas
2896cb57d4 fix(TDI-47436): tPostgreSqlOutput upsert and dynamic column (#7172)
* ON CONFLICT clause now contains not only dynamic columns but not dynamic ones as well
2022-02-16 16:00:32 +02:00
Dmytro Ochkas
ece6b4cd0d fix(TDI-47385): tMap error when tenary operator is used (#7188)
Add parentheses so that user don't add them manually
2022-02-16 15:37:11 +02:00
pyzhou
cdd89534b9 fix(TDI-47396):tSCPGet doesn't always close session (#7134) 2022-02-14 17:51:59 +08:00
jiezhang-tlnd
e64820cab0 Master localized file backport 2022 0210 (#7197)
* Add localized files (#7192)

Co-authored-by: jenkins-git <jenkins-git@talend.com>

* Add localized files (#7194)

Co-authored-by: jenkins-git <jenkins-git@talend.com>

* Add localized files (#7196)

Co-authored-by: jenkins-git <jenkins-git@talend.com>

Co-authored-by: Alexiane Yvonet <ayvonet@talend.com>
Co-authored-by: jenkins-git <jenkins-git@talend.com>
Co-authored-by: tsasada-talend <51699524+tsasada-talend@users.noreply.github.com>
Co-authored-by: sbouyer <35452259+sbouyer@users.noreply.github.com>
2022-02-14 16:01:31 +08:00
Jane Ding
6b82e95328 fix(TUP-28898):Drag Exasol connection to a job choose tDBOutput(Exasol) (#7023)
not work as tExasolOutput
https://jira.talendforge.org/browse/TUP-28898
2022-02-14 10:12:40 +08:00
hzhao-talendbj
b59ff111a5 fix(TUP-33639): Job which import by metedata bridge:NPE (#7141)
* fix(TUP-33639): Job which import by metedata bridge:NPE when
check/uncheck "use project settings" in stats&logs

* fix(TUP-33639):   add junit

* fix(TUP-33639): add junit

* fix(TUP-33639): Job which import by metedata bridge:NPE
2022-02-10 16:04:57 +08:00
jiezhang-tlnd
7f018d34f1 Master localized file backport 2022 0203 (#7185)
* Add localized files (#7180)

Co-authored-by: jenkins-git <jenkins-git@talend.com>

* Add localized files (#7181)

Co-authored-by: jenkins-git <jenkins-git@talend.com>

Co-authored-by: Alexiane Yvonet <ayvonet@talend.com>
Co-authored-by: jenkins-git <jenkins-git@talend.com>
Co-authored-by: tsasada-talend <51699524+tsasada-talend@users.noreply.github.com>
2022-02-07 18:02:10 +08:00
zyuan-talend
2281fab273 fix(TUP-34489):forward interpreter to child job in commandline. (#7162) 2022-02-07 12:15:08 +08:00
Dmytro Ochkas
87c369ca1e fix(TDI-35717): tOracleBulkExec's action on table still used when invisible (#7114)
Added additional if wrappers to the sections where data action is processed in tOracleBulkExec_begin.javajet and tOracleBulkExec_end.javajet. The wrappers check if .ctl file or manual .ctl code is used and if so no data action has to be processed
2022-01-28 13:32:21 +02:00
jiezhang-tlnd
346755a798 Master localized file backport 2022 01 27 (#7170)
* Add localized files (#7164)

Co-authored-by: jenkins-git <jenkins-git@talend.com>

* Add localized files (#7165)

Co-authored-by: jenkins-git <jenkins-git@talend.com>

Co-authored-by: Alexiane Yvonet <ayvonet@talend.com>
Co-authored-by: jenkins-git <jenkins-git@talend.com>
Co-authored-by: tsasada-talend <51699524+tsasada-talend@users.noreply.github.com>
2022-01-28 16:00:50 +08:00
jiezhang-tlnd
6373dabd6f fix(TUP-34575)Correction to messages-properties file (#7168)
* fix(TUP-34575)Correction to messages-properties file

* fix(TUP-34575)Correction to messages-properties file

* fix(TUP-34575)Correction to messages-properties file
2022-01-28 14:53:05 +08:00
apoltavtsev
74cf2ca49d feat(APPINT-32531) Make all DS/Route builds Java 11 and above compatible, design/build & run should work with different Java versions (#7127) 2022-01-27 09:25:39 +01:00
Laurent BOURGEOIS
13d4589675 fix(TBD-13463):No FileSystem for scheme: HDFS on any EMR 5.29 job on Talend 8 (#7124) 2022-01-26 17:54:55 +01:00
jiezhang-tlnd
921629ac8f fix(TUP-34281): Cleanup of old translation files (#7105)
* fix(TUP-34281): Cleanup of old translation files

* Cleanup of old translation files
2022-01-26 18:13:06 +08:00
wang wei
e59cadab69 fix(TDI-47395): tPostgresqlOutput cannot select Insert as Action on Data when disable the Log4j(#7136) 2022-01-26 16:47:10 +08:00
jzhao
64c85d2f10 fix(TDI-47375):tMicrosoftCRM components with compile error when using OnPremise 2011 (#7115)
* fix(TDI-47375):tMicrosoftCRM components with compile error when using
OnPremise 2011

* fix(TDI-47375):class not found issue
2022-01-25 09:36:39 +08:00
kjwang
20a1cd9476 Fix TUP-32950 On Ubuntu 18.04.5 documentation comment is displayed as a (#7098)
Fix TUP-32950 On Ubuntu 18.04.5 documentation comment is displayed as a black box in Talend Studio designer tab
https://jira.talendforge.org/browse/TUP-32950
2022-01-21 14:47:31 +08:00
zyuan-talend
2a4d97e2f9 fix(TUP-27184):add junit test (#7145) 2022-01-21 11:06:59 +08:00
Wei Hua
5dfb2fa414 Hwei/bugfix/801/appint 33765 (#7138)
* APPINT-33765 [7.3.1 patch] ClassNotFoundException in runtime when DB connection (SQLServer) in joblet without using alias

* APPINT-33765 [7.3.1 patch] ClassNotFoundException in runtime when DB connection (SQLServer) in joblet without using alias
2022-01-21 10:30:44 +08:00
jiezhang-tlnd
635ef37f93 Add localized files (#7149) (#7151)
* Add localized files (#7149)

Co-authored-by: jenkins-git <jenkins-git@talend.com>

* Add localized files (#7150)

Co-authored-by: jenkins-git <jenkins-git@talend.com>

Co-authored-by: tsasada-talend <51699524+tsasada-talend@users.noreply.github.com>
Co-authored-by: jenkins-git <jenkins-git@talend.com>
Co-authored-by: Alexiane Yvonet <ayvonet@talend.com>
2022-01-21 09:55:53 +08:00
Jane Ding
cc8ff04ccb Add localized files (#7123) (#7146)
Co-authored-by: jenkins-git <jenkins-git@talend.com>

Co-authored-by: tsasada-talend <51699524+tsasada-talend@users.noreply.github.com>
Co-authored-by: jenkins-git <jenkins-git@talend.com>
2022-01-20 10:12:36 +08:00
Emmanuel GALLOIS
1112ea17e2 feat(TCOMP-2045): Pass meta information about columns (#7099)
* feat(TCOMP-2045): fix quotes and escaping issues
- add import
2022-01-19 17:14:14 +01:00
Jill Yan
aaaf1e0ba5 APPINT-31044 (#7109)
Co-authored-by: jillyan <yan955599@gmail.com>
2022-01-19 17:05:07 +08:00
zshen-talend
05d204762f feat(TDQ-19814): clear the code let it call adjustPomGeneration only to (#7131)
avoid some TDM regression
2022-01-17 19:47:03 +08:00
Abdulhamid Rashankar
759c85b2f9 APPINT-33784: Project analysis task - Warn about custom component dependencies risk (#7129) 2022-01-17 12:41:42 +01:00
Jill Yan
63c037343c Revert "jill/fix/m80/APPINT-33992 (#7071)" (#7125)
This reverts commit 4c48cc91b3.
2022-01-17 12:04:07 +08:00
zyuan-talend
7e61986aa2 fix(TUP-27184):revert javajet change. (#7117) 2022-01-14 22:09:46 +08:00
Zhiwei Xue
766fe40204 fix(TUP-34469):fix comp cache path problem (#7120) 2022-01-14 19:45:31 +08:00
zshen-talend
dea6be3175 Zshen/feat/tdq 19814 backport 80 (#7112)
* feat(TDQ-19814): create a new component for tDataQualityRules

* feat(TDQ-19814): use adjustPomGeneration method instead of
adjustClassPath method to avoid conflict with TDM case
2022-01-13 16:59:38 +08:00
zyuan-talend
8da7c1aa17 fix(TUP-27184):escape label value for javajet. (#7111) 2022-01-13 16:40:15 +08:00
jiezhang-tlnd
b8191aa46c fix(TUP-34021)CVE org.apache.maven:maven-core:3.8.1 (#7106) 2022-01-13 15:27:14 +08:00
Tetyana Meronyk
532b8200f1 feat(TDI-46151): Filter data based on return value in subquery in source database before pushing it down to a tDBInput to execute (#6906) (#7108)
feat(TDI-46151): Filter data based on return value in subquery in source database before pushing it down to a tDBInput to execute

(cherry picked from commit 2c25ae3771)
2022-01-12 17:39:25 +02:00
hcyi
dff1b037c0 fix(I18N-322):change a message to "Set the connection and read timeouts" (#7059) 2022-01-12 16:18:42 +08:00
Jill Yan
4c48cc91b3 jill/fix/m80/APPINT-33992 (#7071)
* APPINT-33992

* revert mis-commit in previous

* APPINT-33992

* APPINT-33992

* APPINT-33992

* APPINT-33992

* APPINT-33992

Co-authored-by: jillyan <yan955599@gmail.com>
2022-01-12 15:57:22 +08:00
ozhelezniak
49493eb6de Merge branch 'maintenance/8.0' of github.com:Talend/tdi-studio-se into maintenance/8.0 2022-01-11 11:37:22 +02:00
Oleksandr Zhelezniak
86de9b6f45 fix(TDI-47222): invoke stop after flush (#7104)
* TCK studio-integration
* method stop should be invoked after the method flush for producers (outputs)
2022-01-11 10:56:20 +02:00
Oleksandr Zhelezniak
ffd5625247 fix(TDI-47222): invoke stop after flush (#6985)
* TCK studio-integration
* method stop should be invoked after the method flush for producers (outputs)

(cherry picked from commit 54b17eea2c)
2022-01-11 10:53:14 +02:00
zyuan-talend
a81d38bb2a fix(TUP-27184): copy label from GraphicNode to DataNode. (#7095) 2022-01-11 15:48:34 +08:00
wang wei
2ce8037e4e fix(TDI-47212): CVE: jackson-mapper(core)-asl-1.9.15-TALEND (#7001) 2022-01-10 15:09:17 +08:00
Jane Ding
2d02f681d9 Add localized files (#7092)
* Add localized files (#7090)

Co-authored-by: jenkins-git <jenkins-git@talend.com>

* Add localized files (#7091)

Co-authored-by: jenkins-git <jenkins-git@talend.com>

Co-authored-by: Alexiane Yvonet <ayvonet@talend.com>
Co-authored-by: jenkins-git <jenkins-git@talend.com>
Co-authored-by: tsasada-talend <51699524+tsasada-talend@users.noreply.github.com>
2022-01-07 11:17:52 +08:00
kjwang
52c8a51e2b TUP-34282 CVE: log4j-core(1.2-api)-[2-2.16.0) (#7083)
TUP-34282 CVE: log4j-core(1.2-api)-[2-2.16.0)
https://jira.talendforge.org/browse/TUP-34282
2022-01-07 10:00:39 +08:00
Oleksandr Zhelezniak
bb2b0c89f4 fix(TDI-46410): update namespace in xml element (#7018) 2022-01-04 14:38:04 +02:00
Jane Ding
ef8bd6950a Localize message update 4 maintenance80 (#7081)
* Add localized files (#7077)

Co-authored-by: jenkins-git <jenkins-git@talend.com>

* Add localized files (#7079)

Co-authored-by: jenkins-git <jenkins-git@talend.com>

Co-authored-by: Alexiane Yvonet <ayvonet@talend.com>
Co-authored-by: jenkins-git <jenkins-git@talend.com>
Co-authored-by: tsasada-talend <51699524+tsasada-talend@users.noreply.github.com>
2022-01-04 12:02:13 +08:00
ypiel
fea9ec3fb9 feat(TDI-46093): Customize tck/connection name (#6976)
* feat(TDI-46093): Support defined connection name

* feat(TDI-46093): Update defaultName

* use cache one to avoid recall every time

Co-authored-by: wwang-talend <wwang@talend.com>
2022-01-03 11:46:57 +01:00
Abdulhamid Rashankar
f996786ed7 APPINT-33784: Project analysis task - Warn about custom component dependencies risk (#6997)
Co-authored-by: arashankar <abdulhamid0606@gmail.com>
2022-01-03 10:09:53 +01:00
Jane Ding
156ffa5b3f Localize message update 4 maintenance80 (#7074)
* Add localized files (#7058)

Co-authored-by: jenkins-git <jenkins-git@talend.com>

* Add localized files (#7065)

Co-authored-by: jenkins-git <jenkins-git@talend.com>

Co-authored-by: tsasada-talend <51699524+tsasada-talend@users.noreply.github.com>
Co-authored-by: jenkins-git <jenkins-git@talend.com>
2021-12-31 18:06:59 +08:00
pyzhou
241a784b36 fix(TDI-47234):tXSLT cache source in memory (#7021)
* fix(TDI-47234):tXSLT regression

* migration task

* correct migration task

* Correct ExecutionResult

* Correct Migration result
2021-12-31 11:43:32 +08:00
jillyan
9492ef6034 revert for mis-push 2021-12-30 18:14:40 +08:00
jillyan
f806f96585 APPINT-33992 2021-12-30 18:07:21 +08:00
Zhiwei Xue
3457ffb30f workitem(TUP-34111):slow studio build time for remote execution (#7039) 2021-12-30 16:07:09 +08:00
jiezhang-tlnd
08f1d92ee6 fix(TUP-33863)Update of Metadata Hadoop Cluster does not change spark (#6944)
* fix(TUP-33863)Update of Metadata Hadoop Cluster does not change spark
version when propagated
https://jira.talendforge.org/browse/TUP-33863

* format code

* format code

* fix(TUP-33863)Update of Metadata Hadoop Cluster does not change spark
version when propagated

Conflicts:
	main/plugins/org.talend.designer.core/src/main/java/org/talend/designer/core/ui/editor/properties/controllers/ComboController.java

* add common judgment

Conflicts:
	main/plugins/org.talend.designer.core/src/main/java/org/talend/designer/core/ui/editor/properties/controllers/ComboController.java

* add common fix

* Update of Metadata Hadoop Cluster does not change spark version when
propagated

Conflicts:
	main/plugins/org.talend.designer.core/src/main/java/org/talend/designer/core/ui/editor/properties/controllers/ComboController.java
2021-12-30 15:09:31 +08:00
jiezhang-tlnd
5cb031a8ed chore(TUP-34021)CVE: org.apache.maven:maven-core:3.8.1 (#7011) 2021-12-30 15:01:25 +08:00
Olha V
daeea2641a feat(TDI-46430): Kafka Input Output Avro support (#6981) (#7067)
* feat(TDI-46430): Kafka Input Output Avro support

* add migration task for security settings setup order

* feat(TDI-46430): Kafka Input Output Avro support

* add check if https settings not empty

* feat(TDI-46430): Kafka Input Output Avro support

* fix migration task status

* feat(TDI-46430): Kafka Input Output Avro support

* add check for kafka version
2021-12-29 14:56:47 +02:00
Wei Hua
f78696e776 APPINT-34077 RuntimeException: java.lang.NoClassDefFoundError: org/apache/cxf/databinding/DataBinding (#7064) 2021-12-29 14:48:39 +08:00
Jane Ding
02738c0a79 fix(TUP-33830):[7.3] ref project compilation error (#7053)
https://jira.talendforge.org/browse/TUP-33830
2021-12-29 11:35:24 +08:00
Emmanuel GALLOIS
a992419605 fix(TCOMP-2053): correct migration issue w/ context + function call (#7009) 2021-12-29 11:25:28 +08:00
Zhiwei Xue
ffd2e378ae fix(TUP-33966):Studio/commandline fails to generate code for the job, (#6977)
throws "Invalid thread access"
2021-12-29 09:45:56 +08:00
jiezhang-tlnd
c59a2743de fix(TUP-34123)talendcsv-1.0.0.jar is missing on Guess Schema (#7016) 2021-12-28 14:15:50 +08:00
sbliu
e8e4751a2e chore(TUP-33956) remove xercesImpl from libraries needed. (#7027) 2021-12-27 15:50:55 +08:00
hcyi
4cc46a0bc7 fix(TUP-33897):Remove username from Studio Cloud Login. (#7017) 2021-12-27 10:28:30 +08:00
Chao MENG
0a21c8d735 chore: hide parallelize (#7046) 2021-12-23 14:34:41 +08:00
Dmytro Grygorenko
aee76ce19a fix(TDI-47228): tPostgresqlOutput Upsert existing connection (#7049) 2021-12-20 17:07:37 +02:00
Dmytro Grygorenko
78a28bc217 fix(TDI-46743): avoid file locking when using "streaming append" feature. (#7042) 2021-12-20 14:25:34 +02:00
Jane Ding
89f29eecc2 Add localized files (#7032) (#7045)
Co-authored-by: jenkins-git <jenkins-git@talend.com>

Co-authored-by: Alexiane Yvonet <ayvonet@talend.com>
Co-authored-by: jenkins-git <jenkins-git@talend.com>
2021-12-20 09:56:45 +08:00
Dmytro Sylaiev
7444c68931 fix(TDI-46910): Fix codegen and compile errors for dynamic schemas (#7019) 2021-12-17 10:41:37 +02:00
bhe-talendbj
a7d2ebbfe1 fix(TBD-13373): User did not initialize spark context when I run a simple spark job with HDI4 (#7033) 2021-12-16 19:49:37 +08:00
bhe-talendbj
db2e13c963 fix(TUP-34105): backport (#7024) 2021-12-15 11:44:27 +08:00
Tetyana Meronyk
b0700e6aba fix(TDI-46943): Dynamic schema fail's with Excel (#6992)
* fix(TDI-46943): Dynamic schema fail's with Excel
2021-12-14 15:51:50 +02:00
bhe-talendbj
450c4062ef fix(TUP-34105): upgrade log4j2 (#7006)
* fix(TUP-34105): upgrade log4j2

* fix(TUP-34105): update version
2021-12-14 15:40:37 +08:00
wang wei
878c793b30 fix(TDI-46962): tAmazonAuoraOutput compilation errors (#6872) 2021-12-13 11:22:44 +08:00
nrousseau
162d69539c fix(TUP-34110): fix tck dependencies (#7005)
* fix(TUP-34110): fix tck dependencies

* fix(TUP-34110): fix tck dependencies
2021-12-13 11:14:26 +08:00
Tetyana Meronyk
3ce05e9d7f fix(TDI-46834): Additional columns in tDBOutput doesn`t generate code properly (#6825) (#7002)
* fix(TDI-46834): Additional columns in tDBOutput doesn`t generate code properly

(cherry picked from commit 82243d59ac)
2021-12-10 15:21:39 +02:00
Dmytro Sylaiev
bb173c5e77 fix(TDI-46910): Add hadnling escaping of ELTOutput for quotes (#6875)
* fix(TDI-46910): Add hadnling escaping of ELTOutput for quotes

* fix(TDI-46910): Fix create table statement compile error
2021-12-09 16:18:13 +02:00
Xilai Dai
340f572844 Bugfix/maintenance/8.0/appint 34009 (#6901)
* (APPINT-34009) fix the tCosmosDB and tNeo4j dependency issues when building microservice

* (APPINT-34009) fix the regexp and jar name
2021-12-09 17:11:34 +08:00
hcyi
028ffd2beb feat(TUP-33198):Support retrieve SAP ADSO service metadata with SAP JCO3 (#6942) 2021-12-09 16:57:49 +08:00
kjwang
2c3708280a TUP-33713 Logon popup message in a mess when main project and refer (#6954)
* TUP-33713 Logon popup message in a mess when main project and refer
project are on different patch level
https://jira.talendforge.org/browse/TUP-33443
2021-12-09 16:40:30 +08:00
Jane Ding
1a5cc1038d Master loc backport (#6994)
* Add localized files (#6986)

Co-authored-by: jenkins-git <jenkins-git@talend.com>

* Add localized files (#6988)

Co-authored-by: jenkins-git <jenkins-git@talend.com>

Co-authored-by: tsasada-talend <51699524+tsasada-talend@users.noreply.github.com>
Co-authored-by: jenkins-git <jenkins-git@talend.com>
Co-authored-by: sbouyer <35452259+sbouyer@users.noreply.github.com>
2021-12-09 10:45:16 +08:00
jiezhang-tlnd
a74752e87d Jzhang/80/tup 33728 re (#6968)
* add migration

* add migration

* fix migration

* add copyright
2021-12-09 09:25:46 +08:00
jzhao
8bdc378efd feat(TDI-45793):Add migration task for tSAPADSOInput (#6989)
* feat(TDI-45793):Add migration task for tSAPADSOInput

* chore(TDI-45793):add Copyright for migration task.
2021-12-08 17:54:23 +08:00
Dmytro Grygorenko
99beb58953 fix(TDI-47179): enable batch checkbox for Postgres Upsert. (#6961) 2021-12-08 11:22:52 +02:00
bhe-talendbj
1a7409fcb7 feat(TUP-33718): add distribution version (#6979) (#6982)
* feat(TUP-33718): add distribution version

* feat(TUP-33718): fix version
2021-12-07 17:52:10 +08:00
hcyi
036219f5ca fix(TUP-32940):Remove "Also search from Help when performing a component (#6984)
searching".
2021-12-07 17:35:12 +08:00
Emmanuel GALLOIS
7ed3514e38 fix(TCOMP-1988): add nashorn scripting engine for java11+ (#6974) 2021-12-07 09:31:03 +01:00
Christophe Le Saec
25d47c6db3 TDI-47170 : go root directory for sftp (duplicate code) 2021-12-06 10:08:46 +01:00
Wei Hua
e31db9e33a APPINT-34089 Project analysis task - Warn about duplicated routeId usage (#6970)
* APPINT-34089 Project analysis task - Warn about duplicated routeId usage

* update the way to get code value.

* correct component name in message
2021-12-03 17:31:34 +01:00
pyzhou
7bd2e943ed fix(TDI-47147):tMap TUJ fix (#6971)
# Conflicts:
#	main/plugins/org.talend.designer.components.localprovider/components/tAdvancedHash/tAdvancedHash_java.xml
2021-12-03 17:49:47 +08:00
apoltavtsev
4a1012dba8 fix(APPINT-33820): Add support for log assignment to TESB task. (#6966) 2021-12-02 12:29:59 +01:00
bhe-talendbj
12782d28c9 feat(TUP-33718): add system property to load dynamic distribution jars (#6904) (#6964)
* feat(TUP-33718): add system property to load dynamic distribution jars

* feat(TUP-33718): fix load dynamic distributions

* feat(TUP-33718): load all dynamic distribution jars

* feat(TUP-33718): load bigdata modules

* feat(TUP-33718): load all dynamic distributions

* feat(TUP-33718): show distribution display version

* feat(TUP-33718): replace display version by version

* feat(TUP-33718): fix bug

* feat(TUP-33718): load dynamic distribution modules

* feat(TUP-33718): load dynamic distribution modules
2021-12-02 17:15:05 +08:00
apoltavtsev
9cf5e2a29e fix(APPINT-34066) Fail to build route as OSGI to runtime with ClassNotFoundException on MacOS 2021-11-29 10:41:08 +01:00
wang wei
1ef9cf8cd1 fix(TDI-46850): Upgrade ActiveMQ Jars to 5.16.3 which align with ESB (#6924) 2021-11-29 17:29:11 +08:00
Chao MENG
951055f00c fix(TUP-33121): Talend Studio gives no error if unable to connect to (#6934)
remote GIT repository
https://jira.talendforge.org/browse/TUP-33121
2021-11-29 10:35:20 +08:00
kjwang
ec4be52d06 TUP-33443 The method tFileInputDelimited_1_onSubJobError(Exception, (#6936)
TUP-33443 The method tFileInputDelimited_1_onSubJobError(Exception,String, Map<String,Object>) is undefined for the type xxxxx
https://jira.talendforge.org/browse/TUP-33443
2021-11-29 10:06:05 +08:00
vyu-talend
c04240ee23 feat(TDI-45016):add query time out. (#6539) (#6900) (#6949)
* feat(TDI-45016):add query time out. (#6539)

* feat(TDI-45016):add query time out.

* feat(TDI-45016):optimize codes.

* feat(TDI-45016):fix bugs.

* feat(TDI-45016):fix some issues.

Conflicts:
	main/plugins/org.talend.designer.components.localprovider/components/tAS400Input/tAS400Input_messages.properties
	main/plugins/org.talend.designer.components.localprovider/components/tAS400Output/tAS400Output_messages.properties
	main/plugins/org.talend.designer.components.localprovider/components/tAS400Row/tAS400Row_messages.properties
	main/plugins/org.talend.designer.components.localprovider/components/tMSSqlInput/tMSSqlInput_messages.properties
	main/plugins/org.talend.designer.components.localprovider/components/tMSSqlOutput/tMSSqlOutput_messages.properties
	main/plugins/org.talend.designer.components.localprovider/components/tMSSqlRow/tMSSqlRow_messages.properties
	main/plugins/org.talend.designer.components.localprovider/components/templates/_tableActionForOutput.javajet

* feat(TDI-45016): fix something.
2021-11-26 18:00:17 +08:00
Wei Hua
53a35c7551 APPINT-32136 Job & Run view displays DI job icon and/or label when a route or routelet editor is active (#6889) (#6941)
* APPINT-32136 Job & Run view displays DI job icon and/or label when a route or routelet editor is active

* Fixing labels and Routelet icon

* change the way to determine routelet

* Solve NPE issue

* small changes
2021-11-25 17:00:29 +08:00
wang wei
5f966a7796 fix(TDI-47078): [7.3]Multiple SQL Statements in SQL Template => Duplicate local variable(#6909) 2021-11-25 15:48:35 +08:00
bhe-talendbj
b384608b4c fix(TUP-32838): Custom value in a table column with suggestable values is not allowed (#6819) (#6926)
* fix(TUP-32838): editable properties table

* fix(TUP-32838): support editable properties table

* fix(TUP-32838): support editable properties table

* fix(TUP-32838): support editable properties table

* fix(TUP-32838): rename property name

* fix(TUP-32838): editable for all of suggestable parameters

* fix(TUP-32838): resolve comments

* fix(TUP-32838): avoid invoking component
2021-11-25 14:55:41 +08:00
pyzhou
bdfe560cb4 fix(TDI-45710):tXSLT support for streaming input and output (#6251) (#6830)
* Added streaming support on inputs

* Added InputStream for the 2 input files

* Added support for input / output columns

* Removed the label as it was confusing than helpful.
Changed the XML / XSLT label as it supports Stream.

Output however does NOT support stream so changed it in the Override to File only.

* Upgraded the 15 year old saxon9.jar
My tests passed.

* fix xml column was not used issue

* According to the new writing standard, only the capitalize the first character of first word

Co-authored-by: pyzhou <pyzhou@talend.com>
# Conflicts:
#	main/plugins/org.talend.designer.components.localprovider/components/tXSLT/tXSLT_messages.properties

Co-authored-by: bgunics-talend <63251373+bgunics-talend@users.noreply.github.com>
2021-11-25 14:01:16 +08:00
pyzhou
979574709e fix(TDI-46857):Upgrade bcprov-jdk15on-1.69 2021-11-25 12:20:21 +08:00
bhe-talendbj
2b76ccc994 fix(TUP-33859): force upgrade for bcprov (#6915) (#6923)
Co-authored-by: nrousseau <nrousseau@talend.com>
2021-11-25 10:12:15 +08:00
Tetyana Meronyk
5f172ec096 fix(TDI-46986): tFTPGet component unable to get file from FileZilla Server, with a particular Filemask in Studio, after September patch, Patch_20210924_R2021-09_v2-7.3.1
(cherry picked from commit 69f3e4b340)
2021-11-24 11:47:41 +02:00
Tetyana Meronyk
15b20a6b4a fix(TDI-46791): tBigQueryInput - Component returning extra row of NULL values (#6724) (#6921)
fix(TDI-46791): tBigQueryInput - Component returning extra row of NULL values

(cherry picked from commit 56af81bdbc)
2021-11-24 11:47:16 +02:00
Olha V
352b69ee78 chore(TDI-46752): CVE: Oauth 2.0 SDK with OpenID (#6811) (#6935)
* chore(TDI-46752): CVE: Oauth 2.0 SDK with OpenID

* chore(TDI-46752): CVE: Oauth 2.0 SDK with OpenID

* bump talend-mscrm in tMicrosoftCrm

* chore(TDI-46752): CVE: Oauth 2.0 SDK with OpenID

* add content-type dependency
2021-11-23 18:24:13 +02:00
hzhao-talendbj
d4eb8346cc chore(TUP-33736): Backport for 8.0 (#6912)
* Add localized files

* Add localized files (#6884)

Co-authored-by: jenkins-git <jenkins-git@talend.com>

* Add localized files (#6885)

Co-authored-by: jenkins-git <jenkins-git@talend.com>

Co-authored-by: jenkins-git <jenkins-git@talend.com>
Co-authored-by: sbouyer <35452259+sbouyer@users.noreply.github.com>
2021-11-23 17:31:17 +08:00
Oleksandr Zhelezniak
3072be03f6 fix(TDI-46930): wrap filename (#6846) (#6930)
* wrap a filename in parenthesis to explicit handle java operations priority
2021-11-23 11:02:29 +02:00
jiezhang-tlnd
2587b78d01 fix(TUP-33467)Need to adjust the UI of check connection when tck (#6925)
component in studio
https://jira.talendforge.org/browse/TUP-33467
2021-11-23 16:37:47 +08:00
Dmytro Grygorenko
96daa21f6f feat(TDI-44717): fix backport issue for "maintenance/8.0" branch. (#6928) 2021-11-23 09:43:06 +02:00
Christophe Le Saec
05928ddb45 TDI-46905 : treat absolute path 2021-11-23 08:39:49 +01:00
Dmytro Grygorenko
f574223e1d feat(TDI-44717): Postgres Upsert feature (backport to 8.0.1). (#6919) 2021-11-22 14:29:34 +02:00
Dmytro Grygorenko
5e0191fc6b fix(TDI-46912): tELTOutput cannot locate & drop existing table in Snowflake. (#6918) 2021-11-22 14:09:36 +02:00
Dmytro Sylaiev
e4bc47faf4 fix(TDI-46790): Fix fetching big files GSGet (#6706) 2021-11-22 13:55:08 +02:00
Dmytro Grygorenko
15485b8073 fix(TDI-46746): CVE - update "protobuf-java" to 3.4.0 2021-11-22 09:40:36 +02:00
Xilai Dai
e54a5539a3 Bugfix/maintenance/8.0/appint 34059 (#6908)
* (APPINT-34059) fix the plexus-utils version in maven-bundle-plugin

* (APPINT-34059) fix the plexus-classworlds
2021-11-22 11:10:41 +08:00
apoltavtsev
dc2fe3ebff fix(APPINT-33956) Project analysis task - Seek for unresolved dependencies (Part 2) (#6913) 2021-11-19 14:20:51 +01:00
Jill Yan
3393c79cfc APPINT-34090 (#6911)
Co-authored-by: jillyan <yan955599@gmail.com>
2021-11-19 17:37:19 +08:00
Zhiwei Xue
ce827cf975 chore(TUP-33614):Update each component plugin, make sure it generates a (#6902) (#6910)
new timestamp at each build
2021-11-19 17:26:08 +08:00
bhe-talendbj
3aa81c490d Update version from 8.0.2-SNAPSHOT to 8.0.1-SNAPSHOT (#6898) 2021-11-18 12:02:03 +08:00
Christophe Le Saec
1bce339197 TDI-47072 : fix context 2021-11-17 08:58:51 +01:00
Jenkins Continuous Build server
8a9c24f80a Set version to 8.0.2 SNAPSHOT 2021-11-16 11:09:32 +01:00
apoltavtsev
ec3be21f28 feat (APPINT-33956) Project analysis task - Seek for unresolved dependencies (Part 2) (#6881)
* feat (APPINT-33956) Project analysis task - Seek for unresolved dependencies (Part 2)

* Update messages.properties

* Add files via upload

* Update UnresolvedComponentsDependenciesAnalysisTask.java
2021-11-09 09:25:33 +01:00
jiezhang-tlnd
ec4b7f1862 fix(TUP-33627)[Linux aarch64] License agreement panel and introduction (#6877)
are blank
2021-11-05 20:04:47 +08:00
Jane Ding
87b2d61e0c fix(TUP-33385):Error pops up while logging on migrated project (#6867) (#6873)
* fix(TUP-33385):Error pops up while logging on migrated project if the
project which exported from monthly patch studio>Studio
https://jira.talendforge.org/browse/TUP-33385

* fix(TUP-33385):Error pops up while logging on migrated project if the
project which exported from monthly patch studio>Studio
https://jira.talendforge.org/browse/TUP-33385
2021-11-04 19:55:46 +08:00
sbouyer
3aeb0f435f Add localized files (#6866)
Co-authored-by: jenkins-git <jenkins-git@talend.com>
2021-11-04 10:48:41 +08:00
Alexiane Yvonet
d3e732661d Add localized files (#6852)
Co-authored-by: jenkins-git <jenkins-git@talend.com>
2021-11-04 10:48:30 +08:00
tsasada-talend
4b02eab8ce Add localized files (#6853)
Co-authored-by: jenkins-git <jenkins-git@talend.com>
2021-11-04 10:48:19 +08:00
Jenkins Continuous Build server
df2cac92df Set version to 8.0.1 2021-11-03 17:02:08 +01:00
Dmytro Grygorenko
7ee99a9e56 fix(TDI-46968): fix compile error for tGreenplumOutput. (#6863) 2021-11-02 09:41:36 +02:00
hcyi
d9ad02e2b6 fix(TUP-33449):tPreJob trigger fails with GSS exception when "Set path (#6848)
to custom hadoop jar" is checked in 7.3.1
2021-11-02 15:23:50 +08:00
sbliu
74b894166d fix(TUP-33596) NPE when try to open project setting. (#6859) (#6861)
add NPE judgment
2021-11-02 11:30:23 +08:00
vyu-talend
d6d2dfdb6f fix(TDI-46921):change maven url path for miscrm. (#6856) 2021-11-01 11:38:33 +08:00
sbliu
b08087e24a feat(TUP-33462) Removal / deprecate of DB versions linked to DI components. (#6851) 2021-10-29 17:23:58 +08:00
pyzhou
4308b888d7 fix(TDI-46937): fix tmap tuj (#6845)
* fix(TDI-46937): fix tmap tuj

* fix(TDI-46937):fix tuj
2021-10-29 16:47:26 +08:00
Jane Ding
04448025a4 fix(TUP-33447):"servlet-api-2.5-20081211.jar" download failed when (#6810)
(#6809)

install libraries
https://jira.talendforge.org/browse/TUP-33447

Conflicts:
	main/plugins/org.talend.libraries.servlet/META-INF/MANIFEST.MF
	main/plugins/org.talend.libraries.servlet/pom.xml
	pom.xml
2021-10-29 15:09:18 +08:00
wang wei
a56fab7f5b fix(TDI-46476): as we remove some components, should adjust some tup junit(#6837) 2021-10-29 14:55:35 +08:00
Dmytro Sylaiev
f2422727b3 fix(TDI-46876): Fix dependencies list for tGoogleDataprocManage (#6847) 2021-10-29 10:45:42 +08:00
hcyi
94f818195d Hcyi/tup 33477 release/8.0.1 (#6823)
* feat(TUP-33477):Remove username/password authentication from Studio.

* feat(TUP-33477):Remove username/password authentication from Studio.

* feat(TUP-33477):keep username authentication for cloud on license select
dialog.
2021-10-28 15:47:04 +08:00
hzhao-talendbj
8679592c7e fix(TUP-33485): [tELTMap] Delimited identifiers does not work for (#6833) (#6838)
* fix(TUP-33485): [tELTMap] Delimited identifiers does not work for

* fix(TUP-33485): [tELTMap] Delimited identifiers does not work for

* fix(TUP-33485): [tELTMap] Delimited identifiers does not work for
2021-10-27 18:10:54 +08:00
wang wei
086d2763f3 fix(TDI-46286): upgrade org.slf4j version to 1.7.29 from 1.7.25 (#6733) 2021-10-27 15:47:09 +08:00
bhe-talendbj
939dd01908 chore(TUP-33502): Show installation of components only in debug mode (#6832) (#6835)
* chore(TUP-33502): change logs

* chore(TUP-33502): print logs in debug mode
2021-10-27 15:40:56 +08:00
zyuan-talend
5dfcdcfe5b fix(TUP-33392): remove un-needed Map Reduce related tests. (#6822) (#6834) 2021-10-27 15:24:07 +08:00
wang wei
d04e966718 fix(TDI-46476): Remove deprecated components in 8.0 (#6730) 2021-10-26 16:58:10 +08:00
jiezhang-tlnd
4294ecd024 update text (#6814) (#6817) 2021-10-25 14:37:28 +08:00
Jenkins Continuous Build server
1d2d17d71d Set version to 8.0.1 2021-10-21 16:11:20 +02:00
sbouyer
aa470dbab3 Add localized files (#6804)
Co-authored-by: root <obricha@talend.com>
2021-10-21 17:23:32 +08:00
Alexiane Yvonet
f7bbc3d17b Add localized files (#6805)
Co-authored-by: root <obricha@talend.com>
2021-10-21 17:17:10 +08:00
sbouyer
f897438858 Add localized files (#6807)
Co-authored-by: root <obricha@talend.com>
2021-10-21 17:08:32 +08:00
apoltavtsev
7d5e785786 feat(APPINT-33780) Project analysis task - Seek for unresolved routines & beans dependencies (#6803)
* feat(APPINT-33780) Project analysis task - Seek for unresolved routines & beans dependencies

* Add files via upload

* Update UnresolvedRoutineDependencyAnalysisTask.java

* Update messages.properties

* Update messages.properties

* Update UnresolvedRoutineDependencyAnalysisTask.java

* Update UnresolvedRoutineDependencyAnalysisTask.java
2021-10-21 08:36:35 +02:00
hzhao-talendbj
0d647971f0 feat(TUP-32198): Migrate demo project with studio 8.0 (#6771)
* add log

* add log

* feat(TUP-32198): Migrate demo project with studio 8.0

* feat(TUP-32198): Migrate demo project with studio 8.0

* feat(TUP-32198): Migrate demo project with studio 8.0

* feat(TUP-32198): Migrate demo project with studio 8.0
2021-10-21 12:19:45 +08:00
wang wei
40ef58e9d4 fix(TDI-46476): fix the studio pom as we remove old tcompv0 netsuite connector runtime (#6808)
* fix(TDI-46476): fix the studio pom as we remove old tcompv0 netsuite connector runtime

* fix more
2021-10-21 05:50:35 +02:00
pyzhou
24de5b78a9 fix(TDI-46572):tMap support JDK 17 (#6735)
* fix(TDI-46572):tAdvancedHash dependency

* fix(TDI-46572):tMap support JDK 17

* remove jboss

* change method supportMarshaller()

* add override method

* fix bug

* fix bug of cannot flush the last part

* fix(TDI-46572):use jboss marshaller

* fix bug

* Upgrade dependency

* fix tuj bug

* fix bug

* fix bug
2021-10-21 10:43:09 +08:00
Chao MENG
e5ee4773de fix(TUP-33425): It takes a long time to get the error message when (#6806)
upgrading commandline
https://jira.talendforge.org/browse/TUP-33425
2021-10-20 23:22:18 +08:00
AlixMetivier
728f054338 fix(TBD-12861): add method to retrieve spark mode value (#6763) 2021-10-20 14:11:22 +02:00
Alex Telesh
f75c405324 feat(TDI-46900/codegen): Log messages from subjobs (#6768) 2021-10-20 10:58:41 +02:00
Laurent BOURGEOIS
c9d28aa83d feat(TBD-12880):Dynamic schema in Spark batch components (#6661) 2021-10-19 14:14:13 +02:00
Tetyana Meronyk
bf520fca50 fix(TDI-46749): [tFileInputExcel] For dynamic column schema, column headers after parameter are not dropped (#6698)
* fix(TDI-46749): [tFileInputExcel] For dynamic column schema, column headers after <Last Column> parameter are not dropped
2021-10-19 13:56:56 +03:00
bhe-talendbj
218a64e43d fix(TUP-23729): fix OOM caused by DB components (#6786) 2021-10-19 18:43:51 +08:00
Jane Ding
38ec98656c fix(TUP-29570):Couchbase: Password is plaintext in .item file of its (#6785)
* fix(TUP-29570):Couchbase: Password is plaintext in .item file of its
dataset if updating the password in connection
https://jira.talendforge.org/browse/TUP-29570

* fix(TUP-29570):Couchbase: Password is plaintext in .item file of its
dataset if updating the password in connection
https://jira.talendforge.org/browse/TUP-29570
2021-10-19 16:04:20 +08:00
sbliu
30aa9a5971 bugfix(TUP-31401) Switch workspace doesn't work for remote connection. (#6766) 2021-10-19 12:11:59 +08:00
bhe-talendbj
b4c4a58fac fix(TUP-33380): remove double quotes (#6761)
* fix(TUP-33380): remove double quotes

* fix(TUP-33380): remove double quotes

* fix(TUP-33380): remove double quotes
2021-10-18 16:25:55 +08:00
jzhao
219907e072 fix(TDI-46871):tFTPXXX component host can't use expression without "()" (#6742) 2021-10-18 14:04:45 +08:00
kjwang
f152ffe549 Kjwang/fix TUP-33366 Improve progress bar for logon studio if need to download/install any feature (#6760)
* TUP-33366 Improve progress bar for logon studio if need to
download/install any feature
https://jira.talendforge.org/browse/TUP-33366
2021-10-18 10:39:19 +08:00
bhe-talendbj
34bfd9b7d2 fix(TUP-33380): Car files can not be installed on TUJ platform (#6759)
* fix(TUP-33380): fix tck install java path

* fix(TUP-33380): fix tck install java path

* fix(TUP-33380): fix tck install java path
2021-10-18 10:25:03 +08:00
Jane Ding
0bbb05d6f5 fix(TUP-26845):tcompv0 component's column name can't end with "_", a (#6749)
snowflake tuj (TDI38814_tCreateTable_snowflake_AllDataType) failed
caused by it.
https://jira.talendforge.org/browse/TUP-26845
2021-10-18 09:46:39 +08:00
zyuan-talend
468fae8511 fix(TUP-31974):not expand job design when checking other nodes. (#6745) 2021-10-16 09:24:27 +08:00
Chao MENG
39e55fdd4d fix(TUP-33092): Setup default base/update p2 for studio and make sure it work in the final release. (#6756)
* fix(TUP-33092): Setup default base/update p2 for studio and make sure it
work in the final release.
https://jira.talendforge.org/browse/TUP-33092

* fix(TUP-33092): Setup default base/update p2 for studio and make sure it
work in the final release.
https://jira.talendforge.org/browse/TUP-33092

* fix(TUP-33092): Setup default base/update p2 for studio and make sure it
work in the final release.
https://jira.talendforge.org/browse/TUP-33092
2021-10-15 22:39:36 +08:00
jzhao
eb333cbf0f chore(TDI-44605):correct the jar version to offical one (#6746) 2021-10-15 18:41:23 +08:00
bhe-talendbj
50c8a14d85 chore: tujdebug (#6747) 2021-10-15 18:11:15 +08:00
jzhao
f1761274e6 feat(TDI-44605):Upgrade Salesforce Components to support Endpoint Version 52(latest) (#6696)
* feat(TDI-44605):Upgrade Salesforce Components to support Endpoint
Version 52(latest)

* feat(TDI-44605):update dependencies for force-wsc
2021-10-15 16:02:48 +08:00
Jill Yan
1ea53b0216 APPINT-33788 (#6731)
Co-authored-by: jillyan <yan955599@gmail.com>
2021-10-15 15:44:15 +08:00
ovladyka
97a26b4bd9 fix(TDI-45900): Encoding doesn't work for byte[] type when tFileOutputDelimited use CSV option (#6150)
Updated two javajet files tFileOutputDelimited_begin and tFileOutputDelimited_main
2021-10-15 10:03:20 +08:00
Chao MENG
5317662b2f fix(TUP-33092): Setup default base/update p2 for studio and make sure it (#6741)
work in the final release.
https://jira.talendforge.org/browse/TUP-33092
2021-10-14 23:24:02 +08:00
Wei Hua
d1d03c4f55 APPINT-32850 Use of tREST component causes build types inconsistencies (#6739) 2021-10-14 16:53:43 +02:00
jzhao
9c81eaa389 feat(TDI-45864):Support File components with ORC file format (DI) (#6722)
* feat(TDI-45864):Support File components with ORC file format (DI)

* feat(TDI-45864):Date type read/write issue

* feat(TDI-45864):Double/Float from DB to ORC issue

* feat(TDI-45864):sync orc-core version
2021-10-14 16:21:08 +08:00
jzhao
074268fbeb fix(TDI-46682):Can't send e-mails via smtp.office365.com need to upgrade mail-1.4.7.jar to latest version (#6721)(#6738)
* fix(TDI-46682):Can't send e-mails via smtp.office365.com need to
upgrade mail-1.4.7.jar to latest version

* fix(TDI-46682):update for
tPOP/tFileInputMail/tVtigerCRMXX/tWebserviceXX
2021-10-14 16:01:36 +08:00
zyuan-talend
950e5b36a2 fix(TUP-31974):Cannot check "Job Design" Node if "Export Dependencies" is checked(#6737) 2021-10-14 12:04:34 +08:00
Jane Ding
6f48e78ae5 fix(TUP-33259):Analysis report show component missing but in fact not (#6736)
https://jira.talendforge.org/browse/TUP-33259
2021-10-14 10:00:20 +08:00
chmyga
830eb8f37e fix(TDI-46777): tBigQueryOutput 24 hour format (#6689) (#6734) 2021-10-13 18:09:01 +03:00
wang wei
92722dc4d3 fix(TDI-46734): LGPL jar included in TOS DI 2021-10-13 17:01:33 +08:00
bhe-talendbj
1242e91096 feat(TUP-33112): update license (#6729) 2021-10-13 16:57:37 +08:00
AlixMetivier
102a373c50 fix(TBD-13077): fix Junit (#6732)
* fix(TBD-13077): fix Junit

* fix assertion
2021-10-13 09:26:41 +02:00
AlixMetivier
0dccedeb15 fix(TBD-13077): fix Junit (#6726) 2021-10-12 09:56:33 +02:00
wang wei
4ea68e9d73 fix(TDI-46774): tS3Put doesn't copy the whole file over if using cache (#6677) 2021-10-12 10:38:07 +08:00
Jill Yan
c899aa5ff4 APPINT-33728 revert (#6686)
Co-authored-by: jillyan <yan955599@gmail.com>
2021-10-11 17:26:14 +02:00
Chao MENG
a9ae684dbf feat(TUP-33266): Remove -DdetailsLog=true and reuse -DtalendDebug=true (#6723)
https://jira.talendforge.org/browse/TUP-33266
2021-10-11 21:09:12 +08:00
Chao MENG
e1c2aebefc feat(TUP-33095): Handle update during logon if any feature is required to installed. (#6719)
* feat(TUP-33095): Handle update during logon if any feature is required
to installed.
https://jira.talendforge.org/browse/TUP-33095

* feat(TUP-33095): Handle update during logon if any feature is required
to installed.
https://jira.talendforge.org/browse/TUP-33095

* feat(TUP-33089): Update p2 parameters (CI / studio)
https://jira.talendforge.org/browse/TUP-33089
2021-10-10 09:48:50 +08:00
bhe-talendbj
201b2a93e6 feat(TUP-33112): Add possibility to set licenses on the Feature Manager (#6713)
* feat(TUP-33112): add missing license

* feat(TUP-33112): add missing license

* feat(TUP-33112): add missing license
2021-10-09 10:59:04 +08:00
jiezhang-tlnd
63b622f47a fix(TUP-32987)node "JDBC" with salesforce icon show under Metadata after (#6718)
migration from 731
https://jira.talendforge.org/browse/TUP-32987
2021-10-09 10:10:08 +08:00
vadym-drokov
d934094c2d APPINT-33842: NPE in tDB*** when selecting "data source alias" (#6704) 2021-10-08 11:51:12 +02:00
Dmytro Sylaiev
34f62a4851 fix(TDI-46759): Handle booleans as digits for OB (#6688) 2021-10-08 11:07:34 +03:00
nrousseau
1c16e14ca2 feat(TUP-33133): set component in correct feature (#6701) 2021-10-08 14:56:47 +08:00
Dmytro Grygorenko
49911dc43b fix(TDI-46616): CVE - update "commons-io" to 2.8.0 (#6710) 2021-10-07 10:38:24 +03:00
Dmytro Grygorenko
217f7d40a2 fix(TDI-46084): align versions of "jersey-core" and "jersey-client". (#6709) 2021-10-07 10:23:31 +03:00
nrousseau
1450ab0923 feat(TUP-33211): set license in features (#6700) 2021-10-06 10:25:11 +08:00
Alexiane Yvonet
689c76590a Add localized files (#6694)
Co-authored-by: root <obricha@talend.com>
2021-10-01 10:48:58 +08:00
tsasada-talend
79a847df5b Add localized files (#6687)
Co-authored-by: root <obricha@talend.com>
2021-10-01 10:27:45 +08:00
bhe-talendbj
06cc923fbd fix(TUP-31095): fix CWE-95 (#6695) 2021-09-30 11:33:16 +08:00
sbliu
b7e954fade fix(TUP-32947) fix tuj compile error, fix unit test. (#6692)
fix unit test: set parameter with correct type.
2021-09-30 09:39:19 +08:00
Chao MENG
9c320ebb2b feat(TUP-32459): Handle JETL / JETLBigData OEM monthly update (#6690)
* feat(TUP-32459): Handle JETL / JETLBigData OEM monthly update
https://jira.talendforge.org/browse/TUP-32459

* feat(TUP-32459): Handle JETL / JETLBigData OEM monthly update
https://jira.talendforge.org/browse/TUP-32459
2021-09-29 15:22:11 +08:00
hzhao-talendbj
aee8d82501 feat(TUP-32058):Add git info in the jobinfo.properties when building job (#6667)
* feat(TUP-32058):Add git info in the jobinfo.properties when building job
from studio

* feat(TUP-32058): Add git info in the jobinfo.properties when building
job from studio
2021-09-29 14:47:19 +08:00
sbliu
c1cc2cd16a fix(TUP-32947): Handle concatenating context variables, build correct update sql with real table name. (#6675) 2021-09-28 16:40:06 +08:00
Jane Ding
7c64d6af91 fix(TUP-32055):Error“java.io.FileNotFoundException: (#6685)
/icons/full/eview16/class_hi.gif" after clicking "open job hierarchy" in
job's context menu
https://jira.talendforge.org/browse/TUP-32055
2021-09-28 10:50:08 +08:00
Jane Ding
b7155465e6 fix(TUP-33067):tAmazonAuroraInput and tAmazonAuroraOutput list multiple (#6682)
different version driver moudules
https://jira.talendforge.org/browse/TUP-33067
2021-09-28 10:24:29 +08:00
Dmytro Grygorenko
61e8eaff4b fix(TDI-46614): CVE - update "commons-compress" to 1.21 (#6684) 2021-09-27 17:57:17 +03:00
bhe-talendbj
7d101d3b73 fix(TUP-26609): add missing type (#6683) 2021-09-27 21:37:21 +08:00
Oleksandr Zhelezniak
47bdb6f36f fix(TDI-46574): add nashorn library (#6641)
* add nashorn 15.3 (tFileInputJSON)
* bump asm 9.1 (tFileInputJSON)
2021-09-27 12:49:50 +03:00
hcyi
8bec384480 fix(TUP-33021):Feature Manager can't list any feature if studio install location has space. (#6676)
* fix(TUP-33021):Feature Manager can't list any feature if studio install
location has space.

* fix(TUP-33021):Feature Manager can't list any feature if studio install
location has space.
2021-09-27 10:39:27 +08:00
zyuan-talend
70b286861c fix(TUP-32758):show in connection dropdown and keep the built-in while propertytype + db version are compatible. (#6656) (#6680) 2021-09-27 09:35:42 +08:00
bhe-talendbj
fe621f2d57 feat(TUP-32561): Handle switch project if required features are different from each branch (#6672)
* feat(TUP-32561): restart studio while switching branch

* feat(TUP-32561): restart studio while switching branch
2021-09-26 15:16:28 +08:00
Laurent BOURGEOIS
6edaf6c964 fix(TBD-12972):Incorrect default Spark mode (#6669) 2021-09-24 17:16:54 +02:00
Dmytro Sylaiev
6709ec4c12 TDI-46772 - Port TDI-46610 to master 2021-09-24 15:01:40 +03:00
bhe-talendbj
978046c657 fix(TUP-26609): Harden deserialization (#6638) 2021-09-24 12:18:25 +08:00
nrousseau
ff6bd6fb4d Revert "feat(TUP-32454): change required to import plugins (#6665)" (#6671)
This reverts commit b0d8caf5b0.
2021-09-23 11:56:03 +08:00
Zhiwei Xue
916ed34890 chore():fix junit (#6670) 2021-09-23 09:37:56 +08:00
Zhiwei Xue
edaa962b76 fix(TUP-32942):Miss routines-8.0.1.jar when I local run spark universal (#6653)
spark 2.4.7 with EMR529
2021-09-22 17:08:58 +08:00
apoltavtsev
2c61ab6256 fix(APPINT-32494) cleanup Studio artifact sensitive parameters
in contexts files during publish to Cloud (backport APPINT-28826)
2021-09-22 05:33:43 +02:00
jiezhang-tlnd
13e5ad1618 fix(TUP-32888)can't use tHiveConnection in job (#6664) 2021-09-22 10:42:28 +08:00
nrousseau
b0d8caf5b0 feat(TUP-32454): change required to import plugins (#6665) 2021-09-22 09:27:38 +08:00
7490 changed files with 26481 additions and 163680 deletions

View File

@@ -1 +1,3 @@
bin.includes = feature.xml
bin.includes = feature.xml,\
license.html,\
feature.properties

View File

@@ -0,0 +1,175 @@
###############################################################################
# Copyright (c) 2005, 2014 IBM Corporation and others.
# This program and the accompanying materials are made
# available under the terms of the Eclipse Public License 2.0
# which is available at https://www.eclipse.org/legal/epl-2.0/
#
# SPDX-License-Identifier: EPL-2.0
#
# Contributors:
# IBM Corporation - initial API and implementation
###############################################################################
# This file should be translated.
# "featureName" property - name of the feature
featureName=Graphical Modeling Framework (GMF) Notation
# "providerName" property - name of the company that provides the feature
providerName=Eclipse Modeling Project
# "updateSiteName" property - label for the update site
updateSiteName=Graphical Modeling Framework (GMF) Updates
# "description" property - description of the feature
description=Graphical Modeling Framework Notation
# "licenseURL" property - URL of the "Feature License"
# do not translate value - just change to point to a locale-specific HTML page
licenseURL=license.html
# "license" property - text of the "Feature Update License"
# should be plain text version of license agreement pointed to be "licenseURL"
license=\
Eclipse Foundation Software User Agreement\n\
\n\
November 22, 2017\n\
\n\
Usage Of Content\n\
\n\
THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION\n\
AND/OR OTHER MATERIALS FOR OPEN SOURCE PROJECTS (COLLECTIVELY "CONTENT"). USE OF\n\
THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS AGREEMENT AND/OR THE\n\
TERMS AND CONDITIONS OF LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED\n\
BELOW. BY USING THE CONTENT, YOU AGREE THAT YOUR USE OF THE CONTENT IS GOVERNED\n\
BY THIS AGREEMENT AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE\n\
AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW. IF YOU DO NOT AGREE TO THE\n\
TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND CONDITIONS OF ANY\n\
APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW, THEN YOU\n\
MAY NOT USE THE CONTENT.\n\
\n\
Applicable Licenses\n\
\n\
Unless otherwise indicated, all Content made available by the Eclipse Foundation\n\
is provided to you under the terms and conditions of the Eclipse Public License\n\
Version 2.0 ("EPL"). A copy of the EPL is provided with this Content and is also\n\
available at http://www.eclipse.org/legal/epl-2.0. For purposes of the EPL,\n\
"Program" will mean the Content.\n\
\n\
Content includes, but is not limited to, source code, object code, documentation\n\
and other files maintained in the Eclipse Foundation source code repository\n\
("Repository") in software modules ("Modules") and made available as\n\
downloadable archives ("Downloads").\n\
\n\
- Content may be structured and packaged into modules to facilitate\n\
delivering, extending, and upgrading the Content. Typical modules may\n\
include plug-ins ("Plug-ins"), plug-in fragments ("Fragments"), and\n\
features ("Features").\n\
- Each Plug-in or Fragment may be packaged as a sub-directory or JAR\n\
(Java\u2122 ARchive) in a directory named "plugins".\n\
- A Feature is a bundle of one or more Plug-ins and/or Fragments and\n\
associated material. Each Feature may be packaged as a sub-directory in a\n\
directory named "features". Within a Feature, files named "feature.xml" may\n\
contain a list of the names and version numbers of the Plug-ins and/or\n\
Fragments associated with that Feature.\n\
- Features may also include other Features ("Included Features"). Within a\n\
Feature, files named "feature.xml" may contain a list of the names and\n\
version numbers of Included Features.\n\
\n\
The terms and conditions governing Plug-ins and Fragments should be contained in\n\
files named "about.html" ("Abouts"). The terms and conditions governing Features\n\
and Included Features should be contained in files named "license.html"\n\
("Feature Licenses"). Abouts and Feature Licenses may be located in any\n\
directory of a Download or Module including, but not limited to the following\n\
locations:\n\
\n\
- The top-level (root) directory\n\
- Plug-in and Fragment directories\n\
- Inside Plug-ins and Fragments packaged as JARs\n\
- Sub-directories of the directory named "src" of certain Plug-ins\n\
- Feature directories\n\
\n\
Note: if a Feature made available by the Eclipse Foundation is installed using\n\
the Provisioning Technology (as defined below), you must agree to a license\n\
("Feature Update License") during the installation process. If the Feature\n\
contains Included Features, the Feature Update License should either provide you\n\
with the terms and conditions governing the Included Features or inform you\n\
where you can locate them. Feature Update Licenses may be found in the "license"\n\
property of files named "feature.properties" found within a Feature. Such\n\
Abouts, Feature Licenses, and Feature Update Licenses contain the terms and\n\
conditions (or references to such terms and conditions) that govern your use of\n\
the associated Content in that directory.\n\
\n\
THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER TO THE EPL\n\
OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS. SOME OF THESE\n\
OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):\n\
\n\
- Eclipse Public License Version 1.0 (available at\n\
http://www.eclipse.org/legal/epl-v10.html)\n\
- Eclipse Distribution License Version 1.0 (available at\n\
http://www.eclipse.org/licenses/edl-v1.0.html)\n\
- Common Public License Version 1.0 (available at\n\
http://www.eclipse.org/legal/cpl-v10.html)\n\
- Apache Software License 1.1 (available at\n\
http://www.apache.org/licenses/LICENSE)\n\
- Apache Software License 2.0 (available at\n\
http://www.apache.org/licenses/LICENSE-2.0)\n\
- Mozilla Public License Version 1.1 (available at\n\
http://www.mozilla.org/MPL/MPL-1.1.html)\n\
\n\
IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR TO\n\
USE OF THE CONTENT. If no About, Feature License, or Feature Update License is\n\
provided, please contact the Eclipse Foundation to determine what terms and\n\
conditions govern that particular Content.\n\
\n\
Use of Provisioning Technology\n\
\n\
The Eclipse Foundation makes available provisioning software, examples of which\n\
include, but are not limited to, p2 and the Eclipse Update Manager\n\
("Provisioning Technology") for the purpose of allowing users to install\n\
software, documentation, information and/or other materials (collectively\n\
"Installable Software"). This capability is provided with the intent of allowing\n\
such users to install, extend and update Eclipse-based products. Information\n\
about packaging Installable Software is available at\n\
http://eclipse.org/equinox/p2/repository_packaging.html ("Specification").\n\
\n\
You may use Provisioning Technology to allow other parties to install\n\
Installable Software. You shall be responsible for enabling the applicable\n\
license agreements relating to the Installable Software to be presented to, and\n\
accepted by, the users of the Provisioning Technology in accordance with the\n\
Specification. By using Provisioning Technology in such a manner and making it\n\
available in accordance with the Specification, you further acknowledge your\n\
agreement to, and the acquisition of all necessary rights to permit the\n\
following:\n\
\n\
1. A series of actions may occur ("Provisioning Process") in which a user may\n\
execute the Provisioning Technology on a machine ("Target Machine") with the\n\
intent of installing, extending or updating the functionality of an\n\
Eclipse-based product.\n\
2. During the Provisioning Process, the Provisioning Technology may cause third\n\
party Installable Software or a portion thereof to be accessed and copied to\n\
the Target Machine.\n\
3. Pursuant to the Specification, you will provide to the user the terms and\n\
conditions that govern the use of the Installable Software ("Installable\n\
Software Agreement") and such Installable Software Agreement shall be\n\
accessed from the Target Machine in accordance with the Specification. Such\n\
Installable Software Agreement must inform the user of the terms and\n\
conditions that govern the Installable Software and must solicit acceptance\n\
by the end user in the manner prescribed in such Installable\n\
Software Agreement. Upon such indication of agreement by the user, the\n\
provisioning Technology will complete installation of the\n\
Installable Software.\n\
\n\
Cryptography\n\
\n\
Content may contain encryption software. The country in which you are currently\n\
may have restrictions on the import, possession, and use, and/or re-export to\n\
another country, of encryption software. BEFORE using any encryption software,\n\
please check the country's laws, regulations and policies concerning the import,\n\
possession, or use, and re-export of encryption software, to see if this is\n\
permitted.\n\
\n\
Java and all Java-based trademarks are trademarks of Oracle Corporation in the\n\
United States, other countries, or both.\n
########### end of license property ##########################################

View File

@@ -5,15 +5,15 @@
version="8.0.1.qualifier">
<description url="http://www.example.com/description">
[Enter Feature Description here.]
GMF
</description>
<copyright url="http://www.example.com/copyright">
[Enter Copyright Description here.]
</copyright>
<license url="http://www.example.com/license">
[Enter License Description here.]
<license url="%licenseURL">
%license
</license>
<requires>
@@ -428,4 +428,4 @@
version="3.0.0.draft20060413_v201105210656"
unpack="false"/>
</feature>
</feature>

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,189 @@
<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
<title>Eclipse Foundation Software User Agreement</title>
</head>
<body lang="EN-US">
<h2>Eclipse Foundation Software User Agreement</h2>
<p>November 22, 2017</p>
<h3>Usage Of Content</h3>
<p>THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION,
INFORMATION AND/OR OTHER MATERIALS FOR OPEN SOURCE PROJECTS
(COLLECTIVELY &quot;CONTENT&quot;). USE OF THE CONTENT IS GOVERNED BY
THE TERMS AND CONDITIONS OF THIS AGREEMENT AND/OR THE TERMS AND
CONDITIONS OF LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED
BELOW. BY USING THE CONTENT, YOU AGREE THAT YOUR USE OF THE CONTENT IS
GOVERNED BY THIS AGREEMENT AND/OR THE TERMS AND CONDITIONS OF ANY
APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED
BELOW. IF YOU DO NOT AGREE TO THE TERMS AND CONDITIONS OF THIS
AGREEMENT AND THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE
AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW, THEN YOU MAY NOT
USE THE CONTENT.</p>
<h3>Applicable Licenses</h3>
<p>
Unless otherwise indicated, all Content made available by the Eclipse
Foundation is provided to you under the terms and conditions of the
Eclipse Public License Version 2.0 (&quot;EPL&quot;). A copy of the
EPL is provided with this Content and is also available at <a
href="http://www.eclipse.org/legal/epl-2.0">http://www.eclipse.org/legal/epl-2.0</a>.
For purposes of the EPL, &quot;Program&quot; will mean the Content.
</p>
<p>Content includes, but is not limited to, source code, object
code, documentation and other files maintained in the Eclipse
Foundation source code repository (&quot;Repository&quot;) in software
modules (&quot;Modules&quot;) and made available as downloadable
archives (&quot;Downloads&quot;).</p>
<ul>
<li>Content may be structured and packaged into modules to
facilitate delivering, extending, and upgrading the Content. Typical
modules may include plug-ins (&quot;Plug-ins&quot;), plug-in
fragments (&quot;Fragments&quot;), and features
(&quot;Features&quot;).</li>
<li>Each Plug-in or Fragment may be packaged as a sub-directory
or JAR (Java&trade; ARchive) in a directory named
&quot;plugins&quot;.</li>
<li>A Feature is a bundle of one or more Plug-ins and/or
Fragments and associated material. Each Feature may be packaged as a
sub-directory in a directory named &quot;features&quot;. Within a
Feature, files named &quot;feature.xml&quot; may contain a list of
the names and version numbers of the Plug-ins and/or Fragments
associated with that Feature.</li>
<li>Features may also include other Features (&quot;Included
Features&quot;). Within a Feature, files named
&quot;feature.xml&quot; may contain a list of the names and version
numbers of Included Features.</li>
</ul>
<p>The terms and conditions governing Plug-ins and Fragments should
be contained in files named &quot;about.html&quot;
(&quot;Abouts&quot;). The terms and conditions governing Features and
Included Features should be contained in files named
&quot;license.html&quot; (&quot;Feature Licenses&quot;). Abouts and
Feature Licenses may be located in any directory of a Download or
Module including, but not limited to the following locations:</p>
<ul>
<li>The top-level (root) directory</li>
<li>Plug-in and Fragment directories</li>
<li>Inside Plug-ins and Fragments packaged as JARs</li>
<li>Sub-directories of the directory named &quot;src&quot; of
certain Plug-ins</li>
<li>Feature directories</li>
</ul>
<p>Note: if a Feature made available by the Eclipse Foundation is
installed using the Provisioning Technology (as defined below), you
must agree to a license (&quot;Feature Update License&quot;) during
the installation process. If the Feature contains Included Features,
the Feature Update License should either provide you with the terms
and conditions governing the Included Features or inform you where you
can locate them. Feature Update Licenses may be found in the
&quot;license&quot; property of files named
&quot;feature.properties&quot; found within a Feature. Such Abouts,
Feature Licenses, and Feature Update Licenses contain the terms and
conditions (or references to such terms and conditions) that govern
your use of the associated Content in that directory.</p>
<p>THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY
REFER TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND
CONDITIONS. SOME OF THESE OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT
ARE NOT LIMITED TO):</p>
<ul>
<li>Eclipse Public License Version 1.0 (available at <a
href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>)
</li>
<li>Eclipse Distribution License Version 1.0 (available at <a
href="http://www.eclipse.org/licenses/edl-v10.html">http://www.eclipse.org/licenses/edl-v1.0.html</a>)
</li>
<li>Common Public License Version 1.0 (available at <a
href="http://www.eclipse.org/legal/cpl-v10.html">http://www.eclipse.org/legal/cpl-v10.html</a>)
</li>
<li>Apache Software License 1.1 (available at <a
href="http://www.apache.org/licenses/LICENSE">http://www.apache.org/licenses/LICENSE</a>)
</li>
<li>Apache Software License 2.0 (available at <a
href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a>)
</li>
<li>Mozilla Public License Version 1.1 (available at <a
href="http://www.mozilla.org/MPL/MPL-1.1.html">http://www.mozilla.org/MPL/MPL-1.1.html</a>)
</li>
</ul>
<p>IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND
CONDITIONS PRIOR TO USE OF THE CONTENT. If no About, Feature License,
or Feature Update License is provided, please contact the Eclipse
Foundation to determine what terms and conditions govern that
particular Content.</p>
<h3>Use of Provisioning Technology</h3>
<p>
The Eclipse Foundation makes available provisioning software, examples
of which include, but are not limited to, p2 and the Eclipse Update
Manager (&quot;Provisioning Technology&quot;) for the purpose of
allowing users to install software, documentation, information and/or
other materials (collectively &quot;Installable Software&quot;). This
capability is provided with the intent of allowing such users to
install, extend and update Eclipse-based products. Information about
packaging Installable Software is available at <a
href="http://eclipse.org/equinox/p2/repository_packaging.html">http://eclipse.org/equinox/p2/repository_packaging.html</a>
(&quot;Specification&quot;).
</p>
<p>You may use Provisioning Technology to allow other parties to
install Installable Software. You shall be responsible for enabling
the applicable license agreements relating to the Installable Software
to be presented to, and accepted by, the users of the Provisioning
Technology in accordance with the Specification. By using Provisioning
Technology in such a manner and making it available in accordance with
the Specification, you further acknowledge your agreement to, and the
acquisition of all necessary rights to permit the following:</p>
<ol>
<li>A series of actions may occur (&quot;Provisioning
Process&quot;) in which a user may execute the Provisioning
Technology on a machine (&quot;Target Machine&quot;) with the intent
of installing, extending or updating the functionality of an
Eclipse-based product.</li>
<li>During the Provisioning Process, the Provisioning Technology
may cause third party Installable Software or a portion thereof to be
accessed and copied to the Target Machine.</li>
<li>Pursuant to the Specification, you will provide to the user
the terms and conditions that govern the use of the Installable
Software (&quot;Installable Software Agreement&quot;) and such
Installable Software Agreement shall be accessed from the Target
Machine in accordance with the Specification. Such Installable
Software Agreement must inform the user of the terms and conditions
that govern the Installable Software and must solicit acceptance by
the end user in the manner prescribed in such Installable Software
Agreement. Upon such indication of agreement by the user, the
provisioning Technology will complete installation of the Installable
Software.</li>
</ol>
<h3>Cryptography</h3>
<p>Content may contain encryption software. The country in which
you are currently may have restrictions on the import, possession, and
use, and/or re-export to another country, of encryption software.
BEFORE using any encryption software, please check the country's laws,
regulations and policies concerning the import, possession, or use,
and re-export of encryption software, to see if this is permitted.</p>
<p>
<small>Java and all Java-based trademarks are trademarks of
Oracle Corporation in the United States, other countries, or both.</small>
</p>
</body>
</html>

View File

@@ -9,4 +9,4 @@
</parent>
<artifactId>org.talend.gmf.feature</artifactId>
<packaging>eclipse-feature</packaging>
</project>
</project>

View File

@@ -48,6 +48,7 @@
<plugin id="org.talend.repository.localprovider.test" download-size="0" install-size="0" version="0.0.0" fragment="true" unpack="false"/>
<plugin id="org.talend.repository.metadata.test" download-size="0" install-size="0" version="0.0.0" fragment="true" unpack="false"/>
<plugin id="org.talend.repository.test" download-size="0" install-size="0" version="0.0.0" fragment="true" unpack="false"/>
<plugin id="org.talend.sqlbuilder.test" download-size="0" install-size="0" version="0.0.0" fragment="true" unpack="false"/>
<plugin id="org.talend.repository.view.di.test" download-size="0" install-size="0" version="0.0.0" fragment="true" unpack="false"/>
<plugin id="org.talend.repository.view.test" download-size="0" install-size="0" version="0.0.0" fragment="true" unpack="false"/>
<plugin id="org.talend.testutils" download-size="0" install-size="0" version="0.0.0" unpack="false"/>

View File

@@ -5,7 +5,7 @@
version="8.0.1.qualifier">
<description url="http://www.example.com/description">
[Enter Feature Description here.]
Azure Storage
</description>
<copyright url="http://www.example.com/copyright">
@@ -13,7 +13,98 @@
</copyright>
<license url="http://www.example.com/license">
[Enter License Description here.]
Azure Storage
Copyright (c) 2006-2021 Talend Inc. - www.talend.com
All rights reserved.
This product includes software developed at
OW2 (http://www.ow2.org/)
Licensed under the BSD-3-Clause license.
This product includes software developed at
The Apache Software Foundation (http://jakarta.apache.org/)
Licensed under the Apache-2.0 license.
This product includes software developed at
FasterXML (http://fasterxml.com)
Licensed under the JSON license.
This product includes software developed at
Connect2id Ltd. (http://connect2id.com)
Licensed under the Apache-2.0 license.
This product includes software developed at
AddThis
Licensed under the Apache-2.0 license.
This product includes software developed at
SLF4J.ORG
Licensed under the X11 license.
This product includes software developed at
SLF4J.ORG
Licensed under the MIT license.
This product includes software developed at
JUnit
Licensed under the EPL-1.0 license.
This product includes software developed at
Seam Framework
Licensed under the Apache-2.0 license.
This product includes software developed at
OPS4J - Open Participation Software for Java
Licensed under the Apache-2.0 license.
This product includes software developed at
GlassFish Community (https://glassfish.dev.java.net)
Licensed under the CDDL,GPL-2.0-only license.
This product includes software developed at
FasterXML
Licensed under the Apache-2.0 license.
This product includes software developed at
OSGi Alliance (http://www.osgi.org/)
Licensed under the Apache-2.0 license.
This product includes software developed at
Joda.org (http://www.joda.org)
Licensed under the Apache-2.0 license.
This product includes software developed at
Google, Inc.
Licensed under the Apache-2.0 license.
This product includes software developed at
Connect2id Ltd. (https://connect2id.com/)
Licensed under the Apache-2.0 license.
This product includes software developed at
Chemouni Uriel (https://urielch.github.io/)
Licensed under the Apache-2.0 license.
This product includes software developed at
Connect2id Ltd. (https://connect2id.com)
Licensed under the Apache-2.0 license.
</license>
<requires>

View File

@@ -1,12 +1,12 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.talend.studio</groupId>
<artifactId>tdi-studio-se</artifactId>
<version>8.0.1-SNAPSHOT</version>
<relativePath>../../../</relativePath>
</parent>
<artifactId>org.talend.studio.components.tcompv0.azurestorage.feature</artifactId>
<packaging>eclipse-feature</packaging>
</project>
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.talend.studio</groupId>
<artifactId>tdi-studio-se</artifactId>
<version>8.0.1-SNAPSHOT</version>
<relativePath>../../../</relativePath>
</parent>
<artifactId>org.talend.studio.components.tcompv0.azurestorage.feature</artifactId>
<packaging>eclipse-feature</packaging>
</project>

View File

@@ -5,7 +5,7 @@
version="8.0.1.qualifier">
<description url="http://www.example.com/description">
[Enter Feature Description here.]
Google drive component
</description>
<copyright url="http://www.example.com/copyright">
@@ -13,11 +13,89 @@
</copyright>
<license url="http://www.example.com/license">
[Enter License Description here.]
Google drive component
Copyright (c) 2006-2021 Talend Inc. - www.talend.com
All rights reserved.
This product includes software developed at
The Apache Software Foundation (http://jakarta.apache.org/)
Licensed under the Apache-2.0 license.
This product includes software developed at
FasterXML (http://fasterxml.com)
Licensed under the JSON license.
This product includes software developed at
AddThis
Licensed under the Apache-2.0 license.
This product includes software developed at
SLF4J.ORG
Licensed under the X11 license.
This product includes software developed at
SLF4J.ORG
Licensed under the MIT license.
This product includes software developed at
Google (http://www.google.com/)
Licensed under the Apache-2.0 license.
This product includes software developed at
JUnit
Licensed under the EPL-1.0 license.
This product includes software developed at
Seam Framework
Licensed under the Apache-2.0 license.
This product includes software developed at
Google
Licensed under the Apache-2.0 license.
This product includes software developed at
OPS4J - Open Participation Software for Java
Licensed under the Apache-2.0 license.
This product includes software developed at
GlassFish Community (https://glassfish.dev.java.net)
Licensed under the CDDL,GPL-2.0-only license.
This product includes software developed at
FasterXML
Licensed under the Apache-2.0 license.
This product includes software developed at
OSGi Alliance (http://www.osgi.org/)
Licensed under the Apache-2.0 license.
This product includes software developed at
Joda.org (http://www.joda.org)
Licensed under the Apache-2.0 license.
This product includes software developed at
Google, Inc.
Licensed under the Apache-2.0 license.
</license>
<requires>
<import plugin="org.talend.designer.maven.repo.tcompv0" version="0.0.0" match="greaterOrEqual"/>
</requires>
<plugin
id="org.talend.studio.components.tcompv0.googledrive"
download-size="0"

View File

@@ -1,12 +1,12 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.talend.studio</groupId>
<artifactId>tdi-studio-se</artifactId>
<version>8.0.1-SNAPSHOT</version>
<relativePath>../../../</relativePath>
</parent>
<artifactId>org.talend.studio.components.tcompv0.googledrive.feature</artifactId>
<packaging>eclipse-feature</packaging>
</project>
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.talend.studio</groupId>
<artifactId>tdi-studio-se</artifactId>
<version>8.0.1-SNAPSHOT</version>
<relativePath>../../../</relativePath>
</parent>
<artifactId>org.talend.studio.components.tcompv0.googledrive.feature</artifactId>
<packaging>eclipse-feature</packaging>
</project>

View File

@@ -5,7 +5,7 @@
version="8.0.1.qualifier">
<description url="http://www.example.com/description">
[Enter Feature Description here.]
Jira component
</description>
<copyright url="http://www.example.com/copyright">
@@ -13,11 +13,79 @@
</copyright>
<license url="http://www.example.com/license">
[Enter License Description here.]
Jira component
Copyright (c) 2006-2021 Talend Inc. - www.talend.com
All rights reserved.
This product includes software developed at
OPS4J - Open Participation Software for Java
Licensed under the Apache-2.0 license.
This product includes software developed at
GlassFish Community (https://glassfish.dev.java.net)
Licensed under the CDDL,GPL-2.0-only license.
This product includes software developed at
The Apache Software Foundation (http://jakarta.apache.org/)
Licensed under the Apache-2.0 license.
This product includes software developed at
FasterXML
Licensed under the Apache-2.0 license.
This product includes software developed at
OSGi Alliance (http://www.osgi.org/)
Licensed under the Apache-2.0 license.
This product includes software developed at
Joda.org (http://www.joda.org)
Licensed under the Apache-2.0 license.
This product includes software developed at
FasterXML (http://fasterxml.com)
Licensed under the JSON license.
This product includes software developed at
Google, Inc.
Licensed under the Apache-2.0 license.
This product includes software developed at
AddThis
Licensed under the Apache-2.0 license.
This product includes software developed at
SLF4J.ORG
Licensed under the MIT license.
This product includes software developed at
SLF4J.ORG
Licensed under the X11 license.
This product includes software developed at
JUnit
Licensed under the EPL-1.0 license.
This product includes software developed at
Seam Framework
Licensed under the Apache-2.0 license.
</license>
<requires>
<import plugin="org.talend.designer.maven.repo.tcompv0" version="0.0.0" match="greaterOrEqual"/>
</requires>
<plugin
id="org.talend.studio.components.tcompv0.jira"
download-size="0"

View File

@@ -1,12 +1,12 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.talend.studio</groupId>
<artifactId>tdi-studio-se</artifactId>
<version>8.0.1-SNAPSHOT</version>
<relativePath>../../../</relativePath>
</parent>
<artifactId>org.talend.studio.components.tcompv0.jira.feature</artifactId>
<packaging>eclipse-feature</packaging>
</project>
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.talend.studio</groupId>
<artifactId>tdi-studio-se</artifactId>
<version>8.0.1-SNAPSHOT</version>
<relativePath>../../../</relativePath>
</parent>
<artifactId>org.talend.studio.components.tcompv0.jira.feature</artifactId>
<packaging>eclipse-feature</packaging>
</project>

View File

@@ -5,7 +5,7 @@
version="8.0.1.qualifier">
<description url="http://www.example.com/description">
[Enter Feature Description here.]
Marketo component
</description>
<copyright url="http://www.example.com/copyright">
@@ -13,11 +13,144 @@
</copyright>
<license url="http://www.example.com/license">
[Enter License Description here.]
Marketo component
Copyright (c) 2006-2021 Talend Inc. - www.talend.com
All rights reserved.
This product includes software developed at
FasterXML (http://fasterxml.com)
Licensed under the Apache-2.0 license.
This product includes software developed at
The Apache Software Foundation (http://jakarta.apache.org/)
Licensed under the Apache-2.0 license.
This product includes software developed at
Oracle
Licensed under the EDL-1.0 license.
This product includes software developed at
fasterxml.com (http://fasterxml.com)
Licensed under the EPL-1.0 license.
This product includes software developed at
Oracle Corporation (http://www.oracle.com/)
Licensed under the CDDL-1.0,GPL2 w/ CPE license.
This product includes software developed at
FasterXML (http://fasterxml.com)
Licensed under the JSON license.
This product includes software developed at
Oracle Corporation (http://www.oracle.com/)
Licensed under the GPL-2.0-only license.
This product includes software developed at
AddThis
Licensed under the Apache-2.0 license.
This product includes software developed at
SLF4J.ORG
Licensed under the MIT license.
This product includes software developed at
GlassFish Community (https://glassfish.java.net)
Licensed under the CDDL + GPLv2 with classpath exception license.
This product includes software developed at
SLF4J.ORG
Licensed under the X11 license.
This product includes software developed at
JUnit
Licensed under the EPL-1.0 license.
This product includes software developed at
Seam Framework
Licensed under the Apache-2.0 license.
This product includes software developed at
OPS4J - Open Participation Software for Java
Licensed under the Apache-2.0 license.
This product includes software developed at
GlassFish Community (https://glassfish.dev.java.net)
Licensed under the CDDL,GPL-2.0-only license.
This product includes software developed at
Oracle (http://www.oracle.com/)
Licensed under the CDDL + GPLv2 with classpath exception license.
This product includes software developed at
FasterXML
Licensed under the Apache-2.0 license.
This product includes software developed at
Oracle
Licensed under the CDDL,GPL-2.0-only license.
This product includes software developed at
OSGi Alliance (http://www.osgi.org/)
Licensed under the Apache-2.0 license.
This product includes software developed at
Oracle (http://www.oracle.com)
Licensed under the CDDL + GPLv2 with classpath exception license.
This product includes software developed at
Joda.org (http://www.joda.org)
Licensed under the Apache-2.0 license.
This product includes software developed at
Google, Inc.
Licensed under the Apache-2.0 license.
This product includes software developed at
Oracle Corporation
Licensed under the CDDL-1.0,GPL-2.0-only license.
This product includes software developed at
Oracle (http://www.oracle.com)
Licensed under the CDDL,GPL-2.0-only license.
This product includes software developed at
Sun Microsystems (http://www.sun.com)
Licensed under the CDDL+GPL license.
This product includes software developed at
Oracle
Licensed under the Apache-2.0 license.
</license>
<requires>
<import plugin="org.talend.designer.maven.repo.tcompv0" version="0.0.0" match="greaterOrEqual"/>
</requires>
<plugin
id="org.talend.studio.components.tcompv0.marketo"
download-size="0"

View File

@@ -1,12 +1,12 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.talend.studio</groupId>
<artifactId>tdi-studio-se</artifactId>
<version>8.0.1-SNAPSHOT</version>
<relativePath>../../../</relativePath>
</parent>
<artifactId>org.talend.studio.components.tcompv0.marketo.feature</artifactId>
<packaging>eclipse-feature</packaging>
</project>
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.talend.studio</groupId>
<artifactId>tdi-studio-se</artifactId>
<version>8.0.1-SNAPSHOT</version>
<relativePath>../../../</relativePath>
</parent>
<artifactId>org.talend.studio.components.tcompv0.marketo.feature</artifactId>
<packaging>eclipse-feature</packaging>
</project>

View File

@@ -5,7 +5,7 @@
version="8.0.1.qualifier">
<description url="http://www.example.com/description">
[Enter Feature Description here.]
Marklogic component
</description>
<copyright url="http://www.example.com/copyright">
@@ -13,11 +13,184 @@
</copyright>
<license url="http://www.example.com/license">
[Enter License Description here.]
Marklogic component
Copyright (c) 2006-2021 Talend Inc. - www.talend.com
All rights reserved.
This product includes software developed at
Oracle Corporation (http://www.oracle.com/)
Licensed under the CDDL,GPL-2.0-only license.
This product includes software developed at
JCraft,Inc. (http://www.jcraft.com/)
Licensed under the BSD-3-Clause license.
This product includes software developed at
The Apache Software Foundation (http://jakarta.apache.org/)
Licensed under the Apache-2.0 license.
This product includes software developed at
fasterxml.com (http://fasterxml.com)
Licensed under the EPL-1.0 license.
This product includes software developed at
FasterXML (http://fasterxml.com)
Licensed under the JSON license.
This product includes software developed at
Sun Microsystems, Inc.
Licensed under the CDDL-1.0 license.
This product includes software developed at
AddThis
Licensed under the Apache-2.0 license.
This product includes software developed at
GlassFish Community (https://glassfish.java.net)
Licensed under the CDDL + GPLv2 with classpath exception license.
This product includes software developed at
SLF4J.ORG
Licensed under the MIT license.
This product includes software developed at
The Netty Project (http://netty.io/)
Licensed under the Apache-2.0 license.
This product includes software developed at
JUnit
Licensed under the EPL-1.0 license.
This product includes software developed at
Seam Framework
Licensed under the Apache-2.0 license.
This product includes software developed at
OPS4J - Open Participation Software for Java
Licensed under the Apache-2.0 license.
This product includes software developed at
FasterXML
Licensed under the Apache-2.0 license.
This product includes software developed at
Extreme! Lab, Indiana University (http://www.extreme.indiana.edu/)
Licensed under the Apache-1.0,CC0-1.0,CC-PDDC license.
This product includes software developed at
OSGi Alliance (http://www.osgi.org/)
Licensed under the Apache-2.0 license.
This product includes software developed at
Joda.org (http://www.joda.org)
Licensed under the Apache-2.0 license.
This product includes software developed at
The Eclipse Foundation (http://www.eclipse.org/)
Licensed under the EDL-1.0 license.
This product includes software developed at
Oracle Corporation
Licensed under the CDDL-1.0,GPL-2.0-only license.
This product includes software developed at
JOpt Simple
Licensed under the MIT license.
This product includes software developed at
Chemouni Uriel (https://urielch.github.io/)
Licensed under the Apache-2.0 license.
This product includes software developed at
FasterXML
Licensed under the JSON license.
This product includes software developed at
Oracle
Licensed under the Apache-2.0 license.
This product includes software developed at
OW2 (http://www.ow2.org/)
Licensed under the BSD-3-Clause license.
This product includes software developed at
FasterXML (http://fasterxml.com)
Licensed under the Apache-2.0 license.
This product includes software developed at
MarkLogic Corporation
Licensed under the Apache-2.0 license.
This product includes software developed at
The Apache Software Foundation (http://jakarta.apache.org/)
Licensed under the Apache-1.0 license.
This product includes software developed at
Google
Licensed under the BSD-3-Clause license.
This product includes software developed at
Connect2id Ltd. (http://connect2id.com)
Licensed under the Apache-2.0 license.
This product includes software developed at
SLF4J.ORG
Licensed under the X11 license.
This product includes software developed at
The Eclipse Foundation (http://www.eclipse.org/)
Licensed under the Apache-2.0 license.
This product includes software developed at
GlassFish Community (https://glassfish.dev.java.net)
Licensed under the CDDL,GPL-2.0-only license.
This product includes software developed at
Saxonica (http://www.saxonica.com)
Licensed under the MPL-2.0 license.
This product includes software developed at
Google, Inc.
Licensed under the Apache-2.0 license.
</license>
<requires>
<import plugin="org.talend.designer.maven.repo.tcompv0" version="0.0.0" match="greaterOrEqual"/>
</requires>
<plugin
id="org.talend.studio.components.tcompv0.marklogic"
download-size="0"
@@ -30,4 +203,5 @@
install-size="0"
version="0.0.0"
unpack="false"/>
</feature>

View File

@@ -1,12 +1,12 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.talend.studio</groupId>
<artifactId>tdi-studio-se</artifactId>
<version>8.0.1-SNAPSHOT</version>
<relativePath>../../../</relativePath>
</parent>
<artifactId>org.talend.studio.components.tcompv0.marklogic.feature</artifactId>
<packaging>eclipse-feature</packaging>
</project>
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.talend.studio</groupId>
<artifactId>tdi-studio-se</artifactId>
<version>8.0.1-SNAPSHOT</version>
<relativePath>../../../</relativePath>
</parent>
<artifactId>org.talend.studio.components.tcompv0.marklogic.feature</artifactId>
<packaging>eclipse-feature</packaging>
</project>

View File

@@ -5,7 +5,7 @@
version="8.0.1.qualifier">
<description url="http://www.example.com/description">
[Enter Feature Description here.]
Netsuite
</description>
<copyright url="http://www.example.com/copyright">
@@ -13,11 +13,129 @@
</copyright>
<license url="http://www.example.com/license">
[Enter License Description here.]
Netsuite
Copyright (c) 2006-2021 Talend Inc. - www.talend.com
All rights reserved.
This product includes software developed at
The Apache Software Foundation (http://jakarta.apache.org/)
Licensed under the Apache-2.0 license.
This product includes software developed at
Oracle
Licensed under the EDL-1.0 license.
This product includes software developed at
FasterXML (http://fasterxml.com)
Licensed under the JSON license.
This product includes software developed at
Sun Microsystems, Inc.
Licensed under the CDDL-1.0 license.
This product includes software developed at
Oracle Corporation
Licensed under the CDDL-1.0,GPL-2.0-or-later license.
This product includes software developed at
AddThis
Licensed under the Apache-2.0 license.
This product includes software developed at
SLF4J.ORG
Licensed under the MIT license.
This product includes software developed at
GlassFish Community (https://glassfish.java.net)
Licensed under the CDDL + GPLv2 with classpath exception license.
This product includes software developed at
SLF4J.ORG
Licensed under the X11 license.
This product includes software developed at
Seam Framework
Licensed under the Apache-2.0 license.
This product includes software developed at
JUnit
Licensed under the EPL-1.0 license.
This product includes software developed at
OPS4J - Open Participation Software for Java
Licensed under the Apache-2.0 license.
This product includes software developed at
FasterXML
Licensed under the Apache-2.0 license.
This product includes software developed at
Oracle (http://www.oracle.com)
Licensed under the CDDL + GPLv2 with classpath exception license.
This product includes software developed at
OSGi Alliance (http://www.osgi.org/)
Licensed under the Apache-2.0 license.
This product includes software developed at
Joda.org (http://www.joda.org)
Licensed under the Apache-2.0 license.
This product includes software developed at
Oracle (http://www.oracle.com)
Licensed under the CDDL,GPL-2.0-or-later license.
This product includes software developed at
Google, Inc.
Licensed under the Apache-2.0 license.
This product includes software developed at
The Eclipse Foundation (http://www.eclipse.org/)
Licensed under the EDL-1.0 license.
This product includes software developed at
Square, Inc. (http://squareup.com)
Licensed under the Apache-2.0 license.
This product includes software developed at
GlassFish Community (https://glassfish.dev.java.net)
Licensed under the CDDL,GPL-2.0-or-later license.
This product includes software developed at
FasterXML
Licensed under the JSON license.
This product includes software developed at
Oracle
Licensed under the Apache-2.0 license.
</license>
<requires>
<import plugin="org.talend.designer.maven.repo.tcompv0" version="0.0.0" match="greaterOrEqual"/>
</requires>
<plugin
id="org.talend.studio.components.tcompv0.netsuite"
download-size="0"
@@ -30,4 +148,5 @@
install-size="0"
version="0.0.0"
unpack="false"/>
</feature>

View File

@@ -1,12 +1,12 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.talend.studio</groupId>
<artifactId>tdi-studio-se</artifactId>
<version>8.0.1-SNAPSHOT</version>
<relativePath>../../../</relativePath>
</parent>
<artifactId>org.talend.studio.components.tcompv0.netsuite.feature</artifactId>
<packaging>eclipse-feature</packaging>
</project>
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.talend.studio</groupId>
<artifactId>tdi-studio-se</artifactId>
<version>8.0.1-SNAPSHOT</version>
<relativePath>../../../</relativePath>
</parent>
<artifactId>org.talend.studio.components.tcompv0.netsuite.feature</artifactId>
<packaging>eclipse-feature</packaging>
</project>

View File

@@ -5,7 +5,7 @@
version="8.0.1.qualifier">
<description url="http://www.example.com/description">
[Enter Feature Description here.]
Salesforce component
</description>
<copyright url="http://www.example.com/copyright">
@@ -13,11 +13,84 @@
</copyright>
<license url="http://www.example.com/license">
[Enter License Description here.]
Salesforce component
Copyright (c) 2006-2021 Talend Inc. - www.talend.com
All rights reserved.
This product includes software developed at
The Apache Software Foundation (http://jakarta.apache.org/)
Licensed under the Apache-2.0 license.
This product includes software developed at
FasterXML (http://fasterxml.com)
Licensed under the JSON license.
This product includes software developed at
AddThis
Licensed under the Apache-2.0 license.
This product includes software developed at
SLF4J.ORG
Licensed under the MIT license.
This product includes software developed at
SLF4J.ORG
Licensed under the X11 license.
This product includes software developed at
ANTLR
Licensed under the BSD-3-Clause license.
This product includes software developed at
JUnit
Licensed under the EPL-1.0 license.
This product includes software developed at
Seam Framework
Licensed under the Apache-2.0 license.
This product includes software developed at
OPS4J - Open Participation Software for Java
Licensed under the Apache-2.0 license.
This product includes software developed at
GlassFish Community (https://glassfish.dev.java.net)
Licensed under the CDDL,GPL-2.0-only license.
This product includes software developed at
FasterXML
Licensed under the Apache-2.0 license.
This product includes software developed at
OSGi Alliance (http://www.osgi.org/)
Licensed under the Apache-2.0 license.
This product includes software developed at
Joda.org (http://www.joda.org)
Licensed under the Apache-2.0 license.
This product includes software developed at
Google, Inc.
Licensed under the Apache-2.0 license.
</license>
<requires>
<import plugin="org.talend.designer.maven.repo.tcompv0" version="0.0.0" match="greaterOrEqual"/>
</requires>
<plugin
id="org.talend.studio.components.tcompv0.salesforce"
download-size="0"
@@ -30,4 +103,5 @@
install-size="0"
version="0.0.0"
unpack="false"/>
</feature>

View File

@@ -1,12 +1,12 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.talend.studio</groupId>
<artifactId>tdi-studio-se</artifactId>
<version>8.0.1-SNAPSHOT</version>
<relativePath>../../../</relativePath>
</parent>
<artifactId>org.talend.studio.components.tcompv0.salesforce.feature</artifactId>
<packaging>eclipse-feature</packaging>
</project>
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.talend.studio</groupId>
<artifactId>tdi-studio-se</artifactId>
<version>8.0.1-SNAPSHOT</version>
<relativePath>../../../</relativePath>
</parent>
<artifactId>org.talend.studio.components.tcompv0.salesforce.feature</artifactId>
<packaging>eclipse-feature</packaging>
</project>

View File

@@ -5,7 +5,7 @@
version="8.0.1.qualifier">
<description url="http://www.example.com/description">
[Enter Feature Description here.]
Snowflake
</description>
<copyright url="http://www.example.com/copyright">
@@ -13,11 +13,94 @@
</copyright>
<license url="http://www.example.com/license">
[Enter License Description here.]
Snowflake
Copyright (c) 2006-2021 Talend Inc. - www.talend.com
All rights reserved.
This product includes software developed at
The Apache Software Foundation (http://jakarta.apache.org/)
Licensed under the Apache-2.0 license.
This product includes software developed at
Oracle
Licensed under the EDL-1.0 license.
This product includes software developed at
FasterXML (http://fasterxml.com)
Licensed under the JSON license.
This product includes software developed at
Oracle Corporation
Licensed under the CDDL-1.0,GPL-2.0-or-later license.
This product includes software developed at
AddThis
Licensed under the Apache-2.0 license.
This product includes software developed at
SLF4J.ORG
Licensed under the X11 license.
This product includes software developed at
SLF4J.ORG
Licensed under the MIT license.
This product includes software developed at
Seam Framework
Licensed under the Apache-2.0 license.
This product includes software developed at
JUnit
Licensed under the EPL-1.0 license.
This product includes software developed at
OPS4J - Open Participation Software for Java
Licensed under the Apache-2.0 license.
This product includes software developed at
FasterXML
Licensed under the Apache-2.0 license.
This product includes software developed at
OSGi Alliance (http://www.osgi.org/)
Licensed under the Apache-2.0 license.
This product includes software developed at
Joda.org (http://www.joda.org)
Licensed under the Apache-2.0 license.
This product includes software developed at
Google, Inc.
Licensed under the Apache-2.0 license.
This product includes software developed at
GlassFish Community (https://glassfish.dev.java.net)
Licensed under the CDDL,GPL-2.0-or-later license.
This product includes software developed at
Oracle
Licensed under the Apache-2.0 license.
</license>
<requires>
<import plugin="org.talend.designer.maven.repo.tcompv0" version="0.0.0" match="greaterOrEqual"/>
</requires>
<plugin
id="org.talend.studio.components.tcompv0.snowflake"
download-size="0"
@@ -30,4 +113,5 @@
install-size="0"
version="0.0.0"
unpack="false"/>
</feature>

View File

@@ -1,12 +1,12 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.talend.studio</groupId>
<artifactId>tdi-studio-se</artifactId>
<version>8.0.1-SNAPSHOT</version>
<relativePath>../../../</relativePath>
</parent>
<artifactId>org.talend.studio.components.tcompv0.snowflake.feature</artifactId>
<packaging>eclipse-feature</packaging>
</project>
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.talend.studio</groupId>
<artifactId>tdi-studio-se</artifactId>
<version>8.0.1-SNAPSHOT</version>
<relativePath>../../../</relativePath>
</parent>
<artifactId>org.talend.studio.components.tcompv0.snowflake.feature</artifactId>
<packaging>eclipse-feature</packaging>
</project>

View File

@@ -5,7 +5,7 @@
version="8.0.1.qualifier">
<description url="http://www.example.com/description">
[Enter Feature Description here.]
Splunk component
</description>
<copyright url="http://www.example.com/copyright">
@@ -13,11 +13,79 @@
</copyright>
<license url="http://www.example.com/license">
[Enter License Description here.]
Splunk component
Copyright (c) 2006-2021 Talend Inc. - www.talend.com
All rights reserved.
This product includes software developed at
OPS4J - Open Participation Software for Java
Licensed under the Apache-2.0 license.
This product includes software developed at
GlassFish Community (https://glassfish.dev.java.net)
Licensed under the CDDL,GPL-2.0-only license.
This product includes software developed at
The Apache Software Foundation (http://jakarta.apache.org/)
Licensed under the Apache-2.0 license.
This product includes software developed at
FasterXML
Licensed under the Apache-2.0 license.
This product includes software developed at
OSGi Alliance (http://www.osgi.org/)
Licensed under the Apache-2.0 license.
This product includes software developed at
Joda.org (http://www.joda.org)
Licensed under the Apache-2.0 license.
This product includes software developed at
FasterXML (http://fasterxml.com)
Licensed under the JSON license.
This product includes software developed at
Google, Inc.
Licensed under the Apache-2.0 license.
This product includes software developed at
AddThis
Licensed under the Apache-2.0 license.
This product includes software developed at
SLF4J.ORG
Licensed under the MIT license.
This product includes software developed at
SLF4J.ORG
Licensed under the X11 license.
This product includes software developed at
JUnit
Licensed under the EPL-1.0 license.
This product includes software developed at
Seam Framework
Licensed under the Apache-2.0 license.
</license>
<requires>
<import plugin="org.talend.designer.maven.repo.tcompv0" version="0.0.0" match="greaterOrEqual"/>
</requires>
<plugin
id="org.talend.studio.components.tcompv0.splunk"
download-size="0"
@@ -30,4 +98,5 @@
install-size="0"
version="0.0.0"
unpack="false"/>
</feature>

View File

@@ -1,12 +1,12 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.talend.studio</groupId>
<artifactId>tdi-studio-se</artifactId>
<version>8.0.1-SNAPSHOT</version>
<relativePath>../../../</relativePath>
</parent>
<artifactId>org.talend.studio.components.tcompv0.splunk.feature</artifactId>
<packaging>eclipse-feature</packaging>
</project>
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.talend.studio</groupId>
<artifactId>tdi-studio-se</artifactId>
<version>8.0.1-SNAPSHOT</version>
<relativePath>../../../</relativePath>
</parent>
<artifactId>org.talend.studio.components.tcompv0.splunk.feature</artifactId>
<packaging>eclipse-feature</packaging>
</project>

View File

@@ -1,57 +1,259 @@
<?xml version="1.0" encoding="UTF-8"?>
<feature
id="org.talend.tos.components.feature"
label="Components-feature"
version="8.0.1.qualifier">
<description url="http://www.example.com/description">
[Enter Feature Description here.]
</description>
<copyright url="http://www.example.com/copyright">
[Enter Copyright Description here.]
</copyright>
<license url="http://www.example.com/license">
[Enter License Description here.]
</license>
<requires>
<import feature="org.talend.studio.components.tcompv0.jdbc.feature" version="0.0.0" match="greaterOrEqual"/>
<import feature="org.talend.studio.components.tcompv0.netsuite.feature" version="0.0.0" match="greaterOrEqual"/>
<import feature="org.talend.studio.components.tcompv0.googledrive.feature" version="0.0.0" match="greaterOrEqual"/>
<import feature="org.talend.studio.components.tcompv0.marketo.feature" version="0.0.0" match="greaterOrEqual"/>
<import feature="org.talend.studio.components.tcompv0.azurestorage.feature" version="0.0.0" match="greaterOrEqual"/>
<import feature="org.talend.studio.components.tcompv0.snowflake.feature" version="0.0.0" match="greaterOrEqual"/>
<import feature="org.talend.studio.components.tcompv0.jira.feature" version="0.0.0" match="greaterOrEqual"/>
<import feature="org.talend.studio.components.tcompv0.splunk.feature" version="0.0.0" match="greaterOrEqual"/>
<import feature="org.talend.studio.components.tcompv0.salesforce.feature" version="0.0.0" match="greaterOrEqual"/>
<import feature="org.talend.esb.tooling.ws.consumer.feature" version="0.0.0" match="greaterOrEqual"/>
<import plugin="biz.aQute.bnd.annotation" version="0.0.0" match="greaterOrEqual"/>
<import plugin="javax.wsdl" version="0.0.0" match="greaterOrEqual"/>
<import plugin="joda-time" version="0.0.0" match="greaterOrEqual"/>
<import plugin="org.eclipse.help.ui" version="0.0.0" match="greaterOrEqual"/>
<import plugin="jaxb-api" version="0.0.0" match="greaterOrEqual"/>
</requires>
<plugin
id="org.talend.components.api"
download-size="0"
install-size="0"
version="0.0.0"
unpack="false"/>
<plugin
id="org.talend.components.api.service.osgi"
download-size="0"
install-size="0"
version="0.0.0"
unpack="false"/>
<plugin
id="org.talend.components.azurestorage"
download-size="0"
install-size="0"
version="0.0.0"
unpack="false"/>
<plugin
id="org.talend.components.common"
download-size="0"
install-size="0"
version="0.0.0"
unpack="false"/>
<plugin
id="org.talend.components.common-oauth"
download-size="0"
install-size="0"
version="0.0.0"
unpack="false"/>
<plugin
id="org.talend.components.googledrive"
download-size="0"
install-size="0"
version="0.0.0"
unpack="false"/>
<plugin
id="org.talend.components.jdbc.definition"
download-size="0"
install-size="0"
version="0.0.0"
unpack="false"/>
<plugin
id="org.talend.components.jira"
download-size="0"
install-size="0"
version="0.0.0"
unpack="false"/>
<plugin
id="org.talend.components.marketo"
download-size="0"
install-size="0"
version="0.0.0"
unpack="false"/>
<plugin
id="org.talend.components.netsuite"
download-size="0"
install-size="0"
version="0.0.0"
unpack="false"/>
<plugin
id="org.talend.components.salesforce.definition"
download-size="0"
install-size="0"
version="0.0.0"
unpack="false"/>
<plugin
id="org.talend.components.snowflake.definition"
download-size="0"
install-size="0"
version="0.0.0"
unpack="false"/>
<plugin
id="org.talend.components.splunk"
download-size="0"
install-size="0"
version="0.0.0"
unpack="false"/>
<plugin
id="org.talend.designer.abstractmap"
download-size="0"
install-size="0"
version="0.0.0"
unpack="false"/>
<plugin
id="org.talend.designer.alfrescooutput"
download-size="0"
install-size="0"
version="0.0.0"
unpack="false"/>
<plugin
id="org.talend.designer.components.exchange"
download-size="0"
install-size="0"
version="0.0.0"/>
<plugin
id="org.talend.designer.components.localprovider"
download-size="0"
install-size="0"
version="0.0.0"/>
<plugin
id="org.talend.designer.core.generic"
download-size="0"
install-size="0"
version="0.0.0"
unpack="false"/>
<plugin
id="org.talend.designer.dbmap"
download-size="0"
install-size="0"
version="0.0.0"
unpack="false"/>
<plugin
id="org.talend.designer.filemultischemas"
download-size="0"
install-size="0"
version="0.0.0"
unpack="false"/>
<plugin
id="org.talend.designer.fileoutputxml"
download-size="0"
install-size="0"
version="0.0.0"
unpack="false"/>
<plugin
id="org.talend.designer.gefabstractmap"
download-size="0"
install-size="0"
version="0.0.0"
unpack="false"/>
<plugin
id="org.talend.designer.mapper"
download-size="0"
install-size="0"
version="0.0.0"
unpack="false"/>
<plugin
id="org.talend.designer.rowgenerator"
download-size="0"
install-size="0"
version="0.0.0"
unpack="false"/>
<plugin
id="org.talend.designer.scd"
download-size="0"
install-size="0"
version="0.0.0"
unpack="false"/>
<plugin
id="org.talend.designer.unifiedcomponent"
download-size="0"
install-size="0"
version="0.0.0"
unpack="false"/>
<plugin
id="org.talend.designer.webservice"
download-size="0"
install-size="0"
version="0.0.0"
unpack="false"/>
<plugin
id="org.talend.designer.xmlmap"
download-size="0"
install-size="0"
version="0.0.0"
unpack="false"/>
<plugin
id="org.talend.expressionbuilder"
download-size="0"
install-size="0"
version="0.0.0"
unpack="false"/>
<plugin
id="org.talend.repository.generic"
download-size="0"
install-size="0"
version="0.0.0"
unpack="false"/>
<plugin
id="org.talend.sdk.component.studio-integration"
download-size="0"
install-size="0"
version="0.0.0"
unpack="false"/>
<plugin
id="org.talend.designer.esb.components.rs.consumer"
download-size="0"
install-size="0"
version="0.0.0"
unpack="false"/>
<feature id="org.talend.tos.components.feature" label="Components-feature" version="8.0.1.qualifier">
<description url="http://www.example.com/description">[Enter Feature Description here.]</description>
<copyright url="http://www.example.com/copyright">[Enter Copyright Description here.]</copyright>
<license url="http://www.example.com/license">[Enter License Description here.]</license>
<requires>
<import feature="org.talend.studio.components.tcompv0.jdbc.feature" version="0.0.0" match="greaterOrEqual"/>
<import feature="org.talend.studio.components.tcompv0.couchbase.feature" version="0.0.0" match="greaterOrEqual"/>
<import feature="org.talend.studio.components.tcompv0.netsuite.feature" version="0.0.0" match="greaterOrEqual"/>
<import feature="org.talend.studio.components.tcompv0.marklogic.feature" version="0.0.0" match="greaterOrEqual"/>
<import feature="org.talend.studio.components.tcompv0.googledrive.feature" version="0.0.0" match="greaterOrEqual"/>
<import feature="org.talend.studio.components.tcompv0.marketo.feature" version="0.0.0" match="greaterOrEqual"/>
<import feature="org.talend.studio.components.tcompv0.azurestorage.feature" version="0.0.0" match="greaterOrEqual"/>
<import feature="org.talend.studio.components.tcompv0.snowflake.feature" version="0.0.0" match="greaterOrEqual"/>
<import feature="org.talend.studio.components.tcompv0.jira.feature" version="0.0.0" match="greaterOrEqual"/>
<import feature="org.talend.studio.components.tcompv0.splunk.feature" version="0.0.0" match="greaterOrEqual"/>
<import feature="org.talend.studio.components.tcompv0.salesforce.feature" version="0.0.0" match="greaterOrEqual"/>
<import feature="org.talend.esb.tooling.ws.consumer.feature" version="0.0.0" match="greaterOrEqual"/>
<import plugin="biz.aQute.bnd.annotation" version="0.0.0" match="greaterOrEqual"/>
<import plugin="javax.wsdl" version="0.0.0" match="greaterOrEqual"/>
<import plugin="joda-time" version="0.0.0" match="greaterOrEqual"/>
<import plugin="org.eclipse.help.ui" version="0.0.0" match="greaterOrEqual"/>
<import plugin="jaxb-api" version="0.0.0" match="greaterOrEqual"/>
</requires>
<plugin id="org.talend.components.api" download-size="0" install-size="0" version="0.0.0" unpack="false"/>
<plugin id="org.talend.components.api.service.osgi" download-size="0" install-size="0" version="0.0.0" unpack="false"/>
<plugin id="org.talend.components.azurestorage" download-size="0" install-size="0" version="0.0.0" unpack="false"/>
<plugin id="org.talend.components.common" download-size="0" install-size="0" version="0.0.0" unpack="false"/>
<plugin id="org.talend.components.common-oauth" download-size="0" install-size="0" version="0.0.0" unpack="false"/>
<plugin id="org.talend.components.googledrive" download-size="0" install-size="0" version="0.0.0" unpack="false"/>
<plugin id="org.talend.components.jdbc.definition" download-size="0" install-size="0" version="0.0.0" unpack="false"/>
<plugin id="org.talend.components.jira" download-size="0" install-size="0" version="0.0.0" unpack="false"/>
<plugin id="org.talend.components.marketo" download-size="0" install-size="0" version="0.0.0" unpack="false"/>
<plugin id="org.talend.components.netsuite" download-size="0" install-size="0" version="0.0.0" unpack="false"/>
<plugin id="org.talend.components.salesforce.definition" download-size="0" install-size="0" version="0.0.0" unpack="false"/>
<plugin id="org.talend.components.snowflake.definition" download-size="0" install-size="0" version="0.0.0" unpack="false"/>
<plugin id="org.talend.components.splunk" download-size="0" install-size="0" version="0.0.0" unpack="false"/>
<plugin id="org.talend.designer.abstractmap" download-size="0" install-size="0" version="0.0.0" unpack="false"/>
<plugin id="org.talend.designer.alfrescooutput" download-size="0" install-size="0" version="0.0.0" unpack="false"/>
<plugin id="org.talend.designer.components.exchange" download-size="0" install-size="0" version="0.0.0"/>
<plugin id="org.talend.designer.components.localprovider" download-size="0" install-size="0" version="0.0.0"/>
<plugin id="org.talend.designer.core.generic" download-size="0" install-size="0" version="0.0.0" unpack="false"/>
<plugin id="org.talend.designer.dbmap" download-size="0" install-size="0" version="0.0.0" unpack="false"/>
<plugin id="org.talend.designer.filemultischemas" download-size="0" install-size="0" version="0.0.0" unpack="false"/>
<plugin id="org.talend.designer.fileoutputxml" download-size="0" install-size="0" version="0.0.0" unpack="false"/>
<plugin id="org.talend.designer.gefabstractmap" download-size="0" install-size="0" version="0.0.0" unpack="false"/>
<plugin id="org.talend.designer.mapper" download-size="0" install-size="0" version="0.0.0" unpack="false"/>
<plugin id="org.talend.designer.rowgenerator" download-size="0" install-size="0" version="0.0.0" unpack="false"/>
<plugin id="org.talend.designer.scd" download-size="0" install-size="0" version="0.0.0" unpack="false"/>
<plugin id="org.talend.designer.unifiedcomponent" download-size="0" install-size="0" version="0.0.0" unpack="false"/>
<plugin id="org.talend.designer.webservice" download-size="0" install-size="0" version="0.0.0" unpack="false"/>
<plugin id="org.talend.designer.xmlmap" download-size="0" install-size="0" version="0.0.0" unpack="false"/>
<plugin id="org.talend.expressionbuilder" download-size="0" install-size="0" version="0.0.0" unpack="false"/>
<plugin id="org.talend.repository.generic" download-size="0" install-size="0" version="0.0.0" unpack="false"/>
<plugin id="org.talend.sdk.component.studio-integration" download-size="0" install-size="0" version="0.0.0" unpack="false"/>
</feature>

View File

@@ -43,8 +43,8 @@
<plugin id="org.talend.libraries.palo" download-size="0" install-size="0" version="0.0.0"/>
<plugin id="org.talend.libraries.persist.lookup" download-size="0" install-size="0" version="0.0.0" unpack="false"/>
<plugin id="org.talend.libraries.salesforce" download-size="0" install-size="0" version="0.0.0"/>
<plugin id="org.talend.libraries.servlet" download-size="0" install-size="0" version="0.0.0"/>
<plugin id="org.talend.libraries.slf4j" download-size="0" install-size="0" version="0.0.0"/>
<plugin id="org.talend.libraries.xml" download-size="0" install-size="0" version="0.0.0"/>
<plugin id="org.talend.libraries.zmq" download-size="0" install-size="0" version="0.0.0"/>
<plugin id="org.talend.libraries.esb" download-size="0" install-size="0" version="0.0.0"/>
</feature>

View File

@@ -1,20 +0,0 @@
prefs.configuration.LINK_STYLE.AUTO=Auto
prefs.configuration.title=Map components preferences :
prefs.configuration.LINK_STYLE.LINE=Lines (fast)
prefs.configuration.LINK_STYLE.BEZIER_CURVE=Curves
prefs.configuration.LINK_STYLE=Default mapping links display as :
DraggingInfosPopup.draggingEntry=Dragging {0} entry.
DraggingInfosPopup.dropInvalid=\n<< Drop invalid >>\n
DraggingInfosPopup.draggingEntries=Dragging {0} entries.
DraggingInfosPopup.dropInvalidWithKey=\n<< Drop invalid >>\nPress both Shift and Ctrl keys to map one to one and overwrite
DraggingInfosPopup.overwriteMode=\ > Overwrite mode
DraggingInfosPopup.appendMode=\ > Append mode
DraggingInfosPopup.appendModeToOverwrite=\ > Append mode (Ctrl key to overwrite)
DraggingInfosPopup.insertAllSelectedEntries=\ > Insert all selected entries
DraggingInfosPopup.insertRemainingEntries=\ > Insert remaining entries
DraggingInfosPopup.eachSourceEntryExpressionToEachTargetExpression=> Each source entry expression to each target expression
DraggingInfosPopup.eachSourceEntryToEachTargetExpression=> Each source entry to each target expression
DraggingInfosPopup.allSourceEntriesExpressionToASingleOneTargetExpressionShiftKey=> All source entries expression to a single one target expression (Shift key to change mapping)
DraggingInfosPopup.allSourceEntriesExpressionToASingleOneTargetExpression=> All source entries expression to a single one target expression
DraggingInfosPopup.allSourceEntriesToASingleOneTargetExpressionShiftKey=> All source entries to a single one target expression (Shift key to change mapping)
DraggingInfosPopup.allSourceEntriesToASingleOneTargetExpression=> All source entries to a single one target expression

View File

@@ -6,7 +6,7 @@ prefs.configuration.LINK_STYLE.LINE=Lignes (rapide)
DraggingInfosPopup.draggingEntry=Glissement de {0} entr\u00E9e(s).
DraggingInfosPopup.dropInvalid=\n<< D\u00E9p\u00F4t impossible >>\n
DraggingInfosPopup.draggingEntries=Glissement de {0} entr\u00E9es.
DraggingInfosPopup.dropInvalidWithKey=\n<<D\u00E9p\u00F4t impossible>>\n : appuyez sur Maj et Ctrl pour mapper en un pour un et \u00E9craser
DraggingInfosPopup.dropInvalidWithKey=\n<< D\u00E9p\u00F4t impossible >>\nAppuyez sur Maj et Ctrl pour mapper en un pour un et \u00E9craser
DraggingInfosPopup.overwriteMode= > Mode \u00E9crasement
DraggingInfosPopup.appendMode= > Mode \u00E9criture \u00E0 la suite
DraggingInfosPopup.appendModeToOverwrite= > Mode \u00E9criture \u00E0 la suite (Ctrl pour \u00E9craser)

View File

@@ -3,18 +3,18 @@ prefs.configuration.LINK_STYLE=\u30C7\u30D5\u30A9\u30EB\u30C8\u30DE\u30C3\u30D4\
prefs.configuration.LINK_STYLE.AUTO=\u81EA\u52D5
prefs.configuration.LINK_STYLE.BEZIER_CURVE=\u66F2\u7DDA
prefs.configuration.LINK_STYLE.LINE=\u76F4\u7DDA\uFF08\u9AD8\u901F\uFF09
DraggingInfosPopup.draggingEntry={0}\u30A8\u30F3\u30C8\u30EA\u3092\u30C9\u30E9\u30C3\u30B0\u3057\u3066\u3044\u307E\u3059\u3002
DraggingInfosPopup.draggingEntry={0}\u30A8\u30F3\u30C8\u30EA\u30FC\u3092\u30C9\u30E9\u30C3\u30B0\u3057\u3066\u3044\u307E\u3059\u3002
DraggingInfosPopup.dropInvalid=\n<< \u7121\u52B9\u306A\u30C9\u30ED\u30C3\u30D7 >>\n
DraggingInfosPopup.draggingEntries={0}\u30A8\u30F3\u30C8\u30EA\u3092\u30C9\u30E9\u30C3\u30B0\u3057\u3066\u3044\u307E\u3059\u3002
DraggingInfosPopup.dropInvalidWithKey=\n<< \u7121\u52B9\u306A\u30C9\u30ED\u30C3\u30D7 >>\n\u4E00\u5BFE\u4E00\u30DE\u30C3\u30D4\u30F3\u30B0\u3057\u3001\u4E0A\u66F8\u304D\u3059\u308B\u5834\u5408\u306F\u3001Shift\u30AD\u30FC\u3068Ctrl\u30AD\u30FC\u3092\u540C\u6642\u306B\u62BC\u3057\u307E\u3059
DraggingInfosPopup.draggingEntries={0}\u30A8\u30F3\u30C8\u30EA\u30FC\u3092\u30C9\u30E9\u30C3\u30B0\u3057\u3066\u3044\u307E\u3059\u3002
DraggingInfosPopup.dropInvalidWithKey=\n<< \u7121\u52B9\u306A\u30C9\u30ED\u30C3\u30D7 >>\nShift\u30AD\u30FC\u3068Ctrl\u30AD\u30FC\u3092\u540C\u6642\u306B\u62BC\u3059\u3068\u30011\u5BFE1\u3067\u30DE\u30C3\u30D4\u30F3\u30B0\u3055\u308C\u3066\u4E0A\u66F8\u304D\u3055\u308C\u307E\u3059
DraggingInfosPopup.overwriteMode= > \u4E0A\u66F8\u304D\u30E2\u30FC\u30C9
DraggingInfosPopup.appendMode= > \u8FFD\u52A0\u30E2\u30FC\u30C9
DraggingInfosPopup.appendModeToOverwrite= > \u8FFD\u52A0\u30E2\u30FC\u30C9(\u4E0A\u66F8\u304D\u3059\u308B\u306B\u306F[Ctrl]\u30AD\u30FC)
DraggingInfosPopup.insertAllSelectedEntries= > \u9078\u629E\u3057\u305F\u3059\u3079\u3066\u306E\u30A8\u30F3\u30C8\u30EA\u3092\u633F\u5165\u3057\u307E\u3059
DraggingInfosPopup.insertRemainingEntries= > \u6B8B\u308A\u306E\u30A8\u30F3\u30C8\u30EA\u3092\u633F\u5165\u3057\u307E\u3059
DraggingInfosPopup.eachSourceEntryExpressionToEachTargetExpression=> \u5404\u30BF\u30FC\u30B2\u30C3\u30C8\u5F0F\u306B\u5BFE\u3059\u308B\u5404\u30BD\u30FC\u30B9\u30A8\u30F3\u30C8\u30EA\u5F0F
DraggingInfosPopup.eachSourceEntryToEachTargetExpression=> \u5404\u30BF\u30FC\u30B2\u30C3\u30C8\u5F0F\u306B\u5BFE\u3059\u308B\u5404\u30BD\u30FC\u30B9\u30A8\u30F3\u30C8\u30EA
DraggingInfosPopup.allSourceEntriesExpressionToASingleOneTargetExpressionShiftKey=> 1\u3064\u306E\u30BF\u30FC\u30B2\u30C3\u30C8\u5F0F\u306B\u5BFE\u3059\u308B\u3059\u3079\u3066\u306E\u30BD\u30FC\u30B9\u30A8\u30F3\u30C8\u30EA\u5F0F (\u30DE\u30C3\u30D4\u30F3\u30B0\u3092\u5909\u66F4\u3059\u308B\u306B\u306FShift\u30AD\u30FC)
DraggingInfosPopup.allSourceEntriesExpressionToASingleOneTargetExpression=> 1\u3064\u306E\u30BF\u30FC\u30B2\u30C3\u30C8\u5F0F\u306B\u5BFE\u3059\u308B\u3059\u3079\u3066\u306E\u30BD\u30FC\u30B9\u30A8\u30F3\u30C8\u30EA\u5F0F
DraggingInfosPopup.allSourceEntriesToASingleOneTargetExpressionShiftKey=> 1\u3064\u306E\u30BF\u30FC\u30B2\u30C3\u30C8\u5F0F\u306B\u5BFE\u3059\u308B\u3059\u3079\u3066\u306E\u30BD\u30FC\u30B9\u30A8\u30F3\u30C8\u30EA (\u30DE\u30C3\u30D4\u30F3\u30B0\u3092\u5909\u66F4\u3059\u308B\u306B\u306FShift\u30AD\u30FC)
DraggingInfosPopup.allSourceEntriesToASingleOneTargetExpression=> 1\u3064\u306E\u30BF\u30FC\u30B2\u30C3\u30C8\u5F0F\u306B\u5BFE\u3059\u308B\u3059\u3079\u3066\u306E\u30BD\u30FC\u30B9\u30A8\u30F3\u30C8\u30EA
DraggingInfosPopup.insertAllSelectedEntries= > \u9078\u629E\u3057\u305F\u3059\u3079\u3066\u306E\u30A8\u30F3\u30C8\u30EA\u30FC\u3092\u633F\u5165\u3057\u307E\u3059
DraggingInfosPopup.insertRemainingEntries= > \u6B8B\u308A\u306E\u30A8\u30F3\u30C8\u30EA\u30FC\u3092\u633F\u5165\u3057\u307E\u3059
DraggingInfosPopup.eachSourceEntryExpressionToEachTargetExpression=> \u5404\u30BF\u30FC\u30B2\u30C3\u30C8\u5F0F\u306B\u5BFE\u3059\u308B\u5404\u30BD\u30FC\u30B9\u30A8\u30F3\u30C8\u30EA\u30FC\u5F0F
DraggingInfosPopup.eachSourceEntryToEachTargetExpression=> \u5404\u30BF\u30FC\u30B2\u30C3\u30C8\u5F0F\u306B\u5BFE\u3059\u308B\u5404\u30BD\u30FC\u30B9\u30A8\u30F3\u30C8\u30EA\u30FC
DraggingInfosPopup.allSourceEntriesExpressionToASingleOneTargetExpressionShiftKey=> 1\u3064\u306E\u30BF\u30FC\u30B2\u30C3\u30C8\u5F0F\u306B\u5BFE\u3059\u308B\u3059\u3079\u3066\u306E\u30BD\u30FC\u30B9\u30A8\u30F3\u30C8\u30EA\u30FC\u5F0F (\u30DE\u30C3\u30D4\u30F3\u30B0\u3092\u5909\u66F4\u3059\u308B\u306B\u306FShift\u30AD\u30FC)
DraggingInfosPopup.allSourceEntriesExpressionToASingleOneTargetExpression=> 1\u3064\u306E\u30BF\u30FC\u30B2\u30C3\u30C8\u5F0F\u306B\u5BFE\u3059\u308B\u3059\u3079\u3066\u306E\u30BD\u30FC\u30B9\u30A8\u30F3\u30C8\u30EA\u30FC\u5F0F
DraggingInfosPopup.allSourceEntriesToASingleOneTargetExpressionShiftKey=> 1\u3064\u306E\u30BF\u30FC\u30B2\u30C3\u30C8\u5F0F\u306B\u5BFE\u3059\u308B\u3059\u3079\u3066\u306E\u30BD\u30FC\u30B9\u30A8\u30F3\u30C8\u30EA\u30FC (\u30DE\u30C3\u30D4\u30F3\u30B0\u3092\u5909\u66F4\u3059\u308B\u306B\u306FShift\u30AD\u30FC)
DraggingInfosPopup.allSourceEntriesToASingleOneTargetExpression=> 1\u3064\u306E\u30BF\u30FC\u30B2\u30C3\u30C8\u5F0F\u306B\u5BFE\u3059\u308B\u3059\u3079\u3066\u306E\u30BD\u30FC\u30B9\u30A8\u30F3\u30C8\u30EA\u30FC

View File

@@ -6,7 +6,7 @@ prefs.configuration.LINK_STYLE.LINE=\u76F4\u7EBF (\u5FEB)
DraggingInfosPopup.draggingEntry=\u62D6\u52A8 {0} \u6761\u76EE
DraggingInfosPopup.dropInvalid=\n<< \u65E0\u6548\u91CA\u653E >>\n
DraggingInfosPopup.draggingEntries=\u62D6\u52A8 {0} \u4E2A\u6761\u76EE\u3002
DraggingInfosPopup.dropInvalidWithKey=\n<<\u65E0\u6548\u653E\u7F6E>>\n\u6309\u4F4F Shift \u548C Ctrl \u952E\u4EE5\u8FDB\u884C\u4E00\u5BF9\u4E00\u6620\u5C04\u5E76\u6539\u5199
DraggingInfosPopup.dropInvalidWithKey=\n<< \u65E0\u6548\u653E\u7F6E >>\n\u6309\u4F4F Shift \u548C Ctrl \u952E\u4EE5\u8FDB\u884C\u4E00\u5BF9\u4E00\u6620\u5C04\u5E76\u6539\u5199
DraggingInfosPopup.overwriteMode= > \u91CD\u5199\u6A21\u5F0F
DraggingInfosPopup.appendMode= >\u9644\u52A0\u6A21\u5F0F
DraggingInfosPopup.appendModeToOverwrite= > \u8FFD\u52A0\u6A21\u5F0F (Ctrl \u952E\u6765\u6539\u5199)

View File

@@ -1,20 +0,0 @@
AlfrescoModelDialog.missingAspectDefinitions.msg=The chosen aspects refer to unknown Alfresco aspect(s) : ${0}.\nPlease provide the alfresco model files that define them.
AlfrescoModelDialog.modelTable.title=Title
AlfrescoModelDialog.availableAspects=Available Aspects
AlfrescoModelDialog.missingAspectDefinitions.title=Missing aspect definitions
AlfrescoOutputManager.schemaError.title=Error in schema
AlfrescoModelDialog.missingTypeDefinitions.msg=The chosen type refers to unknown Alfresco type(s) or aspect(s) : ${0}.\nPlease provide the alfresco model files that define them.
AlfrescoModelDialog.missingTypeDefinitions.title=Missing type definitions
AlfrescoModelDialog.add=Add...
AlfrescoOutputModelManager.errorReadingModel=Error reading Alfresco model file
AlfrescoModelDialog.aspects=Aspects
AlfrescoOutputManager.schemaError.msg=Please synchronize schema first
AlfrescoOutputModelManager.alreadyAdded=This model has already been added
AlfrescoModelDialog.removeModelFailed=Failed to remove model
AlfrescoOutputModelManager.prefixConflict=Unable to add the model, prefix conflict with previously added model for
AlfrescoOutputModelManager.notYetAdded=This model has not yet been added
AlfrescoModelDialog.type=Type
AlfrescoModelDialog.addModelFailed=Failed to add model
AlfrescoModelDialog.modelTable.name=Name
AlfrescoModelDialog.remove=Remove
AlfrescoOutputManager.failedLoadModel=Failed to load model from component metadata, reinitializing

View File

@@ -4,7 +4,7 @@ AlfrescoOutputManager.schemaError.msg=\u6700\u521D\u306B\u30B9\u30AD\u30FC\u30DE
AlfrescoOutputModelManager.alreadyAdded=\u3053\u306E\u30E2\u30C7\u30EB\u306F\u65E2\u306B\u8FFD\u52A0\u6E08\u307F\u3067\u3059\u3002
AlfrescoOutputModelManager.errorReadingModel=Alfresco\u30E2\u30C7\u30EB\u30D5\u30A1\u30A4\u30EB\u306E\u8AAD\u8FBC\u307F\u30A8\u30E9\u30FC
AlfrescoOutputModelManager.notYetAdded=\u3053\u306E\u30E2\u30C7\u30EB\u306F\u307E\u3060\u8FFD\u52A0\u3055\u308C\u3066\u3044\u307E\u305B\u3093\u3002
AlfrescoOutputModelManager.prefixConflict=\u5148\u306B\u8FFD\u52A0\u3055\u308C\u305F\u30E2\u30C7\u30EB\u306E\u30D7\u30EC\u30D5\u30A3\u30C3\u30AF\u30B9\u306E\u885D\u7A81\u306E\u305F\u3081\u3001\u30E2\u30C7\u30EB\u306E\u8FFD\u52A0\u304C\u51FA\u6765\u307E\u305B\u3093\u3002
AlfrescoOutputModelManager.prefixConflict=\u5148\u306B\u8FFD\u52A0\u3055\u308C\u305F\u30E2\u30C7\u30EB\u306E\u30D7\u30EC\u30D5\u30A3\u30C3\u30AF\u30B9\u306E\u885D\u7A81\u306E\u305F\u3081\u3001\u30E2\u30C7\u30EB\u306E\u8FFD\u52A0\u304C\u3067\u304D\u307E\u305B\u3093\u3002
AlfrescoModelDialog.type=\u30BF\u30A4\u30D7
AlfrescoModelDialog.aspects=\u30A2\u30B9\u30DA\u30AF\u30C8
AlfrescoModelDialog.availableAspects=\u53EF\u80FD\u306A\u30A2\u30B9\u30DA\u30AF\u30C8
@@ -13,8 +13,8 @@ AlfrescoModelDialog.addModelFailed=\u30E2\u30C7\u30EB\u8FFD\u52A0\u306B\u5931\u6
AlfrescoModelDialog.remove=\u524A\u9664
AlfrescoModelDialog.removeModelFailed=\u30E2\u30C7\u30EB\u306E\u524A\u9664\u306B\u5931\u6557\u3057\u307E\u3057\u305F
AlfrescoModelDialog.missingTypeDefinitions.title=\u578B\u5B9A\u7FA9\u304C\u3042\u308A\u307E\u305B\u3093
AlfrescoModelDialog.missingTypeDefinitions.msg=\u9078\u629E\u3057\u305F\u65B9\u306F\u4E0D\u660E\u306EAlfresco\u578B\u3082\u3057\u304F\u306F\u30A2\u30B9\u30DA\u30AF\u30C8: ${0}\u3092\u53C2\u7167\u3057\u3066\u3044\u307E\u3059\u3002\n\u305D\u308C\u3089\u3092\u5B9A\u7FA9\u3057\u305FAlfresco\u30E2\u30C7\u30EB\u30D5\u30A1\u30A4\u30EB\u3092\u63D0\u4F9B\u3057\u3066\u304F\u3060\u3055\u3044\u3002
AlfrescoModelDialog.missingTypeDefinitions.msg=\u9078\u629E\u3055\u308C\u305F\u30BF\u30A4\u30D7\u306F\u3001Alfresco\u306E\u4E0D\u660E\u306A\u30BF\u30A4\u30D7\u307E\u305F\u306F\u30A2\u30B9\u30DA\u30AF\u30C8: ${0}\u3092\u53C2\u7167\u3057\u3066\u3044\u307E\u3059\u3002\n\u305D\u308C\u3089\u304C\u5B9A\u7FA9\u3055\u308C\u3066\u3044\u308Balfresco\u306E\u30E2\u30C7\u30EB\u30D5\u30A1\u30A4\u30EB\u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\u3002
AlfrescoModelDialog.missingAspectDefinitions.title=\u30A2\u30B9\u30DA\u30AF\u30C8\u5B9A\u7FA9\u304C\u3042\u308A\u307E\u305B\u3093\u3002
AlfrescoModelDialog.missingAspectDefinitions.msg=\u9078\u629E\u3055\u308C\u305F\u30A2\u30B9\u30DA\u30AF\u30C8\u306F\u4E0D\u660E\u306EAlfresco\u30A2\u30B9\u30DA\u30AF\u30C8: ${0}\u3092\u53C2\u7167\u3057\u3066\u3044\u307E\u3059\u3002\n\u305D\u308C\u3089\u3092\u5B9A\u7FA9\u3057\u305FAlfresco\u30E2\u30C7\u30EB\u30D5\u30A1\u30A4\u30EB\u3092\u63D0\u4F9B\u3057\u3066\u304F\u3060\u3055\u3044\u3002
AlfrescoModelDialog.missingAspectDefinitions.msg=\u9078\u629E\u3055\u308C\u305F\u30A2\u30B9\u30DA\u30AF\u30C8\u306F\u3001Alfresco\u306E\u4E0D\u660E\u306A\u30A2\u30B9\u30DA\u30AF\u30C8: ${0}\u3092\u53C2\u7167\u3057\u3066\u3044\u307E\u3059\u3002\n\u305D\u308C\u3089\u304C\u5B9A\u7FA9\u3055\u308C\u3066\u3044\u308Balfresco\u306E\u30E2\u30C7\u30EB\u30D5\u30A1\u30A4\u30EB\u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\u3002
AlfrescoModelDialog.modelTable.title=\u30BF\u30A4\u30C8\u30EB
AlfrescoModelDialog.modelTable.name=\u540D\u524D

View File

@@ -13,8 +13,8 @@ AlfrescoModelDialog.addModelFailed=\u6DFB\u52A0\u6A21\u578B\u5931\u8D25
AlfrescoModelDialog.remove=\u79FB\u9664
AlfrescoModelDialog.removeModelFailed=\u79FB\u9664\u6A21\u578B\u5931\u8D25
AlfrescoModelDialog.missingTypeDefinitions.title=\u7F3A\u7701\u7C7B\u578B\u5B9A\u4E49
AlfrescoModelDialog.missingTypeDefinitions.msg=\u6240\u9009\u62E9\u7684\u7C7B\u578B\u6D89\u53CA\u4E00\u4E2A\u6216\u591A\u4E2A\u672A\u77E5\u7684 Alfresco \u7C7B\u578B\u6216asepct: ${0}.\n \u8BF7\u63D0\u4F9B\u5B9A\u4E49\u8FD9\u4E9B \u7C7B\u578B\u6216 aspect \u7684 Alfresco \u6A21\u578B\u6587\u4EF6\u3002
AlfrescoModelDialog.missingTypeDefinitions.msg=\u6240\u9009\u62E9\u7684\u7C7B\u578B\u6D89\u53CA\u672A\u77E5\u7684 Alfresco \u7C7B\u578B\u6216\u65B9\u9762: ${0}\u3002\n\u8BF7\u63D0\u4F9B\u5B9A\u4E49\u8FD9\u4E9B aspect \u7684 Alfresco \u6A21\u578B\u6587\u4EF6\u3002
AlfrescoModelDialog.missingAspectDefinitions.title=\u7F3A\u7701\u65B9\u9762\u5B9A\u4E49
AlfrescoModelDialog.missingAspectDefinitions.msg=\u6240\u9009\u62E9\u7684\u65B9\u9762\u6D89\u53CA\u4E00\u4E2A\u6216\u591A\u4E2A\u672A\u77E5\u7684 Alfresco aspect: ${0}.\n \u8BF7\u63D0\u4F9B\u5B9A\u4E49\u8FD9\u4E9B aspect \u7684 Alfresco \u6A21\u578B\u6587\u4EF6\u3002
AlfrescoModelDialog.missingAspectDefinitions.msg=\u6240\u9009\u62E9\u7684\u65B9\u9762\u6D89\u53CA\u672A\u77E5\u7684Alfresco\u65B9\u9762: ${0}.\n\u8BF7\u63D0\u4F9B\u5B9A\u4E49\u8FD9\u4E9B aspect \u7684 Alfresco \u6A21\u578B\u6587\u4EF6\u3002
AlfrescoModelDialog.modelTable.title=\u6807\u9898
AlfrescoModelDialog.modelTable.name=\u540D\u79F0

View File

@@ -7,7 +7,6 @@ bin.includes = plugin.xml,\
jet_stub/,\
plugin.properties,\
plugin_de.properties,\
plugin_en.properties,\
plugin_es.properties,\
plugin_fr.properties,\
plugin_ja.properties,\

View File

@@ -90,11 +90,9 @@ if((codePart.equals(ECodePart.END))&&(stat || logstashCurrent)){
INode source = con.getSource();
String sourceNodeId = source.getUniqueName();
String sourceLabel = ElementParameterParser.getValue(source, "__LABEL__");
String sourceNodeLabel = ((sourceLabel==null || "__UNIQUE_NAME__".equals(sourceLabel) || sourceLabel.contains("\"")) ? sourceNodeId : sourceLabel.trim());
String targetLabel = ElementParameterParser.getValue(node, "__LABEL__");
String targetNodeLabel = ((targetLabel==null || "__UNIQUE_NAME__".equals(targetLabel) || targetLabel.contains("\"")) ? node.getUniqueName() : targetLabel.trim());
String sourceNodeLabel = NodeUtil.getLabel(source);
String targetNodeLabel = NodeUtil.getLabel(node);
String sourceNodeComponent = source.getComponent().getName();
for (INode jobStructureCatcher : jobCatcherNodes) {
@@ -124,11 +122,9 @@ if((codePart.equals(ECodePart.END))&&(stat || logstashCurrent)){
INode source = con.getSource();
String sourceNodeId = source.getUniqueName();
String sourceLabel = ElementParameterParser.getValue(source, "__LABEL__");
String sourceNodeLabel = ((sourceLabel==null || "__UNIQUE_NAME__".equals(sourceLabel) || sourceLabel.contains("\"")) ? sourceNodeId : sourceLabel.trim());
String sourceNodeLabel = NodeUtil.getLabel(source);
String targetLabel = ElementParameterParser.getValue(node, "__LABEL__");
String targetNodeLabel = ((targetLabel==null || "__UNIQUE_NAME__".equals(targetLabel) || targetLabel.contains("\"")) ? node.getUniqueName() : targetLabel.trim());
String targetNodeLabel = NodeUtil.getLabel(node);
String sourceNodeComponent = source.getComponent().getName();
for (INode jobStructureCatcher : jobCatcherNodes) {

View File

@@ -137,7 +137,7 @@
}
%>
currentComponent="<%=node.getUniqueName() %>";
<%
connSet = new HashSet<IConnection>();
connSet.addAll(node.getIncomingConnections(EConnectionType.FLOW_MAIN));
@@ -155,6 +155,17 @@
//about performance monitor, no way to support more than one job catcher component, also that is not necessary
final String subprocessName4Catcher = logstashCurrent ? jobCatcherNodes.get(0).getDesignSubjobStartNode().getUniqueName() : null;
if(logstashCurrent) {
String currentLabel = ElementParameterParser.getValue(node, "__LABEL__");
if(currentLabel==null || "".equals(currentLabel) || "__UNIQUE_NAME__".equals(currentLabel) || cid.endsWith(NodeUtil.getLabel(node))) {
//not generate the unnecessary statement if label is default one
} else {
%>
cLabel="<%=NodeUtil.getLabel(node)%>";
<%
}
}
if ((codePart.equals(ECodePart.BEGIN))&&(stat || logstashCurrent)&&connSet.size()>0) {
if(containsTPartitioner) {
%>
@@ -196,11 +207,9 @@
INode source = con.getSource();
String sourceNodeId = source.getUniqueName();
String sourceLabel = ElementParameterParser.getValue(source, "__LABEL__");
String sourceNodeLabel = ((sourceLabel==null || "__UNIQUE_NAME__".equals(sourceLabel) || sourceLabel.contains("\"")) ? sourceNodeId : sourceLabel.trim());
String sourceNodeLabel = NodeUtil.getLabel(source);
String targetLabel = ElementParameterParser.getValue(node, "__LABEL__");
String targetNodeLabel = ((targetLabel==null || "__UNIQUE_NAME__".equals(targetLabel) || targetLabel.contains("\"")) ? node.getUniqueName() : targetLabel.trim());
String targetNodeLabel = NodeUtil.getLabel(node);
String sourceNodeComponent = source.getComponent().getName();
%>
@@ -232,11 +241,9 @@
INode source = con.getSource();
String sourceNodeId = source.getUniqueName();
String sourceLabel = ElementParameterParser.getValue(source, "__LABEL__");
String sourceNodeLabel = ((sourceLabel==null || "__UNIQUE_NAME__".equals(sourceLabel) || sourceLabel.contains("\"")) ? sourceNodeId : sourceLabel.trim());
String targetLabel = ElementParameterParser.getValue(node, "__LABEL__");
String targetNodeLabel = ((targetLabel==null || "__UNIQUE_NAME__".equals(targetLabel) || targetLabel.contains("\"")) ? node.getUniqueName() : targetLabel.trim());
String sourceNodeLabel = NodeUtil.getLabel(source);
String targetNodeLabel = NodeUtil.getLabel(node);
String sourceNodeComponent = source.getComponent().getName();
%>
@@ -259,11 +266,9 @@
INode source = con.getSource();
String sourceNodeId = source.getUniqueName();
String sourceLabel = ElementParameterParser.getValue(source, "__LABEL__");
String sourceNodeLabel = ((sourceLabel==null || "__UNIQUE_NAME__".equals(sourceLabel) || sourceLabel.contains("\"")) ? sourceNodeId : sourceLabel.trim());
String targetLabel = ElementParameterParser.getValue(node, "__LABEL__");
String targetNodeLabel = ((targetLabel==null || "__UNIQUE_NAME__".equals(targetLabel) || targetLabel.contains("\"")) ? node.getUniqueName() : targetLabel.trim());
String sourceNodeLabel = NodeUtil.getLabel(source);
String targetNodeLabel = NodeUtil.getLabel(node);
String sourceNodeComponent = source.getComponent().getName();
@@ -295,11 +300,9 @@
INode source = con.getSource();
String sourceNodeId = source.getUniqueName();
String sourceLabel = ElementParameterParser.getValue(source, "__LABEL__");
String sourceNodeLabel = ((sourceLabel==null || "__UNIQUE_NAME__".equals(sourceLabel) || sourceLabel.contains("\"")) ? sourceNodeId : sourceLabel.trim());
String sourceNodeLabel = NodeUtil.getLabel(source);
String targetLabel = ElementParameterParser.getValue(node, "__LABEL__");
String targetNodeLabel = ((targetLabel==null || "__UNIQUE_NAME__".equals(targetLabel) || targetLabel.contains("\"")) ? node.getUniqueName() : targetLabel.trim());
String targetNodeLabel = NodeUtil.getLabel(node);
String sourceNodeComponent = source.getComponent().getName();
@@ -434,8 +437,7 @@
if(logstashCurrent) {
for (INode jobStructureCatcher : jobCatcherNodes) {
String label = ElementParameterParser.getValue(node, "__LABEL__");
String nodeLabel = ((label==null || "__UNIQUE_NAME__".equals(label) || label.contains("\"")) ? node.getUniqueName() : label.trim());
String nodeLabel = NodeUtil.getLabel(node);
%>
if(enableLogStash) {
<%=jobStructureCatcher.getUniqueName() %>.addCM("<%=node.getUniqueName()%>", "<%=nodeLabel%>", "<%=node.getComponent().getName()%>");

View File

@@ -223,7 +223,7 @@
public boolean useDatastax(INode node){
String dbVersion = ElementParameterParser.getValue(node, "__DB_VERSION__");
String apiType = ElementParameterParser.getValue(node, "__API_TYPE__");
return "CASSANDRA_2_2".equals(dbVersion) || "CASSANDRA_3_0".equals(dbVersion) || ("CASSANDRA_2_0_0".equals(dbVersion) && "DATASTAX".equals(apiType));
return "CASSANDRA_2_2".equals(dbVersion) || "CASSANDRA_3_0".equals(dbVersion) || "CASSANDRA_4_0".equals(dbVersion) || ("CASSANDRA_2_0_0".equals(dbVersion) && "DATASTAX".equals(apiType));
}
}
%>
@@ -514,17 +514,35 @@
}
org.apache.logging.log4j.core.config.Configurator.setLevel(org.apache.logging.log4j.LogManager.getRootLogger().getName(), log.getLevel());
<%}%>
}
log.info("TalendJob: '<%=codeGenArgument.getJobName()%>' - Start.");
<%}%>
<%
INode jobCatcherNode = null;
}
log.info("TalendJob: '<%=codeGenArgument.getJobName()%>' - Start.");
<%}%>
<%
INode jobCatcherNode = null;
int threadPoolSize = 0;
boolean tRESTRequestLoopExists = false;
for (INode nodeInProcess : process.getGeneratingNodes()) {
String componentName = nodeInProcess.getComponent().getName();
if("tJobStructureCatcher".equals(componentName)) {
if(jobCatcherNode==null && "tJobStructureCatcher".equals(componentName)) {
jobCatcherNode = nodeInProcess;
break;
continue;
}
if(!nodeInProcess.isActivate()) continue;
if("tRESTRequestLoop".equals(componentName)) {
tRESTRequestLoopExists = true;
continue;
}
if("tWriteXMLFieldOut".equals(componentName)) {
IConnection nextMergeConn = NodeUtil.getNextMergeConnection(nodeInProcess);
if(nextMergeConn == null || nextMergeConn.getInputId()==1){
threadPoolSize++;
}
}
}
@@ -651,15 +669,15 @@
%>
boolean inOSGi = routines.system.BundleUtils.inOSGi();
if (inOSGi) {
java.util.Dictionary<String, Object> jobProperties = routines.system.BundleUtils.getJobProperties(jobName);
if (jobProperties != null && jobProperties.get("context") != null) {
contextStr = (String)jobProperties.get("context");
}
}
try {
java.util.Dictionary<String, Object> jobProperties = null;
if (inOSGi) {
jobProperties = routines.system.BundleUtils.getJobProperties(jobName);
if (jobProperties != null && jobProperties.get("context") != null) {
contextStr = (String)jobProperties.get("context");
}
}
//call job/subjob with an existing context, like: --context=production. if without this parameter, there will use the default context instead.
java.io.InputStream inContext = <%=className%>.class.getClassLoader().getResourceAsStream("<%=jobClassPackageFolder%>/contexts/" + contextStr + ".properties");
if (inContext == null) {
@@ -669,8 +687,17 @@
try {
//defaultProps is in order to keep the original context value
if(context != null && context.isEmpty()) {
defaultProps.load(inContext);
context = new ContextProperties(defaultProps);
defaultProps.load(inContext);
if (inOSGi && jobProperties != null) {
java.util.Enumeration<String> keys = jobProperties.keys();
while (keys.hasMoreElements()) {
String propKey = keys.nextElement();
if (defaultProps.containsKey(propKey)) {
defaultProps.put(propKey, (String) jobProperties.get(propKey));
}
}
}
context = new ContextProperties(defaultProps);
}
} finally {
inContext.close();
@@ -735,9 +762,6 @@
} catch (java.lang.RuntimeException e) {
//do nothing
}
} else {
context.<%=ctxParam.getName()%> = pwd_<%=ctxParam.getName()%>_value;
context.put("<%=ctxParam.getName()%>",context.<%=ctxParam.getName()%>);
}
}
<%
@@ -1192,6 +1216,26 @@ this.globalResumeTicket = true;//to run tPostJob
e.printStackTrace();
}
}
<%
}
//tRESTRequest may appear in microservice, the code may be called before call submit(task) method, so can't shutdown it here
if(!tRESTRequestLoopExists && threadPoolSize>0) {
%>
es.shutdown();
<%//shutdownNow should never be executed, only for safe%>
try {
if(!es.awaitTermination(60, java.util.concurrent.TimeUnit.SECONDS)) {
es.shutdownNow();
if(!es.awaitTermination(60, java.util.concurrent.TimeUnit.SECONDS)) {
}
}
} catch (java.lang.InterruptedException ie) {
es.shutdownNow();
} catch (java.lang.Exception e) {
}
<%
}
%>
@@ -1363,16 +1407,27 @@ if (execStat) {
Object obj_cluster;
Object obj_conn;
<% for (INode cassandraDbNode : cassandraComponentsList) {
if((new API_selector()).useDatastax(cassandraDbNode)) { %>
obj_cluster = globalMap.remove("cluster_<%=cassandraDbNode.getUniqueName()%>");
obj_conn = globalMap.remove("connection_<%=cassandraDbNode.getUniqueName()%>");
if(obj_conn != null) {
((com.datastax.driver.core.Session) obj_conn).close();
}
if(obj_cluster != null) {
((com.datastax.driver.core.Cluster) obj_cluster).close();
}
<% } else { %>
String dbVersionCassandra = ElementParameterParser.getValue(cassandraDbNode, "__DB_VERSION__");
if((new API_selector()).useDatastax(cassandraDbNode)) {
if("CASSANDRA_4_0".equals(dbVersionCassandra)) {
%>
obj_conn = globalMap.remove("connection_<%=cassandraDbNode.getUniqueName()%>");if(obj_conn != null) {
((com.datastax.oss.driver.api.core.CqlSession) obj_conn).close();
}
<%
} else {
%>
obj_cluster = globalMap.remove("cluster_<%=cassandraDbNode.getUniqueName()%>");
obj_conn = globalMap.remove("connection_<%=cassandraDbNode.getUniqueName()%>");
if(obj_conn != null) {
((com.datastax.driver.core.Session) obj_conn).close();
}
if(obj_cluster != null) {
((com.datastax.driver.core.Cluster) obj_cluster).close();
}
<%
}
} else { %>
obj_conn = globalMap.remove("cluster_<%=cassandraDbNode.getUniqueName()%>");
if(obj_conn!=null) {
((me.prettyprint.hector.api.Cluster) obj_conn).getConnectionManager().shutdown();

View File

@@ -170,16 +170,8 @@ class IndexedRecordToRowStructGenerator {
if (columnName.equals(dynamicColName)) {
%>
java.util.Map<String, Object> dynamicValue_<%=cid%> = (java.util.Map<String, Object>) <%=codeVarSchemaEnforcer%>.get(<%=i%>);
org.apache.avro.Schema dynSchema_<%=cid%> = ((org.talend.codegen.enforcer.OutgoingDynamicSchemaEnforcer) <%=codeVarSchemaEnforcer%>).getDynamicFieldsSchema();
for (org.apache.avro.Schema.Field dynamicField_<%=cid%> : dynSchema_<%=cid%>.getFields()){
String name = dynamicField_<%=cid%>.name();
if("true".equals(dynamicField_<%=cid%>.getProp("ENABLE_SPECIAL_TABLENAME"))){
dynamicValue_<%=cid%>.put(dynamicField_<%=cid%>.getProp("talend.field.dbColumnName"), dynamicValue_<%=cid%>.get(name));
dynamicValue_<%=cid%>.remove(name);
}
}
for (java.util.Map.Entry<String, Object> dynamicValueEntry_<%=cid%> : dynamicValue_<%=cid%>.entrySet()) {
<%=codeVarDynamic%>.setColumnValue(<%=codeVarDynamic%>.getIndex(dynamicValueEntry_<%=cid%>.getKey()), dynamicValueEntry_<%=cid%>.getValue());
<%=codeVarDynamic%>.addColumnValue(dynamicValueEntry_<%=cid%>.getValue());
}
<%=codeVarRowStruct%>.<%=dynamicColName%> = <%=codeVarDynamic%>;
<%

View File

@@ -343,6 +343,10 @@ public <%=JavaTypesManager.getTypeToGenerate(ctxParam.getType(),true)%> get<%=Ch
public Integer errorCode = null;
private String currentComponent = "";
<%
// is necessary? avoid some compiler issue as var name not found? TODO consider remove it, also the currentComponent above
%>
private String cLabel = null;
<%
//tParallelize will wrap globalMap with synchronizedMap
if(isRunInMultiThread || NodeUtil.containsMultiThreadComponent(process)){
%>
@@ -385,11 +389,101 @@ public <%=JavaTypesManager.getTypeToGenerate(ctxParam.getType(),true)%> get<%=Ch
<%
INode jobCatcherNode = null;
//one matched component or part, one thread
//why not computed by cpu or resource : please image this case :
//loop==>(input==>(twritexmlfield A)==>(twritexmlfield B)==>(twritexmlfield C)==>output), dead lock as cycle dependency and only one thead in thread pool
//maybe newCachedThreadPool is a better idea, but that have risk for creating more threads, then more memory for TDI-47230
//why not generate thread pool object in subprocess scope :
// 1: major reason : difficult to control the var scope, somewhere can't access it, then compiler issue
// 2: we may need this thread pool for bigger scope, not only for twritexmlfield/twritejsonfield in future
// 3: we don't suppose this thread pool cost big resource after all tasks done, so we can shutdown it more later,
// for example, most time, user will use less than 3 twritexmlfield in one job, then 3 threads thread pool, we can close them in job finish code part,
// not a big cost to keep that. And of course, we best to start&clean it in subprocess finish, but that's risk of 1 above.
int threadPoolSize = 0;
boolean tHMapExists = false;
boolean tHMapOutExists = false;
boolean tRESTRequestLoopExists = false;
for (INode nodeInProcess : processNodes) {
String componentName = nodeInProcess.getComponent().getName();
if("tJobStructureCatcher".equals(componentName)) {
if(jobCatcherNode==null && "tJobStructureCatcher".equals(componentName)) {
jobCatcherNode = nodeInProcess;
break;
continue;
}
if(!nodeInProcess.isActivate()) continue;
if("tHMap".equals(componentName)) {
tHMapExists = true;
continue;
}
if("tHMapOut".equals(componentName)) {
tHMapOutExists = true;
continue;
}
if("tRESTRequestLoop".equals(componentName)) {
tRESTRequestLoopExists = true;
continue;
}
if("tWriteXMLFieldOut".equals(componentName)) {
IConnection nextMergeConn = NodeUtil.getNextMergeConnection(nodeInProcess);
if(nextMergeConn == null || nextMergeConn.getInputId()==1){
threadPoolSize++;
}
}
}
if(threadPoolSize>0) {
if(tRESTRequestLoopExists) {//miscroservice
%>
private class DaemonThreadFactory implements java.util.concurrent.ThreadFactory {
java.util.concurrent.ThreadFactory factory = java.util.concurrent.Executors.defaultThreadFactory();
public java.lang.Thread newThread(java.lang.Runnable r) {
java.lang.Thread t = factory.newThread(r);
t.setDaemon(true);
return t;
}
}
<%
}
if(tHMapExists || tHMapOutExists) {
%>
private final java.util.concurrent.ExecutorService es = java.util.concurrent.Executors.newFixedThreadPool(<%=threadPoolSize%> <%if(tRESTRequestLoopExists) {%>,new DaemonThreadFactory()<%}%>);
<%
} else {
%>
private final java.util.concurrent.ExecutorService es = java.util.concurrent.Executors.newCachedThreadPool(<%if(tRESTRequestLoopExists) {%>new DaemonThreadFactory()<%}%>);
<%
}
if(tRESTRequestLoopExists) {//miscroservice
%>
{
java.lang.Runtime.getRuntime().addShutdownHook(new java.lang.Thread() {
public void run() {
es.shutdown();
try {
if(!es.awaitTermination(60, java.util.concurrent.TimeUnit.SECONDS)) {
es.shutdownNow();
if(!es.awaitTermination(60, java.util.concurrent.TimeUnit.SECONDS)) {
}
}
} catch (java.lang.InterruptedException ie) {
es.shutdownNow();
} catch (java.lang.Exception e) {
}
}
});
}
<%
}
}
@@ -507,7 +601,10 @@ private class TalendException extends Exception {
private java.util.Map<String, Object> globalMap = null;
private Exception e = null;
private String currentComponent = null;
private String cLabel = null;
private String virtualComponentName = null;
public void setVirtualComponentName (String virtualComponentName){
@@ -519,6 +616,11 @@ private class TalendException extends Exception {
this.globalMap = globalMap;
this.e = e;
}
private TalendException(Exception e, String errorComponent, String errorComponentLabel, final java.util.Map<String, Object> globalMap) {
this(e, errorComponent, globalMap);
this.cLabel = errorComponentLabel;
}
public Exception getException() {
return this.e;
@@ -578,6 +680,15 @@ private class TalendException extends Exception {
<%
boolean needCatchTalendException = false;
if(enableLogStash) {
%>
if(enableLogStash) {
<%=jobCatcherNode.getUniqueName() %>.addJobExceptionMessage(currentComponent, cLabel, null, e);
<%=jobCatcherNode.getDesignSubjobStartNode().getUniqueName() %>Process(globalMap);
}
<%
}
if (process.getNodesOfType("tLogCatcher").size() > 0) {
List<INode> logCatchers = (List<INode>)process.getNodesOfType("tLogCatcher");
for (INode logCatcher : logCatchers) {
@@ -588,7 +699,7 @@ private class TalendException extends Exception {
<%
}
}
INode virtualNCatchNode = null;
boolean hasRealCatchNode = false;
for (INode logCatcher : logCatchers) {

View File

@@ -71,7 +71,7 @@
}
}
TalendException te = new TalendException(e, currentComponent, globalMap);
TalendException te = new TalendException(e, currentComponent, cLabel, globalMap);
<%
if(NodeUtil.hasVirtualComponent(subTree.getNodes())){
%>

View File

@@ -200,6 +200,7 @@ for (IConnection iterateConn : iterateConnSet) { //1
this.isRunning = true;
String currentComponent = "";
String cLabel = null;
java.util.Map<String, Object> resourceMap = new java.util.HashMap<String, Object>();
<%
if(NodeUtil.hasVirtualComponent(subTree.getNodes())){

View File

@@ -67,7 +67,7 @@
this.errorCode = localErrorCode;
}
}
pool.setErrorThread(this, new TalendException(e, currentComponent, globalMap));
pool.setErrorThread(this, new TalendException(e, currentComponent, cLabel, globalMap));
//pool.setErrorThread(this,e);
pool.stopAllThreads();
}finally{
@@ -117,7 +117,7 @@
} catch (InterruptedException e) {
e.printStackTrace();
} catch (java.lang.Exception te) {
throw new TalendException(te, currentComponent, globalMap);
throw new TalendException(te, currentComponent, cLabel, globalMap);
}
<%
}else{
@@ -228,7 +228,7 @@
<%
}
%>
TalendException te = new TalendException(e, currentComponent, globalMap);
TalendException te = new TalendException(e, currentComponent, cLabel, globalMap);
<%
if(NodeUtil.hasVirtualComponent(subTree.getNodes())){
%>

View File

@@ -20,6 +20,7 @@
org.talend.core.model.process.IHashConfiguration
org.talend.core.model.process.IHashableColumn
org.talend.core.model.utils.NodeUtil
org.talend.core.model.utils.TalendTextUtils
"
class="SubProcessHeader"
skeleton="subprocess_header_java.skeleton"
@@ -183,6 +184,48 @@ public static class <%=conn.getName() %>Struct<%=templateOrigin %> implements ro
public <%= typeToGenerate %> get<%=column.getLabel().substring(0, 1).toUpperCase()%><%=column.getLabel().substring(1)%> () {
return this.<%=column.getLabel()%>;
}
public Boolean <%=column.getLabel()%>IsNullable(){
return <%=column.isNullable()%>;
}
public Boolean <%=column.getLabel()%>IsKey(){
return <%=column.isKey()%>;
}
public Integer <%=column.getLabel()%>Length(){
return <%=column.getLength()%>;
}
public Integer <%=column.getLabel()%>Precision(){
return <%=column.getPrecision()%>;
}
public String <%=column.getLabel()%>Default(){
<% if (column.getDefault() == null) { %>
return null;
<% } else { %>
return "<%=TalendTextUtils.escapeJavaText(TalendTextUtils.removeQuotes(column.getDefault()))%>";
<% } %>
}
public String <%=column.getLabel()%>Comment(){
<% if (column.getComment() == null) { %>
return null;
<% } else { %>
return "<%=TalendTextUtils.escapeJavaText(TalendTextUtils.removeQuotes(column.getComment()))%>";
<% } %>
}
public String <%=column.getLabel()%>Pattern(){
<% if (column.getPattern() == null) { %>
return null;
<% } else { %>
return "<%=TalendTextUtils.escapeJavaText(TalendTextUtils.removeQuotes(column.getPattern()))%>";
<% } %>
}
public String <%=column.getLabel()%>OriginalDbColumnName(){
<% if (column.getOriginalDbColumnName() == null) { %>
return null;
<% } else { %>
return "<%=TalendTextUtils.escapeJavaText(TalendTextUtils.removeQuotes(column.getOriginalDbColumnName()))%>";
<% } %>
}
<%
if((conn.getLineStyle() == EConnectionType.FLOW_REF) && conn.getTarget().getUniqueName().startsWith("tXMLMap") && "id_Document".equals(javaType.getId())) {
%>
@@ -364,6 +407,26 @@ public static class <%=conn.getName() %>Struct<%=templateOrigin %> implements ro
}
return strReturn;
}
private String readString(org.jboss.marshalling.Unmarshaller unmarshaller) throws IOException{
String strReturn = null;
int length = 0;
length = unmarshaller.readInt();
if (length == -1) {
strReturn = null;
} else {
if(length > commonByteArray_<%=codeGenArgument.getCurrentProjectName() %>_<%=codeGenArgument.getJobName() %>.length) {
if(length < 1024 && commonByteArray_<%=codeGenArgument.getCurrentProjectName() %>_<%=codeGenArgument.getJobName() %>.length == 0) {
commonByteArray_<%=codeGenArgument.getCurrentProjectName() %>_<%=codeGenArgument.getJobName() %> = new byte[1024];
} else {
commonByteArray_<%=codeGenArgument.getCurrentProjectName() %>_<%=codeGenArgument.getJobName() %> = new byte[2 * length];
}
}
unmarshaller.readFully(commonByteArray_<%=codeGenArgument.getCurrentProjectName() %>_<%=codeGenArgument.getJobName() %>, 0, length);
strReturn = new String(commonByteArray_<%=codeGenArgument.getCurrentProjectName() %>_<%=codeGenArgument.getJobName() %>, 0, length, utf8Charset);
}
return strReturn;
}
private void writeString(String str, ObjectOutputStream dos) throws IOException{
if(str == null) {
@@ -374,11 +437,21 @@ public static class <%=conn.getName() %>Struct<%=templateOrigin %> implements ro
dos.write(byteArray);
}
}
private void writeString(String str, org.jboss.marshalling.Marshaller marshaller) throws IOException{
if(str == null) {
marshaller.writeInt(-1);
} else {
byte[] byteArray = str.getBytes(utf8Charset);
marshaller.writeInt(byteArray.length);
marshaller.write(byteArray);
}
}
<%
} else if(!hasString2 && (isLookup && !hashableColumnsNames.contains(column.getLabel()))){
hasString2 = true;
%>
private String readString(DataInputStream dis, ObjectInputStream ois) throws IOException{
String strReturn = null;
int length = 0;
@@ -392,6 +465,30 @@ public static class <%=conn.getName() %>Struct<%=templateOrigin %> implements ro
}
return strReturn;
}
private String readString(DataInputStream dis, org.jboss.marshalling.Unmarshaller unmarshaller) throws IOException{
String strReturn = null;
int length = 0;
length = unmarshaller.readInt();
if (length == -1) {
strReturn = null;
} else {
byte[] byteArray = new byte[length];
unmarshaller.read(byteArray);
strReturn = new String(byteArray, utf8Charset);
}
return strReturn;
}
private void writeString(String str, DataOutputStream dos, org.jboss.marshalling.Marshaller marshaller) throws IOException{
if(str == null) {
marshaller.writeInt(-1);
} else {
byte[] byteArray = str.getBytes(utf8Charset);
marshaller.writeInt(byteArray.length);
marshaller.write(byteArray);
}
}
private void writeString(String str, DataOutputStream dos, ObjectOutputStream oos) throws IOException{
if(str == null) {
@@ -420,6 +517,18 @@ public static class <%=conn.getName() %>Struct<%=templateOrigin %> implements ro
}
return dateReturn;
}
private java.util.Date readDate(org.jboss.marshalling.Unmarshaller unmarshaller) throws IOException{
java.util.Date dateReturn = null;
int length = 0;
length = unmarshaller.readByte();
if (length == -1) {
dateReturn = null;
} else {
dateReturn = new Date(unmarshaller.readLong());
}
return dateReturn;
}
private void writeDate(java.util.Date date1, ObjectOutputStream dos) throws IOException{
if(date1 == null) {
@@ -429,6 +538,15 @@ public static class <%=conn.getName() %>Struct<%=templateOrigin %> implements ro
dos.writeLong(date1.getTime());
}
}
private void writeDate(java.util.Date date1, org.jboss.marshalling.Marshaller marshaller) throws IOException{
if(date1 == null) {
marshaller.writeByte(-1);
} else {
marshaller.writeByte(0);
marshaller.writeLong(date1.getTime());
}
}
<%
}else if (!hasDate2 && (isLookup && !hashableColumnsNames.contains(column.getLabel()))) {
hasDate2 = true;
@@ -445,6 +563,18 @@ public static class <%=conn.getName() %>Struct<%=templateOrigin %> implements ro
}
return dateReturn;
}
private java.util.Date readDate(DataInputStream dis, org.jboss.marshalling.Unmarshaller unmarshaller ) throws IOException{
java.util.Date dateReturn = null;
int length = 0;
length = unmarshaller.readByte();
if (length == -1) {
dateReturn = null;
} else {
dateReturn = new Date(unmarshaller.readLong());
}
return dateReturn;
}
private void writeDate(java.util.Date date1, DataOutputStream dos, ObjectOutputStream oos) throws IOException{
if(date1 == null) {
@@ -454,6 +584,15 @@ public static class <%=conn.getName() %>Struct<%=templateOrigin %> implements ro
dos.writeLong(date1.getTime());
}
}
private void writeDate(java.util.Date date1, DataOutputStream dos, org.jboss.marshalling.Marshaller marshaller) throws IOException{
if(date1 == null) {
marshaller.writeByte(-1);
} else {
marshaller.writeByte(0);
marshaller.writeLong(date1.getTime());
}
}
<%
}
} else if(typeToGenerate.equals("byte[]")) {
@@ -473,6 +612,20 @@ public static class <%=conn.getName() %>Struct<%=templateOrigin %> implements ro
}
return byteArrayReturn;
}
private byte[] readByteArray(org.jboss.marshalling.Unmarshaller dis) throws IOException{
byte[] byteArrayReturn;
int length = 0;
length = dis.readInt();
if (length == -1) {
byteArrayReturn = null;
} else {
byte[] byteArray = new byte[length];
dis.readFully(byteArray);
byteArrayReturn = byteArray;
}
return byteArrayReturn;
}
private void writeByteArray(byte[] byteArray, ObjectOutputStream dos) throws IOException{
if(byteArray == null) {
@@ -482,6 +635,15 @@ public static class <%=conn.getName() %>Struct<%=templateOrigin %> implements ro
dos.write(byteArray);
}
}
private void writeByteArray(byte[] byteArray, org.jboss.marshalling.Marshaller marshaller) throws IOException{
if(byteArray == null) {
marshaller.writeInt(-1);
} else {
marshaller.writeInt(byteArray.length);
marshaller.write(byteArray);
}
}
<%
}else if (!hasByteArray2 && (isLookup && !hashableColumnsNames.contains(column.getLabel()))) {
hasByteArray2 = true;
@@ -499,6 +661,20 @@ public static class <%=conn.getName() %>Struct<%=templateOrigin %> implements ro
}
return byteArrayReturn;
}
private byte[] readByteArray(DataInputStream dis, org.jboss.marshalling.Unmarshaller unmarshaller ) throws IOException{
byte[] byteArrayReturn;
int length = 0;
length = unmarshaller.readInt();
if (length == -1) {
byteArrayReturn = null;
} else {
byte[] byteArray = new byte[length];
unmarshaller.read(byteArray);
byteArrayReturn = byteArray;
}
return byteArrayReturn;
}
private void writeByteArray(byte[] byteArray, DataOutputStream dos, ObjectOutputStream oos) throws IOException{
if(byteArray == null) {
@@ -508,6 +684,15 @@ public static class <%=conn.getName() %>Struct<%=templateOrigin %> implements ro
dos.write(byteArray);
}
}
private void writeByteArray(byte[] byteArray, DataOutputStream dos, org.jboss.marshalling.Marshaller marshaller) throws IOException{
if(byteArray == null) {
marshaller.writeInt(-1);
} else {
marshaller.writeInt(byteArray.length);
marshaller.write(byteArray);
}
}
<%
}
}else {
@@ -528,6 +713,18 @@ public static class <%=conn.getName() %>Struct<%=templateOrigin %> implements ro
}
return intReturn;
}
private Integer readInteger(org.jboss.marshalling.Unmarshaller dis) throws IOException{
Integer intReturn;
int length = 0;
length = dis.readByte();
if (length == -1) {
intReturn = null;
} else {
intReturn = dis.read<%= typeToGenerate %>();
}
return intReturn;
}
private void writeInteger(Integer intNum, ObjectOutputStream dos) throws IOException{
if(intNum == null) {
@@ -537,6 +734,15 @@ public static class <%=conn.getName() %>Struct<%=templateOrigin %> implements ro
dos.write<%= typeToGenerate %>(intNum);
}
}
private void writeInteger(Integer intNum, org.jboss.marshalling.Marshaller marshaller) throws IOException{
if(intNum == null) {
marshaller.writeByte(-1);
} else {
marshaller.writeByte(0);
marshaller.write<%= typeToGenerate %>(intNum);
}
}
<%
} else if(!hasInteger2 && (isLookup && !hashableColumnsNames.contains(column.getLabel()))){
hasInteger2 = true;
@@ -552,6 +758,18 @@ public static class <%=conn.getName() %>Struct<%=templateOrigin %> implements ro
}
return intReturn;
}
private Integer readInteger(DataInputStream dis, org.jboss.marshalling.Unmarshaller unmarshaller) throws IOException{
Integer intReturn;
int length = 0;
length = unmarshaller.readByte();
if (length == -1) {
intReturn = null;
} else {
intReturn = unmarshaller.read<%= typeToGenerate %>();
}
return intReturn;
}
private void writeInteger(Integer intNum, DataOutputStream dos, ObjectOutputStream oos) throws IOException{
if(intNum == null) {
@@ -561,6 +779,15 @@ public static class <%=conn.getName() %>Struct<%=templateOrigin %> implements ro
dos.write<%= typeToGenerate %>(intNum);
}
}
private void writeInteger(Integer intNum, DataOutputStream dos,org.jboss.marshalling.Marshaller marshaller ) throws IOException{
if(intNum == null) {
marshaller.writeByte(-1);
} else {
marshaller.writeByte(0);
marshaller.write<%= typeToGenerate %>(intNum);
}
}
<%
}
}
@@ -662,6 +889,101 @@ public static class <%=conn.getName() %>Struct<%=templateOrigin %> implements ro
}
}
public void <%= isLookup ? "readKeys" : "read" %>Data(org.jboss.marshalling.Unmarshaller dis) {
synchronized(commonByteArrayLock_<%=codeGenArgument.getCurrentProjectName() %>_<%=codeGenArgument.getJobName() %>) {
try {
int length = 0;
<%
hasAtLeastOneRead = false;
hasAtLeastOneObjectType = false;
if (metadata !=null) {
for (IMetadataColumn column: metadata.getListColumns()) {
if (!isLookup || hashableColumnsNames.contains(column.getLabel())) {
hasAtLeastOneRead = true;
JavaType javaType = JavaTypesManager.getJavaTypeFromId(column.getTalendType());
String typeToGenerate = JavaTypesManager.getTypeToGenerate(column.getTalendType(), column.isNullable());
if (JavaTypesManager.isJavaPrimitiveType(column.getTalendType(), column.isNullable())) {
typeToGenerate=typeToGenerate.substring(0,1).toUpperCase()+typeToGenerate.substring(1);
%>
this.<%=column.getLabel() %> = dis.read<%= typeToGenerate %>();
<%
} else if(typeToGenerate.equals("String")) {
%>
this.<%=column.getLabel() %> = readString(dis);
<%
} else if(typeToGenerate.equals("java.util.Date")) {
%>
this.<%=column.getLabel() %> = readDate(dis);
<%
} else if(typeToGenerate.equals("byte[]")) {
%>
this.<%=column.getLabel() %> = readByteArray(dis);
<%
} else if(javaType.isObjectBased() || typeToGenerate.equals("Geometry") || typeToGenerate.equals("Dynamic")) {
hasAtLeastOneObjectType = true;
if("id_Document".equals(javaType.getId()) || "id_Dynamic".equals(javaType.getId())) {
typeToGenerate = javaType.getNullableClass().getCanonicalName();
}
%>
this.<%=column.getLabel() %> = (<%= typeToGenerate %>) dis.readObject();
<%
} else {
typeToGenerate =JavaTypesManager.getTypeToGenerate(column.getTalendType(), false);
typeToGenerate=typeToGenerate.substring(0,1).toUpperCase()+typeToGenerate.substring(1);
if(typeToGenerate.equals("Int")){
%>
this.<%=column.getLabel() %> = readInteger(dis);
<%
} else {
%>
length = dis.readByte();
if (length == -1) {
this.<%=column.getLabel() %> = null;
} else {
this.<%=column.getLabel() %> = dis.read<%= typeToGenerate %>();
}
<%
}
}
}
}
}
if(hasAtLeastOneRead) {
%>
} catch (IOException e) {
throw new RuntimeException(e);
<%
}
%>
<%
if(hasAtLeastOneObjectType) {
%>
} catch(ClassNotFoundException eCNFE) {
throw new RuntimeException(eCNFE);
<%
}
%>
}
<%
if(!hasAtLeastOneRead) {
%>
finally {}
<%
}
%>
}
}
public void <%= isLookup ? "writeKeys" : "write" %>Data(ObjectOutputStream dos) {
@@ -739,6 +1061,82 @@ public static class <%=conn.getName() %>Struct<%=templateOrigin %> implements ro
%>
}
public void <%= isLookup ? "writeKeys" : "write" %>Data(org.jboss.marshalling.Marshaller dos) {
try {
<%
hasAtLeastOneWrite = false;
hasAtLeastOneObjectType = false;
if (metadata !=null) {
for (IMetadataColumn column: metadata.getListColumns()) {
if (!isLookup || hashableColumnsNames.contains(column.getLabel())) {
JavaType javaType = JavaTypesManager.getJavaTypeFromId(column.getTalendType());
hasAtLeastOneWrite = true;
String typeToGenerate = JavaTypesManager.getTypeToGenerate(column.getTalendType(), column.isNullable());
%>
// <%=typeToGenerate %>
<%
if (JavaTypesManager.isJavaPrimitiveType(column.getTalendType(), column.isNullable())) {
typeToGenerate=typeToGenerate.substring(0,1).toUpperCase()+typeToGenerate.substring(1);
%>
dos.write<%= typeToGenerate %>(this.<%=column.getLabel() %>);
<%
} else if(typeToGenerate.equals("String")) {
%>
writeString(this.<%=column.getLabel() %>,dos);
<%
} else if(typeToGenerate.equals("java.util.Date")) {
%>
writeDate(this.<%=column.getLabel() %>,dos);
<%
} else if(typeToGenerate.equals("byte[]")) {
%>
writeByteArray(this.<%=column.getLabel() %>,dos);
<%
} else if(javaType.isObjectBased() || typeToGenerate.equals("Geometry") || typeToGenerate.equals("Dynamic")) {
%>
dos.writeObject(this.<%=column.getLabel() %>);
<%
} else {
typeToGenerate =JavaTypesManager.getTypeToGenerate(column.getTalendType(), false);
typeToGenerate = typeToGenerate.substring(0,1).toUpperCase()+typeToGenerate.substring(1);
if(typeToGenerate.equals("Int")){
%>
writeInteger(this.<%=column.getLabel() %>,dos);
<%
} else {
%>
if(this.<%=column.getLabel() %> == null) {
dos.writeByte(-1);
} else {
dos.writeByte(0);
dos.write<%= typeToGenerate %>(this.<%=column.getLabel() %>);
}
<%
}
}
}
}
}
if(hasAtLeastOneWrite) {
%>
} catch (IOException e) {
throw new RuntimeException(e);
<%
}
%>
}
<%
if(!hasAtLeastOneWrite) {
%>
finally {}
<%
}
%>
}
<%
if(isLookup) { // T SH 002
@@ -836,6 +1234,94 @@ public static class <%=conn.getName() %>Struct<%=templateOrigin %> implements ro
%>
}
public void readValuesData(DataInputStream dis, org.jboss.marshalling.Unmarshaller objectIn) {
try {
int length = 0;
<%
hasAtLeastOneRead = false;
hasAtLeastOneObjectType = false;
if (metadata !=null) {
for (IMetadataColumn column: metadata.getListColumns()) {
if (!hashableColumnsNames.contains(column.getLabel())) {
JavaType javaType = JavaTypesManager.getJavaTypeFromId(column.getTalendType());
hasAtLeastOneRead = true;
String typeToGenerate = JavaTypesManager.getTypeToGenerate(column.getTalendType(), column.isNullable());
if (JavaTypesManager.isJavaPrimitiveType(column.getTalendType(), column.isNullable())) {
typeToGenerate=typeToGenerate.substring(0,1).toUpperCase()+typeToGenerate.substring(1);
%>
this.<%=column.getLabel() %> = objectIn.read<%= typeToGenerate %>();
<%
} else if(typeToGenerate.equals("String")) {
%>
this.<%=column.getLabel() %> = readString(dis,objectIn);
<%
} else if(typeToGenerate.equals("byte[]")) {
%>
this.<%=column.getLabel() %> = readByteArray(dis,objectIn);
<%
} else if(typeToGenerate.equals("java.util.Date")) {
%>
this.<%=column.getLabel() %> = readDate(dis,objectIn);
<%
} else if(typeToGenerate.equals("Object") || typeToGenerate.equals("Geometry") || typeToGenerate.equals("BigDecimal") || typeToGenerate.equals("List") || typeToGenerate.equals("Dynamic") || typeToGenerate.equals("Document")) {
hasAtLeastOneObjectType = true;
if("id_Document".equals(javaType.getId()) || "id_Dynamic".equals(javaType.getId())) {
typeToGenerate = javaType.getNullableClass().getCanonicalName();
}
%>
this.<%=column.getLabel() %> = (<%= typeToGenerate %>) objectIn.readObject();
<%
} else {
typeToGenerate =JavaTypesManager.getTypeToGenerate(column.getTalendType(), false);
typeToGenerate=typeToGenerate.substring(0,1).toUpperCase()+typeToGenerate.substring(1);
if(typeToGenerate.equals("Int")){
%>
this.<%=column.getLabel() %> = readInteger(dis,objectIn);
<%
} else {
%>
length = objectIn.readByte();
if (length == -1) {
this.<%=column.getLabel() %> = null;
} else {
this.<%=column.getLabel() %> = objectIn.read<%= typeToGenerate %>();
}
<%
}
}
}
}
}
if(hasAtLeastOneRead) {
%>
} catch (IOException e) {
throw new RuntimeException(e);
<%
}
%>
<%
if(hasAtLeastOneObjectType) {
%>
} catch(ClassNotFoundException eCNFE) {
throw new RuntimeException(eCNFE);
<%
}
%>
}
<%
if(!hasAtLeastOneRead) {
%>
finally {}
<%
}
%>
}
/**
* Return a byte array which represents Values data.
@@ -911,6 +1397,83 @@ public static class <%=conn.getName() %>Struct<%=templateOrigin %> implements ro
%>
}
public void writeValuesData(DataOutputStream dos, org.jboss.marshalling.Marshaller objectOut){
try {
<%
hasAtLeastOneWrite = false;
if (metadata !=null) {
for (IMetadataColumn column: metadata.getListColumns()) {
if (!hashableColumnsNames.contains(column.getLabel())) {
JavaType javaType = JavaTypesManager.getJavaTypeFromId(column.getTalendType());
hasAtLeastOneWrite = true;
String typeToGenerate = JavaTypesManager.getTypeToGenerate(column.getTalendType(), column.isNullable());
if (JavaTypesManager.isJavaPrimitiveType(column.getTalendType(), column.isNullable())) {
typeToGenerate=typeToGenerate.substring(0,1).toUpperCase()+typeToGenerate.substring(1);
%>
objectOut.write<%= typeToGenerate %>(this.<%=column.getLabel() %>);
<%
} else if(typeToGenerate.equals("String")) {
%>
writeString(this.<%=column.getLabel() %>, dos, objectOut);
<%
} else if(typeToGenerate.equals("byte[]")) {
%>
writeByteArray(this.<%=column.getLabel() %>, dos, objectOut);
<%
} else if(typeToGenerate.equals("java.util.Date")) {
%>
writeDate(this.<%=column.getLabel() %>, dos, objectOut);
<%
} else if(typeToGenerate.equals("Object") || typeToGenerate.equals("Geometry") || typeToGenerate.equals("BigDecimal") || typeToGenerate.equals("List") || typeToGenerate.equals("Dynamic") || typeToGenerate.equals("Document")) {
%>
objectOut.writeObject(this.<%=column.getLabel() %>);
<%
} else {
typeToGenerate =JavaTypesManager.getTypeToGenerate(column.getTalendType(), false);
typeToGenerate = typeToGenerate.substring(0,1).toUpperCase()+typeToGenerate.substring(1);
if(typeToGenerate.equals("Int")){
%>
writeInteger(this.<%=column.getLabel() %>, dos, objectOut);
<%
} else {
%>
if(this.<%=column.getLabel() %> == null) {
objectOut.writeByte(-1);
} else {
objectOut.writeByte(0);
objectOut.write<%= typeToGenerate %>(this.<%=column.getLabel() %>);
}
<%
}
}
}
}
}
if(hasAtLeastOneRead) {
%>
} catch (IOException e) {
throw new RuntimeException(e);
<%
}
%>
}
<%
if(!hasAtLeastOneRead) {
%>
finally {}
<%
}
%>
}
public boolean supportMarshaller(){
return true;
}
<%
} // T SH 002
@@ -1078,6 +1641,7 @@ public void <%=subTree.getName() %>Process(final java.util.Map<String, Object> g
this.isRunning = true;
String currentComponent = "";
String cLabel = null;
<%
if(NodeUtil.hasVirtualComponent(subTree.getNodes())){
%>
@@ -1111,6 +1675,7 @@ public void <%=subTree.getName() %>Process(final java.util.Map<String, Object> g
int iterateLoop = 0;
<%}%>
String currentComponent = "";
String cLabel = null;
java.util.Map<String, Object> resourceMap = new java.util.HashMap<String, Object>();
try {

View File

@@ -1,5 +0,0 @@
providerName=www.example.org
pluginName=EmittersPool Model
components=Components
trunjob=tRunJob
format=Format

View File

@@ -10,6 +10,7 @@ CodeGenerator.getGraphicalNode2=------process.getGeneratingNodes()------
CodeGenerator.JET.TimeOut=JET initialisation Time Out
CodeGenerator.newLine=\n\n\n\n
CodeGenerator.Node.NotFound=Node not found in current process
CodeGenerator.Components.NotFound={0}: Component is missing: {1}; use -D{2}=false in your studio or commandline to skip this check, and a warning message will be logged.
JavaRoutineSynchronizer.UnsupportedOperation.Exception1=method not implemented: org.talend.designer.codegen.JavaRoutineSynchronizer line:49
JavaRoutineSynchronizer.UnsupportedOperation.Exception2=method not implemented: org.talend.designer.codegen.JavaRoutineSynchronizer line:58
JetSkeletonManager.unableLoad=unable to load skeleton update cache file

View File

@@ -1,148 +0,0 @@
JavaRoutineSynchronizer.UnsupportedOperation.Exception1=method not implemented: org.talend.designer.codegen.JavaRoutineSynchronizer line:49
CodeGeneratorEmittersPoolFactory.JETEmitters.NoPresent=JETEmitters Project not present, full reinitialize is needed
generatedcode.footerprocess.nbcharsgenerated={0} characters generated by {1}
CodeGeneratorEmittersPoolFactory.Class.NotFound=Template still present, but class {0} has disapeared from workspace. This unit needs to be recompiled.
CodeGeneratorEmittersPoolFactory.PersitentData.Error=Persitent data cannot be saved :
generatedcode.copyright.title=Copyright (c) 2005-2011, Talend Inc.
CodeGeneratorEmittersPoolFactory.initMessage=Generation Engine Initialization in progress...
generatedcode.copyright.body5=(http://www.gnu.org/licenses/lgpl.html).
EmfEmittersPersistence.CodeGen.DataMissing=Missing code generation data. Starting full code generation.
CodeGenerator.JET.TimeOut=JET initialisation Time Out
generatedcode.copyright.body4=You may distribute this code under the terms of the GNU LGPL license
CodeGenerator.Node.NotFound=Node not found in current process
generatedcode.copyright.body3=You can find more information about Talend products at www.talend.com.
EmittersPoolFactoryImpl.Class.IllegalArg=The class ' {0}' is not a valid classifier
generatedcode.copyright.body2=/ JobDesigner (CodeGenerator version {0}).
JavaRoutineSynchronizer.UnsupportedOperation.Exception2=method not implemented: org.talend.designer.codegen.JavaRoutineSynchronizer line:58
CodeGenerator.getGraphicalNode1=------process.getGraphicalNodes()------
CodeGenerator.getGraphicalNode2=------process.getGeneratingNodes()------
CodeGenerator.newLine=\n\n\n\n
JetSkeletonManager.unableLoad=unable to load skeleton update cache file
JetSkeletonManager.unableSave=unable to save skeleton update cache file
JetSkeletonManager.updateProblem=when update skeleton persistence data, there have some problems
CodeGeneratorEmittersPoolFactory.codeThread=Code generation background thread
CodeGeneratorEmittersPoolFactory.componentCompiled=Components compiled in {0} ms
CodeGeneratorEmittersPoolFactory.failCompail=Components compile fail : \r\n
CodeGeneratorEmittersPoolFactory.initialException=Exception during Initialization
CodeGeneratorEmittersPoolFactory.jetEmitterInitialException=Error during JetEmitter initalization
CodeGeneratorService.invalidLanguage1=invalid language type.
CodeGeneratorService.invalidLanguage2=invalid language type.
CodeGenInit.addMarkers=Adding markers to workspace
CodeGenInit.createProject=create {0} project
CodeGenInit.deleteProject=delete {0} project
CodeGenInit.initTemplate=init Templates
CodeGenInit.removeLink=Remove linked resources
CodeGenInit.saveWorkspace=Saving workspace
DocumentRootImpl.mixed=\ (mixed:
NodesSubTree.enableParallel=__ENABLE_PARALLEL__
PoolTypeImpl.persistentPool= \ (persistentPool:
TalendJetEmitter.compileFail=\ compile fail : {0} : {1}
TalendJetEmitter.exception=Exception on
JetFilesProviderManager.unableLoad=Unable to load {0}JetFilesProviderManager.unableLoad
CodeGeneratorEmittersPoolFactory.dialogContent=JetEmitter Generation is canceled,to avoid problems cause by this, please press Ctrl+Shift+F3 to generate again\!
CodeGeneratorEmittersPoolFactory.operationCanceled=Operation Canceled
ComponentsFactory.afterSystemComponent=after system component
ComponentsFactory.componentNotFound=Component folder not found\:
ComponentsFactory.load.components=Load Components...
ComponentsFactory.parentNotRecompiled=Warning\: parents of *.inc.javajet are not recompiled \!
ComponentsLocalProviderService.componentLoadError=Component load error
ComponentsLocalProviderService.talendExchangeError=Talend Exchange Error
ComponentsPreferencePage.ButtonLabel0=Ok
ComponentsPreferencePage.configuration.LINK_STYLE=Default mapping links display as :
ComponentsPreferencePage.rowLimit=Row limit
ComponentsPreferencePage.WarningMsg=You need to restart Talend Open Studio to load extra components.
ComponentsPreferencePage.WarningTitle=Warning
ComponentsPreferencePage.directoryFieldLabel=User component folder\:
ComponentsProviderManager.unableLoad=unable to load component provider
ComponenttRunJobPreferencePage.label=Don't show corresponding job after double click on a tRunJob Component.
ComponentJobletPreferencePage.label=Don't show corresponding job after double click on a Joblet Component.
ComponenttRunJobPreferencePage.showCorrespondingJob=Show corresponding job after double click on a tRunJob Component.
XsdValidationCacheManager.unableLoadxsd=unable to load xsd validation cache file
XsdValidationCacheManager.unableSavexsd=unable to save xsd validation cache file
prefs.configuration.LINK_STYLE.AUTO=Auto
prefs.configuration.LINK_STYLE.BEZIER_CURVE=Curves
prefs.configuration.LINK_STYLE.LINE=Lines (fast)
FAMILY.AS400=AS400
FAMILY.Access=Access
FAMILY.Alfresco=Alfresco
FAMILY.Business=Business
FAMILY.Business_Intelligence=Business Intelligence
FAMILY.CentricCRM=CentricCRM
FAMILY.Charts=Charts
FAMILY.Connections=Connections
FAMILY.Custom_Code=Custom Code
FAMILY.DB2=DB2
FAMILY.DB_Generic=DB Generic
FAMILY.DB_JDBC=DB JDBC
FAMILY.DB_SCD=DB SCD
FAMILY.Data_Quality=Data Quality
FAMILY.Databases=Databases
FAMILY.ELT=ELT
FAMILY.ESB=ESB
FAMILY.EXASolution=EXASolution
FAMILY.eXist=eXist
FAMILY.FTP=FTP
FAMILY.Fields=Fields
FAMILY.File=File
FAMILY.FireBird=FireBird
FAMILY.Greenplum=Greenplum
FAMILY.HSQLDb=HSQLDb
FAMILY.Healthcare=Healthcare
FAMILY.Hive=Hive
FAMILY.Informix=Informix
FAMILY.Ingres=Ingres
FAMILY.Input=Input
FAMILY.Interbase=Interbase
FAMILY.Internet=Internet
FAMILY.Jasper=Jasper
FAMILY.JavaDB=JavaDB
FAMILY.JDBC=JDBC
FAMILY.LDAP=LDAP
FAMILY.Logs_Errors=Logs & Errors
FAMILY.MS_SQL_Server=MS SQL Server
FAMILY.MSSql=MSSql
FAMILY.Management=Management
FAMILY.MaxDB=MaxDB
FAMILY.Microsoft_AX=Microsoft AX
FAMILY.Microsoft_CRM=Microsoft CRM
FAMILY.Misc=Misc
FAMILY.MySQL=MySQL
FAMILY.Netezza=Netezza
FAMILY.OLAP_Cube=OLAP Cube
FAMILY.Oracle=Oracle
FAMILY.Orchestration=Orchestration
FAMILY.Output=Output
FAMILY.ParAccel=ParAccel
FAMILY.PostgreSQL=PostgreSQL
FAMILY.PostgresPlus=PostgresPlus
FAMILY.Processing=Processing
FAMILY.SAP=SAP
FAMILY.Sas=Sas
FAMILY.SCD=SCD
FAMILY.SCP=SCP
FAMILY.SPSS=SPSS
FAMILY.SQLite=SQLite
FAMILY.Salesforce=Salesforce
FAMILY.SugarCRM=SugarCRM
FAMILY.Sybase=Sybase
FAMILY.System=System
FAMILY.Technical=Technical
FAMILY.Teradata=Teradata
FAMILY.Vertica=Vertica
FAMILY.VtigerCRM=VtigerCRM
FAMILY.XML=XML
CodeGeneratorEmittersPoolFactory.updatePaletteForEditors=Update the palette for editors
ComponentsPreferencePage.componentAssist=Enable Component Creation Assistant
ComponentsPreferencePage.notValidDirectory=Your selection will result in folder nesting, which is not recommended. Do you want to continue anyway?
ComponentsFactory.loadComponents.missingFolder=The folder "{0}" is missing in the plugin "{1}".
ComponentsPreferencePage_SuccessTitle=Success
ComponentsPreferencePage_SuccessMessage1=Need restart studio to load the new components. Else, will be loaded in next time when start.
ComponentsPreferencePage_SuccessMessage2=Do you want to restart right now?
ComponentsPreferencePage.installComponentsFailure=Install components failure
generatedcode.copyright.body1=This source code has been automatically generated by {0}
ComponentsFactory.init.waitForFinish.timeout=Can't initialise ComponentsFactory, please try again.
FAMILY.Data_Privacy=Data Privacy
ComponentsPreferencePage.enableOnLineHelp=Enable online help for components
ComponentsPreferencePage.titleInstallHelp=Install offline help feature?
ComponentsPreferencePage.msgInstallHelp=This will open additional packages dialog to install offline help feature, do you want to continue?
ComponentsPreferencePage.grpHelp=Help

View File

@@ -10,6 +10,7 @@ CodeGenerator.getGraphicalNode2=------process.getGeneratingNodes()------
CodeGenerator.JET.TimeOut=D\u00E9lai d'initialisation JET d\u00E9pass\u00E9
CodeGenerator.newLine=\n\n\n\n
CodeGenerator.Node.NotFound=N\u0153ud introuvable dans le processus courant
CodeGenerator.Components.NotFound={0}\u00A0: Le composant est manquant\u00A0: {1}; utilisez -D{2}=false dans votre Studio ou CommandLine pour ignorer cette v\u00E9rification. Un message d'avertissement sera enregistr\u00E9 dans les logs.
JavaRoutineSynchronizer.UnsupportedOperation.Exception1=M\u00E9thode non impl\u00E9ment\u00E9e : org.talend.designer.codegen.JavaRoutineSynchronizer line:49
JavaRoutineSynchronizer.UnsupportedOperation.Exception2=M\u00E9thode non impl\u00E9ment\u00E9e : org.talend.designer.codegen.JavaRoutineSynchronizer line:58
JetSkeletonManager.unableLoad=Impossible de charger le fichier de cache de la mise \u00E0 jour du squelette

View File

@@ -10,11 +10,12 @@ CodeGenerator.getGraphicalNode2=------process.getGeneratingNodes()------
CodeGenerator.JET.TimeOut=JET\u306E\u521D\u671F\u5316\u51E6\u7406\u304C\u30BF\u30A4\u30E0\u30A2\u30A6\u30C8\u3057\u307E\u3057\u305F
CodeGenerator.newLine=\n\n\n\n
CodeGenerator.Node.NotFound=\u73FE\u5728\u306E\u30D7\u30ED\u30BB\u30B9\u306B\u30CE\u30FC\u30C9\u304C\u898B\u3064\u304B\u308A\u307E\u305B\u3093
CodeGenerator.Components.NotFound={0}: \u30B3\u30F3\u30DD\u30FC\u30CD\u30F3\u30C8\u304C\u6B20\u843D\u3057\u3066\u3044\u307E\u3059: {1}\u3002Studio\u3067 -D{2}=false\u3092\u4F7F\u3046\u3068\u3053\u306E\u30C1\u30A7\u30C3\u30AF\u304C\u30B9\u30AD\u30C3\u30D7\u3055\u308C\u3001\u8B66\u544A\u30E1\u30C3\u30BB\u30FC\u30B8\u304C\u30ED\u30B0\u30D5\u30A1\u30A4\u30EB\u306B\u8A18\u9332\u3055\u308C\u307E\u3059\u3002
JavaRoutineSynchronizer.UnsupportedOperation.Exception1=\u30E1\u30BD\u30C3\u30C9\u304C\u5B9F\u88C5\u3055\u308C\u3066\u3044\u307E\u305B\u3093\\: org.talend.designer.codegen.JavaRoutineSynchronizer line\\:49
JavaRoutineSynchronizer.UnsupportedOperation.Exception2=\u30E1\u30BD\u30C3\u30C9\u304C\u5B9F\u88C5\u3055\u308C\u3066\u3044\u307E\u305B\u3093\\: org.talend.designer.codegen.JavaRoutineSynchronizer line\\:58
JetSkeletonManager.unableLoad=\u30B9\u30B1\u30EB\u30C8\u30F3\u66F4\u65B0\u30AD\u30E3\u30C3\u30B7\u30E5\u30D5\u30A1\u30A4\u30EB\u3092\u30ED\u30FC\u30C9\u3067\u304D\u307E\u305B\u3093
JetSkeletonManager.unableSave=\u30B9\u30B1\u30EB\u30C8\u30F3\u66F4\u65B0\u30AD\u30E3\u30C3\u30B7\u30E5\u30D5\u30A1\u30A4\u30EB\u3092\u4FDD\u5B58\u3067\u304D\u307E\u305B\u3093
JetSkeletonManager.updateProblem=\u30B9\u30B1\u30EB\u30C8\u30F3\u6C38\u7D9A\u30C7\u30FC\u30BF\u66F4\u65B0\u6642\u306B\u30A8\u30E9\u30FC\u304C\u767A\u751F\u3057\u307E\u3057\u305F,
JetSkeletonManager.unableLoad=\u30B9\u30B1\u30EB\u30C8\u30F3\u30A2\u30C3\u30D7\u30C7\u30FC\u30C8\u30AD\u30E3\u30C3\u30B7\u30E5\u30D5\u30A1\u30A4\u30EB\u3092\u30ED\u30FC\u30C9\u3067\u304D\u307E\u305B\u3093
JetSkeletonManager.unableSave=\u30B9\u30B1\u30EB\u30C8\u30F3\u30A2\u30C3\u30D7\u30C7\u30FC\u30C8\u30AD\u30E3\u30C3\u30B7\u30E5\u30D5\u30A1\u30A4\u30EB\u3092\u4FDD\u5B58\u3067\u304D\u307E\u305B\u3093
JetSkeletonManager.updateProblem=\u30B9\u30B1\u30EB\u30C8\u30F3\u6C38\u7D9A\u30C7\u30FC\u30BF\u30A2\u30C3\u30D7\u30C7\u30FC\u30C8\u6642\u306B\u30A8\u30E9\u30FC\u304C\u767A\u751F\u3057\u307E\u3057\u305F,
EmfEmittersPersistence.CodeGen.DataMissing=\u30B3\u30FC\u30C9\u751F\u6210\u306E\u30C7\u30FC\u30BF\u304C\u898B\u3064\u304B\u308A\u307E\u305B\u3093\u3002\u5B8C\u5168\u306A\u30B3\u30FC\u30C9\u751F\u6210\u3092\u958B\u59CB\u3057\u3066\u3044\u307E\u3059\u3002
CodeGeneratorEmittersPoolFactory.PersitentData.Error=\u6301\u7D9A\u30C7\u30FC\u30BF\u3092\u4FDD\u5B58\u3067\u304D\u307E\u305B\u3093:
CodeGeneratorEmittersPoolFactory.JETEmitters.NoPresent=JETEmitter \u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u304C\u5B58\u5728\u3057\u307E\u305B\u3093\u3001\u5168\u4F53\u306E\u518D\u521D\u671F\u5316\u304C\u5FC5\u8981\u3067\u3059\u3002
@@ -28,7 +29,7 @@ CodeGeneratorEmittersPoolFactory.initialException=\u521D\u671F\u5316\u4E2D\u306B
CodeGeneratorEmittersPoolFactory.initMessage=\u751F\u6210\u30A8\u30F3\u30B8\u30F3\u306E\u521D\u671F\u5316\u4E2D...
CodeGeneratorEmittersPoolFactory.jetEmitterInitialException=JetEmitter\u306E\u521D\u671F\u5316\u4E2D\u306B\u30A8\u30E9\u30FC\u304C\u767A\u751F\u3057\u307E\u3057\u305F
CodeGeneratorEmittersPoolFactory.operationCanceled=\u64CD\u4F5C\u306F\u30AD\u30E3\u30F3\u30BB\u30EB\u3055\u308C\u307E\u3057\u305F
CodeGeneratorEmittersPoolFactory.updatePaletteForEditors=\u30D1\u30EC\u30C3\u30C8\u3092\u66F4\u65B0
CodeGeneratorEmittersPoolFactory.updatePaletteForEditors=\u30D1\u30EC\u30C3\u30C8\u3092\u30A2\u30C3\u30D7\u30C7\u30FC\u30C8
CodeGeneratorService.invalidLanguage1=\u7121\u52B9\u306A\u8A00\u8A9E\u30BF\u30A4\u30D7\u3067\u3059\u3002
CodeGeneratorService.invalidLanguage2=\u7121\u52B9\u306A\u8A00\u8A9E\u30BF\u30A4\u30D7\u3067\u3059\u3002
CodeGenInit.addMarkers=\u30EF\u30FC\u30AF\u30B9\u30DA\u30FC\u30B9\u306B\u30DE\u30FC\u30AB\u30FC\u3092\u8FFD\u52A0\u4E2D
@@ -48,7 +49,7 @@ ComponentsFactory.componentNotFound=\u30B3\u30F3\u30DD\u30FC\u30CD\u30F3\u30C8\u
ComponentsFactory.load.components=\u30B3\u30F3\u30DD\u30FC\u30CD\u30F3\u30C8\u3092\u30ED\u30FC\u30C9...
ComponentsFactory.parentNotRecompiled=\u8B66\u544A: *.inc.javajet\u306E\u89AA\u306F\u518D\u30B3\u30F3\u30D1\u30A4\u30EB\u3055\u308C\u3066\u3044\u307E\u305B\u3093\u3002
ComponentsFactory.loadComponents.missingFolder=\u30D7\u30E9\u30B0\u30A4\u30F3"{1}"\u306B\u30D5\u30A9\u30EB\u30C0\u30FC"{0}"\u304C\u3042\u308A\u307E\u305B\u3093\u3002
ComponentsFactory.init.waitForFinish.timeout=ComponentsFactory\u3092\u521D\u671F\u5316\u3067\u304D\u307E\u305B\u3093\u3002\u3082\u3046\u4E00\u5EA6\u8A66\u3057\u3066\u304F\u3060\u3055\u3044\u3002
ComponentsFactory.init.waitForFinish.timeout=ComponentsFactory\u3092\u521D\u671F\u5316\u3067\u304D\u307E\u305B\u3093\u3002\u3084\u308A\u76F4\u3057\u3066\u307F\u3066\u304F\u3060\u3055\u3044\u3002
ComponentsLocalProviderService.componentLoadError=\u30B3\u30F3\u30DD\u30FC\u30CD\u30F3\u30C8\u30ED\u30FC\u30C9\u30A8\u30E9\u30FC
ComponentsLocalProviderService.talendExchangeError=Talend Exchange \u30A8\u30E9\u30FC
ComponentsPreferencePage.ButtonLabel0=OK
@@ -65,7 +66,7 @@ ComponenttRunJobPreferencePage.label=tRunJob\u30B3\u30F3\u30DD\u30FC\u30CD\u30F3
ComponentJobletPreferencePage.label=Joblet\u30B3\u30F3\u30DD\u30FC\u30CD\u30F3\u30C8\u306E\u30C0\u30D6\u30EB\u30AF\u30EA\u30C3\u30AF\u5F8C\u3001\u5BFE\u5FDC\u30B8\u30E7\u30D6\u3092\u8868\u793A\u3057\u306A\u3044\u3002
ComponentsPreferencePage_SuccessTitle=\u6210\u529F
ComponentsPreferencePage_SuccessMessage1=\u65B0\u898F\u30B3\u30F3\u30DD\u30FC\u30CD\u30F3\u30C8\u3092\u30ED\u30FC\u30C9\u3059\u308B\u305F\u3081\u306B\u306F\u3001Studio\u3092\u518D\u8D77\u52D5\u3057\u307E\u3059\u3002\u307E\u305F\u306F\u6B21\u56DE\u306E\u958B\u59CB\u6642\u306B\u30ED\u30FC\u30C9\u3055\u308C\u307E\u3059\u3002
ComponentsPreferencePage_SuccessMessage2=\u518D\u8D77\u52D5\u3057\u307E\u3059\u304B\uFF1F
ComponentsPreferencePage_SuccessMessage2=\u518D\u8D77\u52D5\u3057\u307E\u3059\u304B?
ComponentsPreferencePage.enableOnLineHelp=\u30B3\u30F3\u30DD\u30FC\u30CD\u30F3\u30C8\u306E\u30AA\u30F3\u30E9\u30A4\u30F3\u30D8\u30EB\u30D7\u3092\u6709\u52B9\u5316
ComponentsPreferencePage.titleInstallHelp=\u30AA\u30D5\u30E9\u30A4\u30F3\u30D8\u30EB\u30D7\u6A5F\u80FD\u3092\u30A4\u30F3\u30B9\u30C8\u30FC\u30EB\u3057\u307E\u3059\u304B?
ComponentsPreferencePage.msgInstallHelp=\u3053\u308C\u306B\u3088\u3063\u3066\u8FFD\u52A0\u30D1\u30C3\u30B1\u30FC\u30B8\u306E\u30C0\u30A4\u30A2\u30ED\u30B0\u304C\u958B\u304D\u3001\u30AA\u30D5\u30E9\u30A4\u30F3\u30D8\u30EB\u30D7\u6A5F\u80FD\u304C\u30A4\u30F3\u30B9\u30C8\u30FC\u30EB\u3055\u308C\u307E\u3059\u3002\u7D9A\u884C\u3057\u307E\u3059\u304B?

View File

@@ -10,6 +10,7 @@ CodeGenerator.getGraphicalNode2=\u8FDB\u7A0B\u5F97\u5230\u751F\u6210\u8282\u70B9
CodeGenerator.JET.TimeOut=JET \u521D\u59CB\u5316\u8D85\u65F6
CodeGenerator.newLine=\n\n\n\n
CodeGenerator.Node.NotFound=\u5728\u5F53\u524D
CodeGenerator.Components.NotFound={0}: \u7EC4\u4EF6\u7F3A\u5931: {1}; \u5728 Studio \u6216\u547D\u4EE4\u884C\u4E2D\u4F7F\u7528 -D{2}=false \u53EF\u8DF3\u8FC7\u6B64\u9879\u68C0\u67E5\uFF0C\u540C\u65F6\u89E6\u53D1\u8B66\u544A\u6D88\u606F\u3002
JavaRoutineSynchronizer.UnsupportedOperation.Exception1=\u65B9\u6CD5\u672A\u5B9E\u65BD\uFF1Aorg.talend.designer.codegen.JavaRoutineSynchronizer line:49
JavaRoutineSynchronizer.UnsupportedOperation.Exception2=\u65B9\u6CD5\u672A\u5B9E\u65BD\uFF1Aorg.talend.designer.codegen.JavaRoutineSynchronizer line:58
JetSkeletonManager.unableLoad=\u65E0\u6CD5\u52A0\u8F7D\u4E3B\u5E72\u66F4\u65B0\u7F13\u5B58\u6587\u4EF6

View File

@@ -66,6 +66,7 @@ import org.talend.designer.codegen.model.CodeGeneratorEmittersPoolFactory;
import org.talend.designer.codegen.model.CodeGeneratorInternalTemplatesFactoryProvider;
import org.talend.designer.codegen.proxy.JetProxy;
import org.talend.designer.core.generic.model.Component;
import org.talend.designer.core.model.components.DummyComponent;
import org.talend.designer.runprocess.ProcessorUtilities;
/**
@@ -845,6 +846,25 @@ public class CodeGenerator implements ICodeGenerator {
IComponentFileNaming componentFileNaming = ComponentsFactoryProvider.getFileNamingInstance();
IComponent component = node.getComponent();
if (component instanceof DummyComponent) {
if (((DummyComponent) component).isMissingComponent()) {
String processName = "";
try {
IProcess proc = node.getProcess();
processName = proc.getName() + " " + proc.getVersion();
} catch (Exception e) {
ExceptionHandler.process(e);
}
if (IProcess.ERR_ON_COMPONENT_MISSING) {
throw new CodeGeneratorException(Messages.getString("CodeGenerator.Components.NotFound", processName,
component.getName(), IProcess.PROP_ERR_ON_COMPONENT_MISSING));
}
if (ECodePart.BEGIN.equals(part)) {
log.warn(Messages.getString("CodeGenerator.Components.NotFound", processName, component.getName(),
IProcess.PROP_ERR_ON_COMPONENT_MISSING));
}
}
}
// some code unification to handle all component types the same way.
String templateURI = component.getTemplateFolder() + TemplateUtil.DIR_SEP
+ componentFileNaming.getJetFileName(component.getTemplateNamePrefix(), language.getExtension(), part);

View File

@@ -17,8 +17,10 @@ import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InvalidClassException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.ObjectStreamClass;
import java.util.ArrayList;
import java.util.List;
@@ -116,7 +118,18 @@ public class EmfEmittersPersistence {
ByteArrayInputStream stream = new ByteArrayInputStream(poolAsBytes);
if (stream.available() > 0) {
try {
ObjectInputStream oin = new ObjectInputStream(stream);
ObjectInputStream oin = new ObjectInputStream(stream) {
@Override
protected Class<?> resolveClass(ObjectStreamClass desc) throws IOException, ClassNotFoundException {
// Enforce that we are only deserializing a list of LightJetBeans
if (!(desc.getName().startsWith("java.util")
|| LightJetBean.class.getName().equals(desc.getName())
|| String.class.getName().equals(desc.getName()))) {
throw new InvalidClassException("Unauthorized deserialization attempt", desc.getName());
}
return super.resolveClass(desc);
}
};
emittersToReturn = (List<LightJetBean>) oin.readObject();
oin.close();
return emittersToReturn;

View File

@@ -20,8 +20,10 @@ import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InvalidClassException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.ObjectStreamClass;
import java.net.URL;
import java.util.ArrayList;
import java.util.HashMap;
@@ -171,7 +173,17 @@ public final class JetSkeletonManager {
BufferedInputStream bufferedInputStream = null;
try {
bufferedInputStream = new BufferedInputStream(new FileInputStream(file));
ObjectInputStream objectIn = new ObjectInputStream(bufferedInputStream);
ObjectInputStream objectIn = new ObjectInputStream(bufferedInputStream) {
@Override
protected Class<?> resolveClass(ObjectStreamClass desc) throws IOException, ClassNotFoundException {
// Enforce the types that we are about to deserialize
if (!(desc.getName().startsWith("java.util") || Number.class.getName().equals(desc.getName()) || Long.class.getName().equals(desc.getName())
|| String.class.getName().equals(desc.getName()))) {
throw new InvalidClassException("Unauthorized deserialization attempt", desc.getName());
}
return super.resolveClass(desc);
}
};
alreadyCheckedSkeleton = (Map<String, Long>) objectIn.readObject();
} catch (Exception e) {
throw e;

View File

@@ -8,7 +8,6 @@ bin.includes = META-INF/,\
model/,\
content/,\
plugin_de.properties,\
plugin_en.properties,\
plugin_fr.properties,\
plugin_it.properties,\
plugin_ja.properties,\

View File

@@ -1,5 +0,0 @@
Exchange=Exchange
DownloadComponenentsAction.Label=Download Selected Components
RefreshComponenentsAction.Label=Refresh Components List
providerName=www.example.org
pluginName=Exchange Model

View File

@@ -1,101 +0,0 @@
ExchangeView.Exchange=Exchange
AvailableExtensionsComposite.ExtensionName=Extension Name
AvailableExtensionsComposite.Version=Version
AvailableExtensionsComposite.Rating=Rating
AvailableExtensionsComposite.Author=Author
AvailableExtensionsComposite.FilterTitle=Filter
AvailableExtensionsComposite.ViewDetail.installOperateStatus=Install
AvailableExtensionsComposite.ViewDetail.WriteReview=Write a review
AvailableExtensionsComposite.ViewDetail.InsertionReviewFailure=Insertion Review failure.
AvailableExtensionsComposite.ViewDetail.InsertionReviewFailureTip=You should check it.
DownloadedExtensionsComposite.ExtensionName=Extension Name
DownloadedExtensionsComposite.DownloadedVersion=Downloaded Version
DownloadedExtensionsComposite.DownloadDate=Download Date
DownloadedExtensionsComposite.OperateStatus=Operate Status
DownloadedExtensionsComposite.installOperateStatus=Install
DownloadedExtensionsComposite.installedOperateStatus=Installed
DownloadedExtensionsComposite.updateOperateStatus=Update
MyExtensionsComposite.ExtensionName=Extension Name
MyExtensionsComposite.Version=Version
MyExtensionsComposite.UploadDate=Upload Date
MyExtensionsComposite.AddNewExtensionTitle=Add New Extension
MyExtensionsComposite.UpLoadNewVersionOperateStatus=Upload New Version
MyExtensionsComposite.UpdateOperateStatus=Update
MyExtensionsComposite.ModifyOperateStatus=Modify
MyExtensionsComposite.DeleteOperateStatus=Delete
MyExtensionsComposite.Form.Return=Return
MyExtensionsComposite.Form.ExtensionTitle=Extension Title
MyExtensionsComposite.Form.InitialVersion=Initial Version
MyExtensionsComposite.Form.Compatibility=Compatibility
MyExtensionsComposite.Form.Compatibility.AllVersions=All versions
MyExtensionsComposite.Form.Compatibility.Version=Version
MyExtensionsComposite.Form.Compatibility.AndOlder=and older
MyExtensionsComposite.Form.Compatibility.AndNewer=and newer
MyExtensionsComposite.Form.Compatibility.AllVersionsExcept=All versions except:
MyExtensionsComposite.Form.Compatibility.OnlyTheseVersions=Only these versions:
MyExtensionsComposite.Form.Description=Description
MyExtensionsComposite.Form.Visibility=Visibility
MyExtensionsComposite.Form.Visibility.Public=Public(visible by all)
MyExtensionsComposite.Form.Visibility.Private=Private(visible by me)
MyExtensionsComposite.Form.Upload=Upload
MyExtensionsComposite.Form.Upload.SelectAnItem=Select an item from the currently open project
MyExtensionsComposite.Form.Upload.File=File:
MyExtensionsComposite.Form.Upload.Browse=Browse...
MyExtensionsComposite.Form.Upload.Browse.SelectFile=Select a File of the extension to upload
MyExtensionsComposite.Form.DeleteExtensionTile=Delete Extension
MyExtensionsComposite.Form.DeleteExtensionMessage=Are you sure you want to delete this Extension?
MyExtensionsComposite.Form.UploadExtension=Upload Extension
MyExtensionsComposite.Form.UpdateExtension=Update Extension
MyExtensionsComposite.Form.ModifyExtension=Modify Extension
RefreshJob.FindExtensions.Title=Finding available extensions
RefreshJob.FindExtensions.Message=Finding extensions from exchange...
ShowContributedExtensionsJob.ShowContributedExtensions.Title=Finding contributed extensions
ShowContributedExtensionsJob.ShowContributedExtensions.Message=Finding contributed extensions from exchange...
ShowInstalledExtensionsJob.ShowInstalledExtensions.Title=Finding installed extensions
ShowInstalledExtensionsJob.ShowInstalledExtensions.Message=Finding installed extensions from exchange...
DeleteExtensionJob.DeleteExtensionJob.Title=Delete an extension...
DeleteExtensionJob.DeleteExtensionJob.Message=Delete an extension...
DeleteExtensionJob.DeleteFailure=Delete failure.
DeleteExtensionJob.DeleteFailureTip=You should check it.
ModifyExtensionJob.Title=Modify an extension...
ModifyExtensionJob.Message=Modify an extension...
ModifyExtensionJob.ModifyFailure=Modify failure.
ModifyExtensionJob.ModifyFailureTip=You should check it.
InstalledExtensionJob.Title=Installed an extension...
InstalledExtensionJob.Message=Installed an extension...
InsertionExtensionAction.InstalledFailure=Installed failure.
InsertionExtensionAction.InstalledFailureTip=You should check it.
UploadRevisionJob.Title=Upload Revision...
UploadRevisionJob.Message=Upload Revision...
UploadRevisionAction.InstalledFailure=Upload Revision failure.
UploadRevisionAction.InstalledFailureTip=You should check it.
DownloadComponenentsAction.installExchange=Install Exchange Components
DownloadComponenentsAction.DownloadTaskTitle=Downloading files from Exchange
DownloadComponenentsAction.DownloadTaskName=Downloading file from url:
DownloadComponenentsAction.ReloadPalette=Reloading palette...
DownloadComponenentsAction.DownloadFailure=Download failure.
DownloadComponenentsAction.DownloadFailureTip=You must change the Download Settings.
ExchangeWebService.insertionExtensionSuccessful=Insertion Extension successful.
ExchangeWebService.downloadingExtensionSuccessful=Downloaded Extension successful.
ExchangeWebService.deleteExtensionSuccessful=Deleted Extension successful.
ExchangeWebService.insertReviewSuccessful=Insertion Review successful.
ExchangeWebService.updateRevisionSuccessful=Update Revision successful.
ExchangeWebService.insertionRevisionSuccessful=Insertion Revision successful.
ImportExchangeDialog.dialogTitle=Select an item from Talend Exchange
ImportExchangeDialog.WARNING=WARNING
ImportExchangeDialog.NOTSELECTWARNING=Please select one item from table.
ImportExchangeDialog.downloadProgressBar=Download Item,Please Wait\!
ImportExchangeDialog.EXTENSION_NAME=Extension Name
ImportExchangeDialog.AUTHOR_NAME=Author Name
ImportExchangeDialog.LATEST_REVISION=Latest Revision
ImportExchangeDialog.EXTENSION_DESCRIPTION=Extension Description
ImportExchangeDialog.REFRESH_BUTTON=Refresh
ImportExchangeDialog.REFRESHING_PROGRESSBAR=Refreshing\! Please Wait.....
ImportExchangeDialog.OPERATION_CANCELLED=Operation was cancelled
Exchange.logon.error=Exchange user have not been registered, please register using the preferences .
ImportExchangeDialog.download.extensions=Download extensions\! Please Wait\!
DownloadComponenentsAction_restartMessage=Install the new component successfully, but need to restart studio to load it, do you want to restart now?
DownloadComponenentsAction_restartTitle=Need restart
DownloadComponenentsAction_failureTitle=Failure
DownloadComponenentsAction_failureMessage=Fail to install the component {0}, need check the component is valid or not.
DownloadComponenentsAction.installComponentsTitle=Install components

View File

@@ -14,13 +14,13 @@ DownloadedExtensionsComposite.DownloadDate=\u30C0\u30A6\u30F3\u30ED\u30FC\u30C9\
DownloadedExtensionsComposite.OperateStatus=\u30B9\u30C6\u30FC\u30BF\u30B9\u64CD\u4F5C
DownloadedExtensionsComposite.installOperateStatus=\u30A4\u30F3\u30B9\u30C8\u30FC\u30EB
DownloadedExtensionsComposite.installedOperateStatus=\u30A4\u30F3\u30B9\u30C8\u30FC\u30EB\u6E08\u307F
DownloadedExtensionsComposite.updateOperateStatus=\u66F4\u65B0
DownloadedExtensionsComposite.updateOperateStatus=\u30A2\u30C3\u30D7\u30C7\u30FC\u30C8
MyExtensionsComposite.ExtensionName=Extension\u540D
MyExtensionsComposite.Version=\u30D0\u30FC\u30B8\u30E7\u30F3
MyExtensionsComposite.UploadDate=\u30A2\u30C3\u30D7\u30ED\u30FC\u30C9\u65E5\u4ED8
MyExtensionsComposite.AddNewExtensionTitle=\u65B0\u898FExtension\u8FFD\u52A0
MyExtensionsComposite.UpLoadNewVersionOperateStatus=\u65B0\u30D0\u30FC\u30B8\u30E7\u30F3\u3092\u30A2\u30C3\u30D7\u30ED\u30FC\u30C9
MyExtensionsComposite.UpdateOperateStatus=\u66F4\u65B0
MyExtensionsComposite.UpdateOperateStatus=\u30A2\u30C3\u30D7\u30C7\u30FC\u30C8
MyExtensionsComposite.ModifyOperateStatus=\u5909\u66F4
MyExtensionsComposite.DeleteOperateStatus=\u524A\u9664
MyExtensionsComposite.Form.Return=\u623B\u308A\u5024
@@ -45,7 +45,7 @@ MyExtensionsComposite.Form.Upload.Browse.SelectFile=\u30A2\u30C3\u30D7\u30ED\u30
MyExtensionsComposite.Form.DeleteExtensionTile=Extension\u524A\u9664
MyExtensionsComposite.Form.DeleteExtensionMessage=\u3053\u306E\u62E1\u5F35\u5B50\u3092\u524A\u9664\u3057\u307E\u3059\u304B?
MyExtensionsComposite.Form.UploadExtension=Extension\u30A2\u30C3\u30D7\u30ED\u30FC\u30C9
MyExtensionsComposite.Form.UpdateExtension=Extension\u66F4\u65B0
MyExtensionsComposite.Form.UpdateExtension=Extension\u30A2\u30C3\u30D7\u30C7\u30FC\u30C8
MyExtensionsComposite.Form.ModifyExtension=Extension\u4FEE\u6B63
Exchange.logon.error=Exchange\u30E6\u30FC\u30B6\u30FC\u304C\u767B\u9332\u3055\u308C\u3066\u3044\u307E\u305B\u3093\u3002\u521D\u671F\u8A2D\u5B9A\u3092\u4F7F\u7528\u3057\u3066\u767B\u9332\u3057\u3066\u304F\u3060\u3055\u3044\u3002
RefreshJob.FindExtensions.Title=\u53D6\u5F97\u53EF\u80FD\u306Aextensions
@@ -56,7 +56,7 @@ ShowInstalledExtensionsJob.ShowInstalledExtensions.Title=extensions\u3092\u30A4\
ShowInstalledExtensionsJob.ShowInstalledExtensions.Message=exchange\u304B\u3089extensions\u3092\u30A4\u30F3\u30B9\u30C8\u30FC\u30EB\u2026
DeleteExtensionJob.DeleteExtensionJob.Title=Extension\u3092\u524A\u9664\u3057\u307E\u3059\u2026
DeleteExtensionJob.DeleteExtensionJob.Message=Extension\u3092\u524A\u9664\u3057\u307E\u3059\u2026
DeleteExtensionJob.DeleteFailure=\u524A\u9664\u51FA\u6765\u307E\u305B\u3093
DeleteExtensionJob.DeleteFailure=\u524A\u9664\u3067\u304D\u307E\u305B\u3093
DeleteExtensionJob.DeleteFailureTip=\u30C1\u30A7\u30C3\u30AF\u3092\u3057\u3066\u304F\u3060\u3055\u3044\u3002
ModifyExtensionJob.Title=Extension\u3092\u4FEE\u6B63\u2026
ModifyExtensionJob.Message=Extension\u3092\u4FEE\u6B63\u2026
@@ -77,7 +77,7 @@ DownloadComponenentsAction_failureMessage=\u30B3\u30F3\u30DD\u30FC\u30CD\u30F3\u
DownloadComponenentsAction.installExchange=Exchange\u30B3\u30F3\u30DD\u30FC\u30CD\u30F3\u30C8\u3092\u30A4\u30F3\u30B9\u30C8\u30FC\u30EB
DownloadComponenentsAction.DownloadTaskTitle=Exchange\u304B\u3089\u30D5\u30A1\u30A4\u30EB\u3092\u30C0\u30A6\u30F3\u30ED\u30FC\u30C9
DownloadComponenentsAction.DownloadTaskName=\u30D5\u30A1\u30A4\u30EB\u306E\u30C0\u30A6\u30F3\u30ED\u30FC\u30C9\u4E2D URL \\:
DownloadComponenentsAction.ReloadPalette=\u30D1\u30EC\u30C3\u30C8\u306E\u66F4\u65B0...
DownloadComponenentsAction.ReloadPalette=\u30D1\u30EC\u30C3\u30C8\u306E\u30A2\u30C3\u30D7\u30C7\u30FC\u30C8...
DownloadComponenentsAction.DownloadFailure=\u30C0\u30A6\u30F3\u30ED\u30FC\u30C9\u5931\u6557\u3002
DownloadComponenentsAction.DownloadFailureTip=\u30C0\u30A6\u30F3\u30ED\u30FC\u30C9\u8A2D\u5B9A\u3092\u5909\u66F4\u3057\u3066\u304F\u3060\u3055\u3044\u3002
DownloadComponenentsAction.installComponentsTitle=\u30B3\u30F3\u30DD\u30FC\u30CD\u30F3\u30C8\u306E\u30A4\u30F3\u30B9\u30C8\u30FC\u30EB
@@ -85,7 +85,7 @@ ExchangeWebService.insertionExtensionSuccessful=Extension\u306E\u30A4\u30F3\u30B
ExchangeWebService.downloadingExtensionSuccessful=Extension\u30C0\u30A6\u30F3\u30ED\u30FC\u30C9\u6210\u529F\u3002
ExchangeWebService.deleteExtensionSuccessful=Extension\u524A\u9664\u6210\u529F\u3002
ExchangeWebService.insertReviewSuccessful=Review\u633F\u5165\u6210\u529F\u3002
ExchangeWebService.updateRevisionSuccessful=\u30EA\u30D3\u30B8\u30E7\u30F3\u66F4\u65B0\u6210\u529F\u3002
ExchangeWebService.updateRevisionSuccessful=\u30EA\u30D3\u30B8\u30E7\u30F3\u30A2\u30C3\u30D7\u30C7\u30FC\u30C8\u6210\u529F\u3002
ExchangeWebService.insertionRevisionSuccessful=\u30EA\u30D3\u30B8\u30E7\u30F3\u633F\u5165\u6210\u529F\u3002
ImportExchangeDialog.dialogTitle=Talend Exchange \u304B\u3089\u9805\u76EE\u306E\u9078\u629E
ImportExchangeDialog.WARNING=\u8B66\u544A
@@ -97,5 +97,5 @@ ImportExchangeDialog.LATEST_REVISION=\u6700\u65B0\u30EA\u30D3\u30B8\u30E7\u30F3
ImportExchangeDialog.EXTENSION_DESCRIPTION=\u62E1\u5F35\u306E\u8AAC\u660E
ImportExchangeDialog.download.extensions=\u62E1\u5F35\u6A5F\u80FD\u3092\u30C0\u30A6\u30F3\u30ED\u30FC\u30C9\u4E2D\u3067\u3059\u3002\u66AB\u304F\u304A\u5F85\u3061\u304F\u3060\u3055\u3044\u3002
ImportExchangeDialog.REFRESH_BUTTON=\u66F4\u65B0
ImportExchangeDialog.REFRESHING_PROGRESSBAR=\u30EA\u30D5\u30EC\u30C3\u30B7\u30E5\u4E2D\u3067\u3059\u3002\u66AB\u304F\u304A\u5F85\u3061\u304F\u3060\u3055\u3044\u3002
ImportExchangeDialog.REFRESHING_PROGRESSBAR=\u66F4\u65B0\u4E2D\u3067\u3059\u3002\u66AB\u304F\u304A\u5F85\u3061\u304F\u3060\u3055\u3044\u3002
ImportExchangeDialog.OPERATION_CANCELLED=\u64CD\u4F5C\u306F\u30AD\u30E3\u30F3\u30BB\u30EB\u3055\u308C\u307E\u3057\u305F

View File

@@ -37,7 +37,18 @@
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.5</version>
<exclusions>
<exclusion>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>ch.qos.reload4j</groupId>
<artifactId>reload4j</artifactId>
<version>1.2.19</version>
</dependency>
<!-- Spring 3 dependencies -->
<dependency>
<groupId>org.springframework</groupId>

View File

@@ -1,69 +0,0 @@
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.talend.libraries</groupId>
<artifactId>checkArchive-1.1-20190917</artifactId>
<version>6.0.0</version>
<name>checkArchive</name>
<description>Dependence for tFileArchive and tFileUnAchive</description>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<talend.nexus.url>https://artifacts-oss.talend.com</talend.nexus.url>
<java.source.version>1.7</java.source.version>
</properties>
<distributionManagement>
<snapshotRepository>
<id>talend_nexus_deployment</id>
<url>${talend.nexus.url}/nexus/content/repositories/TalendOpenSourceSnapshot/</url>
<snapshots>
<enabled>true</enabled>
</snapshots>
<releases>
<enabled>false</enabled>
</releases>
</snapshotRepository>
<repository>
<id>talend_nexus_deployment</id>
<url>${talend.nexus.url}/nexus/content/repositories/TalendOpenSourceRelease/</url>
<snapshots>
<enabled>false</enabled>
</snapshots>
<releases>
<enabled>true</enabled>
</releases>
</repository>
</distributionManagement>
<dependencies>
<!-- https://mvnrepository.com/artifact/org.apache.commons/commons-compress -->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-compress</artifactId>
<version>1.19</version>
</dependency>
</dependencies>
<build>
<resources>
<resource>
<directory>src/main/java</directory>
</resource>
</resources>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.3.2</version>
<configuration>
<source>${java.source.version}</source>
<target>${java.source.version}</target>
<showDeprecation>true</showDeprecation>
<showWarnings>true</showWarnings>
<compilerArgument>-XDignore.symbol.file</compilerArgument>
<fork>true</fork>
</configuration>
</plugin>
</plugins>
</build>
</project>

View File

@@ -230,9 +230,9 @@
<scope>compile</scope>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.14</version>
<groupId>ch.qos.reload4j</groupId>
<artifactId>reload4j</artifactId>
<version>1.2.19</version>
<scope>runtime</scope>
<optional>true</optional>
</dependency>

View File

@@ -4,7 +4,7 @@
<modelVersion>4.0.0</modelVersion>
<groupId>org.talend</groupId>
<artifactId>talendMQRFH2</artifactId>
<version>1.0.1-20190206</version>
<version>1.1.0-20220307</version>
<packaging>jar</packaging>
<properties>
@@ -36,20 +36,10 @@
</distributionManagement>
<dependencies>
<dependency>
<groupId>com.ibm.mq</groupId>
<artifactId>com.ibm.mq</artifactId>
<version>8.0.0.9</version>
</dependency>
<dependency>
<groupId>com.ibm.mq</groupId>
<artifactId>com.ibm.mqjms</artifactId>
<version>8.0.0.9</version>
</dependency>
<dependency>
<groupId>com.ibm.mq</groupId>
<artifactId>com.ibm.mq.allclient</artifactId>
<version>8.0.0.9</version>
<version>9.2.4.0</version>
</dependency>
<dependency>
<groupId>org.talend.libraries</groupId>
@@ -67,9 +57,9 @@
<version>6.0.0</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
<groupId>ch.qos.reload4j</groupId>
<artifactId>reload4j</artifactId>
<version>1.2.19</version>
</dependency>
</dependencies>

View File

@@ -113,9 +113,9 @@
<scope>test</scope>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
<groupId>ch.qos.reload4j</groupId>
<artifactId>reload4j</artifactId>
<version>1.2.19</version>
<scope>test</scope>
</dependency>
<!-- JUnit -->

View File

@@ -70,9 +70,9 @@
</dependency>
<dependency>
<groupId>org.talend.libraries</groupId>
<groupId>org.talend.components</groupId>
<artifactId>talendcsv</artifactId>
<version>6.0.0</version>
<version>1.0.0</version>
</dependency>
</dependencies>

View File

@@ -64,9 +64,9 @@
<version>4.1.2</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
<groupId>ch.qos.reload4j</groupId>
<artifactId>reload4j</artifactId>
<version>1.2.19</version>
</dependency>
<!--test-->

View File

@@ -45,9 +45,9 @@
<scope>test</scope>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
<groupId>ch.qos.reload4j</groupId>
<artifactId>reload4j</artifactId>
<version>1.2.19</version>
<scope>test</scope>
</dependency>
<dependency>

View File

@@ -6,7 +6,7 @@
<groupId>org.talend.components.lib</groupId>
<artifactId>job-audit</artifactId>
<version>1.4</version>
<version>1.5</version>
<properties>
<talend.nexus.url>https://artifacts-oss.talend.com</talend.nexus.url>
@@ -69,13 +69,13 @@
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>2.13.2</version>
<version>2.17.1</version>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.13.2</version>
<version>2.17.1</version>
<optional>true</optional>
</dependency>
</dependencies>
@@ -97,4 +97,4 @@
</pluginManagement>
</build>
</project>
</project>

View File

@@ -30,5 +30,8 @@ public interface JobAuditLogger extends EventAuditLogger {
@AuditEvent(category = "schema", message = "{connection_name} : {schema} from {source_id} to {target_id}", level = LogLevel.INFO)
void schema(Context context);
@AuditEvent(category = "exception", message = "Exception", level = LogLevel.INFO)
void exception(Context context);
}

View File

@@ -3,10 +3,17 @@
<modelVersion>4.0.0</modelVersion>
<groupId>org.talend.components</groupId>
<artifactId>talend-mscrm</artifactId>
<version>3.9-20210713</version>
<version>3.12-20220513</version>
<packaging>jar</packaging>
<name>talend-mscrm</name>
<licenses>
<license>
<name>Apache License, Version 2.0</name>
<url>https://www.talendforge.org/modules/licenses/APACHE_v2.txt</url>
<distribution>may be downloaded from the Maven repository</distribution>
</license>
</licenses>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
@@ -25,7 +32,7 @@
<maven-jar-plugin.version>3.2.0</maven-jar-plugin.version>
<maven-compiler-plugin.version>3.8.1</maven-compiler-plugin.version>
</properties>
<repositories>
<repository>
<id>talend_nexus_deployment</id>
@@ -60,7 +67,7 @@
</releases>
</repository>
</distributionManagement>
<dependencies>
<dependency>
<groupId>org.apache.axis2</groupId>
@@ -68,9 +75,9 @@
<version>${axis2.version}</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.5</version>
<groupId>ch.qos.reload4j</groupId>
<artifactId>reload4j</artifactId>
<version>1.2.19</version>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
@@ -93,7 +100,7 @@
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.apache.olingo</groupId>
<artifactId>odata-client-core</artifactId>
@@ -135,11 +142,6 @@
<version>${junit.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.microsoft.azure</groupId>
<artifactId>adal4j</artifactId>
<version>${adal4j.version}</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
@@ -155,6 +157,17 @@
<artifactId>jackson-annotations</artifactId>
<version>${jackson.version}</version>
</dependency>
<dependency>
<groupId>com.microsoft.azure</groupId>
<artifactId>msal4j</artifactId>
<version>1.11.2</version>
</dependency>
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.9.0</version>
</dependency>
</dependencies>
<build>
<resources>

View File

@@ -0,0 +1,164 @@
package com.microsoft.aad.msal4j;
import java.util.Collections;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.CompletableFuture;
import org.slf4j.LoggerFactory;
import com.nimbusds.oauth2.sdk.ParseException;
import com.nimbusds.oauth2.sdk.auth.ClientAuthentication;
import com.nimbusds.oauth2.sdk.auth.ClientAuthenticationMethod;
import com.nimbusds.oauth2.sdk.auth.ClientSecretPost;
import com.nimbusds.oauth2.sdk.auth.PrivateKeyJWT;
import com.nimbusds.oauth2.sdk.auth.Secret;
import com.nimbusds.oauth2.sdk.id.ClientID;
import static com.microsoft.aad.msal4j.ParameterValidationUtils.validateNotNull;
public class OauthClientApplication extends AbstractClientApplicationBase implements IConfidentialClientApplication {
private ClientAuthentication clientAuthentication;
private CustomJWTAuthentication customJWTAuthentication;
private boolean clientCertAuthentication = false;
private ClientCertificate clientCertificate;
private boolean sendX5c;
private final String username;
private final String password;
private OauthClientApplication(OauthClientApplication.Builder builder) {
super(builder);
validateNotNull("username", builder.username);
validateNotNull("password", builder.password);
sendX5c = builder.sendX5c;
log = LoggerFactory.getLogger(ConfidentialClientApplication.class);
initClientAuthentication(builder.clientCredential);
this.username = builder.username;
this.password = builder.password;
}
@Override
public CompletableFuture<IAuthenticationResult> acquireToken(ClientCredentialParameters parameters) {
validateNotNull("parameters", parameters);
RequestContext context = new RequestContext(this, PublicApi.ACQUIRE_TOKEN_FOR_CLIENT, parameters);
OauthCredentialRequest clientCredentialRequest = new OauthCredentialRequest(parameters,
username, password,this, context);
return this.executeRequest(clientCredentialRequest);
}
@Override
public CompletableFuture<IAuthenticationResult> acquireToken(OnBehalfOfParameters parameters) {
throw new IllegalStateException("Use ConfidentialClientApplication instead");
}
private void initClientAuthentication(IClientCredential clientCredential) {
validateNotNull("clientCredential", clientCredential);
if (clientCredential instanceof ClientSecret) {
clientAuthentication = new ClientSecretPost(new ClientID(clientId()), new Secret(((ClientSecret) clientCredential).clientSecret()));
} else if (clientCredential instanceof ClientCertificate) {
this.clientCertAuthentication = true;
this.clientCertificate = (ClientCertificate) clientCredential;
clientAuthentication = buildValidClientCertificateAuthority();
} else if (clientCredential instanceof ClientAssertion) {
clientAuthentication = createClientAuthFromClientAssertion((ClientAssertion) clientCredential);
} else {
throw new IllegalArgumentException("Unsupported client credential");
}
}
@Override
protected ClientAuthentication clientAuthentication() {
if (clientCertAuthentication) {
final Date currentDateTime = new Date(System.currentTimeMillis());
final Date expirationTime = ((PrivateKeyJWT) clientAuthentication).getJWTAuthenticationClaimsSet().getExpirationTime();
if (expirationTime.before(currentDateTime)) {
//The asserted private jwt with the client certificate can expire so rebuild it when the
clientAuthentication = buildValidClientCertificateAuthority();
}
}
return clientAuthentication;
}
private ClientAuthentication buildValidClientCertificateAuthority() {
ClientAssertion clientAssertion = JwtHelper.buildJwt(clientId(), clientCertificate, this.authenticationAuthority.selfSignedJwtAudience(), sendX5c);
return createClientAuthFromClientAssertion(clientAssertion);
}
private ClientAuthentication createClientAuthFromClientAssertion(final ClientAssertion clientAssertion) {
final Map<String, List<String>> map = new HashMap<>();
try {
map.put("client_assertion_type", Collections.singletonList(ClientAssertion.assertionType));
map.put("client_assertion", Collections.singletonList(clientAssertion.assertion()));
return PrivateKeyJWT.parse(map);
} catch (final ParseException e) {
//This library is not supposed to validate Issuer and subject values.
//The next lines of code ensures that exception is not thrown.
if (e.getMessage().contains("Issuer and subject in client JWT assertion must designate the same client identifier")) {
return new CustomJWTAuthentication(ClientAuthenticationMethod.PRIVATE_KEY_JWT, clientAssertion, new ClientID(clientId()));
}
throw new MsalClientException(e);
}
}
/**
* Creates instance of Builder of ConfidentialClientApplication
*
* @param clientId Client ID (Application ID) of the application as registered
* in the application registration portal (portal.azure.com)
* @param clientCredential The client credential to use for token acquisition.
* @return instance of Builder of ConfidentialClientApplication
*/
public static OauthClientApplication.Builder builder(String clientId, IClientCredential clientCredential, String username, String password) {
return new OauthClientApplication.Builder(clientId, clientCredential, username, password);
}
public static class Builder extends AbstractClientApplicationBase.Builder<OauthClientApplication.Builder> {
private IClientCredential clientCredential;
private final String username;
private final String password;
private boolean sendX5c = true;
private Builder(String clientId, IClientCredential clientCredential, String username, String password) {
super(clientId);
this.clientCredential = clientCredential;
this.username = username;
this.password = password;
}
/**
* Specifies if the x5c claim (public key of the certificate) should be sent to the STS.
* Default value is true
*
* @param val true if the x5c should be sent. Otherwise false
* @return instance of the Builder on which method was called
*/
public OauthClientApplication.Builder sendX5c(boolean val) {
this.sendX5c = val;
return self();
}
@Override
public OauthClientApplication build() {
return new OauthClientApplication(this);
}
@Override
protected OauthClientApplication.Builder self() {
return this;
}
}
@java.lang.SuppressWarnings("all")
public boolean sendX5c() {
return this.sendX5c;
}
}

View File

@@ -0,0 +1,20 @@
package com.microsoft.aad.msal4j;
import com.nimbusds.oauth2.sdk.ResourceOwnerPasswordCredentialsGrant;
import com.nimbusds.oauth2.sdk.auth.Secret;
class OauthCredentialRequest extends MsalRequest {
ClientCredentialParameters parameters;
OauthCredentialRequest(ClientCredentialParameters parameters, String username, String password,
OauthClientApplication application, RequestContext requestContext) {
super(application, createMsalGrant(parameters, username, password), requestContext);
this.parameters = parameters;
}
private static OAuthAuthorizationGrant createMsalGrant(ClientCredentialParameters parameters,
String username, String password) {
return new OAuthAuthorizationGrant(new ResourceOwnerPasswordCredentialsGrant(username, new Secret(
password)), parameters.scopes(), parameters.claims());
}
}

View File

@@ -60,12 +60,13 @@ public class ClientConfigurationFactory {
}
public final static ClientConfiguration buildOAuthPremiseClientConfiguration(String userName, String password, String authoryEndpoint,
String serviceAPI, String clientId, String redirectUrl, String forcedResource) {
String serviceAPI, String clientId, String clientSecret, String redirectUrl, String forcedResource) {
ClientConfiguration clientConfiguration = new ClientConfiguration(AuthStrategyEnum.OAUTH_PREMISE);
clientConfiguration.setUserName(userName);
clientConfiguration.setPassword(password);
clientConfiguration.setAuthoryEndpoint(authoryEndpoint);
clientConfiguration.setClientId(clientId);
clientConfiguration.setClientSecret(clientSecret);
clientConfiguration.setRedirectURL(redirectUrl);
clientConfiguration.setServiceAPI(serviceAPI);
clientConfiguration.setForceResource(forcedResource);

View File

@@ -116,11 +116,8 @@ public class DynamicsCRMClient implements IHttpClientFactoryObserver {
public DynamicsCRMClient(ClientConfiguration clientConfiguration, String serviceRootURL, String entitySet)
throws AuthenticationException {
this.clientConfiguration = clientConfiguration;
this.serviceRootURL = serviceRootURL;
this.entitySet = entitySet;
init();
}

View File

@@ -146,6 +146,10 @@ public class OAuthPremiseStrategyImpl implements IAuthStrategy {
body.put("redirect_uri", conf.getRedirectURL());
body.put("client_id", conf.getClientId());
if(conf.getClientSecret() != null && !"".equals(conf.getClientSecret().trim())){
body.put("client_secret", conf.getClientSecret());
}
RequestHttpContext queryContext = new RequestHttpContext("POST",
computeTokenUrl(conf.getAuthoryEndpoint()),
Collections.emptyMap(),

View File

@@ -13,14 +13,12 @@
package org.talend.ms.crm.odata.authentication;
import java.net.Proxy;
import java.util.Collections;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
import javax.naming.AuthenticationException;
import javax.naming.ServiceUnavailableException;
import com.microsoft.aad.adal4j.ClientCredential;
import org.apache.http.client.methods.HttpRequestBase;
import org.apache.olingo.client.api.communication.request.ODataRequest;
import org.apache.olingo.commons.api.http.HttpHeader;
@@ -28,15 +26,19 @@ import org.talend.ms.crm.odata.ClientConfiguration;
import org.talend.ms.crm.odata.ProxyProvider;
import org.talend.ms.crm.odata.httpclientfactory.IHttpclientFactoryObservable;
import org.talend.ms.crm.odata.httpclientfactory.OAuthHttpClientFactory;
import com.microsoft.aad.adal4j.AuthenticationContext;
import com.microsoft.aad.adal4j.AuthenticationResult;
import com.microsoft.aad.msal4j.ClientCredentialFactory;
import com.microsoft.aad.msal4j.ClientCredentialParameters;
import com.microsoft.aad.msal4j.ConfidentialClientApplication;
import com.microsoft.aad.msal4j.IAuthenticationResult;
import com.microsoft.aad.msal4j.OauthClientApplication;
import com.microsoft.aad.msal4j.PublicClientApplication;
import com.microsoft.aad.msal4j.UserNamePasswordParameters;
public class OAuthStrategyImpl implements IAuthStrategy {
private ClientConfiguration conf;
private AuthenticationResult authResult;
private IAuthenticationResult authResult;
private IHttpclientFactoryObservable httpClientFactory;
@@ -71,12 +73,12 @@ public class OAuthStrategyImpl implements IAuthStrategy {
@Override
public void configureRequest(ODataRequest request) {
request.addCustomHeader(HttpHeader.AUTHORIZATION, "Bearer " + authResult.getAccessToken());
request.addCustomHeader(HttpHeader.AUTHORIZATION, "Bearer " + authResult.accessToken());
}
@Override
public void configureRequest(HttpRequestBase request) {
request.addHeader(HttpHeader.AUTHORIZATION, "Bearer " + authResult.getAccessToken());
request.addHeader(HttpHeader.AUTHORIZATION, "Bearer " + authResult.accessToken());
}
@Override
@@ -115,34 +117,71 @@ public class OAuthStrategyImpl implements IAuthStrategy {
}
}
private Future<AuthenticationResult> acquireToken(AuthenticationContext context) throws Exception {
Future<AuthenticationResult> future;
private Future<IAuthenticationResult> acquireToken(PublicClientApplication context) throws Exception {
Future<IAuthenticationResult> future;
UserNamePasswordParameters parameters = UserNamePasswordParameters.builder(
Collections.singleton(conf.getResource() + "/.default"), conf.getUserName(), conf.getPassword().toCharArray()).build();
future = context.acquireToken(parameters);
return future;
if(conf.getAppRegisteredType() == ClientConfiguration.AppRegisteredType.NATIVE_APP){
future = context.acquireToken(conf.getResource(), conf.getClientId(), conf.getUserName(), conf.getPassword(), null);
}
else if(conf.getAppRegisteredType() == ClientConfiguration.AppRegisteredType.WEB_APP && conf.getWebAppPermission() == ClientConfiguration.WebAppPermission.DELEGATED){
future = context.acquireToken(conf.getResource(), new ClientCredential(conf.getClientId(), conf.getClientSecret()), conf.getUserName(), conf.getPassword(), null);
}
else{
throw new Exception("Can't retrieve token with this configuration : registered application type: "+conf.getAppRegisteredType()+", Web application permission: "+conf.getWebAppPermission());
}
return future;
}
private Future<IAuthenticationResult> acquireToken(OauthClientApplication context) throws Exception {
ClientCredentialParameters parameters = ClientCredentialParameters.builder(
Collections.singleton(conf.getResource() + "/.default")).build();
return context.acquireToken(parameters);
}
private AuthenticationResult getAccessToken() throws ServiceUnavailableException {
AuthenticationContext context = null;
AuthenticationResult result = null;
private IAuthenticationResult getAccessToken() throws ServiceUnavailableException {
if(conf.getAppRegisteredType() == ClientConfiguration.AppRegisteredType.NATIVE_APP){
return getAccessTokenNative();
} if(conf.getAppRegisteredType() == ClientConfiguration.AppRegisteredType.WEB_APP && conf.getWebAppPermission() == ClientConfiguration.WebAppPermission.DELEGATED){
return getAccessTokenWebApp();
} else {
throw new RuntimeException("Can't retrieve token with this configuration : registered application type: "+conf.getAppRegisteredType()+", Web application permission: "+conf.getWebAppPermission());
}
}
private IAuthenticationResult getAccessTokenNative() throws ServiceUnavailableException {
PublicClientApplication context = null;
IAuthenticationResult result = null;
ExecutorService service = null;
try {
service = Executors.newFixedThreadPool(1);
context = new AuthenticationContext(conf.getAuthoryEndpoint(), false, service);
Proxy proxy = ProxyProvider.getProxy();
PublicClientApplication.Builder contextBuilder = PublicClientApplication.builder(conf.getClientId()).authority("https://login.microsoftonline.com/organizations");
if (proxy != null) {
contextBuilder = contextBuilder.proxy(proxy);
}
context = contextBuilder.build();
Future<IAuthenticationResult> future = this.acquireToken(context);
result = future.get();
} catch (Exception e) {
throw new ServiceUnavailableException(e.getMessage());
} finally {
service.shutdown();
}
if (result == null) {
throw new ServiceUnavailableException("Authenticated failed! Please check your configuration!");
}
return result;
}
private IAuthenticationResult getAccessTokenWebApp() throws ServiceUnavailableException {
OauthClientApplication context = null;
IAuthenticationResult result = null;
ExecutorService service = null;
try {
service = Executors.newFixedThreadPool(1);
OauthClientApplication.Builder contextBuilder = OauthClientApplication.builder(conf.getClientId(),
ClientCredentialFactory.createFromSecret(conf.getClientSecret()), conf.getUserName(), conf.getPassword())
.authority(conf.getAuthoryEndpoint());
Proxy proxy = ProxyProvider.getProxy();
if (proxy != null) {
context.setProxy(proxy);
contextBuilder.proxy(proxy);
}
Future<AuthenticationResult> future = this.acquireToken(context);
context = contextBuilder.build();
Future<IAuthenticationResult> future = this.acquireToken(context);
result = future.get();
} catch (Exception e) {
throw new ServiceUnavailableException(e.getMessage());

View File

@@ -59,8 +59,6 @@ public final class HttpClient {
redirect = true;
}
//final HttpHeaders headers = resp.headers();
final Optional<String> location = response.getFirstValueHeader("location");
@@ -127,4 +125,4 @@ public final class HttpClient {
public RequestHttpContext getRequestHttpContext() {
return requestHttpContext;
}
}
}

View File

@@ -15,7 +15,7 @@ public final class HttpResponse {
private Map<String, List<String>> headers;
private String body;
private Optional<String> code = null;//Optional.empty();
private Optional<String> code = null;
public static HttpResponse fromHttpUrlConnection(HttpURLConnection conn) throws IOException {
final int status = conn.getResponseCode();
@@ -82,12 +82,12 @@ public final class HttpResponse {
return Optional.empty();
}
final List<String> ss = values.get();
if(ss.size() <= 0){
final List<String> v = values.get();
if (v.size() <= 0) {
return Optional.empty();
}
return Optional.ofNullable(ss.get(0));
return Optional.ofNullable(v.get(0));
}
public String getBody() {
@@ -107,11 +107,13 @@ public final class HttpResponse {
if (!optLocation.isPresent()) {
return Optional.empty();
}
final String[] split = optLocation.get().split("&|\\?");
final Optional<String> optCode = Arrays.stream(split).filter(e -> e.startsWith("code=")).findFirst();
final String optLocationValue = optLocation.get();
final String[] split = optLocationValue.split("&|\\?");
final Optional<String> optCode = Arrays.stream(split).filter(e -> e.startsWith("code=")).findFirst();
if (optCode.isPresent()) {
String code = optCode.get().substring(5);
final String optCodeValue = optCode.get();
String code = optCodeValue.substring(5);
return Optional.ofNullable(code);
}

View File

@@ -0,0 +1,191 @@
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.talend.components</groupId>
<artifactId>talend-orc</artifactId>
<version>1.0-20211008</version>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<hadoop.version>3.2.2</hadoop.version>
<apache.orc.version>1.7.0</apache.orc.version>
<junit.jupiter.version>5.7.2</junit.jupiter.version>
<hamcrest.version>1.3</hamcrest.version>
<talend.nexus.url>https://artifacts-oss.talend.com</talend.nexus.url>
</properties>
<distributionManagement>
<snapshotRepository>
<id>talend_nexus_deployment</id>
<url>${talend.nexus.url}/nexus/content/repositories/TalendOpenSourceSnapshot/</url>
<snapshots>
<enabled>true</enabled>
</snapshots>
<releases>
<enabled>false</enabled>
</releases>
</snapshotRepository>
<repository>
<id>talend_nexus_deployment</id>
<url>${talend.nexus.url}/nexus/content/repositories/TalendOpenSourceRelease/</url>
<snapshots>
<enabled>false</enabled>
</snapshots>
<releases>
<enabled>true</enabled>
</releases>
</repository>
</distributionManagement>
<dependencies>
<dependency>
<groupId>org.apache.orc</groupId>
<artifactId>orc-core</artifactId>
<version>${apache.orc.version}</version>
</dependency>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-common</artifactId>
<version>${hadoop.version}</version>
<exclusions>
<exclusion>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-server</artifactId>
</exclusion>
<exclusion>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-servlet</artifactId>
</exclusion>
<exclusion>
<artifactId>jersey-server</artifactId>
<groupId>com.sun.jersey</groupId>
</exclusion>
<exclusion>
<artifactId>jersey-servlet</artifactId>
<groupId>com.sun.jersey</groupId>
</exclusion>
<exclusion>
<artifactId>slf4j-log4j12</artifactId>
<groupId>org.slf4j</groupId>
</exclusion>
<exclusion>
<artifactId>log4j</artifactId>
<groupId>log4j</groupId>
</exclusion>
<exclusion>
<artifactId>zookeeper</artifactId>
<groupId>org.apache.zookeeper</groupId>
</exclusion>
<exclusion>
<artifactId>jetty-webapp</artifactId>
<groupId>org.eclipse.jetty</groupId>
</exclusion>
<exclusion>
<artifactId>javax.servlet-api</artifactId>
<groupId>javax.servlet</groupId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-hdfs-client</artifactId>
<version>${hadoop.version}</version>
<exclusions>
<exclusion>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-server</artifactId>
</exclusion>
<exclusion>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-servlet</artifactId>
</exclusion>
<exclusion>
<artifactId>jersey-server</artifactId>
<groupId>com.sun.jersey</groupId>
</exclusion>
<exclusion>
<artifactId>jersey-servlet</artifactId>
<groupId>com.sun.jersey</groupId>
</exclusion>
<exclusion>
<artifactId>slf4j-log4j12</artifactId>
<groupId>org.slf4j</groupId>
</exclusion>
<exclusion>
<artifactId>log4j</artifactId>
<groupId>log4j</groupId>
</exclusion>
<exclusion>
<artifactId>zookeeper</artifactId>
<groupId>org.apache.zookeeper</groupId>
</exclusion>
<exclusion>
<artifactId>jetty-webapp</artifactId>
<groupId>org.eclipse.jetty</groupId>
</exclusion>
<exclusion>
<artifactId>javax.servlet-api</artifactId>
<groupId>javax.servlet</groupId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter</artifactId>
<version>${junit.jupiter.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
<version>${junit.jupiter.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-engine</artifactId>
<version>${junit.jupiter.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-params</artifactId>
<version>${junit.jupiter.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.platform</groupId>
<artifactId>junit-platform-launcher</artifactId>
<version>1.7.2</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.hamcrest</groupId>
<artifactId>hamcrest-library</artifactId>
<version>${hamcrest.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.hamcrest</groupId>
<artifactId>hamcrest-library</artifactId>
<version>${hamcrest.version}</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.0</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
</build>
</project>

View File

@@ -0,0 +1,24 @@
package org.talend.orc;
import org.apache.hadoop.hive.ql.exec.vector.ColumnVector;
import org.apache.hadoop.hive.ql.exec.vector.MapColumnVector;
abstract class ORCCommonUtils {
/**
* Check that the map type for the key is BYTES, LONG or DOUBLE and that the key
* type is LONG, DOUBLE, BYTES, DECIMAL or TIMESTAMP.
*
* @param mapVector a MapColumnVector
* @return true if the key and value types conform to the limits described
* above.
*/
public static boolean checkMapColumnVectorTypes(MapColumnVector mapVector) {
ColumnVector.Type keyType = mapVector.keys.type;
ColumnVector.Type valueType = mapVector.values.type;
return (keyType == ColumnVector.Type.BYTES || keyType == ColumnVector.Type.LONG
|| keyType == ColumnVector.Type.DOUBLE)
&& (valueType == ColumnVector.Type.LONG || valueType == ColumnVector.Type.DOUBLE
|| valueType == ColumnVector.Type.BYTES || valueType == ColumnVector.Type.DECIMAL
|| valueType == ColumnVector.Type.TIMESTAMP);
}
}

View File

@@ -0,0 +1,442 @@
package org.talend.orc;
import java.math.BigDecimal;
import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.commons.lang3.tuple.ImmutablePair;
import org.apache.commons.lang3.tuple.Pair;
import org.apache.hadoop.hive.ql.exec.vector.BytesColumnVector;
import org.apache.hadoop.hive.ql.exec.vector.ColumnVector;
import org.apache.hadoop.hive.ql.exec.vector.DecimalColumnVector;
import org.apache.hadoop.hive.ql.exec.vector.DoubleColumnVector;
import org.apache.hadoop.hive.ql.exec.vector.ListColumnVector;
import org.apache.hadoop.hive.ql.exec.vector.LongColumnVector;
import org.apache.hadoop.hive.ql.exec.vector.MapColumnVector;
import org.apache.hadoop.hive.ql.exec.vector.StructColumnVector;
import org.apache.hadoop.hive.ql.exec.vector.TimestampColumnVector;
import org.apache.hadoop.hive.ql.exec.vector.UnionColumnVector;
import org.apache.hadoop.hive.ql.exec.vector.VectorizedRowBatch;
import org.apache.orc.TypeDescription;
public class ORCReadUtils {
public static Object readColumnByName(VectorizedRowBatch batch, String columnName, TypeDescription schema,
int rowNum) {
List<String> allColumnNames = schema.getFieldNames();
int colIndex = allColumnNames.indexOf(columnName);
if (colIndex < 0 || colIndex > batch.cols.length - 1) {
return null;
} else {
org.apache.hadoop.hive.ql.exec.vector.ColumnVector colVector = batch.cols[colIndex];
TypeDescription fieldType = schema.getChildren().get(colIndex);
int colRow = colVector.isRepeating ? 0 : rowNum;
Object value = readColumn(colVector, fieldType, colRow);
return value;
}
}
public static Object readColumn(ColumnVector colVec, TypeDescription colType, int rowNum) {
Object columnObj = null;
if (!colVec.isNull[rowNum]) {
switch (colVec.type) {
case BYTES:
columnObj = readBytesVal(colVec, colType, rowNum);
break;
case DECIMAL:
columnObj = readDecimalVal(colVec, rowNum);
break;
case DOUBLE:
columnObj = readDoubleVal(colVec, colType, rowNum);
break;
case LIST:
columnObj = readListVal(colVec, colType, rowNum);
break;
case LONG:
columnObj = readLongVal(colVec, colType, rowNum);
break;
case MAP:
columnObj = readMapVal(colVec, colType, rowNum);
break;
case STRUCT:
columnObj = readStructVal(colVec, colType, rowNum);
break;
case TIMESTAMP:
columnObj = readTimestampVal(colVec, colType, rowNum);
break;
case UNION:
columnObj = readUnionVal(colVec, colType, rowNum);
break;
default:
throw new RuntimeException("readColumn: unsupported ORC file column type: " + colVec.type.name());
}
}
return columnObj;
}
private static Object readListVal(ColumnVector colVec, TypeDescription colType, int rowNum) {
Object listValues = null;
if (!colVec.isNull[rowNum]) {
ListColumnVector listVector = (ListColumnVector) colVec;
ColumnVector listChildVector = listVector.child;
TypeDescription childType = colType.getChildren().get(0);
switch (listChildVector.type) {
case BYTES:
listValues = readBytesListValues(listVector, childType, rowNum);
break;
case DECIMAL:
listValues = readDecimalListValues(listVector, rowNum);
break;
case DOUBLE:
listValues = readDoubleListValues(listVector, rowNum);
break;
case LONG:
listValues = readLongListValues(listVector, childType, rowNum);
break;
case TIMESTAMP:
listValues = readTimestampListValues(listVector, childType, rowNum);
break;
default:
throw new RuntimeException(listVector.type.name() + " is not supported for ListColumnVectors");
}
}
return listValues;
}
private static List<Object> readLongListVector(LongColumnVector longVector, TypeDescription childType, int offset,
int numValues) {
List<Object> longList = new ArrayList<>();
for (int i = 0; i < numValues; i++) {
if (!longVector.isNull[offset + i]) {
long longVal = longVector.vector[offset + i];
if (childType.getCategory() == TypeDescription.Category.BOOLEAN) {
Boolean boolVal = longVal == 0 ? Boolean.valueOf(false) : Boolean.valueOf(true);
longList.add(boolVal);
} else if (childType.getCategory() == TypeDescription.Category.INT) {
Integer intObj = (int) longVal;
longList.add(intObj);
} else {
longList.add(longVal);
}
} else {
longList.add(null);
}
}
return longList;
}
private static Object readLongListValues(ListColumnVector listVector, TypeDescription childType, int rowNum) {
int offset = (int) listVector.offsets[rowNum];
int numValues = (int) listVector.lengths[rowNum];
LongColumnVector longVector = (LongColumnVector) listVector.child;
return readLongListVector(longVector, childType, offset, numValues);
}
private static Object readTimestampListVector(TimestampColumnVector timestampVector, TypeDescription childType,
int offset, int numValues) {
List<Object> timestampList = new ArrayList<>();
for (int i = 0; i < numValues; i++) {
if (!timestampVector.isNull[offset + i]) {
int nanos = timestampVector.nanos[offset + i];
long millisec = timestampVector.time[offset + i];
Timestamp timestamp = new Timestamp(millisec);
timestamp.setNanos(nanos);
if (childType.getCategory() == TypeDescription.Category.DATE) {
Date date = new Date(timestamp.getTime());
timestampList.add(date);
} else {
timestampList.add(timestamp);
}
} else {
timestampList.add(null);
}
}
return timestampList;
}
/**
* Read either Timestamp or Date values, depending on the definition in the
* schema.
*/
private static Object readTimestampListValues(ListColumnVector listVector, TypeDescription childType, int rowNum) {
int offset = (int) listVector.offsets[rowNum];
int numValues = (int) listVector.lengths[rowNum];
TimestampColumnVector timestampVec = (TimestampColumnVector) listVector.child;
return readTimestampListVector(timestampVec, childType, offset, numValues);
}
private static Object readDecimalListVector(DecimalColumnVector decimalVector, int offset, int numValues,
int batchRowNum) {
List<Object> decimalList = new ArrayList<>();
for (int i = 0; i < numValues; i++) {
if (!decimalVector.isNull[offset + i]) {
BigDecimal bigDecimal = decimalVector.vector[batchRowNum].getHiveDecimal().bigDecimalValue();
decimalList.add(bigDecimal);
} else {
decimalList.add(null);
}
}
return decimalList;
}
private static Object readDecimalListValues(ListColumnVector listVector, int rowNum) {
int offset = (int) listVector.offsets[rowNum];
int numValues = (int) listVector.lengths[rowNum];
DecimalColumnVector decimalVec = (DecimalColumnVector) listVector.child;
return readDecimalListVector(decimalVec, offset, numValues, rowNum);
}
private static Object readBytesListVector(BytesColumnVector bytesVec, TypeDescription childType, int offset,
int numValues) {
List<Object> bytesValList = new ArrayList<>();
for (int i = 0; i < numValues; i++) {
if (!bytesVec.isNull[offset + i]) {
byte[] byteArray = bytesVec.vector[offset + i];
int vecLen = bytesVec.length[offset + i];
int vecStart = bytesVec.start[offset + i];
byte[] vecCopy = Arrays.copyOfRange(byteArray, vecStart, vecStart + vecLen);
if (childType.getCategory() == TypeDescription.Category.STRING) {
String str = new String(vecCopy);
bytesValList.add(str);
} else {
bytesValList.add(vecCopy);
}
} else {
bytesValList.add(null);
}
}
return bytesValList;
}
private static Object readBytesListValues(ListColumnVector listVector, TypeDescription childType, int rowNum) {
int offset = (int) listVector.offsets[rowNum];
int numValues = (int) listVector.lengths[rowNum];
BytesColumnVector bytesVec = (BytesColumnVector) listVector.child;
return readBytesListVector(bytesVec, childType, offset, numValues);
}
private static Object readDoubleListVector(DoubleColumnVector doubleVec, int offset, int numValues) {
List<Object> doubleList = new ArrayList<>();
for (int i = 0; i < numValues; i++) {
if (!doubleVec.isNull[offset + i]) {
Double doubleVal = doubleVec.vector[offset + i];
doubleList.add(doubleVal);
} else {
doubleList.add(null);
}
}
return doubleList;
}
private static Object readDoubleListValues(ListColumnVector listVector, int rowNum) {
int offset = (int) listVector.offsets[rowNum];
int numValues = (int) listVector.lengths[rowNum];
DoubleColumnVector doubleVec = (DoubleColumnVector) listVector.child;
return readDoubleListVector(doubleVec, offset, numValues);
}
@SuppressWarnings("unchecked")
private static List<Object> readMapVector(ColumnVector mapVector, TypeDescription childType, int offset,
int numValues, int rowNum) {
List<Object> mapList = null;
switch (mapVector.type) {
case BYTES:
mapList = (List<Object>) readBytesListVector((BytesColumnVector) mapVector, childType, offset, numValues);
break;
case DECIMAL:
mapList = (List<Object>) readDecimalListVector((DecimalColumnVector) mapVector, offset, numValues, rowNum);
;
break;
case DOUBLE:
mapList = (List<Object>) readDoubleListVector((DoubleColumnVector) mapVector, offset, numValues);
break;
case LONG:
mapList = readLongListVector((LongColumnVector) mapVector, childType, offset, numValues);
break;
case TIMESTAMP:
mapList = (List<Object>) readTimestampListVector((TimestampColumnVector) mapVector, childType, offset,
numValues);
break;
default:
throw new RuntimeException(mapVector.type.name() + " is not supported for MapColumnVectors");
}
return mapList;
}
/**
* <p>
* Read a Map column value (e.g., a set of keys and their associated values).
* </p>
* <p>
* The Map key and value types are the first and second children in the children
* TypeDescription List. From the TypeDescription source:
* </p>
*
* <pre>
* result.children.add(keyType);
* result.children.add(valueType);
* </pre>
*/
private static Object readMapVal(ColumnVector colVec, TypeDescription colType, int rowNum) {
Map<Object, Object> objMap = new HashMap<>();
MapColumnVector mapVector = (MapColumnVector) colVec;
if (ORCCommonUtils.checkMapColumnVectorTypes(mapVector)) {
int mapSize = (int) mapVector.lengths[rowNum];
int offset = (int) mapVector.offsets[rowNum];
List<TypeDescription> mapTypes = colType.getChildren();
TypeDescription keyType = mapTypes.get(0);
TypeDescription valueType = mapTypes.get(1);
ColumnVector keyChild = mapVector.keys;
ColumnVector valueChild = mapVector.values;
List<Object> keyList = readMapVector(keyChild, keyType, offset, mapSize, rowNum);
List<Object> valueList = readMapVector(valueChild, valueType, offset, mapSize, rowNum);
assert (keyList.size() == valueList.size());
for (int i = 0; i < keyList.size(); i++) {
objMap.put(keyList.get(i), valueList.get(i));
}
} else {
throw new RuntimeException("readMapVal: unsupported key or value types");
}
return objMap;
}
private static Object readUnionVal(ColumnVector colVec, TypeDescription colType, int rowNum) {
Pair<TypeDescription, Object> columnValuePair;
UnionColumnVector unionVector = (UnionColumnVector) colVec;
int tagVal = unionVector.tags[rowNum];
List<TypeDescription> unionFieldTypes = colType.getChildren();
if (tagVal < unionFieldTypes.size()) {
TypeDescription fieldType = unionFieldTypes.get(tagVal);
if (tagVal < unionVector.fields.length) {
ColumnVector fieldVector = unionVector.fields[tagVal];
int colRow = fieldVector.isRepeating ? 0 : rowNum;
Object unionValue = readColumn(fieldVector, fieldType, colRow);
columnValuePair = new ImmutablePair<>(fieldType, unionValue);
} else {
throw new RuntimeException("readUnionVal: union tag value out of range for union column vectors");
}
} else {
throw new RuntimeException("readUnionVal: union tag value out of range for union types");
}
return columnValuePair;
}
private static Object readStructVal(ColumnVector colVec, TypeDescription colType, int rowNum) {
Object structObj = null;
if (!colVec.isNull[rowNum]) {
List<Object> fieldValList = new ArrayList<>();
StructColumnVector structVector = (StructColumnVector) colVec;
ColumnVector[] fieldVec = structVector.fields;
List<TypeDescription> fieldTypes = colType.getChildren();
assert (fieldVec.length == fieldTypes.size());
for (int i = 0; i < fieldVec.length; i++) {
int colRow = fieldVec[i].isRepeating ? 0 : rowNum;
Object fieldObj = readColumn(fieldVec[i], fieldTypes.get(i), colRow);
fieldValList.add(fieldObj);
}
structObj = fieldValList;
}
return structObj;
}
private static Object readTimestampVal(ColumnVector colVec, TypeDescription colType, int rowNum) {
Object timestampVal = null;
if (!colVec.isNull[rowNum]) {
TimestampColumnVector timestampVec = (TimestampColumnVector) colVec;
int nanos = timestampVec.nanos[rowNum];
long millisec = timestampVec.time[rowNum];
Timestamp timestamp = new Timestamp(millisec);
timestamp.setNanos(nanos);
timestampVal = timestamp;
if (colType.getCategory() == TypeDescription.Category.DATE) {
timestampVal = new Date(timestamp.getTime());
}
}
return timestampVal;
}
private static Object readDecimalVal(ColumnVector colVec, int rowNum) {
Object decimalObj = null;
if (!colVec.isNull[rowNum]) {
DecimalColumnVector decimalVec = (DecimalColumnVector) colVec;
decimalObj = decimalVec.vector[rowNum].getHiveDecimal().bigDecimalValue().setScale(decimalVec.scale);
}
return decimalObj;
}
/**
* Read a Long or Boolean value
*
* @param colVec the column vector
* @param colType the type of the column
* @param rowNum the ORC file row number.
* @return a Boolean or Long object
*/
private static Object readLongVal(ColumnVector colVec, TypeDescription colType, int rowNum) {
Object colObj = null;
if (!colVec.isNull[rowNum]) {
LongColumnVector longVec = (LongColumnVector) colVec;
Long longVal = longVec.vector[rowNum];
colObj = longVal;
if (colType.getCategory() == TypeDescription.Category.INT) {
colObj = longVal.intValue();
} else if (colType.getCategory() == TypeDescription.Category.BOOLEAN) {
colObj = longVal == 1 ? Boolean.TRUE : Boolean.FALSE;
} else if (colType.getCategory() == TypeDescription.Category.DATE) {
colObj = new Date(longVal * 86400000);
} else if (colType.getCategory() == TypeDescription.Category.BYTE) {
colObj = longVal.byteValue();
} else if (colType.getCategory() == TypeDescription.Category.SHORT) {
colObj = longVal.shortValue();
}
}
return colObj;
}
/**
* Read a Double or Float value
*
* @param colVec the column vector
* @param colType the type of the column
* @param rowNum the ORC file row number.
* @return a Double or Float object
*/
private static Object readDoubleVal(ColumnVector colVec, TypeDescription colType, int rowNum) {
Object colObj = null;
if (!colVec.isNull[rowNum]) {
DoubleColumnVector longVec = (DoubleColumnVector) colVec;
Double doubleVal = longVec.vector[rowNum];
colObj = doubleVal;
if (colType.getCategory() == TypeDescription.Category.FLOAT) {
colObj = doubleVal.floatValue();
}
}
return colObj;
}
private static Object readBytesVal(ColumnVector colVec, TypeDescription colType, int rowNum) {
Object bytesObj = null;
if (!colVec.isNull[rowNum]) {
BytesColumnVector bytesVector = (BytesColumnVector) colVec;
byte[] columnBytes = bytesVector.vector[rowNum];
int vecLen = bytesVector.length[rowNum];
int vecStart = bytesVector.start[rowNum];
byte[] vecCopy = Arrays.copyOfRange(columnBytes, vecStart, vecStart + vecLen);
if (colType.getCategory() == TypeDescription.Category.STRING ||colType.getCategory() == TypeDescription.Category.VARCHAR) {
bytesObj = new String(vecCopy);
} else if (colType.getCategory() == TypeDescription.Category.CHAR) {
String charStr = new String(vecCopy);
bytesObj = charStr;
} else {
bytesObj = vecCopy;
}
}
return bytesObj;
}
}

View File

@@ -0,0 +1,884 @@
package org.talend.orc;
import java.math.BigDecimal;
import java.math.BigInteger;
import java.nio.charset.StandardCharsets;
import java.sql.Timestamp;
import java.time.LocalDate;
import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.TimeZone;
import java.util.function.Predicate;
import java.util.stream.Collectors;
import org.apache.commons.lang3.tuple.Pair;
import org.apache.hadoop.hive.common.type.HiveDecimal;
import org.apache.hadoop.hive.ql.exec.vector.BytesColumnVector;
import org.apache.hadoop.hive.ql.exec.vector.ColumnVector;
import org.apache.hadoop.hive.ql.exec.vector.DateColumnVector;
import org.apache.hadoop.hive.ql.exec.vector.DecimalColumnVector;
import org.apache.hadoop.hive.ql.exec.vector.DoubleColumnVector;
import org.apache.hadoop.hive.ql.exec.vector.ListColumnVector;
import org.apache.hadoop.hive.ql.exec.vector.LongColumnVector;
import org.apache.hadoop.hive.ql.exec.vector.MapColumnVector;
import org.apache.hadoop.hive.ql.exec.vector.MultiValuedColumnVector;
import org.apache.hadoop.hive.ql.exec.vector.StructColumnVector;
import org.apache.hadoop.hive.ql.exec.vector.TimestampColumnVector;
import org.apache.hadoop.hive.ql.exec.vector.UnionColumnVector;
import org.apache.hadoop.hive.ql.exec.vector.VectorizedRowBatch;
import org.apache.hadoop.hive.serde2.io.HiveDecimalWritable;
import org.apache.orc.TypeDescription;
public class ORCWriteUtils {
private static final Predicate<Object> isInteger = Integer.class::isInstance;
private static final Predicate<Object> isLong = Long.class::isInstance;
private static final Predicate<Object> isDouble = Double.class::isInstance;
private static final Predicate<Object> isString = String.class::isInstance;
private static final Predicate<Object> isBigDecimal = BigDecimal.class::isInstance;
private static final Predicate<Object> isDate = Date.class::isInstance;
public static void setColumnByName(VectorizedRowBatch batch, String columnName, TypeDescription schema,
Object colVal, int rowNum) {
List<String> allColumnNames = schema.getFieldNames();
int colIndex = allColumnNames.indexOf(columnName);
if (colIndex < 0 || colIndex > batch.cols.length - 1) {
return;
} else {
org.apache.hadoop.hive.ql.exec.vector.ColumnVector colVector = batch.cols[colIndex];
TypeDescription fieldType = schema.getChildren().get(colIndex);
setColumn(colVal, fieldType, columnName, colVector, rowNum);
}
}
/**
* Add a column value that is a String or a byte[] array.
*
* @param colVal the column value object
* @param fieldName the name of the field (for error reporting)
* @param bytesColVector the BytesColumnVector that the byte array will be added
* to.
* @param rowNum the ORC file row number
*/
private static void setByteColumnVector(Object colVal, String fieldName, BytesColumnVector bytesColVector,
int rowNum) {
if (colVal instanceof byte[] || colVal instanceof String || colVal instanceof Character) {
byte[] byteVec;
if (colVal instanceof String) {
String strVal = (String) colVal;
byteVec = strVal.getBytes(StandardCharsets.UTF_8);
} else if (colVal instanceof Character) {
String strVal = String.valueOf((char) colVal);
byteVec = strVal.getBytes(StandardCharsets.UTF_8);
} else {
byteVec = (byte[]) colVal;
}
bytesColVector.setRef(rowNum, byteVec, 0, byteVec.length);
} else {
throw new RuntimeException(orcExceptionMsg("byte[] or String type expected for field ", fieldName, rowNum));
}
}
private static void setDecimalVector(Object colVal, String fieldName, DecimalColumnVector decimalColVector,
int rowNum) {
if (colVal instanceof BigDecimal) {
BigDecimal bigDecimal = (BigDecimal) colVal;
decimalColVector.precision = (short) bigDecimal.precision();
decimalColVector.scale = (short) bigDecimal.scale();
HiveDecimal hiveDecimal = HiveDecimal.create(bigDecimal);
HiveDecimalWritable writeableDecimal = new HiveDecimalWritable(hiveDecimal);
decimalColVector.vector[rowNum] = writeableDecimal;
} else {
throw new RuntimeException(orcExceptionMsg("BigDecimal type expected for field ", fieldName, rowNum));
}
}
private static void setDoubleVector(Object colVal, String fieldName, DoubleColumnVector doubleVector, int rowNum) {
if (colVal instanceof Double) {
doubleVector.vector[rowNum] = (Double) colVal;
} else if (colVal instanceof Float) {
Float fltVal = (Float) colVal;
doubleVector.vector[rowNum] = fltVal.doubleValue();
} else if (colVal instanceof BigDecimal) {
doubleVector.vector[rowNum] = ((BigDecimal) colVal).doubleValue();
} else {
throw new RuntimeException(orcExceptionMsg("Double/Float/BigDecimal type expected for field ", fieldName, rowNum));
}
}
/**
* Initialize a LongColumnVector value.
*
* @param colVal an object of type Boolean, Integer, Long or BigInteger.
* @param fieldName the field name in the schema
* @param longVector the LongColumnVector
* @param rowNum the row number
*/
private static void setLongColumnVector(Object colVal, String fieldName, LongColumnVector longVector, int rowNum) {
if (colVal instanceof Boolean) {
Boolean bool = (Boolean) colVal;
longVector.vector[rowNum] = (bool.equals(Boolean.TRUE)) ? Long.valueOf(1) : Long.valueOf(0);
} else if (colVal instanceof Byte) {
longVector.vector[rowNum] = (Byte) colVal;
} else if (colVal instanceof Short) {
longVector.vector[rowNum] = (Short) colVal;
} else if (colVal instanceof Integer) {
longVector.vector[rowNum] = (Integer) colVal;
} else if (colVal instanceof Long) {
longVector.vector[rowNum] = (Long) colVal;
} else if (colVal instanceof BigInteger) {
BigInteger bigInt = (BigInteger) colVal;
longVector.vector[rowNum] = bigInt.longValue();
} else {
throw new RuntimeException(orcExceptionMsg("Long or Integer type expected for field ", fieldName, rowNum));
}
}
private static void setDateColumnVector(Object colVal, String fieldName, DateColumnVector dateVector, int rowNum) {
if (colVal instanceof Date) {
Date dateVal = (Date) colVal;
Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("UTC"));
cal.setTime(dateVal);
long epochDay = LocalDate.of(cal.get(Calendar.YEAR), cal.get(Calendar.MONTH)+1, cal.get(Calendar.DAY_OF_MONTH)).toEpochDay();
dateVector.vector[rowNum] = epochDay;
} else {
throw new RuntimeException(orcExceptionMsg("Date type expected for field ", fieldName, rowNum));
}
}
private static void setTimestampVector(Object colVal, String fieldName, TimestampColumnVector timestampVector,
int rowNum) {
if (colVal instanceof Timestamp) {
timestampVector.set(rowNum, (Timestamp) colVal);
} else if (colVal instanceof Date) {
Date date = (Date) colVal;
Timestamp ts = new Timestamp(date.getTime());
timestampVector.set(rowNum, ts);
} else {
throw new RuntimeException(
orcExceptionMsg("Date or Timestamp type expected for field ", fieldName, rowNum));
}
}
/**
* <p>
* A union column can contain column vectors of more than one type. In the
* TypeDescription createUnion() is called to create a TypeDescription for a
* union column. The union values are added by calling the addUnionChild()
* method on this TypeDescription object.
* </p>
* <p>
* The class fields in the UnionColumnVector are shown below:
* </p>
*
* <pre>
* public class UnionColumnVector extends ColumnVector {
* public int[] tags;
* public ColumnVector[] fields;
* </pre>
* <p>
* A tag value (
*
* <pre>
* tags[rowNum]
* </pre>
*
* ) is associated with each field value (
*
* <pre>
* fields[rowNum])
* </pre>
*
* . The tag value serves as an index for the field type. For example, if there
* are three field types defined:
* <ol>
* <li>Long</li>
* <li>Double</li>
* <li>String</li>
* </ol>
* The tag will have a value in the range of [0..2]
* </p>
* <p>
* The tag value is needed to initialize the ColumnVector since without the tag
* there is no way to know which union child should be initialized.
* </p>
*
* @param colVal a Pair&lt;ColumnVector.Type, Object&gt; object with the
* union type and the object that will be used to initialize
* the union child ColumnVector.
* @param fieldName The name of the union field
* @param unionVector The UnionColumnVector to be initialized
* @param rowNum the ORC file row number.
*/
private static void setUnionColumnVector(Object colVal, TypeDescription unionTypeDesc, String fieldName,
UnionColumnVector unionVector, int rowNum) {
@SuppressWarnings("unchecked")
Pair<TypeDescription, Object> unionValuePair = (Pair<TypeDescription, Object>) colVal;
TypeDescription unionValType = unionValuePair.getLeft();
List<TypeDescription> unionChildrenTypes = unionTypeDesc.getChildren();
Object unionColVal = unionValuePair.getRight();
boolean found = false;
for (int i = 0; i < unionChildrenTypes.size(); i++) {
if (unionChildrenTypes.get(i).getCategory() == unionValType.getCategory()) {
unionVector.tags[rowNum] = i;
ColumnVector unionFieldVec = unionVector.fields[i];
setColumn(unionColVal, unionChildrenTypes.get(i), fieldName, unionFieldVec, rowNum);
found = true;
break;
}
}
if (!found) {
throw new RuntimeException("writeUnionColumnVector: Bad type enumeration "
+ unionValType.getCategory().getName() + " passed for field " + fieldName);
}
}
private static void setLongListVector(List<Object> longValList, LongColumnVector longVector, int offset,
String fieldName) {
for (int i = 0; i < longValList.size(); i++) {
Object objVal = longValList.get(i);
if (objVal != null) {
if (objVal instanceof Integer) {
longVector.vector[offset + i] = (Integer) objVal;
} else if (objVal instanceof Long) {
longVector.vector[offset + i] = (Long) objVal;
} else {
throw new RuntimeException("List<Integer> expected for field " + fieldName);
}
} else {
longVector.isNull[offset + i] = true;
longVector.noNulls = false;
}
}
}
private static void setLongList(List<Object> colValList, ListColumnVector listVector, String fieldName,
int rowNum) {
LongColumnVector longVector = (LongColumnVector) listVector.child;
int offset = (int) listVector.offsets[rowNum];
setLongListVector(colValList, longVector, offset, fieldName);
}
private static void setDoubleListVector(List<Object> doubleValList, DoubleColumnVector doubleVector, int offset,
String fieldName) {
for (int i = 0; i < doubleValList.size(); i++) {
Object objVal = doubleValList.get(i);
if (objVal != null) {
if (objVal instanceof Double) {
doubleVector.vector[offset + i] = (Double) objVal;
} else if (objVal instanceof Float) {
Float fltVal = (Float) objVal;
doubleVector.vector[offset + i] = fltVal.doubleValue();
} else {
throw new RuntimeException("List<Double> expected for field " + fieldName);
}
} else {
doubleVector.isNull[offset + i] = true;
doubleVector.noNulls = false;
}
}
}
private static void setDoubleList(List<Object> doubleValList, ListColumnVector listVector, String fieldName,
int rowNum) {
DoubleColumnVector vecChild = (DoubleColumnVector) listVector.child;
int offset = (int) listVector.offsets[rowNum];
setDoubleListVector(doubleValList, vecChild, offset, fieldName);
}
private static void setTimestampListVector(List<Object> valueList, TimestampColumnVector timestampVector,
int offset, String fieldName) {
for (int i = 0; i < valueList.size(); i++) {
Object objVal = valueList.get(i);
if (objVal != null) {
if (objVal instanceof Date) {
Timestamp ts = (objVal instanceof Timestamp) ? (Timestamp) objVal
: new Timestamp(((Date) objVal).getTime());
timestampVector.time[offset + i] = ts.getTime();
timestampVector.nanos[offset + i] = ts.getNanos();
} else {
throw new RuntimeException("List<Date> or List<Timestamp> expected for field " + fieldName);
}
} else {
timestampVector.isNull[offset + i] = true;
timestampVector.noNulls = false;
}
}
}
/**
* Initialize the vector values for a ListColumnVector of Date or Timestamp
* values.
*
* @param colValList a list of Timestamp or java.util.Date objects
* @param listVector A ListColumnVector with a child that will contain the
* vector values.
* @param fieldName The field name in the schema for this ORC element
* @param rowNum The ORC file row number
*/
private static void setTimestampList(List<Object> colValList, ListColumnVector listVector, String fieldName,
int rowNum) {
TimestampColumnVector timestampVector = (TimestampColumnVector) listVector.child;
int offset = (int) listVector.offsets[rowNum];
setTimestampListVector(colValList, timestampVector, offset, fieldName);
}
private static void setDecimalListVector(List<Object> decimalValList, DecimalColumnVector decimalVector, int offset,
String fieldName) {
for (int i = 0; i < decimalValList.size(); i++) {
Object objVal = decimalValList.get(i);
if (objVal != null) {
if (objVal instanceof BigDecimal) {
BigDecimal bigDecimal = (BigDecimal) objVal;
decimalVector.precision = (short) bigDecimal.precision();
decimalVector.scale = (short) bigDecimal.scale();
HiveDecimal hiveDecimal = HiveDecimal.create(bigDecimal);
HiveDecimalWritable writeableDecimal = new HiveDecimalWritable(hiveDecimal);
decimalVector.vector[offset + i] = writeableDecimal;
} else {
throw new RuntimeException("BigDecimal value expected for field " + fieldName);
}
} else {
decimalVector.isNull[offset + i] = true;
decimalVector.noNulls = false;
}
}
}
/**
*
* @param colValList a list of BigDecimal values to initialize the
* ListColumnVector child
* @param listVector the ListColumnVector with the DecimalColumnVector child
* @param fieldName the field name for the ListColumnVector/DecimalColumnVector
* column
* @param rowNum the ORC file row number
*/
private static void setDecimalList(List<Object> colValList, ListColumnVector listVector, String fieldName,
int rowNum) {
DecimalColumnVector decimalVector = (DecimalColumnVector) listVector.child;
int offset = (int) listVector.offsets[rowNum];
setDecimalListVector(colValList, decimalVector, offset, fieldName);
}
private static void setBytesListVector(List<Object> valueList, BytesColumnVector bytesVector, int offset,
String fieldName) {
for (int i = 0; i < valueList.size(); i++) {
Object objVal = valueList.get(i);
if (objVal != null) {
if (objVal instanceof byte[] || objVal instanceof String) {
byte[] byteVec = (objVal instanceof byte[]) ? (byte[]) objVal
: ((String) objVal).getBytes(StandardCharsets.UTF_8);
bytesVector.vector[offset + i] = byteVec;
bytesVector.length[offset + i] = byteVec.length;
} else {
throw new RuntimeException("String or byte[] value expected for field " + fieldName);
}
} else {
bytesVector.isNull[offset + i] = true;
bytesVector.length[offset + i] = 0;
bytesVector.noNulls = false;
}
}
}
/**
* Initialize a ListColumnVector with a BytesColumnVector child with byte[]
* values.
*
* @param colValList a list of byte[] or String values
* @param listVector the parent ListColumnVector
* @param fieldName the field name for the ORC column that contains the
* ListColumnVector
* @param rowNum the ORC file row number
*/
private static void setBytesList(List<Object> colValList, ListColumnVector listVector, String fieldName,
int rowNum) {
BytesColumnVector bytesVector = (BytesColumnVector) listVector.child;
int offset = (int) listVector.offsets[rowNum];
setBytesListVector(colValList, bytesVector, offset, fieldName);
}
private static void setMultiValuedVectorParameters(MultiValuedColumnVector multiVector, int vecLength, int rowNum) {
multiVector.lengths[rowNum] = vecLength;
if (rowNum > 0) {
multiVector.offsets[rowNum] = multiVector.lengths[rowNum - 1] + multiVector.offsets[rowNum - 1];
}
}
private static void setListVectorParameters(ListColumnVector listVec, int maxBatchSize, int vecLength, int rowNum) {
setMultiValuedVectorParameters(listVec, vecLength, rowNum);
listVec.child.ensureSize(maxBatchSize * vecLength, true);
}
/**
* Initialize a ListColumnVector. The child of the vector is limited to the
* scalar types long, double, String (or byte[])), BigDecimal or Date (or
* Timestamp).
*
* @param colVal a List&lt;Object&gt;
* @param typeDesc the schema definition for this column
* @param fieldName the column field name
* @param listVector the ListColumnVector parent of the vector type child
* @param rowNum the ORC file row number.
*/
private static void setListColumnVector(Object colVal, TypeDescription typeDesc, String fieldName,
ListColumnVector listVector, int rowNum) {
if (colVal instanceof List) {
@SuppressWarnings("unchecked")
List<Object> objValList = (List<Object>) colVal;
final int maxBatchSize = typeDesc.createRowBatch().getMaxSize();
setListVectorParameters(listVector, maxBatchSize, objValList.size(), rowNum);
ColumnVector.Type childType = listVector.child.type;
switch (childType) {
case LONG:
setLongList(objValList, listVector, fieldName, rowNum);
break;
case DOUBLE:
setDoubleList(objValList, listVector, fieldName, rowNum);
break;
case BYTES:
setBytesList(objValList, listVector, fieldName, rowNum);
break;
case DECIMAL:
setDecimalList(objValList, listVector, fieldName, rowNum);
break;
case TIMESTAMP:
setTimestampList(objValList, listVector, fieldName, rowNum);
break;
default:
throw new RuntimeException(childType.name() + " is not supported for ListColumnVector columns");
}
} else {
throw new RuntimeException("List value expected for field " + fieldName);
}
}
/**
* Test that all elements in an Object list are of a particular type
*
* @param objList the Object list that is tested
* @param typeTest a function that compares against a particular Object type
* @return true if all elements are of the test type, false if one or more
* elements are not of that type.
*/
private static boolean isListType(List<Object> objList, Predicate<Object> typeTest) {
return !objList.stream().map(typeTest::test).collect(Collectors.toList()).contains(false);
}
/**
* Initialize a ColumnVector with Long values.
*
* @param valueList a list of Long values
* @param colVector the LongColumnVector that will be initialized with the Long
* values
* @param offset the offset[rownum] value for the array
* @param fieldName the field name for the Map column
*/
private static void setLongMapValues(List<Object> valueList, ColumnVector colVector, int offset, String fieldName) {
if (isListType(valueList, isLong) || isListType(valueList, isInteger)) {
LongColumnVector longVector = (LongColumnVector) colVector;
setLongListVector(valueList, longVector, offset, fieldName);
} else {
throw new RuntimeException("For field " + fieldName + " Long values expected");
}
}
/**
* Initialize a ColumnVector with Double values.
*
* @param valueList a list of Double values
* @param colVector the DoubleColumnVector that will be initialized with the
* Double values
* @param offset the offset[rownum] value for the array
* @param fieldName the field name for the Map column
*/
private static void setDoubleMapValues(List<Object> valueList, ColumnVector colVector, int offset,
String fieldName) {
if (isListType(valueList, isDouble)) {
DoubleColumnVector doubleVector = (DoubleColumnVector) colVector;
setDoubleListVector(valueList, doubleVector, offset, fieldName);
} else {
throw new RuntimeException("For field " + fieldName + " Double values expected");
}
}
/**
* Initialize a ColumnVector with String values.
*
* @param valueList a list of String values
* @param colVector the BytesColumnVector that will be initialized with the
* String values
* @param offset the offset[rownum] value for the array
* @param fieldName the field name for the Map column
*/
private static void setStringMapValues(List<Object> valueList, ColumnVector colVector, int offset,
String fieldName) {
if (isListType(valueList, isString)) {
BytesColumnVector doubleVector = (BytesColumnVector) colVector;
setBytesListVector(valueList, doubleVector, offset, fieldName);
} else {
throw new RuntimeException("For field " + fieldName + " String values expected");
}
}
/**
* Initialize a ColumnVector with BigDeciml values.
*
* @param valueList a list of BigDecimal
* @param colVector the DecimalColumnVector that will be initialized with the
* BigDecimal values
* @param offset the offset[rownum] value for the array
* @param fieldName the field name for the Map column
*/
private static void setDecimalMapValues(List<Object> valueList, ColumnVector colVector, int offset,
String fieldName) {
if (isListType(valueList, isBigDecimal)) {
DecimalColumnVector decimalVector = (DecimalColumnVector) colVector;
setDecimalListVector(valueList, decimalVector, offset, fieldName);
} else {
throw new RuntimeException("For field " + fieldName + " BigDecimal values expected");
}
}
/**
* Initialize a ColumnVector with timestamp values.
*
* @param valueList a list of Date (or Timestamp) objects
* @param colVector the TimestampColumnVector that will be initialized with the
* Timestamp values
* @param offset the offset[rownum] value for the array
* @param fieldName the field name for the Map column
*/
private static void setTimestampMapValues(List<Object> valueList, ColumnVector colVector, int offset,
String fieldName) {
if (isListType(valueList, isDate)) {
TimestampColumnVector timestampVector = (TimestampColumnVector) colVector;
setTimestampListVector(valueList, timestampVector, offset, fieldName);
} else {
throw new RuntimeException("For field " + fieldName + " Date or Timestamp values expected");
}
}
/**
* Set the MapColumn value array vector. The type for this vector is limited to
* long, double, bytes (String), Decimal and Timestamp.
*
* @param valueList a list of Objects to initialize the Map column value array.
* @param colVector the column array vector to be initialized with the map
* values.
* @param offset the offset[rowNum] from the parent MapColumnVector
* @param fieldName the name of the field for the MapColumnVector.
*/
private static void setMapValueVector(List<Object> valueList, ColumnVector colVector, int offset,
String fieldName) {
switch (colVector.type) {
case LONG:
setLongMapValues(valueList, colVector, offset, fieldName);
break;
case DOUBLE:
setDoubleMapValues(valueList, colVector, offset, fieldName);
break;
case BYTES:
setStringMapValues(valueList, colVector, offset, fieldName);
break;
case DECIMAL:
setDecimalMapValues(valueList, colVector, offset, fieldName);
break;
case TIMESTAMP:
setTimestampMapValues(valueList, colVector, offset, fieldName);
break;
default:
throw new RuntimeException(
"For field " + fieldName + " values must be long, double, String, BigDecimal or Timestamp");
}
}
/**
* <p>
* Initialize a MapColumnVector with Long key values.
* </p>
*
* @param mapSet a set of {key, value} pairs, where the key values are Long
* objects. The elements of this set will be used to initialize
* the key and value array column vectors that are children of
* the MapColumnVector.
* @param mapVector the MapColumnVector. This ColumnVector has children for the
* key and value arrays.
* @param fieldName the field name for the map column vector column.
* @param rowNum the ORC file row number.
*/
private static void setLongKeyMap(Set<Map.Entry<Object, Object>> mapSet, MapColumnVector mapVector,
String fieldName, int rowNum) {
List<Object> keyValueList = mapSet.stream().map(Map.Entry::getKey).collect(Collectors.toList());
if (isListType(keyValueList, isLong)) {
LongColumnVector longVector = (LongColumnVector) mapVector.keys;
int offset = (int) mapVector.offsets[rowNum];
// set the key vector
setLongListVector(keyValueList, longVector, offset, fieldName);
// set the value vector
ColumnVector valueVector = mapVector.values;
List<Object> valueList = mapSet.stream().map(Map.Entry::getValue).collect(Collectors.toList());
setMapValueVector(valueList, valueVector, offset, fieldName);
} else {
throw new RuntimeException("For field " + fieldName + " Long key type expected to match schema");
}
}
/**
* <p>
* Initialize a MapColumnVector with Double key values.
* </p>
*
* @param mapSet a set of {key, value} pairs, where the key values are Double
* objects. The elements of this set will be used to initialize
* the key and value array column vectors that are children of
* the MapColumnVector.
* @param mapVector the MapColumnVector. This ColumnVector has children for the
* key and value arrays.
* @param fieldName the field name for the map column vector column.
* @param rowNum the ORC file row number.
*/
private static void setDoubleKeyMap(Set<Map.Entry<Object, Object>> mapSet, MapColumnVector mapVector,
String fieldName, int rowNum) {
List<Object> keyValueList = mapSet.stream().map(Map.Entry::getKey).collect(Collectors.toList());
if (isListType(keyValueList, isDouble)) {
DoubleColumnVector doubleVector = (DoubleColumnVector) mapVector.keys;
int offset = (int) mapVector.offsets[rowNum];
// set the key vector
setDoubleListVector(keyValueList, doubleVector, offset, fieldName);
// set the value vector
ColumnVector valueVector = mapVector.values;
List<Object> valueList = mapSet.stream().map(Map.Entry::getValue).collect(Collectors.toList());
setMapValueVector(valueList, valueVector, offset, fieldName);
} else {
throw new RuntimeException("For field " + fieldName + " Long key type expected to match schema");
}
}
/**
* <p>
* Initialize a MapColumnVector with String key values.
* </p>
*
* @param mapSet a set of {key, value} pairs, where the key values are String
* objects. The elements of this set will be used to initialize
* the key and value array column vectors that are children of
* the MapColumnVector.
* @param mapVector the MapColumnVector. This ColumnVector has children for the
* key and value arrays.
* @param fieldName the field name for the map column vector column.
* @param rowNum the ORC file row number.
*/
private static void setStringKeyMap(Set<Map.Entry<Object, Object>> mapSet, MapColumnVector mapVector,
String fieldName, int rowNum) {
List<Object> keyValueList = mapSet.stream().map(Map.Entry::getKey).collect(Collectors.toList());
if (isListType(keyValueList, isString)) {
BytesColumnVector byteVector = (BytesColumnVector) mapVector.keys;
int offset = (int) mapVector.offsets[rowNum];
// set the key array vector
setBytesListVector(keyValueList, byteVector, offset, fieldName);
// set the value array vector
ColumnVector valueVector = mapVector.values;
List<Object> valueList = mapSet.stream().map(Map.Entry::getValue).collect(Collectors.toList());
setMapValueVector(valueList, valueVector, offset, fieldName);
} else {
throw new RuntimeException("For field " + fieldName + " Long key type expected to match schema");
}
}
private static void setMapVectorParameters(MapColumnVector mapVec, int maxBatchSize, int vecLength, int rowNum) {
setMultiValuedVectorParameters(mapVec, vecLength, rowNum);
mapVec.keys.ensureSize(maxBatchSize + vecLength, true);
mapVec.values.ensureSize(maxBatchSize + vecLength, true);
}
/**
* <p>
* Set the Map key and value elements for a MapColumnVector
* </p>
* <p>
* A MapColumnVector has a single ColumnVector type for each of the map key and
* map values. For example, the ColumnVector for the key values could be a
* BytesColumnVector (a set of String keys). The values could be a
* LongColumnVector.
* </p>
* <p>
* In the documentation there is no restriction given for the map key type. This
* code limits the key types to scalar values: string, long, double.
* </p>
* </p>
* <p>
* The documentation does not limit the map value types. This code limites the
* map values to the same types that are supported for ListColumnVectors: long,
* double, bytes (String), Decimal and Timestamp.
* </p>
*
* @param colVal a HashMap object
* @param typeDesc the schema description for the MapColumnVector column
* @param fieldName the field name of the MapColumnVector column
* @param mapVector The parent MapColumnVector
* @param rowNum the ORC file column number.
*/
private static void setMapColumnVector(Object colVal, TypeDescription typeDesc, String fieldName,
MapColumnVector mapVector, int rowNum) {
if (colVal == null) {
mapVector.isNull[rowNum] = true;
mapVector.noNulls = false;
} else {
if (colVal instanceof HashMap) {
@SuppressWarnings("unchecked")
Map<Object, Object> rawMap = (HashMap<Object, Object>) colVal;
int mapLen = rawMap.size();
final int maxBatchSize = typeDesc.createRowBatch().getMaxSize();
setMapVectorParameters(mapVector, maxBatchSize, mapLen, rowNum);
if (ORCCommonUtils.checkMapColumnVectorTypes(mapVector)) {
Set<Map.Entry<Object, Object>> mapSet = rawMap.entrySet();
switch (mapVector.keys.type) {
case LONG:
setLongKeyMap(mapSet, mapVector, fieldName, rowNum);
break;
case DOUBLE:
setDoubleKeyMap(mapSet, mapVector, fieldName, rowNum);
break;
case BYTES:
setStringKeyMap(mapSet, mapVector, fieldName, rowNum);
break;
default: {
break;
/* This block left intentionally empty */
}
}
} else {
throw new RuntimeException(
"For field " + fieldName + " key types are limited to string, long and double. "
+ "value types are limited to long, double, String, decimal and timestamp");
}
}
}
}
/**
* Set a column value in an ORC a row that will be written to the ORC file.
*
* @param colVal an Object containing the values to be written to the column
* @param typeDesc the TypeDescription from the schema that defines the column
* @param fieldName the column field name
* @param vector the ColumnVector that will be initialized with the values in
* the colVal argument.
* @param rowNum the ORC file row number.
*/
public static void setColumn(Object colVal, TypeDescription typeDesc, String fieldName, ColumnVector vector,
int rowNum) {
if (colVal == null) {
vector.isNull[rowNum] = true;
vector.noNulls = false;
} else {
switch (vector.type) {
case LONG: {
if (vector instanceof DateColumnVector) {
DateColumnVector dateVector = (DateColumnVector) vector;
setDateColumnVector(colVal, fieldName, dateVector, rowNum);
} else {
LongColumnVector longVector = (LongColumnVector) vector;
setLongColumnVector(colVal, fieldName, longVector, rowNum);
}
break;
}
case DOUBLE: {
DoubleColumnVector doubleVector = (DoubleColumnVector) vector;
setDoubleVector(colVal, fieldName, doubleVector, rowNum);
break;
}
case BYTES: {
BytesColumnVector bytesColVector = (BytesColumnVector) vector;
setByteColumnVector(colVal, fieldName, bytesColVector, rowNum);
break;
}
case DECIMAL: {
DecimalColumnVector decimalVector = (DecimalColumnVector) vector;
setDecimalVector(colVal, fieldName, decimalVector, rowNum);
break;
}
case DECIMAL_64:
throw new RuntimeException("Field: " + fieldName + ", Decimal64ColumnVector is not supported");
case TIMESTAMP: {
TimestampColumnVector timestampVector = (TimestampColumnVector) vector;
setTimestampVector(colVal, fieldName, timestampVector, rowNum);
break;
}
case INTERVAL_DAY_TIME:
throw new RuntimeException("Field: " + fieldName + ", HiveIntervalDayTime is not supported");
case STRUCT: {
StructColumnVector structVector = (StructColumnVector) vector;
// setStructColumnVector(colVal, typeDesc, fieldName, structVector, rowNum);
break;
}
case LIST: {
ListColumnVector listVector = (ListColumnVector) vector;
setListColumnVector(colVal, typeDesc, fieldName, listVector, rowNum);
break;
}
case MAP: {
MapColumnVector mapVector = (MapColumnVector) vector;
setMapColumnVector(colVal, typeDesc, fieldName, mapVector, rowNum);
break;
}
case UNION: {
UnionColumnVector unionVector = (UnionColumnVector) vector;
setUnionColumnVector(colVal, typeDesc, fieldName, unionVector, rowNum);
break;
}
default:
throw new RuntimeException("setColumn: Internal error: unexpected ColumnVector subtype");
} // switch
} // else
} // setColumn
private static String orcExceptionMsg(String prefixMsg, String fieldName, int rowNum) {
return prefixMsg + fieldName + " in row " + rowNum;
}
public static TypeDescription detectType(Object value) {
TypeDescription type = null;
if (value != null) {
if (value instanceof Boolean) {
type = TypeDescription.createBoolean();
} else if (value instanceof Short) {
type = TypeDescription.createShort();
} else if (value instanceof Integer) {
type = TypeDescription.createInt();
} else if (value instanceof Long) {
type = TypeDescription.createLong();
} else if (value instanceof Timestamp) {
type = TypeDescription.createTimestamp();
} else if (value instanceof BigDecimal) {
type = TypeDescription.createDecimal();
} else if (value instanceof Byte) {
type = TypeDescription.createByte();
} else if (value instanceof Float) {
type = TypeDescription.createFloat();
} else if (value instanceof Double) {
type = TypeDescription.createDouble();
} else if (value instanceof String) {
type = TypeDescription.createString();
} else if (value instanceof Date) {
type = TypeDescription.createDate();
} else if (value instanceof byte[]) {
type = TypeDescription.createBinary();
} else {
throw new RuntimeException(
value.getClass().getName() + " is not supported for ListColumnVector columns");
}
} else {
type = TypeDescription.createString();
}
return type;
}
}

View File

@@ -0,0 +1,253 @@
package org.talend.orc;
import java.io.File;
import java.io.IOException;
import java.math.BigDecimal;
import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.hive.ql.exec.vector.ColumnVector;
import org.apache.hadoop.hive.ql.exec.vector.VectorizedRowBatch;
import org.apache.orc.CompressionKind;
import org.apache.orc.OrcFile;
import org.apache.orc.OrcFile.WriterOptions;
import org.apache.orc.Reader;
import org.apache.orc.RecordReader;
import org.apache.orc.TypeDescription;
import org.apache.orc.Writer;
import org.junit.jupiter.api.AfterAll;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Test;
class ORCUtilsTest {
private static File localFolder;
@BeforeAll
static void setup() throws IOException {
localFolder = createTempDirectory();
}
@AfterAll
static void dispose() {
localFolder.delete();
}
/**
* Test that an exception is thrown if a Date type is written.
*
* At the time this test was written, the ORC writer did not correctly write the
* date epoch value to the ORC file. The value was written as a 32-bit int,
* instead of a 64 bit long. As a result, the date is incorrect. A timestamp
* value should be used instead.
*
* @param tempDirPath
* @throws ORCFileException
* @throws InterruptedException
*/
@Test
void testAllDataTypes() throws Throwable {
String filePath = localFolder.getAbsolutePath() + "/testAllTypes.orc";
writeData(filePath);
readAndCheckData(filePath);
}
@Test
void testDetectType() {
Assertions.assertEquals(TypeDescription.Category.BOOLEAN, ORCWriteUtils.detectType(true).getCategory());
Assertions.assertEquals(TypeDescription.Category.SHORT,
ORCWriteUtils.detectType(Short.valueOf("1")).getCategory());
Assertions.assertEquals(TypeDescription.Category.INT, ORCWriteUtils.detectType(1).getCategory());
Assertions.assertEquals(TypeDescription.Category.LONG, ORCWriteUtils.detectType(1L).getCategory());
Assertions.assertEquals(TypeDescription.Category.TIMESTAMP,
ORCWriteUtils.detectType(new Timestamp(System.currentTimeMillis())).getCategory());
Assertions.assertEquals(TypeDescription.Category.DECIMAL,
ORCWriteUtils.detectType(new BigDecimal("1")).getCategory());
Assertions.assertEquals(TypeDescription.Category.BYTE,
ORCWriteUtils.detectType(Byte.valueOf("1")).getCategory());
Assertions.assertEquals(TypeDescription.Category.FLOAT, ORCWriteUtils.detectType(1.0f).getCategory());
Assertions.assertEquals(TypeDescription.Category.DOUBLE, ORCWriteUtils.detectType(1.0).getCategory());
Assertions.assertEquals(TypeDescription.Category.STRING, ORCWriteUtils.detectType("test").getCategory());
Assertions.assertEquals(TypeDescription.Category.DATE, ORCWriteUtils.detectType(new Date()).getCategory());
Assertions.assertEquals(TypeDescription.Category.BINARY,
ORCWriteUtils.detectType("test".getBytes()).getCategory());
}
private void writeData(String filePath) throws Throwable {
TypeDescription schema = TypeDescription.createStruct();
schema.addField("t_boolean", TypeDescription.createBoolean());
schema.addField("t_byte", TypeDescription.createByte());
schema.addField("t_bytes", TypeDescription.createBinary());
schema.addField("t_char", TypeDescription.createChar());
schema.addField("t_date", TypeDescription.createDate());
schema.addField("t_ts", TypeDescription.createTimestamp());
schema.addField("t_double", TypeDescription.createDouble());
schema.addField("t_float", TypeDescription.createFloat());
schema.addField("t_decimal", TypeDescription.createDecimal().withPrecision(18).withScale(5));
schema.addField("t_int", TypeDescription.createInt());
schema.addField("t_long", TypeDescription.createLong());
schema.addField("t_short", TypeDescription.createShort());
schema.addField("t_string", TypeDescription.createString());
schema.addField("t_list", TypeDescription.createList(TypeDescription.createString()));
WriterOptions writerOption = OrcFile.writerOptions(new Configuration()) //
.overwrite(true) //
.compress(CompressionKind.valueOf("ZLIB")).setSchema(schema); //
Writer writer = OrcFile.createWriter(new Path(filePath), writerOption);
VectorizedRowBatch batch = schema.createRowBatch(100);
for (int r = 0; r < 1000; ++r) {
int row = batch.size++;
for (int i = 0; i < batch.cols.length; i++) {
ColumnVector vector = batch.cols[i];
TypeDescription type = schema.getChildren().get(i);
switch (vector.type) {
case BYTES:
if (type.getCategory() == TypeDescription.Category.BINARY) {
ORCWriteUtils.setColumn(("this is byte[] " + r).getBytes(), null, "t_bytes", vector, row);
} else if (type.getCategory() == TypeDescription.Category.STRING) {
if(r==666) {
ORCWriteUtils.setColumn(null, null, "t_string", vector, row);
}else {
ORCWriteUtils.setColumn(("this is String " + r), null, "t_string", vector, row);
}
} else if (type.getCategory() == TypeDescription.Category.CHAR) {
ORCWriteUtils.setColumn("talend".charAt(r % 6), null, "t_char", vector, row);
} else {
throw new RuntimeException(type.getCategory() + " is not supported as BYTES vector");
}
break;
case DECIMAL:
ORCWriteUtils.setColumn(new BigDecimal(r + ".12345"), null, "t_decimal", vector, row);
break;
case DOUBLE:
if (type.getCategory() == TypeDescription.Category.DOUBLE) {
ORCWriteUtils.setColumn(r + 0.123, null, "t_double", vector, row);
} else if (type.getCategory() == TypeDescription.Category.FLOAT) {
ORCWriteUtils.setColumn(r + 0.456f, null, "t_float", vector, row);
} else {
throw new RuntimeException(type.getCategory() + " is not supported as DOUBLE vector");
}
break;
case LONG:
if (type.getCategory() == TypeDescription.Category.BOOLEAN) {
ORCWriteUtils.setColumn(true, null, "t_boolean", vector, row);
} else if (type.getCategory() == TypeDescription.Category.BYTE) {
ORCWriteUtils.setColumn((byte)(r % 128), null, "t_byte", vector, row);
} else if (type.getCategory() == TypeDescription.Category.INT) {
ORCWriteUtils.setColumn(r, null, "t_int", vector, row);
} else if (type.getCategory() == TypeDescription.Category.SHORT) {
ORCWriteUtils.setColumn((short)(r % 256), null, "t_short", vector, row);
} else if (type.getCategory() == TypeDescription.Category.LONG) {
ORCWriteUtils.setColumn(r * 1000L, null, "t_long", vector, row);
} else if (type.getCategory() == TypeDescription.Category.DATE) {
Date d = new Date(1633687854031L);
ORCWriteUtils.setColumn(d, null, "t_date", vector, row);
} else {
throw new RuntimeException(type.getCategory() + " is not supported as LONG vector");
}
break;
case TIMESTAMP:
Timestamp ts = new java.sql.Timestamp(1633687854031L);
ts.setNanos(123456789);
ORCWriteUtils.setColumn(ts, null, "t_ts", vector, row);
break;
case LIST:
List<String> values = new ArrayList<>();
values.add("v1_" + r);
values.add("v2_" + r);
values.add("v3_" + r);
ORCWriteUtils.setColumn(values, ORCWriteUtils.detectType("v1_" + r), "t_ list", vector, row);
break;
default:
throw new RuntimeException(vector.type + " is not supported");
}
}
if (batch.size == batch.getMaxSize()) {
writer.addRowBatch(batch);
batch.reset();
}
}
if (batch.size != 0) {
writer.addRowBatch(batch);
}
writer.close();
}
private void readAndCheckData(String filePath) throws Throwable {
Reader reader = OrcFile.createReader(new Path(filePath), OrcFile.readerOptions(new Configuration()));
TypeDescription schema = reader.getSchema();
VectorizedRowBatch batch = schema.createRowBatch();
RecordReader rowIterator = reader.rows(reader.options().schema(schema));
int nuberLine = 0;
List<Object> nb_500 = new ArrayList<>();
List<Object> nb_666 = new ArrayList<>();
while (rowIterator.nextBatch(batch)) {
ColumnVector[] colVectors = batch.cols;
for (int row = 0; row < batch.size; ++row) {
nuberLine++;
for (String columnName : schema.getFieldNames()) {
ColumnVector colVector = colVectors[schema.getFieldNames().indexOf(columnName)];
int colRow = colVector.isRepeating ? 0 : row;
Object value = ORCReadUtils.readColumnByName(batch, columnName, schema, colRow);
if (nuberLine == 500) {
nb_500.add(value);
}else if (nuberLine == 667) {
nb_666.add(value);
}
}
}
}
Assertions.assertEquals(true, nb_500.get(0));
Assertions.assertEquals(Byte.valueOf("115"), nb_500.get(1));
Assertions.assertEquals("this is byte[] 499", new String((byte[]) nb_500.get(2)));
Assertions.assertEquals("a", nb_500.get(3));
Date t_date = (Date) nb_500.get(4);
Assertions.assertEquals((1633687854000L/86400000), t_date.getTime()/86400000);
Timestamp t_ts = (Timestamp) nb_500.get(5);
Assertions.assertEquals(1633687854123L, t_ts.getTime());
Assertions.assertEquals(123456789, t_ts.getNanos());
Assertions.assertEquals(499.123, nb_500.get(6));
Assertions.assertEquals(499.456f, (((float) nb_500.get(7)) * 1000) / 1000f);
Assertions.assertEquals(new BigDecimal("499.12345"), nb_500.get(8));
Assertions.assertEquals(499, nb_500.get(9));
Assertions.assertEquals(499000L, nb_500.get(10));
Assertions.assertEquals(Short.valueOf("243"), nb_500.get(11));
Assertions.assertEquals("this is String 499", nb_500.get(12));
Assertions.assertArrayEquals(Arrays.asList("v1_499", "v2_499", "v3_499").toArray(),
((List<Object>) nb_500.get(13)).toArray());
//NB_LINE 666
Assertions.assertNull( nb_666.get(12));
rowIterator.close();
}
public static File createTempDirectory() throws IOException {
final File temp;
temp = File.createTempFile("temp", Long.toString(System.nanoTime()));
if (!temp.delete()) {
throw new IOException("Could not delete temp file: " + temp.getAbsolutePath());
}
if (!temp.mkdir()) {
throw new IOException("Could not create temp directory: " + temp.getAbsolutePath());
}
return temp;
}
}

View File

@@ -6,12 +6,12 @@
<groupId>org.talend.components</groupId>
<artifactId>talend-scp-helper</artifactId>
<version>1.0</version>
<version>1.1</version>
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
<ssd.version>2.5.1</ssd.version>
<ssd.version>2.8.0</ssd.version>
<talend.nexus.url>https://artifacts-oss.talend.com</talend.nexus.url>
</properties>

View File

@@ -1,31 +1,32 @@
package org.talend.components.talendscp;
import org.apache.sshd.client.channel.ChannelExec;
import org.apache.sshd.scp.client.AbstractScpClient;
import org.apache.sshd.scp.client.DefaultScpClient;
import org.apache.sshd.scp.client.DefaultScpStreamResolver;
import org.apache.sshd.scp.client.ScpClient;
import org.apache.sshd.client.session.ClientSession;
import org.apache.sshd.common.FactoryManager;
import org.apache.sshd.common.file.FileSystemFactory;
import org.apache.sshd.common.file.util.MockFileSystem;
import org.apache.sshd.common.file.util.MockPath;
import org.apache.sshd.scp.common.ScpFileOpener;
import org.apache.sshd.scp.common.ScpHelper;
import org.apache.sshd.common.util.ValidateUtils;
import org.apache.sshd.scp.common.ScpTransferEventListener;
import org.apache.sshd.scp.common.helpers.ScpTimestampCommandDetails;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.nio.file.FileSystem;
import java.nio.file.Path;
import java.nio.file.attribute.FileTime;
import java.nio.file.attribute.PosixFilePermission;
import java.util.Collection;
import java.util.Collections;
import java.util.EnumSet;
import org.apache.sshd.client.channel.ChannelExec;
import org.apache.sshd.client.scp.AbstractScpClient;
import org.apache.sshd.client.scp.DefaultScpClient;
import org.apache.sshd.client.scp.DefaultScpStreamResolver;
import org.apache.sshd.client.scp.ScpClient;
import org.apache.sshd.client.session.ClientSession;
import org.apache.sshd.common.FactoryManager;
import org.apache.sshd.common.file.FileSystemFactory;
import org.apache.sshd.common.file.util.MockFileSystem;
import org.apache.sshd.common.file.util.MockPath;
import org.apache.sshd.common.scp.ScpFileOpener;
import org.apache.sshd.common.scp.ScpHelper;
import org.apache.sshd.common.scp.ScpTimestamp;
import org.apache.sshd.common.scp.ScpTransferEventListener;
import org.apache.sshd.common.util.ValidateUtils;
/*
What we do here is just overwrite the ScpHelper to throw Exception when scp return status 1
@@ -40,7 +41,8 @@ public class TalendScpClient extends DefaultScpClient {
}
@Override public void upload(InputStream local, String remote, long size, Collection<PosixFilePermission> perms,
ScpTimestamp time) throws IOException {
ScpTimestampCommandDetails time) throws IOException {
int namePos = ValidateUtils.checkNotNullAndNotEmpty(remote, "No remote location specified").lastIndexOf('/');
String name = (namePos < 0) ?
remote :

View File

@@ -1,11 +1,11 @@
package org.talend.components.talendscp;
import org.apache.sshd.client.scp.AbstractScpClientCreator;
import org.apache.sshd.client.scp.ScpClient;
import org.apache.sshd.client.scp.ScpClientCreator;
import org.apache.sshd.scp.client.AbstractScpClientCreator;
import org.apache.sshd.scp.client.ScpClient;
import org.apache.sshd.scp.client.ScpClientCreator;
import org.apache.sshd.client.session.ClientSession;
import org.apache.sshd.common.scp.ScpFileOpener;
import org.apache.sshd.common.scp.ScpTransferEventListener;
import org.apache.sshd.scp.common.ScpFileOpener;
import org.apache.sshd.scp.common.ScpTransferEventListener;
public class TalendScpClientCreator extends AbstractScpClientCreator implements ScpClientCreator {
public static final TalendScpClientCreator INSTANCE = new TalendScpClientCreator();

View File

@@ -6,11 +6,12 @@ import java.io.InputStream;
import java.io.OutputStream;
import java.nio.file.FileSystem;
import org.apache.sshd.common.scp.ScpException;
import org.apache.sshd.common.scp.ScpFileOpener;
import org.apache.sshd.common.scp.ScpHelper;
import org.apache.sshd.common.scp.ScpTransferEventListener;
import org.apache.sshd.scp.common.ScpException;
import org.apache.sshd.scp.common.ScpFileOpener;
import org.apache.sshd.scp.common.ScpHelper;
import org.apache.sshd.scp.common.ScpTransferEventListener;
import org.apache.sshd.common.session.Session;
import org.apache.sshd.scp.common.helpers.ScpAckInfo;
public class TalendScpHelper extends ScpHelper {
@@ -20,8 +21,9 @@ public class TalendScpHelper extends ScpHelper {
}
@Override
public int readAck(boolean canEof) throws IOException {
int c = in.read();
public ScpAckInfo readAck(boolean canEof) throws IOException {
final ScpAckInfo scpAckInfo = ScpAckInfo.readAck(this.in, this.csIn, canEof);
int c = scpAckInfo == null ? -1 : scpAckInfo.getStatusCode();
switch (c) {
case -1:
if (log.isDebugEnabled()) {
@@ -31,12 +33,12 @@ public class TalendScpHelper extends ScpHelper {
throw new EOFException("readAck - EOF before ACK");
}
break;
case OK:
case ScpAckInfo.OK:
if (log.isDebugEnabled()) {
log.debug("readAck({})[EOF={}] read OK", this, canEof);
}
break;
case WARNING: {
case ScpAckInfo.WARNING: {
if (log.isDebugEnabled()) {
log.debug("readAck({})[EOF={}] read warning message", this, canEof);
}
@@ -45,7 +47,7 @@ public class TalendScpHelper extends ScpHelper {
log.warn("readAck({})[EOF={}] - Received warning: {}", this, canEof, line);
throw new ScpException("received error: " + line, c);
}
case ERROR: {
case ScpAckInfo.ERROR: {
if (log.isDebugEnabled()) {
log.debug("readAck({})[EOF={}] read error message", this, canEof);
}
@@ -58,6 +60,6 @@ public class TalendScpHelper extends ScpHelper {
default:
break;
}
return c;
return scpAckInfo;
}
}

View File

@@ -60,9 +60,9 @@
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
<groupId>ch.qos.reload4j</groupId>
<artifactId>reload4j</artifactId>
<version>1.2.19</version>
</dependency>

View File

@@ -4,7 +4,7 @@
<modelVersion>4.0.0</modelVersion>
<groupId>org.talend.components</groupId>
<artifactId>talend-ws</artifactId>
<version>1.0.5-20210629</version>
<version>1.0.6-20220304</version>
<packaging>jar</packaging>
<properties>
@@ -12,7 +12,7 @@
<talend.nexus.url>https://artifacts-oss.talend.com</talend.nexus.url>
<cxf.version>3.3.10</cxf.version>
<cxf.version>3.4.4</cxf.version>
<odata.version>4.3.0</odata.version>
<slf4j.version>1.7.12</slf4j.version>
<httpclient.version>4.5.13</httpclient.version>

View File

@@ -1,8 +0,0 @@
org.talend.ws.exception.IllegalPropertyAccessException=Unable to access property {0} which is not accessible for type {1}
org.talend.ws.exception.NoSuchPropertyException=Property {0} does not exist for type {1}
org.talend.ws.exception.Instantiation=Unable to instantiate class of type {0}
org.talend.ws.exception.InvocationTargetPropertyAccessor=A property accessor has thrown an exception : property {0} of class {1}
org.talend.ws.exception.illegalAccessValueOf=Unable to call method valueOf for enum type {0}
org.talend.ws.exception.Unknown=An unknown exception has been thrown
org.talend.ws.exception.InvalidEnumValueException=Value {0} is not valid for enum {1}
org.talend.ws.exception.InvalidParameterAnyType=You must specify a map like this for anyTypes : {anyType: value, anyType_type: qname} pour les anyType

View File

@@ -1,7 +1,7 @@
org.talend.ws.exception.IllegalPropertyAccessException={0} \u30D7\u30ED\u30D1\u30C6\u30A3\u306B\u30A2\u30AF\u30BB\u30B9\u3067\u304D\u307E\u305B\u3093\u3002\u3053\u308C\u306F {1} \u578B\u306E\u305F\u3081\u30A2\u30AF\u30BB\u30B9\u3067\u304D\u307E\u305B\u3093\u3002
org.talend.ws.exception.NoSuchPropertyException=\u30BF\u30A4\u30D7{1}\u306E\u30D7\u30ED\u30D1\u30C6\u30A3{0}\u306F\u5B58\u5728\u3057\u307E\u305B\u3093
org.talend.ws.exception.Instantiation={0} \u578B\u306E\u30AF\u30E9\u30B9\u306E\u30A4\u30F3\u30B9\u30BF\u30F3\u30B9\u3092\u4F5C\u6210\u3067\u304D\u307E\u305B\u3093\u3002
org.talend.ws.exception.InvocationTargetPropertyAccessor=\u30D7\u30ED\u30D1\u30C6\u30A3\u30A2\u30AF\u30BB\u30B9\u306B\u3088\u308A\u3001\u4F8B\u5916\u304C\u30B9\u30ED\u30FC\u3055\u308C\u307E\u3057\u305F\uFF1A\u30AF\u30E9\u30B9 {1} \u306E\u30D7\u30ED\u30D1\u30C6\u30A3 {0}
org.talend.ws.exception.InvocationTargetPropertyAccessor=\u30D7\u30ED\u30D1\u30C6\u30A3\u30A2\u30AF\u30BB\u30C3\u30B5\u30FC\u304C\u4F8B\u5916\u3092\u8FD4\u3057\u307E\u3057\u305F: \u30AF\u30E9\u30B9 {1} \u306E\u30D7\u30ED\u30D1\u30C6\u30A3 {0}
org.talend.ws.exception.illegalAccessValueOf=\u5217\u6319\u578B {0} \u306EvalueOf\u30E1\u30BD\u30C3\u30C9\u3092\u547C\u3073\u51FA\u3059\u3053\u3068\u306F\u3067\u304D\u307E\u305B\u3093
org.talend.ws.exception.Unknown=\u4E0D\u660E\u306A\u4F8B\u5916\u304C\u30B9\u30ED\u30FC\u3055\u308C\u307E\u3057\u305F
org.talend.ws.exception.InvalidEnumValueException=\u5024 {0} \u306Fenum\u578B {1} \u3067\u306F\u3042\u308A\u307E\u305B\u3093\u3002

View File

@@ -75,9 +75,9 @@
<version>4.1.2</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
<groupId>ch.qos.reload4j</groupId>
<artifactId>reload4j</artifactId>
<version>1.2.19</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.commons/commons-lang3 -->
<dependency>

View File

@@ -5,7 +5,7 @@
<groupId>org.talend</groupId>
<artifactId>talendMQConnectionUtil</artifactId>
<version>1.0.1-20190215</version>
<version>1.1.0-20220307</version>
<packaging>jar</packaging>
<name>talendMQConnectionUtil</name>
@@ -55,13 +55,8 @@
</dependency>
<dependency>
<groupId>com.ibm.mq</groupId>
<artifactId>com.ibm.mq</artifactId>
<version>8.0.0.9</version>
</dependency>
<dependency>
<groupId>com.ibm.mq</groupId>
<artifactId>com.ibm.mqjms</artifactId>
<version>8.0.0.9</version>
<artifactId>com.ibm.mq.allclient</artifactId>
<version>9.2.4.0</version>
</dependency>
<dependency>
<groupId>javax.resource</groupId>
@@ -71,7 +66,7 @@
<dependency>
<groupId>org.talend</groupId>
<artifactId>talendMQRFH2</artifactId>
<version>1.0.1-20190206</version>
<version>1.1.0-20220307</version>
</dependency>
<dependency>
<groupId>org.mockito</groupId>

View File

@@ -53,9 +53,9 @@
<version>4.1.2</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
<groupId>ch.qos.reload4j</groupId>
<artifactId>reload4j</artifactId>
<version>1.2.19</version>
</dependency>
</dependencies>
<build>

View File

@@ -2,7 +2,7 @@
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.talend.libraries</groupId>
<groupId>org.talend.components</groupId>
<artifactId>talendcsv</artifactId>
<version>1.0.0</version>
<packaging>jar</packaging>

View File

@@ -8,13 +8,8 @@ import java.io.Reader;
import java.io.StringReader;
import java.util.HashMap;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class CSVReader {
private final static Logger log = LoggerFactory.getLogger(CSVReader.class);
private Reader reader;
private char separator = ',';
@@ -29,6 +24,8 @@ public class CSVReader {
private boolean trimWhitespace = true;
private boolean safetySwitch = false;
private static final int BUFFER_SIZE = 4 * 1024;
private static final int FETCH_SIZE = 10 * 50;
@@ -55,26 +52,28 @@ public class CSVReader {
private boolean inQuote = false;
private boolean closed = false;
private StringBuilder sb = new StringBuilder(16);
private boolean storeRawRecord = false;
private StringBuilder stringBuilder = new StringBuilder(16 * 10);
private String rawRecord = "";
public CSVReader(final String filename, final char separator, final String charset) throws IOException {
public CSVReader(String filename,char separator,String charset) throws IOException {
this(new FileInputStream(filename), separator, charset);
}
public CSVReader(final InputStream inputStream, final char separator, final String charset) throws IOException {
public CSVReader(InputStream inputStream,char separator,String charset) throws IOException {
this(new UnicodeReader(inputStream, charset), separator);
}
public CSVReader(final Reader reader, final char separator) {
public CSVReader(Reader reader,char separator) {
this.reader = new BufferedReader(reader,BUFFER_SIZE);
this.separator = separator;
}
public static CSVReader parse(final String content) {
public static CSVReader parse(String content) {
if (content == null) {
throw new IllegalArgumentException(
"Parameter content can not be null.");
@@ -83,31 +82,22 @@ public class CSVReader {
return new CSVReader(new StringReader(content),',');
}
public CSVReader setLineEnd(final String lineEnd) {
if ("\n".equals(lineEnd) || "\r\n".equals(lineEnd)) {
// classic line end (linux or windows), treat by default.
this.lineEnd = null;
}
else {
this.lineEnd = lineEnd;
if (lineEnd != null && lineEnd.length() != 1) {
log.warn("Line end params {} must be single character", lineEnd);
}
}
public CSVReader setLineEnd(String lineEnd) {
this.lineEnd = lineEnd;
return this;
}
public CSVReader setSeparator(final char separator) {
public CSVReader setSeparator(char separator) {
this.separator = separator;
return this;
}
public CSVReader setEscapeChar(final char escapechar) {
public CSVReader setEscapeChar(char escapechar) {
this.escapechar = escapechar;
return this;
}
public CSVReader setQuoteChar(final char quotechar) {
public CSVReader setQuoteChar(char quotechar) {
this.quotechar = quotechar;
return this;
}
@@ -116,372 +106,388 @@ public class CSVReader {
return this.quotechar;
}
public CSVReader setTrimWhitespace(final boolean trimWhitespace) {
public CSVReader setTrimWhitespace(boolean trimWhitespace) {
this.trimWhitespace = trimWhitespace;
return this;
}
public CSVReader setSkipEmptyRecords(final boolean skipEmptyRecords) {
public CSVReader setSkipEmptyRecords(boolean skipEmptyRecords) {
this.skipEmptyRecords = skipEmptyRecords;
return this;
}
public CSVReader setStoreRawRecord(final boolean storeRawRecord) {
public CSVReader setStoreRawRecord(boolean storeRawRecord) {
this.storeRawRecord = storeRawRecord;
return this;
}
public void setSafetySwitch(boolean safetySwitch) {
this.safetySwitch = safetySwitch;
}
public String getRawRecord() {
return this.rawRecord;
return rawRecord;
}
public void endRecord() {
this.hasNext = true;
hasNext = true;
}
public void endColumn() {
this.inColumn = false;
if (columnCount >= 100000 && safetySwitch) {
try {
close();
} catch(IOException e) {
//close quietly
}
throw new RuntimeException("Exceed the maximum column count in single record : 100000. And you can set the safetySwitch field to false to skip this check");
}
inColumn = false;
String currentValue = this.sb.toString();
String currentValue = sb.toString();
if(this.trimWhitespace && !this.inQuote) {
currentValue = this.trimTail(currentValue);
if(trimWhitespace && !inQuote) {
currentValue = trimTail(currentValue);
}
if (this.columnCount == this.values.length) {
final int newLength = this.values.length * 2;
if (columnCount == values.length) {
int newLength = values.length * 2;
final String[] holder = new String[newLength];
String[] holder = new String[newLength];
System.arraycopy(this.values, 0, holder, 0, this.values.length);
System.arraycopy(values, 0, holder, 0, values.length);
this.values = holder;
values = holder;
}
this.values[this.columnCount] = currentValue;
this.columnCount++;
this.sb.setLength(0);
values[columnCount] = currentValue;
columnCount++;
sb.setLength(0);
}
public boolean readNext() throws IOException {
this.columnCount = 0;
this.hasNext = false;
this.rawRecord = "";
boolean warningNonRFC = false;
columnCount = 0;
hasNext = false;
if(!this.hasMoreData) {
rawRecord = "";
if(!hasMoreData) {
return false;
}
while(this.hasMoreData && !this.hasNext) {
if(this.arriveEnd()) {
this.fill();
while(hasMoreData && !hasNext) {
if(arriveEnd()) {
fill();
continue;
}
char currentChar = this.buffer[this.currentPosition];
this.inQuote = false;
char currentChar = buffer[currentPosition];
if(this.quotechar !='\0' && currentChar == this.quotechar) {//quote char as start of column
this.inColumn = true;
this.inQuote = true;
this.currentPosition++;
this.escaping = false;
inQuote = false;
if(quotechar!='\0' && currentChar == quotechar) {//quote char as start of column
inColumn = true;
inQuote = true;
currentPosition++;
escaping = false;
boolean previousCharAsQuote = false;
boolean deleteTrailNoUseChars = false;
if(this.storeRawRecord) {
this.stringBuilder.append(currentChar);
if(storeRawRecord) {
stringBuilder.append(currentChar);
}
while(this.hasMoreData && this.inColumn) {
if(this.arriveEnd()) {
this.fill();
while(hasMoreData && inColumn) {
if(arriveEnd()) {
fill();
continue;
}
currentChar = this.buffer[this.currentPosition];
currentChar = buffer[currentPosition];
if(deleteTrailNoUseChars){
if(currentChar == this.separator) {
this.endColumn();
if(currentChar == separator) {
endColumn();
if(this.storeRawRecord) {
this.stringBuilder.append(currentChar);
if(storeRawRecord) {
stringBuilder.append(currentChar);
}
} else if((this.lineEnd == null && (currentChar == '\n' || currentChar == '\r'))
|| (this.lineEnd !=null && currentChar == this.lineEnd.charAt(0))) {
this.endColumn();
this.endRecord();
} else if((lineEnd == null && (currentChar == '\n' || currentChar == '\r'))
|| (lineEnd!=null && currentChar == lineEnd.charAt(0))) {
endColumn();
endRecord();
} else {
if ((!warningNonRFC) && currentChar != ' ' && currentChar != '\t' && currentChar != '\r') {
log.warn("CSV source '{}' is not conform to RFC, some data will be ignored.", this.sb.toString());
warningNonRFC = true;
}
if(this.storeRawRecord) {
this.stringBuilder.append(currentChar);
if(storeRawRecord) {
stringBuilder.append(currentChar);
}
}
} else if(currentChar == this.quotechar) {
if(this.escaping) {//quote char as text
this.sb.append(currentChar);
this.escaping = false;
} else if(currentChar == quotechar) {
if(escaping) {//quote char as text
sb.append(currentChar);
escaping = false;
previousCharAsQuote = false;
} else {//quote char as escape or end of column
if(this.escapechar !='\0' && currentChar == this.escapechar) {
this.escaping = true;
if(escapechar!='\0' && currentChar == escapechar) {
escaping = true;
}
previousCharAsQuote = true;
}
if(this.storeRawRecord) {
this.stringBuilder.append(currentChar);
if(storeRawRecord) {
stringBuilder.append(currentChar);
}
} else if(this.escapechar !='\0' && this.escapechar != this.quotechar && this.escaping) {
} else if(escapechar!='\0' && escapechar!=quotechar && escaping) {
switch (currentChar) {
case 'n':
this.sb.append('\n');
sb.append('\n');
break;
case 'r':
this.sb.append('\r');
sb.append('\r');
break;
case 't':
this.sb.append('\t');
sb.append('\t');
break;
case 'b':
this.sb.append('\b');
sb.append('\b');
break;
case 'f':
this.sb.append('\f');
sb.append('\f');
break;
case 'e':
this.sb.append('\u001B');
sb.append('\u001B');
break;
case 'v':
this.sb.append('\u000B');
sb.append('\u000B');
break;
case 'a':
this.sb.append('\u0007');
sb.append('\u0007');
break;
default :
this.sb.append(currentChar);
default :
sb.append(currentChar);
break;
}
this.escaping = false;
if(this.storeRawRecord) {
this.stringBuilder.append(currentChar);
escaping = false;
if(storeRawRecord) {
stringBuilder.append(currentChar);
}
} else if(this.escapechar !='\0' && currentChar == this.escapechar) {
this.escaping = true;
} else if(escapechar!='\0' && currentChar == escapechar) {
escaping = true;
if(this.storeRawRecord) {
this.stringBuilder.append(currentChar);
if(storeRawRecord) {
stringBuilder.append(currentChar);
}
} else if(previousCharAsQuote) {//quote char as end of column
if(currentChar == this.separator) {
this.endColumn();
if(currentChar == separator) {
endColumn();
if(this.storeRawRecord) {
this.stringBuilder.append(currentChar);
if(storeRawRecord) {
stringBuilder.append(currentChar);
}
} else if((this.lineEnd == null && (currentChar == '\n' || currentChar == '\r'))
|| (this.lineEnd !=null && currentChar == this.lineEnd.charAt(0))) {
this.endColumn();
this.endRecord();
} else if((lineEnd == null && (currentChar == '\n' || currentChar == '\r'))
|| (lineEnd!=null && currentChar == lineEnd.charAt(0))) {
endColumn();
endRecord();
} else {
deleteTrailNoUseChars = true;
if ((!warningNonRFC) && currentChar != ' ' && currentChar != '\t' && currentChar != '\r') {
log.warn("CSV source '{}' is not conform to RFC, some data will be ignored.", this.sb.toString());
warningNonRFC = true;
}
if(this.storeRawRecord) {
this.stringBuilder.append(currentChar);
if(storeRawRecord) {
stringBuilder.append(currentChar);
}
}
previousCharAsQuote = false;
} else {
this.sb.append(currentChar);
sb.append(currentChar);
if(this.storeRawRecord) {
this.stringBuilder.append(currentChar);
if(storeRawRecord) {
stringBuilder.append(currentChar);
}
}
this.previousChar = currentChar;
this.currentPosition++;
previousChar = currentChar;
currentPosition++;
if(inColumn && safetySwitch && sb.length() > 100000) {
close();
throw new RuntimeException("Exceed the maximum length of single column : 100000. And you can set the safetySwitch field to false to skip this check");
}
}
} else if(currentChar == this.separator) {
this.previousChar = currentChar;
this.endColumn();
this.currentPosition++;
} else if(currentChar == separator) {
previousChar = currentChar;
endColumn();
currentPosition++;
if(this.storeRawRecord) {
this.stringBuilder.append(currentChar);
if(storeRawRecord) {
stringBuilder.append(currentChar);
}
} else if (this.lineEnd !=null && currentChar == this.lineEnd.charAt(0)) {
if (this.inColumn || this.columnCount > 0 || !this.skipEmptyRecords) {
this.endColumn();
this.endRecord();
} else if (lineEnd!=null && currentChar == lineEnd.charAt(0)) {
if (inColumn || columnCount > 0 || !skipEmptyRecords) {
endColumn();
endRecord();
}
this.currentPosition++;
this.previousChar = currentChar;
} else if(this.lineEnd ==null && (currentChar == '\r' || currentChar == '\n')) {
if (this.inColumn || this.columnCount > 0 || (!this.skipEmptyRecords && (currentChar == '\r' ||
this.previousChar !='\r'))) {
this.endColumn();
this.endRecord();
}
this.currentPosition++;
this.previousChar = currentChar;
} else if(this.trimWhitespace && (currentChar == ' ' || currentChar == '\t')) {
this.inColumn = true;
this.currentPosition++;
if(this.storeRawRecord) {
this.stringBuilder.append(currentChar);
currentPosition++;
previousChar = currentChar;
} else if(lineEnd==null && (currentChar == '\r' || currentChar == '\n')) {
if (inColumn || columnCount > 0 || (!skipEmptyRecords && (currentChar == '\r' || previousChar!='\r'))) {
endColumn();
endRecord();
}
currentPosition++;
previousChar = currentChar;
} else if(trimWhitespace && (currentChar == ' ' || currentChar == '\t')) {
inColumn = true;
currentPosition++;
if(storeRawRecord) {
stringBuilder.append(currentChar);
}
} else {
this.inColumn = true;
this.escaping = false;
inColumn = true;
escaping = false;
while(this.hasMoreData && this.inColumn) {
if(this.arriveEnd()) {
this.fill();
while(hasMoreData && inColumn) {
if(arriveEnd()) {
fill();
continue;
}
currentChar = this.buffer[this.currentPosition];
currentChar = buffer[currentPosition];
if(this.quotechar == '\0' && this.escapechar != '\0' && currentChar == this.escapechar) {
if(this.escaping) {
this.sb.append(currentChar);
this.escaping = false;
if(quotechar == '\0' && escapechar != '\0' && currentChar == escapechar) {
if(escaping) {
sb.append(currentChar);
escaping = false;
} else {
this.escaping = true;
escaping = true;
}
if(this.storeRawRecord) {
this.stringBuilder.append(currentChar);
if(storeRawRecord) {
stringBuilder.append(currentChar);
}
} else if(this.escapechar !='\0' && this.escapechar != this.quotechar && this.escaping) {
} else if(escapechar!='\0' && escapechar!=quotechar && escaping) {
switch (currentChar) {
case 'n':
this.sb.append('\n');
sb.append('\n');
break;
case 'r':
this.sb.append('\r');
sb.append('\r');
break;
case 't':
this.sb.append('\t');
sb.append('\t');
break;
case 'b':
this.sb.append('\b');
sb.append('\b');
break;
case 'f':
this.sb.append('\f');
sb.append('\f');
break;
case 'e':
this.sb.append('\u001B');
sb.append('\u001B');
break;
case 'v':
this.sb.append('\u000B');
sb.append('\u000B');
break;
case 'a':
this.sb.append('\u0007');
sb.append('\u0007');
break;
default :
this.sb.append(currentChar);
default :
sb.append(currentChar);
break;
}
this.escaping = false;
if(this.storeRawRecord) {
this.stringBuilder.append(currentChar);
}
} else if(currentChar == this.separator) {
this.endColumn();
escaping = false;
if(this.storeRawRecord) {
this.stringBuilder.append(currentChar);
if(storeRawRecord) {
stringBuilder.append(currentChar);
}
} else if((this.lineEnd == null && (currentChar == '\n' || currentChar == '\r'))
|| (this.lineEnd !=null && currentChar == this.lineEnd.charAt(0))) {
this.endColumn();
this.endRecord();
} else if(currentChar == separator) {
endColumn();
if(storeRawRecord) {
stringBuilder.append(currentChar);
}
} else if((lineEnd == null && (currentChar == '\n' || currentChar == '\r'))
|| (lineEnd!=null && currentChar == lineEnd.charAt(0))) {
endColumn();
endRecord();
} else {
this.sb.append(currentChar);
sb.append(currentChar);
if(this.storeRawRecord) {
this.stringBuilder.append(currentChar);
if(storeRawRecord) {
stringBuilder.append(currentChar);
}
}
this.previousChar = currentChar;
this.currentPosition++;
previousChar = currentChar;
currentPosition++;
if(inColumn && safetySwitch && sb.length() > 100000) {
close();
throw new RuntimeException("Exceed the maximum length of single column : 100000. And you can set the safetySwitch field to false to skip this check");
}
}
}
}
if(this.inColumn || this.previousChar == this.separator) {
this.endColumn();
this.endRecord();
if(inColumn || previousChar == separator) {
endColumn();
endRecord();
}
if(this.storeRawRecord) {
this.rawRecord = this.stringBuilder.toString();
this.stringBuilder.setLength(0);
if(storeRawRecord) {
rawRecord = stringBuilder.toString();
stringBuilder.setLength(0);
}
return this.hasNext;
return hasNext;
}
public String get(final int index) {
if (index > -1 && index < this.columnCount) {
return this.values[index];
public String get(int index) {
if (index > -1 && index < columnCount) {
return values[index];
} else {
return "";
}
}
public String[] getValues() {
final String[] result = new String[this.columnCount];
System.arraycopy(this.values, 0, result, 0, this.columnCount);
String[] result = new String[columnCount];
System.arraycopy(values, 0, result, 0, columnCount);
return result;
}
private void fill() throws IOException {
final int count = this.reader.read(this.buffer, 0, this.buffer.length);
this.currentPosition = 0;
this.bufferCount = count;
int count = reader.read(buffer, 0, buffer.length);
currentPosition = 0;
bufferCount = count;
if(count == -1) {
this.hasMoreData = false;
hasMoreData = false;
}
}
private boolean arriveEnd() {
return this.currentPosition == this.bufferCount;
return currentPosition == bufferCount;
}
private String trimTail(String content) {
final int len = content.length();
int len = content.length();
int newLen = len;
while (newLen > 0) {
final char tail = content.charAt(newLen - 1);
char tail = content.charAt(newLen - 1);
if(tail != ' ' && tail != '\t') {
break;
}
@@ -496,8 +502,12 @@ public class CSVReader {
}
public void close() throws IOException {
this.reader.close();
this.headersReader.clear();
if(!closed) {
reader.close();
headersReader.clear();
closed = true;
}
}
//Added 20141016 TDQ-9496
@@ -506,7 +516,7 @@ public class CSVReader {
}
public char getSeperator(){
return this.separator;
return separator;
}
/**
@@ -515,37 +525,37 @@ public class CSVReader {
* @return If the header was successfully read or not.
*/
public boolean readHeaders() throws IOException {
final boolean result = this.readNext();
boolean result = readNext();
this.headersReader.length = this.columnCount;
headersReader.length = columnCount;
this.headersReader.headers = new String[this.columnCount];
headersReader.headers = new String[columnCount];
for (int i = 0; i < this.headersReader.length; i++) {
final String columnValue = this.get(i);
this.headersReader.headers[i] = columnValue;
this.headersReader.indexByHeaderName.put(columnValue, new Integer(i));
for (int i = 0; i < headersReader.length; i++) {
String columnValue = get(i);
headersReader.headers[i] = columnValue;
headersReader.indexByHeaderName.put(columnValue, new Integer(i));
}
if (result) {
this.currentPosition--;
currentPosition--;
}
this.columnCount = 0;
columnCount = 0;
return result;
}
/**
* Returns the current column value for a given column header name.
*/
public String get(final String headerName) throws IOException {
return this.get(this.getIndex(headerName));
public String get(String headerName) throws IOException {
return get(getIndex(headerName));
}
private int getIndex(final String headerName) throws IOException {
if(this.headersReader.indexByHeaderName==null){
private int getIndex(String headerName) throws IOException {
if(headersReader.indexByHeaderName==null){
return -1;
}
final Object indexValue = this.headersReader.indexByHeaderName.get(headerName);
Object indexValue = headersReader.indexByHeaderName.get(headerName);
if (indexValue != null) {
return ((Integer) indexValue).intValue();
@@ -555,11 +565,12 @@ public class CSVReader {
}
public String[] getHeaders() throws IOException {
if (this.headersReader.headers == null) {
if (headersReader.headers == null) {
return null;
} else {
final String[] clone = new String[this.headersReader.length];
System.arraycopy(this.headersReader.headers, 0, clone, 0, this.headersReader.length);
String[] clone = new String[headersReader.length];
System.arraycopy(headersReader.headers, 0, clone, 0,
headersReader.length);
return clone;
}
}
@@ -572,14 +583,14 @@ public class CSVReader {
private HashMap indexByHeaderName;
public HeadersReader() {
this.headers = null;
this.length = 0;
this.indexByHeaderName = new HashMap();
headers = null;
length = 0;
indexByHeaderName = new HashMap();
}
public void clear(){
this.headers = null;
this.indexByHeaderName = null;
headers = null;
indexByHeaderName = null;
}
}
/**End of added by TDQ-9496 **/

View File

@@ -27,7 +27,7 @@ import java.util.List;
*/
public class CSVWriter implements Closeable {
public static final int INITIAL_STRING_SIZE = 128;
public static final int INITIAL_STRING_SIZE = 128;
private Writer rawWriter;
@@ -101,60 +101,68 @@ public class CSVWriter implements Closeable {
return this;
}
private boolean isFirstColumn = true;
/**
* Writes the next line to the file.
*
* @param nextLine a string array with each comma-separated element as a separate entry.
*/
public void writeNext(String[] nextLine) {
if (nextLine == null) {
return;
}
StringBuilder sb = new StringBuilder(INITIAL_STRING_SIZE);
for (int i = 0; i < nextLine.length; i++) {
if (i != 0) {
sb.append(separator);
}
String nextElement = nextLine[i];
if (nextElement == null) {
nextElement = "";
}
boolean quote = false;
if(this.quotestatus == QuoteStatus.AUTO) {
quote = needQuote(nextElement,i);
} else if(this.quotestatus == QuoteStatus.FORCE) {
quote = true;
}
if(quote) {
sb.append(quotechar);
}
StringBuilder escapeResult = escape(nextElement,quote);
if(escapeResult!=null) {
sb.append(escapeResult);
} else {
sb.append(nextElement);
}
if(quote) {
sb.append(quotechar);
}
writeColumn(nextLine[i]);
}
if(lineEnd!=null) {
sb.append(lineEnd);
pw.write(sb.toString());
endRow();
}
public void writeColumn(String value) {
if (!isFirstColumn) {
pw.append(separator);
}
if (value == null) {
value = "";
}
boolean quote = false;
if(this.quotestatus == QuoteStatus.AUTO) {
quote = needQuote(value);
} else if(this.quotestatus == QuoteStatus.FORCE) {
quote = true;
}
if(quote) {
pw.append(quotechar);
}
StringBuilder escapeResult = escape(value, quote);
if(escapeResult!=null) {
pw.append(escapeResult);
} else {
pw.println(sb.toString());
pw.append(value);
}
if(quote) {
pw.append(quotechar);
}
isFirstColumn = false;
}
public void endRow() {
if(lineEnd!=null) {
pw.append(lineEnd);
} else {
pw.println();
}
isFirstColumn = true;
}
/**
@@ -173,11 +181,10 @@ public class CSVWriter implements Closeable {
return;
}
StringBuilder sb = new StringBuilder(INITIAL_STRING_SIZE);
for (int i = 0; i < nextLine.length; i++) {
boolean isNil = false;
if (i != 0) {
sb.append(separator);
pw.append(separator);
}
String nextElement = nextLine[i];
@@ -189,7 +196,7 @@ public class CSVWriter implements Closeable {
boolean quote = false;
if(this.quotestatus == QuoteStatus.AUTO) {
quote = needQuote(nextElement,i);
quote = needQuote(nextElement);
} else if(this.quotestatus == QuoteStatus.FORCE) {
quote = true;
}
@@ -201,36 +208,32 @@ public class CSVWriter implements Closeable {
}
if(quote) {
sb.append(quotechar);
pw.append(quotechar);
}
StringBuilder escapeResult = escape(nextElement,quote);
if(escapeResult!=null) {
sb.append(escapeResult);
pw.append(escapeResult);
} else {
sb.append(nextElement);
pw.append(nextElement);
}
if(quote) {
sb.append(quotechar);
pw.append(quotechar);
}
isFirstColumn = false;
}
if(lineEnd!=null) {
sb.append(lineEnd);
pw.write(sb.toString());
} else {
pw.println(sb.toString());
}
endRow();
}
private boolean needQuote(String field, int fieldIndex) {
private boolean needQuote(String field) {
boolean need = field.indexOf(quotechar) > -1
|| field.indexOf(separator) > -1
|| (lineEnd == null && (field.indexOf('\n') > -1 || field.indexOf('\r') > -1))
|| (lineEnd != null && field.indexOf(lineEnd) > -1)
|| (fieldIndex == 0 && field.length() == 0);
|| (isFirstColumn && field.length() == 0);
if(!need && field.length() > 0) {
char first = field.charAt(0);
@@ -314,9 +317,7 @@ public class CSVWriter implements Closeable {
* @throws IOException if bad things happen
*/
public void flush() throws IOException {
pw.flush();
}
/**

View File

@@ -19,7 +19,6 @@ class CSVReaderTest {
Assertions.assertNotNull(values);
}
@Test
void readNext() throws IOException {
@@ -138,6 +137,38 @@ class CSVReaderTest {
Assertions.assertFalse(reader.readNext());
}
@Test
void testSetSafetySwitchWithTooManyColumns() {
Assertions.assertThrows(RuntimeException.class, ()-> {
StringBuilder sb = new StringBuilder();
sb.append("v");
for(int i=0;i<100000;i++) {
sb.append(",").append("v");
}
final String line = sb.toString();
final CSVReader reader = new CSVReader(new StringReader(line), ',');
reader.setSafetySwitch(true);
reader.readNext();
});
}
@Test
void testSetSafetySwitchWithTooBigColumn() {
Assertions.assertThrows(RuntimeException.class, ()-> {
StringBuilder sb = new StringBuilder();
sb.append("v,");
for(int i=0;i<=100000;i++) {
sb.append("v");
}
final String line = sb.toString();
final CSVReader reader = new CSVReader(new StringReader(line), ',');
reader.setSafetySwitch(true);
reader.readNext();
});
}
void checkNextValues(final String comment, final CSVReader reader, final String... excepted) throws IOException {
Assertions.assertTrue(reader.readNext());
final String[] values = reader.getValues();

View File

@@ -12,17 +12,121 @@ import com.talend.csv.CSVWriter.QuoteStatus;
class CSVWriterTest {
@Test
void write() throws IOException {
void writeCustom() throws IOException {
final StringWriter result = new StringWriter();
try (final CSVWriter writer = new CSVWriter(result)) {
writer.setSeparator(',').setEscapeChar('@').setQuoteChar('"').setLineEnd("\n").setQuoteStatus(QuoteStatus.AUTO);
writer.setSeparator(';').setEscapeChar('@').setQuoteChar('"').setLineEnd("\r\n").setQuoteStatus(QuoteStatus.AUTO);
writer.writeAll(Arrays.asList(new String[] { "1", "Hello", "\"Mad\" World" },
new String[] { "2", "Good by", "world @ by" }));
}
Assertions.assertEquals("1,Hello,\"@\"Mad@\" World\"\n2,Good by,world @@ by\n",
Assertions.assertEquals("1;Hello;\"@\"Mad@\" World\"\r\n2;Good by;world @@ by\r\n",
result.toString());
}
@Test
void writeDefault() throws IOException {
final StringWriter result = new StringWriter();
try (final CSVWriter writer = new CSVWriter(result)) {
writer.setLineEnd("\n");
writer.writeAll(Arrays.asList(new String[] { "1", "Hello", "\"Mad\" World" },
new String[] { "2", "Good by", "world \\ by" }));
}
Assertions.assertEquals("1,Hello,\"\"\"Mad\"\" World\"\n2,Good by,world \\ by\n",
result.toString());
}
@Test
void writeForceQuote() throws IOException {
final StringWriter result = new StringWriter();
try (final CSVWriter writer = new CSVWriter(result)) {
writer.setLineEnd("\n");
writer.setQuoteStatus(QuoteStatus.FORCE);
writer.writeAll(Arrays.asList(new String[] { "1", "Hello", "\"Mad\" World" },
new String[] { "2", "Good by", "world \\ by" }));
}
Assertions.assertEquals("\"1\",\"Hello\",\"\"\"Mad\"\" World\"\n\"2\",\"Good by\",\"world \\ by\"\n",
result.toString());
}
@Test
void writeAutoQuote() throws IOException {
final StringWriter result = new StringWriter();
try (final CSVWriter writer = new CSVWriter(result)) {
writer.setLineEnd("\n");
writer.setQuoteStatus(QuoteStatus.AUTO);
writer.writeAll(Arrays.asList(new String[] { "1", "Hello", "\"Mad\" World" },
new String[] { "2", "Good by", "world \\ by" }));
}
Assertions.assertEquals("1,Hello,\"\"\"Mad\"\" World\"\n2,Good by,world \\ by\n",
result.toString());
}
@Test
void writeNoQuote() throws IOException {
final StringWriter result = new StringWriter();
try (final CSVWriter writer = new CSVWriter(result)) {
writer.setLineEnd("\n");
writer.setQuoteStatus(QuoteStatus.NO);
writer.writeAll(Arrays.asList(new String[] { "1", "Hello", "\"Mad\" World" },
new String[] { "2", "Good by", "world \\ by" }));
}
Assertions.assertEquals("1,Hello,\"Mad\" World\n2,Good by,world \\ by\n",
result.toString());
}
@Test
void writeEscapeByBackSlash() throws IOException {
final StringWriter result = new StringWriter();
try (final CSVWriter writer = new CSVWriter(result)) {
writer.setLineEnd("\n");
writer.setEscapeChar('\\');
writer.writeAll(Arrays.asList(new String[] { "1", "Hello", "\"Mad\" World" },
new String[] { "2", "Good by", "world \\ by" }));
}
Assertions.assertEquals("1,Hello,\"\\\"Mad\\\" World\"\n2,Good by,world \\\\ by\n",
result.toString());
}
@Test
void writeFirstColumnEmptyStringCase() throws IOException {
final StringWriter result = new StringWriter();
try (final CSVWriter writer = new CSVWriter(result)) {
writer.setLineEnd("\n");
writer.writeAll(Arrays.asList(new String[] { "", "Hello", "" },
new String[] { "", "Good by", "world \\ by" }));
}
Assertions.assertEquals("\"\",Hello,\n\"\",Good by,world \\ by\n",
result.toString());
}
@Test
void writeWhiteSpaceAndTabProtection() throws IOException {
final StringWriter result = new StringWriter();
try (final CSVWriter writer = new CSVWriter(result)) {
writer.setLineEnd("\n");
writer.writeAll(Arrays.asList(new String[] { "1", "Hello ", "" },
new String[] { "2", " Good by", "world \\ by" }));
}
Assertions.assertEquals("1,\"Hello \",\n2,\" Good by\",world \\ by\n",
result.toString());
}
@Test
void writeNextEnhance() throws IOException {
final StringWriter result = new StringWriter();
try (final CSVWriter writer = new CSVWriter(result)) {
writer.setLineEnd("\n");
writer.writeNextEnhance((new String[] { "1", null, "World" }), "NULL");
writer.writeNextEnhance((new String[] { "", null, "World" }), "NULL");
writer.setQuoteStatus(QuoteStatus.FORCE);
writer.writeNextEnhance((new String[] { "3", null, "World" }), "NULL");
}
Assertions.assertEquals("1,NULL,World\n\"\",NULL,World\n\"3\",NULL,\"World\"\n",
result.toString());
}
}

View File

@@ -4,7 +4,16 @@
<modelVersion>4.0.0</modelVersion>
<groupId>org.talend.components</groupId>
<artifactId>talendzip</artifactId>
<version>1.1-20201120</version>
<version>1.3</version>
<licenses>
<license>
<name>Apache License, Version 2.0</name>
<url>https://www.talendforge.org/modules/licenses/APACHE_v2.txt</url>
<distribution>may be downloaded from the Maven repository</distribution>
</license>
</licenses>
<build>
<plugins>
<plugin>
@@ -52,19 +61,14 @@
<dependency>
<groupId>net.lingala.zip4j</groupId>
<artifactId>zip4j</artifactId>
<version>1.3.3</version>
<version>2.10.0</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-compress</artifactId>
<version>1.19</version>
</dependency>
<dependency>
<groupId>org.talend.libraries</groupId>
<artifactId>checkArchive-1.1-20190917</artifactId>
<version>6.0.0</version>
<version>1.21</version>
</dependency>
</dependencies>
</project>

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