Compare commits
393 Commits
bugfix/mas
...
dochkas/ti
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
2c04a360a3 | ||
|
|
89433520a1 | ||
|
|
e22fe46720 | ||
|
|
deb67d297d | ||
|
|
a9d6a44b7f | ||
|
|
fc81e0bd2f | ||
|
|
8faa1bba22 | ||
|
|
5ff663a025 | ||
|
|
e610fc7c78 | ||
|
|
71adfe57ed | ||
|
|
6da3235e82 | ||
|
|
9a9348dbd7 | ||
|
|
ef141d231f | ||
|
|
ba9b07a7ef | ||
|
|
ac33871bcf | ||
|
|
be61612d11 | ||
|
|
78f11e1915 | ||
|
|
1c2cc10d46 | ||
|
|
a3efe44a58 | ||
|
|
ec95a0660d | ||
|
|
5dad003e3a | ||
|
|
286748d5e0 | ||
|
|
68e17cf5c9 | ||
|
|
c577b2214d | ||
|
|
bca61021d8 | ||
|
|
42456991d0 | ||
|
|
2dfd3d1208 | ||
|
|
9c7f9f8765 | ||
|
|
d3608fce0a | ||
|
|
cf6ad2ea56 | ||
|
|
0fc2cb145b | ||
|
|
9fdefd85a8 | ||
|
|
841e254160 | ||
|
|
b773a3822f | ||
|
|
8e7c5367d6 | ||
|
|
285c1cd61c | ||
|
|
563429e649 | ||
|
|
23b3fbdcf1 | ||
|
|
954dd78d68 | ||
|
|
56200c66e8 | ||
|
|
bd99549311 | ||
|
|
b689b068e4 | ||
|
|
a898ccc320 | ||
|
|
6280d524ff | ||
|
|
d62e535ed0 | ||
|
|
872b792ad1 | ||
|
|
bc84f657ba | ||
|
|
15cf7ddb70 | ||
|
|
6f4ea42405 | ||
|
|
732d3f1479 | ||
|
|
d504323cc1 | ||
|
|
474360f154 | ||
|
|
617f0d2e2c | ||
|
|
2b6b3cbd4d | ||
|
|
2bf70b9940 | ||
|
|
49a00f57d1 | ||
|
|
f21f45c28d | ||
|
|
0c4dfba75c | ||
|
|
08b2202bf4 | ||
|
|
d26fb2cc29 | ||
|
|
7f0bc14fd6 | ||
|
|
ada20f06cb | ||
|
|
469fce3a70 | ||
|
|
a5f73b2d14 | ||
|
|
b521f4208a | ||
|
|
e462d54ebb | ||
|
|
13ea203175 | ||
|
|
e6d62056f3 | ||
|
|
340ee0738a | ||
|
|
55afb8808a | ||
|
|
9fe757d8ac | ||
|
|
c4b5674205 | ||
|
|
32ab9862cf | ||
|
|
a78d75cd75 | ||
|
|
20589b75f2 | ||
|
|
0d5ce18334 | ||
|
|
062c36b33c | ||
|
|
5f9c3c089e | ||
|
|
160fe02147 | ||
|
|
c01f9c84c7 | ||
|
|
3612331c6b | ||
|
|
8de3f29911 | ||
|
|
69e7b7fa77 | ||
|
|
399df5fe10 | ||
|
|
2fe7acf5ac | ||
|
|
d0cb6c1337 | ||
|
|
df355a4388 | ||
|
|
d5cb99e5a7 | ||
|
|
eae6a2c262 | ||
|
|
d40c50f1ba | ||
|
|
33809a44b2 | ||
|
|
e0ea03fcfe | ||
|
|
6a5ab216e4 | ||
|
|
b184ad5fa4 | ||
|
|
966c4a2958 | ||
|
|
35af8a3dc5 | ||
|
|
fe3a94ae72 | ||
|
|
7968396091 | ||
|
|
575670e424 | ||
|
|
7c5c9fd082 | ||
|
|
3b04b8651d | ||
|
|
7ebc296617 | ||
|
|
d7739e23c5 | ||
|
|
862bf636ca | ||
|
|
e59ce89834 | ||
|
|
31eb56130e | ||
|
|
360bb6ad19 | ||
|
|
a20d1f73cb | ||
|
|
9367f9e4e2 | ||
|
|
1716c4a53d | ||
|
|
31abe8e412 | ||
|
|
dba8a49c0d | ||
|
|
fe27538b5f | ||
|
|
ad56c1e790 | ||
|
|
64c6017cce | ||
|
|
ff5018893a | ||
|
|
8faa657699 | ||
|
|
38b038211c | ||
|
|
3416273d30 | ||
|
|
981ee4e4fc | ||
|
|
1a26148bae | ||
|
|
e2b381c4fe | ||
|
|
5e6ce92172 | ||
|
|
18f254a8ce | ||
|
|
15b4174ae0 | ||
|
|
09a762aff3 | ||
|
|
ef18108de7 | ||
|
|
4f5dd9ea91 | ||
|
|
a591b3be76 | ||
|
|
a8d70de160 | ||
|
|
8d114ee5ac | ||
|
|
d8be371e3f | ||
|
|
c46bb87b51 | ||
|
|
bfab7d73ff | ||
|
|
b25bdb5cd8 | ||
|
|
c22e448f2e | ||
|
|
c126c49bb0 | ||
|
|
a276d55584 | ||
|
|
b21c2e8854 | ||
|
|
aa58b1798c | ||
|
|
55a214d78b | ||
|
|
9ca063156f | ||
|
|
61d8175d80 | ||
|
|
738b55f748 | ||
|
|
0ae5d46067 | ||
|
|
15aff46503 | ||
|
|
4ca2a26c61 | ||
|
|
8590938a0c | ||
|
|
fb709ec46e | ||
|
|
2b9b21b2ed | ||
|
|
54375a9349 | ||
|
|
fa924629aa | ||
|
|
f00f9c3c39 | ||
|
|
9151de9cde | ||
|
|
a597e57466 | ||
|
|
e5f763b4e1 | ||
|
|
c3426fdd2f | ||
|
|
d3f6f5b292 | ||
|
|
941da0bc39 | ||
|
|
d0f9060bd4 | ||
|
|
02ed52e0cc | ||
|
|
e976c9bf62 | ||
|
|
bfbf2bbf36 | ||
|
|
af3fd09333 | ||
|
|
f16c97d6bd | ||
|
|
4c0894125f | ||
|
|
f56ea273f8 | ||
|
|
e52b6fd10f | ||
|
|
51432e83c6 | ||
|
|
982a048e43 | ||
|
|
b1f26c263b | ||
|
|
5e89b28c72 | ||
|
|
53328080a5 | ||
|
|
044548edc1 | ||
|
|
af479b6e6a | ||
|
|
c12301d5a3 | ||
|
|
459cb23bae | ||
|
|
2896cb57d4 | ||
|
|
ece6b4cd0d | ||
|
|
cdd89534b9 | ||
|
|
e64820cab0 | ||
|
|
6b82e95328 | ||
|
|
b59ff111a5 | ||
|
|
7f018d34f1 | ||
|
|
2281fab273 | ||
|
|
87c369ca1e | ||
|
|
346755a798 | ||
|
|
6373dabd6f | ||
|
|
74cf2ca49d | ||
|
|
13d4589675 | ||
|
|
921629ac8f | ||
|
|
e59cadab69 | ||
|
|
64c85d2f10 | ||
|
|
20a1cd9476 | ||
|
|
2a4d97e2f9 | ||
|
|
5dfb2fa414 | ||
|
|
635ef37f93 | ||
|
|
cc8ff04ccb | ||
|
|
1112ea17e2 | ||
|
|
aaaf1e0ba5 | ||
|
|
05d204762f | ||
|
|
759c85b2f9 | ||
|
|
63c037343c | ||
|
|
7e61986aa2 | ||
|
|
766fe40204 | ||
|
|
dea6be3175 | ||
|
|
8da7c1aa17 | ||
|
|
b8191aa46c | ||
|
|
532b8200f1 | ||
|
|
dff1b037c0 | ||
|
|
4c48cc91b3 | ||
|
|
49493eb6de | ||
|
|
86de9b6f45 | ||
|
|
ffd5625247 | ||
|
|
a81d38bb2a | ||
|
|
2ce8037e4e | ||
|
|
2d02f681d9 | ||
|
|
52c8a51e2b | ||
|
|
bb2b0c89f4 | ||
|
|
ef8bd6950a | ||
|
|
fea9ec3fb9 | ||
|
|
f996786ed7 | ||
|
|
156ffa5b3f | ||
|
|
241a784b36 | ||
|
|
9492ef6034 | ||
|
|
f806f96585 | ||
|
|
3457ffb30f | ||
|
|
08f1d92ee6 | ||
|
|
5cb031a8ed | ||
|
|
daeea2641a | ||
|
|
f78696e776 | ||
|
|
02738c0a79 | ||
|
|
a992419605 | ||
|
|
ffd2e378ae | ||
|
|
c59a2743de | ||
|
|
e8e4751a2e | ||
|
|
4cc46a0bc7 | ||
|
|
0a21c8d735 | ||
|
|
aee76ce19a | ||
|
|
78a28bc217 | ||
|
|
89f29eecc2 | ||
|
|
7444c68931 | ||
|
|
a7d2ebbfe1 | ||
|
|
db2e13c963 | ||
|
|
b0700e6aba | ||
|
|
450c4062ef | ||
|
|
878c793b30 | ||
|
|
162d69539c | ||
|
|
3ce05e9d7f | ||
|
|
bb173c5e77 | ||
|
|
340f572844 | ||
|
|
028ffd2beb | ||
|
|
2c3708280a | ||
|
|
1a5cc1038d | ||
|
|
a74752e87d | ||
|
|
8bdc378efd | ||
|
|
99beb58953 | ||
|
|
1a7409fcb7 | ||
|
|
036219f5ca | ||
|
|
7ed3514e38 | ||
|
|
25d47c6db3 | ||
|
|
e31db9e33a | ||
|
|
7bd2e943ed | ||
|
|
4a1012dba8 | ||
|
|
12782d28c9 | ||
|
|
9cf5e2a29e | ||
|
|
1ef9cf8cd1 | ||
|
|
951055f00c | ||
|
|
ec4be52d06 | ||
|
|
c04240ee23 | ||
|
|
53a35c7551 | ||
|
|
5f966a7796 | ||
|
|
b384608b4c | ||
|
|
bdfe560cb4 | ||
|
|
979574709e | ||
|
|
2b76ccc994 | ||
|
|
5f172ec096 | ||
|
|
15b20a6b4a | ||
|
|
352b69ee78 | ||
|
|
d4eb8346cc | ||
|
|
3072be03f6 | ||
|
|
2587b78d01 | ||
|
|
96daa21f6f | ||
|
|
05928ddb45 | ||
|
|
f574223e1d | ||
|
|
5e0191fc6b | ||
|
|
e4bc47faf4 | ||
|
|
15485b8073 | ||
|
|
e54a5539a3 | ||
|
|
dc2fe3ebff | ||
|
|
3393c79cfc | ||
|
|
ce827cf975 | ||
|
|
3aa81c490d | ||
|
|
1bce339197 | ||
|
|
8a9c24f80a | ||
|
|
ec3be21f28 | ||
|
|
ec4b7f1862 | ||
|
|
87b2d61e0c | ||
|
|
3aeb0f435f | ||
|
|
d3e732661d | ||
|
|
4b02eab8ce | ||
|
|
df2cac92df | ||
|
|
7ee99a9e56 | ||
|
|
d9ad02e2b6 | ||
|
|
74b894166d | ||
|
|
d6d2dfdb6f | ||
|
|
b08087e24a | ||
|
|
4308b888d7 | ||
|
|
04448025a4 | ||
|
|
a56fab7f5b | ||
|
|
f2422727b3 | ||
|
|
94f818195d | ||
|
|
8679592c7e | ||
|
|
086d2763f3 | ||
|
|
939dd01908 | ||
|
|
5dfcdcfe5b | ||
|
|
d04e966718 | ||
|
|
4294ecd024 | ||
|
|
1d2d17d71d | ||
|
|
aa470dbab3 | ||
|
|
f7bbc3d17b | ||
|
|
f897438858 | ||
|
|
7d5e785786 | ||
|
|
0d647971f0 | ||
|
|
40ef58e9d4 | ||
|
|
24de5b78a9 | ||
|
|
e5ee4773de | ||
|
|
728f054338 | ||
|
|
f75c405324 | ||
|
|
c9d28aa83d | ||
|
|
bf520fca50 | ||
|
|
218a64e43d | ||
|
|
38ec98656c | ||
|
|
30aa9a5971 | ||
|
|
b4c4a58fac | ||
|
|
219907e072 | ||
|
|
f152ffe549 | ||
|
|
34bfd9b7d2 | ||
|
|
0bbb05d6f5 | ||
|
|
468fae8511 | ||
|
|
39e55fdd4d | ||
|
|
eb333cbf0f | ||
|
|
50c8a14d85 | ||
|
|
f1761274e6 | ||
|
|
1ea53b0216 | ||
|
|
97a26b4bd9 | ||
|
|
5317662b2f | ||
|
|
d1d03c4f55 | ||
|
|
9c81eaa389 | ||
|
|
074268fbeb | ||
|
|
950e5b36a2 | ||
|
|
6f48e78ae5 | ||
|
|
830eb8f37e | ||
|
|
92722dc4d3 | ||
|
|
1242e91096 | ||
|
|
102a373c50 | ||
|
|
0dccedeb15 | ||
|
|
4ea68e9d73 | ||
|
|
c899aa5ff4 | ||
|
|
a9ae684dbf | ||
|
|
e1c2aebefc | ||
|
|
201b2a93e6 | ||
|
|
63b622f47a | ||
|
|
d934094c2d | ||
|
|
34f62a4851 | ||
|
|
1c16e14ca2 | ||
|
|
49911dc43b | ||
|
|
217f7d40a2 | ||
|
|
1450ab0923 | ||
|
|
689c76590a | ||
|
|
79a847df5b | ||
|
|
06cc923fbd | ||
|
|
b7e954fade | ||
|
|
9c320ebb2b | ||
|
|
aee8d82501 | ||
|
|
c1cc2cd16a | ||
|
|
7c64d6af91 | ||
|
|
b7155465e6 | ||
|
|
61e8eaff4b | ||
|
|
7d101d3b73 | ||
|
|
47bdb6f36f | ||
|
|
8bec384480 | ||
|
|
70b286861c | ||
|
|
fe621f2d57 | ||
|
|
6edaf6c964 | ||
|
|
6709ec4c12 | ||
|
|
978046c657 | ||
|
|
ff6bd6fb4d | ||
|
|
916ed34890 | ||
|
|
edaa962b76 | ||
|
|
2c61ab6256 | ||
|
|
13e5ad1618 | ||
|
|
b0d8caf5b0 |
@@ -1 +1,3 @@
|
||||
bin.includes = feature.xml
|
||||
bin.includes = feature.xml,\
|
||||
license.html,\
|
||||
feature.properties
|
||||
|
||||
175
main/features/org.talend.gmf.feature/feature.properties
Normal file
175
main/features/org.talend.gmf.feature/feature.properties
Normal 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 ##########################################
|
||||
@@ -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>
|
||||
|
||||
35
main/features/org.talend.gmf.feature/feature_fr.properties
Normal file
35
main/features/org.talend.gmf.feature/feature_fr.properties
Normal file
File diff suppressed because one or more lines are too long
35
main/features/org.talend.gmf.feature/feature_ja.properties
Normal file
35
main/features/org.talend.gmf.feature/feature_ja.properties
Normal file
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
189
main/features/org.talend.gmf.feature/license.html
Normal file
189
main/features/org.talend.gmf.feature/license.html
Normal 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 "CONTENT"). 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 ("EPL"). 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, "Program" 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 ("Repository") in software
|
||||
modules ("Modules") and made available as downloadable
|
||||
archives ("Downloads").</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 ("Plug-ins"), plug-in
|
||||
fragments ("Fragments"), and features
|
||||
("Features").</li>
|
||||
<li>Each Plug-in or Fragment may be packaged as a sub-directory
|
||||
or JAR (Java™ ARchive) in a directory named
|
||||
"plugins".</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 "features". Within a
|
||||
Feature, files named "feature.xml" 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 ("Included
|
||||
Features"). Within a Feature, files named
|
||||
"feature.xml" 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 "about.html"
|
||||
("Abouts"). The terms and conditions governing Features and
|
||||
Included Features should be contained in files named
|
||||
"license.html" ("Feature Licenses"). 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 "src" 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 ("Feature Update License") 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
|
||||
"license" property of files named
|
||||
"feature.properties" 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 ("Provisioning Technology") for the purpose of
|
||||
allowing users to install software, documentation, information and/or
|
||||
other materials (collectively "Installable Software"). 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>
|
||||
("Specification").
|
||||
</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 ("Provisioning
|
||||
Process") in which a user may execute the Provisioning
|
||||
Technology on a machine ("Target Machine") 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 ("Installable Software Agreement") 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>
|
||||
@@ -9,4 +9,4 @@
|
||||
</parent>
|
||||
<artifactId>org.talend.gmf.feature</artifactId>
|
||||
<packaging>eclipse-feature</packaging>
|
||||
</project>
|
||||
</project>
|
||||
|
||||
@@ -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"/>
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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,\
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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()%>");
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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%>;
|
||||
<%
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -71,7 +71,7 @@
|
||||
}
|
||||
}
|
||||
|
||||
TalendException te = new TalendException(e, currentComponent, globalMap);
|
||||
TalendException te = new TalendException(e, currentComponent, cLabel, globalMap);
|
||||
<%
|
||||
if(NodeUtil.hasVirtualComponent(subTree.getNodes())){
|
||||
%>
|
||||
|
||||
@@ -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())){
|
||||
|
||||
@@ -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())){
|
||||
%>
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -1,5 +0,0 @@
|
||||
providerName=www.example.org
|
||||
pluginName=EmittersPool Model
|
||||
components=Components
|
||||
trunjob=tRunJob
|
||||
format=Format
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
@@ -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
|
||||
|
||||
@@ -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?
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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,\
|
||||
|
||||
@@ -1,5 +0,0 @@
|
||||
Exchange=Exchange
|
||||
DownloadComponenentsAction.Label=Download Selected Components
|
||||
RefreshComponenentsAction.Label=Refresh Components List
|
||||
providerName=www.example.org
|
||||
pluginName=Exchange Model
|
||||
@@ -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
|
||||
@@ -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
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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>
|
||||
@@ -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>
|
||||
|
||||
@@ -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>
|
||||
|
||||
|
||||
@@ -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 -->
|
||||
|
||||
@@ -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>
|
||||
|
||||
|
||||
@@ -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-->
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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);
|
||||
|
||||
}
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -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());
|
||||
}
|
||||
|
||||
}
|
||||
@@ -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);
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
|
||||
@@ -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(),
|
||||
|
||||
@@ -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());
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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>
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -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<ColumnVector.Type, Object> 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<Object>
|
||||
* @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;
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -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>
|
||||
|
||||
|
||||
@@ -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 :
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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>
|
||||
|
||||
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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
|
||||
@@ -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
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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 **/
|
||||
|
||||
@@ -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();
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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());
|
||||
}
|
||||
}
|
||||
@@ -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
Reference in New Issue
Block a user