Compare commits
37 Commits
release/7.
...
release/7.
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
6a813e2a73 | ||
|
|
4b7a59b497 | ||
|
|
d5490d2663 | ||
|
|
fbfc3735ad | ||
|
|
76fbd6fd32 | ||
|
|
43ef7fa5e0 | ||
|
|
be28a0d122 | ||
|
|
e44522bb69 | ||
|
|
67f04b7db3 | ||
|
|
2502688e64 | ||
|
|
6175aca630 | ||
|
|
55f7531d68 | ||
|
|
d6c888e235 | ||
|
|
7db18b198f | ||
|
|
039ed90481 | ||
|
|
eea9c85609 | ||
|
|
ca9d09e04e | ||
|
|
b5dadab5a5 | ||
|
|
2add3ffc0e | ||
|
|
38b02ee746 | ||
|
|
d8daf75329 | ||
|
|
555a722ade | ||
|
|
8a003e1a21 | ||
|
|
ce75b33a11 | ||
|
|
72fe8689bd | ||
|
|
f71f9c03ed | ||
|
|
7063b514ff | ||
|
|
ee60d35aba | ||
|
|
93db6863a8 | ||
|
|
680031d91f | ||
|
|
e779dfec2d | ||
|
|
e16c7e1af3 | ||
|
|
55aa8236ba | ||
|
|
e381b2f237 | ||
|
|
44b7aee6d0 | ||
|
|
499759ad39 | ||
|
|
cf830accc0 |
@@ -20,7 +20,7 @@
|
||||
<import plugin="org.apache.servicemix.bundles.avro" version="0.0.0" match="greaterOrEqual"/>
|
||||
<import plugin="org.junit" version="4.13.2" match="greaterOrEqual"/>
|
||||
<import plugin="org.slf4j.api" version="0.0.0" match="greaterOrEqual"/>
|
||||
<import plugin="org.apache.commons.configuration" version="2.0.0" match="greaterOrEqual"/>
|
||||
<import plugin="org.apache.commons.commons-configuration2" version="2.8.0" match="greaterOrEqual"/>
|
||||
</requires>
|
||||
<plugin id="org.talend.daikon" download-size="0" install-size="0" version="0.0.0" unpack="false"/>
|
||||
<plugin id="org.talend.daikon.exception" download-size="0" install-size="0" version="0.0.0" unpack="false"/>
|
||||
|
||||
@@ -92,7 +92,7 @@
|
||||
<dependency>
|
||||
<groupId>xerces</groupId>
|
||||
<artifactId>xercesImpl</artifactId>
|
||||
<version>2.12.0</version>
|
||||
<version>2.12.2</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>ch.qos.reload4j</groupId>
|
||||
|
||||
@@ -16,7 +16,6 @@ import java.beans.PropertyChangeListener;
|
||||
import java.beans.PropertyChangeSupport;
|
||||
import java.io.File;
|
||||
import java.lang.reflect.InvocationTargetException;
|
||||
import java.net.URL;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Date;
|
||||
import java.util.Dictionary;
|
||||
@@ -89,7 +88,6 @@ import org.talend.core.hadoop.BigDataBasicUtil;
|
||||
import org.talend.core.model.general.ILibrariesService;
|
||||
import org.talend.core.model.general.ModuleNeeded;
|
||||
import org.talend.core.model.general.Project;
|
||||
import org.talend.core.model.metadata.MetadataTalendType;
|
||||
import org.talend.core.model.metadata.builder.connection.AbstractMetadataObject;
|
||||
import org.talend.core.model.metadata.builder.connection.MetadataTable;
|
||||
import org.talend.core.model.migration.IMigrationToolService;
|
||||
@@ -2241,14 +2239,6 @@ public final class ProxyRepositoryFactory implements IProxyRepositoryFactory {
|
||||
TimeMeasurePerformance.step("logOnProject", "Sync components libraries"); //$NON-NLS-1$
|
||||
}
|
||||
|
||||
try {
|
||||
// for new added mapping file, sync to project mapping folder
|
||||
MetadataTalendType.syncNewMappingFileToProject();
|
||||
} catch (SystemException e) {
|
||||
// ignore
|
||||
ExceptionHandler.process(e);
|
||||
}
|
||||
|
||||
CodesJarResourceCache.initCodesJarCache();
|
||||
|
||||
currentMonitor = subMonitor.newChild(1, SubMonitor.SUPPRESS_NONE);
|
||||
@@ -2349,17 +2339,6 @@ public final class ProxyRepositoryFactory implements IProxyRepositoryFactory {
|
||||
TimeMeasurePerformance.step("logOnProject", "sync log4j"); //$NON-NLS-1$ //$NON-NLS-2$
|
||||
}
|
||||
|
||||
try {
|
||||
URL url = MetadataTalendType.getProjectForderURLOfMappingsFile();
|
||||
if (url != null) {
|
||||
// set the project mappings url
|
||||
System.setProperty("talend.mappings.url", url.toString()); // $NON-NLS-1$
|
||||
}
|
||||
} catch (SystemException e) {
|
||||
// ignore
|
||||
ExceptionHandler.process(e);
|
||||
}
|
||||
|
||||
if (runProcessService != null && !isCommandLineLocalRefProject) {
|
||||
runProcessService.initializeRootPoms(monitor);
|
||||
|
||||
|
||||
@@ -0,0 +1,238 @@
|
||||
{
|
||||
"mapping_AS400.xml": {
|
||||
"28fe6b6c94e4e486d431873ba556c1c18ae09140": "7007071c9cf718d34da7d61208ceea7f05de94d0",
|
||||
"3d4845af057220e02773029683a0fd99dee489e5": "a9861e98b581dfdafa7839238710bd930989960a",
|
||||
"458d597928478f43c94098dfe47d9bb8d07e89e2": "d4655e28a5da3e6a2cc03a1305cc1c2970d8e9b8",
|
||||
"76a4aa354d986ed5682797337817a8ddbb80ae89": "d568bf814d7b27fc7c63cbd07ea6b4a3b0ad3ff8"
|
||||
},
|
||||
"mapping_Access.xml": {
|
||||
"55d314ed9708263bfcec193abb57a1e25806626e": "7007071c9cf718d34da7d61208ceea7f05de94d0",
|
||||
"718db25f8e86d6b61284a4ffdc1fd19faffb98a9": "d4655e28a5da3e6a2cc03a1305cc1c2970d8e9b8"
|
||||
},
|
||||
"mapping_AmazonAurora.xml": {
|
||||
"a93c809bdf8e5df8095580e3f23b29658e044302": "ebc9394c2728a3f3850fcbafac4156ef15aab37f",
|
||||
"ba16c203a8a993e13ebab0da5cccb7a5e1c01e56": "7007071c9cf718d34da7d61208ceea7f05de94d0"
|
||||
},
|
||||
"mapping_BigQuery.xml": {
|
||||
"db723e5b4a38bbc8316593be33ab9d74f57776e6": "e1770847f656589810753c19d420228326462f34",
|
||||
"e12df204d9f5081971d03c64b43de2456557e02e": "7007071c9cf718d34da7d61208ceea7f05de94d0",
|
||||
"e9c02d3e9bc3a3649fd33803353e61db6fcd2ea8": "01749151dcc171ebb6457ba872ee352d58a1dfd4"
|
||||
},
|
||||
"mapping_Cassandra.xml": {
|
||||
"20ed188f8824c14852304920cf82ca7119eb1be0": "ab7b23e6c94946ca2358cc0cfd82c4d77a4c5839",
|
||||
"692353c474569bafd44854b7f7343929beddee83": "7007071c9cf718d34da7d61208ceea7f05de94d0",
|
||||
"e42bdadd0009e7595773edcc1652f181a8fdf151": "76ed27054255165c23d8c0c8db081a41a50430c9",
|
||||
"ff005c2bfc47789e5715e949f98bd6d72c934b54": "ebe76b0edd0eda3488527b95f2a6d925d091a408"
|
||||
},
|
||||
"mapping_Cassandra22_datastax.xml": {
|
||||
"2ddd561eac2a04a7b08949c0764c5e76f80c89f5": "b0378fb45ae238b884417db468872341e156f138",
|
||||
"33b483680a44a8229b09698df3803f5834987f18": "7007071c9cf718d34da7d61208ceea7f05de94d0"
|
||||
},
|
||||
"mapping_Cassandra40.xml": {
|
||||
"e92b373950021eb425db9e3eba8391f98ce7e4a8": "7007071c9cf718d34da7d61208ceea7f05de94d0"
|
||||
},
|
||||
"mapping_Cassandra_datastax.xml": {
|
||||
"3cb6b5cf167fb5ba82b3ebdc602f22ecdacdafb5": "56fad9370b27d03a9636d8368350274480fc2bce",
|
||||
"ca09b169eee6e6dcfa81f976bd98ef4aae81cdf2": "7007071c9cf718d34da7d61208ceea7f05de94d0",
|
||||
"e1620c54d6793c6d1885e3e2fcdf242c0e3a4059": "df28e2b92f57ba0486215f334edb649a58788712"
|
||||
},
|
||||
"mapping_Databricks_Delta_Lake.xml": {
|
||||
"d48793d7173ea7d07090f5e683045c3f60cc12c8": "21f5ac777158fc55288af7337737aa675e20bdf3",
|
||||
"dcbe4533fe16fee70f24702edddec78b81e26463": "7007071c9cf718d34da7d61208ceea7f05de94d0"
|
||||
},
|
||||
"mapping_Exasol.xml": {
|
||||
"21ff2b1a69b7242fa48a1218b0d5f8a6b0ba607e": "a0d36282ff5d6825b206ab6f794d13e048ac2192",
|
||||
"3768b1e7a941e66f8a70ad7e1a65aa7d2b598daa": "7ef9ede0f988f10489c1f5ffe16ea24d2d14ecdd",
|
||||
"6babf3080a3baa05bcd8a2815d2f31a0b15e1550": "02a98e53d3b6457272768ce0ae5c82992b403465",
|
||||
"7de8a81bc2eb7c4da639af148c2c67b5c6de4bc0": "7007071c9cf718d34da7d61208ceea7f05de94d0",
|
||||
"a728306274b817e8afa0101d3b7621398addc2f3": "b5b116b3758f58e7500058e1805bf93bf5a2f0c1",
|
||||
"dc2eba14e50ce7c413fb7696355e67d26fe5fb9b": "57bacf1f97951fcf6f650f1afdec35b5ea22638c",
|
||||
"f670268dfd5a8f80fbdbe6fe4ad668cb6c8f25d6": "ead0fb11f124cf05ad0f7fde21cdedbb3cf2160b"
|
||||
},
|
||||
"mapping_Firebird.xml": {
|
||||
"51a041d0b43678433f6303aebac5f92bfdb7b8a6": "7007071c9cf718d34da7d61208ceea7f05de94d0",
|
||||
"d504ece6ca9e10e23f5e0f05660e5f49e7d999ff": "d4655e28a5da3e6a2cc03a1305cc1c2970d8e9b8"
|
||||
},
|
||||
"mapping_Greenplum.xml": {
|
||||
"16418522006e4505c7fb7d44c4d06928de20eaf8": "ec04f46618ef0586081fd3b17ad7b85239958194",
|
||||
"4f3e1b53baca729eef796979e97592c8724a2d91": "caf54e3d2b6c6d685cdcf2a243c28c408a9cd652",
|
||||
"525a7ca1a48599a840b1feca641ef6a413d7384b": "7007071c9cf718d34da7d61208ceea7f05de94d0",
|
||||
"c4ed635e67d7d82c24008677f313e17df98f5d08": "d4655e28a5da3e6a2cc03a1305cc1c2970d8e9b8"
|
||||
},
|
||||
"mapping_H2.xml": {
|
||||
"4e3ed630d3133326a0cf4728865b3efa4cbecc63": "d4655e28a5da3e6a2cc03a1305cc1c2970d8e9b8",
|
||||
"84b0b863c0532f93bffc0ab54d98a449f331e319": "7007071c9cf718d34da7d61208ceea7f05de94d0",
|
||||
"cb093084dc1dc3f999707a1b9d1474f87bbf6d17": "341b1220b6bc6bf59eef81e97c694d06134bd8a2"
|
||||
},
|
||||
"mapping_HSQLDB.xml": {
|
||||
"0a37e2aec423d0c401aff092e4fda9e01c5dd4ff": "d4655e28a5da3e6a2cc03a1305cc1c2970d8e9b8",
|
||||
"73af8e3e8646ea58f4cfe60fe4905e90340b3e12": "890a391388725c112ffbbd2dd8b8d267305df4a7",
|
||||
"98819a80cd8994a02579ea1d9b0992a0b68a5403": "7007071c9cf718d34da7d61208ceea7f05de94d0"
|
||||
},
|
||||
"mapping_Hive.xml": {
|
||||
"0265c6f16ab2c9eea7da660e4e1c8a3ec7bc0ab3": "37ef13c438cda4cd1c3e091d99a00036b328e57f",
|
||||
"1f5811f41b2836cd7baeb23daef91d2ea313f2c6": "3646a1bcd980a3209501a5c846338823f55d74b2",
|
||||
"21a44cd9d32a5478a4de61a86b398a9ef80401ac": "7007071c9cf718d34da7d61208ceea7f05de94d0",
|
||||
"5444fa9a484704d774259430623e0db1495a867f": "ef872732cde37c6c7684dc773641be0b78f5c57c",
|
||||
"e7f128915578dd29538a7debeb5f47528b5a6e59": "86ba7c19d9300a02dbcb0801852e728acd261132"
|
||||
},
|
||||
"mapping_IBMDB2.xml": {
|
||||
"dc42cf143f3a0f10ad8c280f16ef44ae1f907123": "d4655e28a5da3e6a2cc03a1305cc1c2970d8e9b8",
|
||||
"f8aea23cc5b48ebb3cdd229be3f66b28890ff4f8": "7007071c9cf718d34da7d61208ceea7f05de94d0"
|
||||
},
|
||||
"mapping_Impala.xml": {
|
||||
"55ed99aa28c989bd5777f41b7c87ed4eb9f245a8": "7007071c9cf718d34da7d61208ceea7f05de94d0"
|
||||
},
|
||||
"mapping_Informix.xml": {
|
||||
"40da9213cf85b1712f38474dea4f2ec3447dfe3c": "7007071c9cf718d34da7d61208ceea7f05de94d0",
|
||||
"938e41f3719c29248d4f58c303464bbfb50e343a": "d4655e28a5da3e6a2cc03a1305cc1c2970d8e9b8"
|
||||
},
|
||||
"mapping_Ingres.xml": {
|
||||
"811e8bf4e7bc2e6b9c3fcb5f074601a873f15e1d": "15afc1b074c8a6e4aee39c1d5a3347555dbe36a0",
|
||||
"95873faa81ee3de2eea02efab5c127e6188df796": "d4655e28a5da3e6a2cc03a1305cc1c2970d8e9b8",
|
||||
"9c5682f564e861e1db3b5184fd40e718e0912a4a": "d51edc7e08871897572c9b1f1cd2d2d2df347dfb"
|
||||
},
|
||||
"mapping_Interbase.xml": {
|
||||
"4d37474d07991154aa0148e7a030c4725d45ef0d": "d4655e28a5da3e6a2cc03a1305cc1c2970d8e9b8",
|
||||
"71e8386c3e21f726550234c52d3ca50dcfa655de": "d51edc7e08871897572c9b1f1cd2d2d2df347dfb"
|
||||
},
|
||||
"mapping_JavaDB.xml": {
|
||||
"652fd7f2f11fc27903d333e1699cc419804caa66": "7007071c9cf718d34da7d61208ceea7f05de94d0",
|
||||
"66dbe13a0043798498f37b6e5495bc3aaa8fb90b": "d4655e28a5da3e6a2cc03a1305cc1c2970d8e9b8"
|
||||
},
|
||||
"mapping_MSSQL.xml": {
|
||||
"305eeb294ae8bb07bee7d1e182e431e2e7f6273d": "d7761630e63b399f89eaaeb9e19e775bf1579dde",
|
||||
"b93c0825ffd799d89608239385d7e4b60de96209": "7007071c9cf718d34da7d61208ceea7f05de94d0"
|
||||
},
|
||||
"mapping_MaxDB.xml": {
|
||||
"586fc7ac94a9abec8a76a587dc6aa0fae0079bf3": "7007071c9cf718d34da7d61208ceea7f05de94d0"
|
||||
},
|
||||
"mapping_MicrosoftCrm.xml": {
|
||||
"e1c5e77e19adea1406e5bb511a1c6adb8b610bfe": "7007071c9cf718d34da7d61208ceea7f05de94d0"
|
||||
},
|
||||
"mapping_MicrosoftCrm_odata.xml": {
|
||||
"1166b9ce6ce163d11a57046db5ee2dc9d5e496df": "e86fd3fd5c3b4ba9ff613155fba014a80c40cf01",
|
||||
"3f25ced1039b99d1c07b23e3d27cac1562e52a6f": "c1190dfa35e839496745516dbcfeb8a309fa49d0",
|
||||
"750541f00f3c5da6007623f3514add6dc3417a5f": "54331fa4ec501557eb9c32d434c332cf3d121349",
|
||||
"9612a2611bd29461dd46fc70f0e2841892f3f096": "7007071c9cf718d34da7d61208ceea7f05de94d0"
|
||||
},
|
||||
"mapping_MsOdbc.xml": {
|
||||
"01561cb7b5630a4a6aed576215ccdb3991d2db52": "d4655e28a5da3e6a2cc03a1305cc1c2970d8e9b8",
|
||||
"a9c94a6255061e8100b15590da35196464b77d46": "7007071c9cf718d34da7d61208ceea7f05de94d0"
|
||||
},
|
||||
"mapping_Mysql.xml": {
|
||||
"128d7d66eb994a032128949fcbe0c953c158beaa": "956802047d6623ba61e2da68aba2db8f38bca48a",
|
||||
"522654fad6fa3d008ef386fc9360ae51df910729": "d4655e28a5da3e6a2cc03a1305cc1c2970d8e9b8",
|
||||
"5dfc7b71e1f6a9fad6ebf47a1d748893c85bbe5e": "341b1220b6bc6bf59eef81e97c694d06134bd8a2",
|
||||
"894b0d1d2c23c98f2e14920013b82524334dd255": "74b3640e2923d4c60c92042ff03d15b4ac4e9341",
|
||||
"8cb3d2b06d8a2b12e8673e6e9519f85ec08b35ec": "f22d442cbde13623a1b96c15ea2df8dd1a7d755e",
|
||||
"a94341e5bd6c4ba0eef57f9d6d3cc6c0006c785b": "ebc9394c2728a3f3850fcbafac4156ef15aab37f",
|
||||
"d7e74c8e9f8a47ab258472ec43236d2933c70838": "7007071c9cf718d34da7d61208ceea7f05de94d0",
|
||||
"edc9d1453c8f9ac8548822ff2f90a4defcd02094": "fd4d974c755ced1969b27126844b3f462bca1a52"
|
||||
},
|
||||
"mapping_Netezza.xml": {
|
||||
"0c769aa277190990fb33a918cc57189b9ba6306f": "c8ca64da55ceb677fd97169f6a924ec80f01b2fc",
|
||||
"0f5e9677f936a5414ce6593229aa47ea5b757276": "3074a57eee1407a413e460ed27e31d48d21d609b",
|
||||
"b3e25e55f8281cb616b3f549e6a2e5a83d4ad62a": "7007071c9cf718d34da7d61208ceea7f05de94d0"
|
||||
},
|
||||
"mapping_Oracle.xml": {
|
||||
"0407cea7e87144cb601bc9a3f039121feca79b65": "cb6b87dabdc71be0f1db4bdca694bcb61b679c05",
|
||||
"064d2a5940379346638412dd7f4cb7dbcc30e672": "7007071c9cf718d34da7d61208ceea7f05de94d0",
|
||||
"26a2295f6401de6e17feb61b261f7fbdfc4d609d": "e7604a488f339028a3cf14ae4031b0fb3fd50bcc",
|
||||
"9b0306aacec772d9d82be49ab702254ce1e08bea": "912702dc8ea921a34ea0522235db65f8655bf8e9",
|
||||
"df2537b329d0b09828c281e62208daf379f7b60a": "544faa63bbe63dd070a94c84139c705ac6432314"
|
||||
},
|
||||
"mapping_ParAccel.xml": {
|
||||
"1ba71027d3a60773c7c008143c2146e4db2ef112": "d4655e28a5da3e6a2cc03a1305cc1c2970d8e9b8",
|
||||
"5085a1e922f77895a2f7c85e2347acfe03034493": "d51edc7e08871897572c9b1f1cd2d2d2df347dfb"
|
||||
},
|
||||
"mapping_Postgres.xml": {
|
||||
"ce8b7f58644b8f7814a5522d172b4192ff89bd4f": "7007071c9cf718d34da7d61208ceea7f05de94d0",
|
||||
"e1c1f04f95222bcadda336d6a4f0ea07c6ebb08e": "d4655e28a5da3e6a2cc03a1305cc1c2970d8e9b8"
|
||||
},
|
||||
"mapping_PostgresPlus.xml": {
|
||||
"69b7d7f722538a322fb0bf867177d1ce5a0d7ad6": "7007071c9cf718d34da7d61208ceea7f05de94d0",
|
||||
"f576a7bb0327eeff1fd63a9a09106ae33f3ec90e": "d4655e28a5da3e6a2cc03a1305cc1c2970d8e9b8"
|
||||
},
|
||||
"mapping_Redshift.xml": {
|
||||
"0cc6e153fe35041a009cb222e0276e35ddbc92f1": "2023289b9965fc14b959463ba5050be6aead361a",
|
||||
"3b941be88a5f13bd8fd905fb1fa5f2a241e89ed9": "915a307b629c7a75bcbedc86267db1e8995b77f3",
|
||||
"85ba89fdadfca4a2d755856a75e904f6015926a9": "de08533f6561319fc2914181a2705ccd75e29c40",
|
||||
"8f3eda24c1f413b17b2b8c48695dbd786fa29b6b": "93112768d7eea6df44d92a3efbd4f1dfa20e06b6",
|
||||
"ab86d7fda94e0b368f739f73994ce2a2147be12d": "0fd3f58b7aa78aaae6fb40d042780bec64da75e6",
|
||||
"ad0eecc7e9f25c3b904cc11b062a8185456478ee": "7007071c9cf718d34da7d61208ceea7f05de94d0"
|
||||
},
|
||||
"mapping_Redshift_new.xml": {
|
||||
"43085952e178e2c570ab7d2a262278dd2896dd96": "699efe42a33aab3ca0bbaa7a1abee23368e61606"
|
||||
},
|
||||
"mapping_SAPHana.xml": {
|
||||
"1a07a8174468a5a1d55378dd0e21d7c1f9e531bc": "48ea42be6b348a3c993760e7f2c94c58ac08fdae",
|
||||
"331ae8a035e6b1f2cd722be6411df4ae4a95bb33": "7007071c9cf718d34da7d61208ceea7f05de94d0"
|
||||
},
|
||||
"mapping_SQLite.xml": {
|
||||
"0a97b6e8acf8bd16aa34a3c01707f1e2a9eeff1f": "7007071c9cf718d34da7d61208ceea7f05de94d0",
|
||||
"b7b7b7c690efacc208316c911571a8513b5ea713": "d4655e28a5da3e6a2cc03a1305cc1c2970d8e9b8"
|
||||
},
|
||||
"mapping_SingleStore.xml": {
|
||||
"9da7d92af5e9b0697436f74fffd190e8af061567": "7007071c9cf718d34da7d61208ceea7f05de94d0"
|
||||
},
|
||||
"mapping_Snowflake.xml": {
|
||||
"d459c6be3786f9358615eaf692a1c7920b4c6e74": "7007071c9cf718d34da7d61208ceea7f05de94d0"
|
||||
},
|
||||
"mapping_Sybase.xml": {
|
||||
"081038547cac8342cf5cadf8bfd02fe4d2929323": "1ff9877dce90e2ef39b267ea60de534796035a95",
|
||||
"09a0f4dc71ff9a844e1162600409317e92e1ff18": "28534ffb4ae599adec53853776856e82c23c815a",
|
||||
"4ee2c12f372953e77404481a962b3aca14abadb0": "f02b1b6902098b2da90cde6b22a9a49ec328970a",
|
||||
"5752dcfa409e903af77587f151d580c68c9e4ac7": "3db0fa1fbed8ae378d52aa8c36b6fed55d184e5b",
|
||||
"6f4e7913b4b31e8fb4e097690c8b903a58842283": "d4655e28a5da3e6a2cc03a1305cc1c2970d8e9b8",
|
||||
"7676e2d94473564322ce37cad92b7f8b09751b1b": "1cc6237de63892e097c77637ac8457cf8fefbf6f",
|
||||
"8bbad7895713f3a399ddb195c40353e18d3e83b9": "984ca27e4ee0177793b2111797700390424cb746",
|
||||
"bbc091c50a7bd8a8fe630d99a9c2e3f2f878ac88": "67a9b521c9d698b3411fb49410ac61a15f4bc7db",
|
||||
"d841719dcf79a12d0189301e40c0e9e973a45c4f": "7007071c9cf718d34da7d61208ceea7f05de94d0",
|
||||
"e103a9671d9bcf360fd2e61ee97f4547d0d52241": "e19031add3dc54bf9d0e731f3a05738af48ebb6d",
|
||||
"e1c42d74cc0dc3681b5bd45a901a3bedeb53ec68": "75df15acaa5c8d1dcd4a8e855e0df969fdea25d5",
|
||||
"e30d1f01e88bdaf926855e00d1aef3a37a7eb6e4": "c91dd79086a42dce5417de77bb7ce61c0bd6cbbf",
|
||||
"ee5d7f5f9510f63c340f87862327b869bf4cb743": "607764748cdbff669d2ccfcbaafdaa0d83598f32"
|
||||
},
|
||||
"mapping_Teradata.xml": {
|
||||
"10ed107c1d66b38d51739ffdd0820db676c42cef": "45dbf10541f6dd32283038bcc5b04b10e305770a",
|
||||
"55e6a511c2cb39aca11de302a3850eb2d1f6e3a5": "fc652f1cc70f6caa05d5c65e57115f86653f7841",
|
||||
"ac9ffae887ab4d20d4eca0eddc83163e99507ec8": "7007071c9cf718d34da7d61208ceea7f05de94d0",
|
||||
"f9b0367424f721cd8029d3540c9a82f39d74a6b4": "c002b50a69b8a0193780e7c0d1788bbd9a5145c3"
|
||||
},
|
||||
"mapping_VectorWise.xml": {
|
||||
"06f86121a9492b3104047691b19718a5d9d49be9": "d51edc7e08871897572c9b1f1cd2d2d2df347dfb",
|
||||
"edf255202bcfad77ff6f3fac11714891934225c4": "d4655e28a5da3e6a2cc03a1305cc1c2970d8e9b8"
|
||||
},
|
||||
"mapping_Vertica.xml": {
|
||||
"28153eaab1c47b8718ca3c49553ec40b047d2878": "d4655e28a5da3e6a2cc03a1305cc1c2970d8e9b8",
|
||||
"2ee78d7679d4201ad29adba4cc0a48084f161e25": "eecc481d671d330bfb46406ab2533830c668bf22",
|
||||
"819be4680c04a7f77c51fc65ebd1d964a714aa78": "7007071c9cf718d34da7d61208ceea7f05de94d0",
|
||||
"9218d5e7b682513ddf1b891f5f0467ab9938fec3": "341b1220b6bc6bf59eef81e97c694d06134bd8a2",
|
||||
"d9745a57d9f1b6c638ebd57cd5281be020e0614c": "e8f788c5c260f9b82eaaa88d0402423d86a5680d",
|
||||
"dec55a19094d1bcc20f12a8888b27460e83c2e67": "3b582b21fc5ac7ccfb05321c7923591433ced716"
|
||||
},
|
||||
"mapping_XSD.xml": {
|
||||
"1ef837521e274c5b93f5f228955204285b3dd28a": "7007071c9cf718d34da7d61208ceea7f05de94d0",
|
||||
"9c454252343dfe1400d356cbf41bf88e842b4e1e": "c615b3a622e2f6ba8577e812e71977d9f1b1930d"
|
||||
},
|
||||
"mapping_dynamodb.xml": {
|
||||
"891099e88d8074570dc029f9b7d8b04bbc241383": "7007071c9cf718d34da7d61208ceea7f05de94d0"
|
||||
},
|
||||
"mapping_ebcdic.xml": {
|
||||
"b47b25edc9e40d312b548270dbb3f978475be4e7": "7007071c9cf718d34da7d61208ceea7f05de94d0"
|
||||
},
|
||||
"mapping_sap.xml": {
|
||||
"0339bc60ae47e3796c343eee7e2fb1cb1869cefa": "ee49a27e5c3ba3217ab497b1cd4467c088e59f5e",
|
||||
"1f41a55f6f7f1d6d2118e766daf7e3dbfd77551d": "7007071c9cf718d34da7d61208ceea7f05de94d0",
|
||||
"64c23be0c363ab703528677c999e4ef707d54497": "27908d5685066221f02cd3890a5319838215eb8b",
|
||||
"83688cf3134e60d9f5a08b316643a41246717e92": "740c431e0b623cc7d41166588961028ad3efab80",
|
||||
"9df72b6a1f1a72d9be1a4a7fd428873ad9b75bff": "94804b5e96a71d63a294eb9bcfbbb5290824009f",
|
||||
"a300fcd290aa65c254c44d683d30a9fa6ae14a2f": "45e5d88e9c49cb87b47413468073c571f60c0117",
|
||||
"b74c01dff88a52afca5f8c84fbe41d71a34eb6b5": "32832fe0edfbd10d50ed85528481e5c9ca2ec8e0",
|
||||
"c814f616005e1637ec107dd8c0f269bd69661d2e": "7d07608dceb06f7364b5bb8babc0f6e921fc443a"
|
||||
},
|
||||
"mapping_sas.xml": {
|
||||
"4aeb0deb41f61dbe69e85e780fb1e985c9f3d758": "fd44bfb0ee3fc8288465507b937c53619f43c0ec"
|
||||
}
|
||||
}
|
||||
@@ -116,6 +116,7 @@ public interface ICoreService extends IService {
|
||||
|
||||
public String validateValueForDBType(String columnName);
|
||||
|
||||
@Deprecated
|
||||
public void synchronizeMapptingXML(ITalendProcessJavaProject talendJavaProject);
|
||||
|
||||
public IPreferenceStore getPreferenceStore();
|
||||
@@ -124,6 +125,14 @@ public interface ICoreService extends IService {
|
||||
|
||||
public IMetadataTable convert(MetadataTable originalTable);
|
||||
|
||||
@Deprecated
|
||||
public void syncMappingsFileFromSystemToProject();
|
||||
|
||||
public static ICoreService get() {
|
||||
if (GlobalServiceRegister.getDefault().isServiceRegistered(ICoreService.class)) {
|
||||
return GlobalServiceRegister.getDefault().getService(ICoreService.class);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -380,5 +380,6 @@ public class ConnParameterKeys {
|
||||
|
||||
public static final String CONN_PARA_KEY_KNOX_DIRECTORY="CONN_PARA_KEY_KNOX_DIRECTORY";
|
||||
|
||||
public static final String CONN_PARA_KEY_KNOX_TIMEOUT="CONN_PARA_KEY_KNOX_TIMEOUT";
|
||||
|
||||
}
|
||||
|
||||
@@ -25,8 +25,8 @@ import org.talend.core.database.conn.DatabaseConnConstants;
|
||||
public enum EDatabaseVersion4Drivers {
|
||||
// access
|
||||
ACCESS_JDBC(new DbVersion4Drivers(EDatabaseTypeName.ACCESS, new String[] {
|
||||
"jackcess-2.1.0.jar", "ucanaccess-2.0.9.5.jar", "commons-lang-2.6.jar", "commons-logging-1.1.1.jar", "hsqldb.jar", //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
|
||||
"jackcess-encrypt-2.1.0.jar", "bcprov-jdk15on-1.51.jar", "talend-ucanaccess-utils-1.0.0.jar" })),
|
||||
"jackcess-2.1.12.jar", "ucanaccess-2.0.9.5.jar", "commons-lang-2.6.jar", "commons-logging-1.1.3.jar", "hsqldb.jar", //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
|
||||
"jackcess-encrypt-2.1.4.jar", "bcprov-jdk15on-1.69.jar", "talend-ucanaccess-utils-1.0.0.jar" })),
|
||||
ACCESS_2003(new DbVersion4Drivers(EDatabaseTypeName.ACCESS, "Access 2003", "Access_2003")), //$NON-NLS-1$ //$NON-NLS-2$
|
||||
ACCESS_2007(new DbVersion4Drivers(EDatabaseTypeName.ACCESS, "Access 2007", "Access_2007")), //$NON-NLS-1$ //$NON-NLS-2$
|
||||
// oracle
|
||||
@@ -87,7 +87,7 @@ public enum EDatabaseVersion4Drivers {
|
||||
MSSQL_PROP(new DbVersion4Drivers(EDatabaseTypeName.MSSQL,
|
||||
"Microsoft", "MSSQL_PROP", //$NON-NLS-1$ //$NON-NLS-2$
|
||||
new String[] { "mssql-jdbc.jar", "slf4j-api-1.7.25.jar", "slf4j-log4j12-1.7.25.jar", "adal4j-1.6.7.jar", //$NON-NLS-1$
|
||||
"commons-lang3-3.10.jar", "commons-codec-1.14.jar", "gson-2.8.6.jar", "oauth2-oidc-sdk-9.7.jar",
|
||||
"commons-lang3-3.10.jar", "commons-codec-1.14.jar", "gson-2.8.9.jar", "oauth2-oidc-sdk-9.7.jar",
|
||||
"json-smart-2.4.7.jar", "nimbus-jose-jwt-9.22.jar", "javax.mail-1.6.2.jar", "reload4j-1.2.19.jar",
|
||||
"accessors-smart-2.4.7.jar", "asm-9.1.jar", "content-type-2.1.jar" })),
|
||||
|
||||
@@ -107,12 +107,12 @@ public enum EDatabaseVersion4Drivers {
|
||||
GREENPLUM_PSQL(new DbVersion4Drivers(EDatabaseTypeName.GREENPLUM,"PostgreSQL", "POSTGRESQL", "postgresql-8.4-703.jdbc4.jar")), //$NON-NLS-1$
|
||||
GREENPLUM(new DbVersion4Drivers(EDatabaseTypeName.GREENPLUM,"Greenplum", "GREENPLUM", "greenplum-5.1.4.000275.jar")), //$NON-NLS-1$
|
||||
// PSQL_V10(new DbVersion4Drivers(EDatabaseTypeName.PSQL, "v10", "V10", "postgresql-42.2.5.jar")),
|
||||
PSQL_V9_X(new DbVersion4Drivers(EDatabaseTypeName.PSQL, "v9 and later", "V9_X", "postgresql-42.2.25.jar")), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
|
||||
PSQL_V9_X(new DbVersion4Drivers(EDatabaseTypeName.PSQL, "v9 and later", "V9_X", "postgresql-42.2.26.jar")), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
|
||||
PSQL_PRIOR_TO_V9(new DbVersion4Drivers(EDatabaseTypeName.PSQL, "Prior to v9", "PRIOR_TO_V9", "postgresql-8.4-703.jdbc4.jar")), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
|
||||
|
||||
PLUSPSQL_PRIOR_TO_V9(new DbVersion4Drivers(EDatabaseTypeName.PLUSPSQL,
|
||||
"Prior to v9", "PRIOR_TO_V9", "postgresql-8.4-703.jdbc4.jar")), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
|
||||
PLUSPSQL_V9_X(new DbVersion4Drivers(EDatabaseTypeName.PLUSPSQL, "v9 and later", "V9_X", "postgresql-42.2.25.jar")), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
|
||||
PLUSPSQL_V9_X(new DbVersion4Drivers(EDatabaseTypeName.PLUSPSQL, "v9 and later", "V9_X", "postgresql-42.2.26.jar")), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
|
||||
IBMDB2(new DbVersion4Drivers(EDatabaseTypeName.IBMDB2, new String[] { "db2jcc4.jar", "db2jcc_license_cu.jar", //$NON-NLS-1$ //$NON-NLS-2$
|
||||
"db2jcc_license_cisuz.jar" })), //$NON-NLS-1$
|
||||
IBMDB2ZOS(new DbVersion4Drivers(EDatabaseTypeName.IBMDB2ZOS, new String[] { "db2jcc4.jar", "db2jcc_license_cu.jar", //$NON-NLS-1$ //$NON-NLS-2$
|
||||
@@ -171,8 +171,10 @@ public enum EDatabaseVersion4Drivers {
|
||||
REDSHIFT(new DbVersion4Drivers(EDatabaseTypeName.REDSHIFT, "redshift", "REDSHIFT", //$NON-NLS-1$ //$NON-NLS-2$
|
||||
new String[]{ "redshift-jdbc42-no-awssdk-1.2.55.1083.jar", "antlr4-runtime-4.8-1.jar" })), //$NON-NLS-1$ //$NON-NLS-2$
|
||||
REDSHIFT_SSO(new DbVersion4Drivers(EDatabaseTypeName.REDSHIFT_SSO, "redshift sso", "REDSHIFT_SSO", //$NON-NLS-1$ //$NON-NLS-2$
|
||||
new String[] { "redshift-jdbc42-no-awssdk-1.2.55.1083.jar", "antlr4-runtime-4.8-1.jar", "aws-java-sdk-1.11.848.jar", "jackson-core-2.10.1.jar", //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
|
||||
"jackson-databind-2.10.1.jar", "jackson-annotations-2.10.1.jar", "httpcore-4.4.11.jar", "httpclient-4.5.9.jar", //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$//$NON-NLS-4$
|
||||
new String[] { "redshift-jdbc42-no-awssdk-1.2.55.1083.jar", "antlr4-runtime-4.8-1.jar", "aws-java-sdk-1.11.848.jar", //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
|
||||
"jackson-core-2.13.4.jar", //$NON-NLS-1$
|
||||
"jackson-databind-2.13.4.2.jar", "jackson-annotations-2.13.4.jar", "httpcore-4.4.11.jar", //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
|
||||
"httpclient-4.5.9.jar", //$NON-NLS-1$
|
||||
"joda-time-2.8.1.jar", "commons-logging-1.2.jar", "commons-codec-1.11.jar" })), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
|
||||
|
||||
AMAZON_AURORA(new DbVersion4Drivers(EDatabaseTypeName.AMAZON_AURORA, "mysql-connector-java-5.1.49.jar")); //$NON-NLS-1$
|
||||
|
||||
@@ -38,7 +38,10 @@ public class HadoopClassLoaderFactory2 {
|
||||
public static ClassLoader getHDFSClassLoader(String relatedClusterId, String distribution, String version, boolean useKrb) {
|
||||
return getClassLoader(relatedClusterId, EHadoopCategory.HDFS, distribution, version, useKrb);
|
||||
}
|
||||
|
||||
public static ClassLoader getHDFSKnoxClassLoader(String relatedClusterId, String distribution, String version, boolean useKrb) {
|
||||
return HadoopClassLoaderFactory2.getClassLoader(relatedClusterId, EHadoopCategory.HDFS, distribution, version, useKrb,
|
||||
IHadoopArgs.HDFS_ARG_KNOX);
|
||||
}
|
||||
public static ClassLoader getMRClassLoader(String relatedClusterId, String distribution, String version, boolean useKrb) {
|
||||
return getClassLoader(relatedClusterId, EHadoopCategory.MAP_REDUCE, distribution, version, useKrb);
|
||||
}
|
||||
|
||||
@@ -22,4 +22,6 @@ public interface IHadoopArgs {
|
||||
|
||||
public static final String HIVE_ARG_STANDALONE = "STANDALONE"; //$NON-NLS-1$
|
||||
|
||||
public static final String HDFS_ARG_KNOX = "USE_KNOX"; //$NON-NLS-1$
|
||||
|
||||
}
|
||||
|
||||
@@ -194,6 +194,10 @@ public interface IMetadataConnection extends IMetadata {
|
||||
public String getContextName();
|
||||
|
||||
public void setContextName(String contextName);
|
||||
|
||||
public boolean isSupportNLS();
|
||||
|
||||
public void setSupportNLS(boolean newSupportNLS);
|
||||
|
||||
/**
|
||||
* Returns the value that you stored in the data collection by the key. Normally, it is like this key-value. For
|
||||
|
||||
@@ -16,6 +16,7 @@ import java.io.File;
|
||||
import java.io.FileInputStream;
|
||||
import java.io.IOException;
|
||||
import java.net.URL;
|
||||
import java.nio.file.Files;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collection;
|
||||
@@ -24,18 +25,20 @@ import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Map.Entry;
|
||||
import java.util.Set;
|
||||
import java.util.SortedSet;
|
||||
import java.util.TreeSet;
|
||||
import java.util.function.Function;
|
||||
import java.util.stream.Collectors;
|
||||
import java.util.stream.Stream;
|
||||
|
||||
import javax.xml.parsers.DocumentBuilder;
|
||||
import javax.xml.parsers.DocumentBuilderFactory;
|
||||
import javax.xml.parsers.ParserConfigurationException;
|
||||
|
||||
import org.apache.commons.codec.digest.DigestUtils;
|
||||
import org.apache.commons.lang.StringUtils;
|
||||
import org.eclipse.core.resources.IFile;
|
||||
import org.eclipse.core.resources.IFolder;
|
||||
import org.eclipse.core.resources.IProject;
|
||||
import org.eclipse.core.resources.ProjectScope;
|
||||
import org.eclipse.core.runtime.CoreException;
|
||||
@@ -46,9 +49,9 @@ import org.eclipse.core.runtime.Platform;
|
||||
import org.osgi.framework.Bundle;
|
||||
import org.talend.commons.exception.ExceptionHandler;
|
||||
import org.talend.commons.exception.SystemException;
|
||||
import org.talend.commons.runtime.xml.XmlUtil;
|
||||
import org.talend.commons.utils.io.FilesUtils;
|
||||
import org.talend.commons.utils.workbench.resources.ResourceUtils;
|
||||
import org.talend.core.GlobalServiceRegister;
|
||||
import org.talend.core.ICoreService;
|
||||
import org.talend.core.database.EDatabaseTypeName;
|
||||
import org.talend.core.language.ECodeLanguage;
|
||||
import org.talend.core.language.LanguageManager;
|
||||
@@ -59,6 +62,8 @@ import org.talend.core.runtime.CoreRuntimePlugin;
|
||||
import org.talend.core.runtime.i18n.Messages;
|
||||
import org.talend.core.utils.TalendQuoteUtils;
|
||||
import org.talend.repository.ProjectManager;
|
||||
import org.talend.repository.model.RepositoryConstants;
|
||||
import org.talend.utils.json.JSONObject;
|
||||
import org.talend.utils.xml.XmlUtils;
|
||||
import org.w3c.dom.Document;
|
||||
import org.w3c.dom.NamedNodeMap;
|
||||
@@ -75,14 +80,13 @@ import org.xml.sax.SAXException;
|
||||
*/
|
||||
public final class MetadataTalendType {
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
public static final String INTERNAL_MAPPINGS_FOLDER = "mappings"; //$NON-NLS-1$
|
||||
|
||||
public static final String PROJECT_MAPPING_FOLDER = ".settings/mappings"; //$NON-NLS-1$
|
||||
|
||||
public static final String UPDATED_MAPPING_FILES = "updated.mapping.files"; //$NON-NLS-1$
|
||||
public static final String FILE_MAPPING_REVISION = "mapping_revision.json"; //$NON-NLS-1$
|
||||
|
||||
public static final String MAPPING_FILE_PATTERN = "^mapping_.*\\.xml$"; //$NON-NLS-1$
|
||||
|
||||
private static ECodeLanguage codeLanguage;
|
||||
|
||||
@@ -459,13 +463,14 @@ public final class MetadataTalendType {
|
||||
return list;
|
||||
}
|
||||
|
||||
public static URL getSystemForderURLOfMappingsFile() throws SystemException {
|
||||
public static URL getSystemFolderURLOfMappingsFile() throws SystemException {
|
||||
String dirPath = "/" + INTERNAL_MAPPINGS_FOLDER; //$NON-NLS-1$
|
||||
URL url = null;
|
||||
Path filePath = new Path(dirPath);
|
||||
Bundle b = Platform.getBundle(CoreRuntimePlugin.PLUGIN_ID);
|
||||
if (b != null) {
|
||||
try {
|
||||
// Enumeration<URL> entries = b.findEntries(dirPath, "mapping_*.xml", false);
|
||||
url = FileLocator.toFileURL(FileLocator.find(b, filePath, null));
|
||||
} catch (IOException e) {
|
||||
throw new SystemException(e);
|
||||
@@ -474,46 +479,169 @@ public final class MetadataTalendType {
|
||||
return url;
|
||||
}
|
||||
|
||||
public static URL getProjectForderURLOfMappingsFile() throws SystemException {
|
||||
public static URL getProjectFolderURLOfMappingsFile() throws SystemException {
|
||||
try {
|
||||
String dirPath = "/" + INTERNAL_MAPPINGS_FOLDER; //$NON-NLS-1$
|
||||
IProject project = ResourceUtils.getProject(ProjectManager.getInstance().getCurrentProject());
|
||||
IPath settingPath = new ProjectScope(project).getLocation();
|
||||
IPath mappingPath = settingPath.append(dirPath);
|
||||
File mappingFolder = mappingPath.toFile();
|
||||
if (!mappingFolder.exists() || mappingFolder.listFiles().length < 1) {
|
||||
ICoreService service = null;
|
||||
if (GlobalServiceRegister.getDefault().isServiceRegistered(ICoreService.class)) {
|
||||
service = GlobalServiceRegister.getDefault().getService(ICoreService.class);
|
||||
service.syncMappingsFileFromSystemToProject();
|
||||
}
|
||||
}
|
||||
return mappingFolder.toURL();
|
||||
File mappingFolder = settingPath.append(dirPath).toFile();
|
||||
return mappingFolder.toURI().toURL();
|
||||
} catch (Exception e) {
|
||||
throw new SystemException(e);
|
||||
}
|
||||
}
|
||||
|
||||
private static String getSha1OfFile(File file) {
|
||||
String sha1 = null;
|
||||
FileInputStream fileInputStream = null;
|
||||
public static URL getProjectTempMappingFolder() {
|
||||
try {
|
||||
fileInputStream = new FileInputStream(file);
|
||||
sha1 = DigestUtils.shaHex(fileInputStream);
|
||||
IProject project = ResourceUtils.getProject(ProjectManager.getInstance().getCurrentProject());
|
||||
File folder = ResourceUtils
|
||||
.getFolder(project, RepositoryConstants.TEMP_DIRECTORY + "/" + INTERNAL_MAPPINGS_FOLDER, false).getLocation()
|
||||
.toFile();
|
||||
syncMappingFiles(folder, false);
|
||||
return folder.toURI().toURL();
|
||||
} catch (Exception e) {
|
||||
ExceptionHandler.process(e);
|
||||
} finally {
|
||||
if (fileInputStream != null) {
|
||||
try {
|
||||
fileInputStream.close();
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace(); // Just print the exception for debug.
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
public static void syncMappingFiles(File target, boolean rename) {
|
||||
if (!target.exists()) {
|
||||
target.mkdir();
|
||||
}
|
||||
File[] arr = target.listFiles(f -> f.getName().matches(MAPPING_FILE_PATTERN));
|
||||
if (arr == null) {
|
||||
arr = new File[0];
|
||||
}
|
||||
try {
|
||||
Map<String, File> targetFileMap = Stream.of(arr).collect(Collectors.toMap(File::getName, Function.identity()));
|
||||
Map<String, File> workingFileMap = getWorkingMappingFiles().stream()
|
||||
.collect(Collectors.toMap(f -> getTargetName(f, rename), Function.identity(), (f1, f2) -> f1));
|
||||
|
||||
targetFileMap.entrySet().stream().filter(entry -> !workingFileMap.containsKey(entry.getKey()))
|
||||
.forEach(entry -> entry.getValue().delete());
|
||||
|
||||
for (Entry<String, File> entry : workingFileMap.entrySet()) {
|
||||
String targetName = entry.getKey();
|
||||
File workingMappingFile = entry.getValue();
|
||||
boolean needUpdate = false;
|
||||
File targetMappingFile = targetFileMap.get(targetName);
|
||||
if (targetMappingFile == null) {
|
||||
targetMappingFile = new File(target, targetName);
|
||||
needUpdate = true;
|
||||
} else if (!getSha1OfFile(workingMappingFile).equals(getSha1OfFile(targetMappingFile))) {
|
||||
needUpdate = true;
|
||||
}
|
||||
if (needUpdate) {
|
||||
if (targetMappingFile.exists()) {
|
||||
targetMappingFile.delete();
|
||||
}
|
||||
FilesUtils.copyFile(workingMappingFile, targetMappingFile);
|
||||
}
|
||||
}
|
||||
} catch (Exception e) {
|
||||
ExceptionHandler.process(e);
|
||||
}
|
||||
return sha1;
|
||||
}
|
||||
|
||||
public static String getTargetName(File file, boolean rename) {
|
||||
String targetName = file.getName();
|
||||
if (!rename) {
|
||||
return targetName;
|
||||
}
|
||||
try {
|
||||
DocumentBuilderFactory documentBuilderFactory = XmlUtils.getSecureDocumentBuilderFactory();
|
||||
DocumentBuilder analyser = documentBuilderFactory.newDocumentBuilder();
|
||||
Document document = analyser.parse(file);
|
||||
NodeList dbmsNodes = document.getElementsByTagName("dbms"); //$NON-NLS-1$
|
||||
String dbmsIdValue = "";
|
||||
for (int iDbms = 0; iDbms < dbmsNodes.getLength(); iDbms++) {
|
||||
Node dbmsNode = dbmsNodes.item(iDbms);
|
||||
NamedNodeMap dbmsAttributes = dbmsNode.getAttributes();
|
||||
dbmsIdValue = dbmsAttributes.getNamedItem("id").getNodeValue(); //$NON-NLS-1$
|
||||
|
||||
}
|
||||
if (dbmsIdValue != null && !"".equals(dbmsIdValue)) {
|
||||
final String[] fileNameSplit = targetName.split("_");
|
||||
String idA = "_id";
|
||||
String idB = "id_";
|
||||
final int indexA = dbmsIdValue.indexOf(idA);
|
||||
final int indexB = dbmsIdValue.indexOf(idB);
|
||||
String secondeName = "";
|
||||
if (indexA > 0) {
|
||||
secondeName = dbmsIdValue.substring(0, dbmsIdValue.length() - idA.length());
|
||||
} else if (indexB == 0) {
|
||||
secondeName = dbmsIdValue.substring(idB.length(), dbmsIdValue.length());
|
||||
} else if (indexA == -1 && indexB == -1) {
|
||||
secondeName = dbmsIdValue;
|
||||
}
|
||||
if (secondeName != null && !"".equals(secondeName)) {
|
||||
targetName = fileNameSplit[0] + "_" + secondeName.toLowerCase() + XmlUtil.FILE_XML_SUFFIX;
|
||||
}
|
||||
|
||||
}
|
||||
} catch (ParserConfigurationException e) {
|
||||
ExceptionHandler.process(e);
|
||||
} catch (SAXException e) {
|
||||
ExceptionHandler.process(e);
|
||||
} catch (IOException e) {
|
||||
ExceptionHandler.process(e);
|
||||
}
|
||||
return targetName;
|
||||
}
|
||||
|
||||
public static JSONObject getRevisionObject() {
|
||||
try {
|
||||
File revisonFile = new File(MetadataTalendType.getSystemFolderURLOfMappingsFile().getFile(),
|
||||
MetadataTalendType.FILE_MAPPING_REVISION);
|
||||
String jsonStr = new String(Files.readAllBytes(revisonFile.toPath()));
|
||||
return new JSONObject(jsonStr);
|
||||
} catch (Exception e) {
|
||||
ExceptionHandler.process(e);
|
||||
}
|
||||
return new JSONObject();
|
||||
}
|
||||
|
||||
public static boolean restoreMappingFiles() throws Exception {
|
||||
List<File> toDelete = new ArrayList<>();
|
||||
JSONObject revision = getRevisionObject();
|
||||
File projectMappingFolder = new File(getProjectFolderURLOfMappingsFile().getFile());
|
||||
if (projectMappingFolder.exists()) {
|
||||
File[] projectMappingFiles = projectMappingFolder.listFiles(f -> f.getName().matches(MAPPING_FILE_PATTERN));
|
||||
if (projectMappingFiles != null) {
|
||||
for (File file : projectMappingFiles) {
|
||||
if (revision.has(file.getName())) {
|
||||
String sha1 = MetadataTalendType.getSha1OfFile(file);
|
||||
if (revision.getJSONObject(file.getName()).has(sha1)) {
|
||||
toDelete.add(file);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
File xsd = new File(projectMappingFolder, "mapping_validate.xsd"); //$NON-NLS-1$
|
||||
if (xsd.exists()) {
|
||||
xsd.delete();
|
||||
}
|
||||
}
|
||||
toDelete.forEach(File::delete);
|
||||
return !toDelete.isEmpty();
|
||||
}
|
||||
|
||||
public static String getSha1OfFile(File file) {
|
||||
try {
|
||||
String text = new String(Files.readAllBytes(file.toPath()));
|
||||
return getSha1OfText(text);
|
||||
} catch (IOException e) {
|
||||
ExceptionHandler.process(e);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public static String getSha1OfText(String text) {
|
||||
text = text.replace("\r\n", "\n"); //$NON-NLS-1$ //$NON-NLS-2$
|
||||
return DigestUtils.sha1Hex(text);
|
||||
}
|
||||
|
||||
public static void copyFile(File in, IFile out) throws CoreException, IOException {
|
||||
FileInputStream fis = new FileInputStream(in);
|
||||
if (out.exists()) {
|
||||
@@ -524,49 +652,6 @@ public final class MetadataTalendType {
|
||||
fis.close();
|
||||
}
|
||||
|
||||
public static void syncNewMappingFileToProject() throws SystemException {
|
||||
try {
|
||||
File sysMappingFiles = new File(MetadataTalendType.getSystemForderURLOfMappingsFile().getPath());
|
||||
IFolder projectMappingFolder = ResourceUtils.getProject(ProjectManager.getInstance().getCurrentProject())
|
||||
.getFolder(MetadataTalendType.PROJECT_MAPPING_FOLDER);
|
||||
File projectMappingFiles = new File(projectMappingFolder.getLocationURI());
|
||||
if (!sysMappingFiles.exists() || !projectMappingFiles.exists()) {
|
||||
return;
|
||||
}
|
||||
for (File sysMapping : sysMappingFiles.listFiles()) {
|
||||
IFile projectMapping = projectMappingFolder.getFile(sysMapping.getName());
|
||||
if (projectMapping.exists() && StringUtils.equals(sysMapping.getName(), "mapping_Greenplum.xml")) {
|
||||
|
||||
String sha1OfFile = DigestUtils.shaHex(projectMapping.getContents());
|
||||
String shalOfOldSystem = "8431f19215dacb3caa126778ae695954552cce2a";
|
||||
if (StringUtils.equals(sha1OfFile, shalOfOldSystem)) {
|
||||
copyFile(sysMapping, projectMapping);
|
||||
}
|
||||
}
|
||||
if (!projectMapping.exists()) {
|
||||
FileInputStream fis = null;
|
||||
try {
|
||||
fis = new FileInputStream(sysMapping);
|
||||
projectMapping.create(fis, true, null);
|
||||
} catch (CoreException coreExc) {
|
||||
throw new SystemException(coreExc);
|
||||
} finally {
|
||||
if (fis != null) {
|
||||
try {
|
||||
fis.close();
|
||||
} catch (IOException ioExc) {
|
||||
throw new SystemException(ioExc);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
} catch (Exception e) {
|
||||
throw new SystemException(e);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* Load db types and mapping with the current activated language (Java, Perl, ...).
|
||||
@@ -574,20 +659,38 @@ public final class MetadataTalendType {
|
||||
* @throws SystemException
|
||||
*/
|
||||
public static void loadCommonMappings() throws SystemException {
|
||||
URL url = getProjectForderURLOfMappingsFile();
|
||||
File dir = new File(url.getPath());
|
||||
metadataMappingFiles = new ArrayList<File>();
|
||||
dbmsSet.clear();
|
||||
if (dir.isDirectory()) {
|
||||
File[] files = dir.listFiles();
|
||||
for (File file : files) {
|
||||
if (file.getName().matches("^mapping_.*\\.xml$")) { //$NON-NLS-1$
|
||||
loadMapping(file);
|
||||
metadataMappingFiles.add(file);
|
||||
}
|
||||
}
|
||||
for (File file : getWorkingMappingFiles()) {
|
||||
loadMapping(file);
|
||||
metadataMappingFiles.add(file);
|
||||
}
|
||||
}
|
||||
|
||||
public static List<File> getWorkingMappingFiles() throws SystemException {
|
||||
File projectMappingFolder = new File(getProjectFolderURLOfMappingsFile().getFile());
|
||||
File[] projectMappingFiles = projectMappingFolder.listFiles(f -> f.getName().matches(MAPPING_FILE_PATTERN));
|
||||
File systemMappingFolder = new File(getSystemFolderURLOfMappingsFile().getFile());
|
||||
File[] systemMappingFiles = systemMappingFolder.listFiles(f -> f.getName().matches(MAPPING_FILE_PATTERN));
|
||||
if (projectMappingFiles == null || projectMappingFiles.length == 0) {
|
||||
return Arrays.asList(systemMappingFiles);
|
||||
}
|
||||
List<File> workingMappingFiles = new ArrayList<>();
|
||||
Map<String, File> projectMappingFilesMap = Stream.of(projectMappingFiles)
|
||||
.collect(Collectors.toMap(File::getName, Function.identity()));
|
||||
workingMappingFiles.addAll(projectMappingFilesMap.values());
|
||||
Stream.of(systemMappingFiles).filter(f -> !projectMappingFilesMap.containsKey(f.getName()))
|
||||
.forEach(f -> workingMappingFiles.add(f));
|
||||
return workingMappingFiles;
|
||||
}
|
||||
|
||||
public static String getSha1OfSystemMappingFile(String fileName) {
|
||||
try {
|
||||
return getSha1OfFile(new File(getSystemFolderURLOfMappingsFile().getFile(), fileName));
|
||||
} catch (SystemException e) {
|
||||
ExceptionHandler.process(e);
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
private static void loadMapping(File file) throws SystemException {
|
||||
|
||||
@@ -254,6 +254,7 @@ public final class ConvertionHelper {
|
||||
result.setContentModel(connection.isContextMode());
|
||||
result.setContextId(sourceConnection.getContextId());
|
||||
result.setContextName(sourceConnection.getContextName());
|
||||
result.setSupportNLS(sourceConnection.isSupportNLS());
|
||||
// handle oracle database connnection of general_jdbc.
|
||||
result.setSchema(getMeataConnectionSchema(result));
|
||||
convertOtherParameters(result, connection);
|
||||
|
||||
@@ -113,6 +113,7 @@ public class MetadataConnection implements IMetadataConnection {
|
||||
|
||||
private String contextName;
|
||||
|
||||
private boolean supportNLS = false;
|
||||
// ~
|
||||
|
||||
private String comment;
|
||||
@@ -729,6 +730,14 @@ public class MetadataConnection implements IMetadataConnection {
|
||||
public void setContextName(String contextName) {
|
||||
this.contextName = contextName;
|
||||
}
|
||||
|
||||
public boolean isSupportNLS() {
|
||||
return supportNLS;
|
||||
}
|
||||
|
||||
public void setSupportNLS(boolean supportNLS) {
|
||||
this.supportNLS = supportNLS;
|
||||
}
|
||||
|
||||
/*
|
||||
* (non-Javadoc)
|
||||
|
||||
@@ -1225,6 +1225,11 @@ public class RepositoryToComponentProperty {
|
||||
return value2;
|
||||
|
||||
}
|
||||
|
||||
if(value.equals("SUPPORT_NLS")) {
|
||||
return connection.isSupportNLS();
|
||||
}
|
||||
|
||||
if (value.equals("CDC_TYPE_MODE")) { //$NON-NLS-1$
|
||||
return new Boolean(CDCTypeMode.LOG_MODE.getName().equals(connection.getCdcTypeMode()));
|
||||
}
|
||||
|
||||
@@ -24,6 +24,7 @@ import org.eclipse.ui.preferences.ScopedPreferenceStore;
|
||||
import org.talend.commons.exception.ExceptionHandler;
|
||||
import org.talend.commons.utils.PasswordEncryptUtil;
|
||||
import org.talend.commons.utils.generation.CodeGenerationUtils;
|
||||
import org.talend.core.GlobalServiceRegister;
|
||||
import org.talend.core.language.ECodeLanguage;
|
||||
import org.talend.core.language.LanguageManager;
|
||||
import org.talend.core.model.metadata.types.JavaType;
|
||||
@@ -37,6 +38,7 @@ import org.talend.core.model.repository.IRepositoryViewObject;
|
||||
import org.talend.core.model.utils.JavaResourcesHelper;
|
||||
import org.talend.core.model.utils.SQLPatternUtils;
|
||||
import org.talend.core.runtime.CoreRuntimePlugin;
|
||||
import org.talend.core.service.IDesignerXMLMapperService;
|
||||
import org.talend.core.utils.TalendQuoteUtils;
|
||||
import org.talend.designer.core.model.utils.emf.talendfile.ContextType;
|
||||
import org.talend.designer.core.model.utils.emf.talendfile.ElementParameterType;
|
||||
@@ -293,8 +295,7 @@ public final class ElementParameterParser {
|
||||
|
||||
List<IElementParameter> params = (List<IElementParameter>) element.getElementParametersWithChildrens();
|
||||
if (params != null && !params.isEmpty()) {
|
||||
for (int i = 0; i < params.size(); i++) {
|
||||
IElementParameter param = params.get(i);
|
||||
for (IElementParameter param : params) {
|
||||
if (text.indexOf(param.getVariableName()) != -1
|
||||
|| (param.getVariableName() != null && param.getVariableName().contains(text))) {
|
||||
if (param.getFieldType() == EParameterFieldType.TABLE) {
|
||||
@@ -422,8 +423,8 @@ public final class ElementParameterParser {
|
||||
}
|
||||
IElementParameter param;
|
||||
|
||||
for (int i = 0; i < element.getElementParameters().size(); i++) {
|
||||
param = element.getElementParameters().get(i);
|
||||
for (IElementParameter element2 : element.getElementParameters()) {
|
||||
param = element2;
|
||||
if (text.indexOf(param.getVariableName()) != -1) {
|
||||
if (param.getFieldType() == EParameterFieldType.TABLE) {
|
||||
return createTableValuesXML((List<Map<String, Object>>) param.getValue(), param);
|
||||
@@ -483,7 +484,21 @@ public final class ElementParameterParser {
|
||||
if (element instanceof INode) {
|
||||
INode node = (INode) element;
|
||||
if (node.getExternalNode() != null) {
|
||||
return EcoreUtil.copy(node.getExternalNode().getExternalEmfData());
|
||||
Object obj = null;
|
||||
if (node.isVirtualGenerateNode()) {
|
||||
if (GlobalServiceRegister.getDefault().isServiceRegistered(IDesignerXMLMapperService.class)) {
|
||||
final IDesignerXMLMapperService service = GlobalServiceRegister.getDefault()
|
||||
.getService(IDesignerXMLMapperService.class);
|
||||
if (service != null) {
|
||||
obj = service.rebuildXmlMapData(node.getExternalNode());
|
||||
}
|
||||
}
|
||||
}
|
||||
if (obj != null) {
|
||||
return obj;
|
||||
} else {
|
||||
return EcoreUtil.copy(node.getExternalNode().getExternalEmfData());
|
||||
}
|
||||
}
|
||||
}
|
||||
return null;
|
||||
@@ -496,8 +511,8 @@ public final class ElementParameterParser {
|
||||
}
|
||||
IElementParameter param;
|
||||
newText = text;
|
||||
for (int i = 0; i < element.getElementParameters().size(); i++) {
|
||||
param = element.getElementParameters().get(i);
|
||||
for (IElementParameter element2 : element.getElementParameters()) {
|
||||
param = element2;
|
||||
if (newText.contains(param.getVariableName())) {
|
||||
String value = getDisplayValue(param);
|
||||
newText = newText.replace(param.getVariableName(), value);
|
||||
|
||||
@@ -27,6 +27,7 @@ import org.talend.core.runtime.projectsetting.ProjectPreferenceManager;
|
||||
import org.talend.core.service.IRemoteService;
|
||||
import org.talend.repository.model.IProxyRepositoryFactory;
|
||||
import org.talend.repository.model.RepositoryConstants;
|
||||
import org.talend.utils.security.StudioEncryption;
|
||||
|
||||
/**
|
||||
* created by wchen on 2015年6月16日 Detailled comment
|
||||
@@ -255,7 +256,7 @@ public class TalendLibsServerManager {
|
||||
if (enableProxyFlag) {
|
||||
serverBean.setServer(prefManager.getValue(TalendLibsServerManager.NEXUS_PROXY_URL));
|
||||
serverBean.setUserName(prefManager.getValue(TalendLibsServerManager.NEXUS_PROXY_USERNAME));
|
||||
serverBean.setPassword(prefManager.getValue(TalendLibsServerManager.NEXUS_PROXY_PASSWORD));
|
||||
serverBean.setPassword(StudioEncryption.getStudioEncryption(StudioEncryption.EncryptionKeyName.SYSTEM).decrypt(prefManager.getValue(TalendLibsServerManager.NEXUS_PROXY_PASSWORD)));
|
||||
serverBean.setRepositoryId(prefManager.getValue(TalendLibsServerManager.NEXUS_PROXY_REPOSITORY_ID));
|
||||
serverBean.setType(prefManager.getValue(TalendLibsServerManager.NEXUS_PROXY_TYPE));
|
||||
}
|
||||
|
||||
@@ -30,4 +30,6 @@ public interface IDesignerXMLMapperService extends IService {
|
||||
*/
|
||||
public boolean isVirtualComponent(final INode node);
|
||||
|
||||
public Object rebuildXmlMapData(final INode node);
|
||||
|
||||
}
|
||||
|
||||
@@ -12,20 +12,10 @@
|
||||
// ============================================================================
|
||||
package org.talend.core;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.FileInputStream;
|
||||
import java.io.FilenameFilter;
|
||||
import java.io.IOException;
|
||||
import java.net.URL;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import javax.xml.parsers.DocumentBuilder;
|
||||
import javax.xml.parsers.DocumentBuilderFactory;
|
||||
import javax.xml.parsers.ParserConfigurationException;
|
||||
|
||||
import org.apache.log4j.Logger;
|
||||
import org.eclipse.core.resources.IFile;
|
||||
import org.eclipse.core.resources.IFolder;
|
||||
import org.eclipse.core.resources.IResource;
|
||||
import org.eclipse.core.runtime.CoreException;
|
||||
@@ -40,15 +30,12 @@ import org.talend.commons.exception.ExceptionHandler;
|
||||
import org.talend.commons.exception.LoginException;
|
||||
import org.talend.commons.exception.PersistenceException;
|
||||
import org.talend.commons.exception.SystemException;
|
||||
import org.talend.commons.runtime.xml.XmlUtil;
|
||||
import org.talend.commons.ui.runtime.image.OverlayImageProvider;
|
||||
import org.talend.commons.utils.generation.JavaUtils;
|
||||
import org.talend.commons.utils.workbench.resources.ResourceUtils;
|
||||
import org.talend.core.model.general.LibraryInfo;
|
||||
import org.talend.core.model.general.Project;
|
||||
import org.talend.core.model.metadata.ColumnNameChanged;
|
||||
import org.talend.core.model.metadata.IMetadataTable;
|
||||
import org.talend.core.model.metadata.MetadataTalendType;
|
||||
import org.talend.core.model.metadata.MetadataToolHelper;
|
||||
import org.talend.core.model.metadata.QueryUtil;
|
||||
import org.talend.core.model.metadata.builder.ConvertionHelper;
|
||||
@@ -74,16 +61,9 @@ import org.talend.designer.codegen.ITalendSynchronizer;
|
||||
import org.talend.designer.core.IDesignerCoreService;
|
||||
import org.talend.designer.core.model.utils.emf.talendfile.NodeType;
|
||||
import org.talend.designer.runprocess.IRunProcessService;
|
||||
import org.talend.designer.runprocess.ProcessorUtilities;
|
||||
import org.talend.repository.ProjectManager;
|
||||
import org.talend.repository.RepositoryWorkUnit;
|
||||
import org.talend.repository.model.RepositoryConstants;
|
||||
import org.talend.utils.xml.XmlUtils;
|
||||
import org.w3c.dom.Document;
|
||||
import org.w3c.dom.NamedNodeMap;
|
||||
import org.w3c.dom.Node;
|
||||
import org.w3c.dom.NodeList;
|
||||
import org.xml.sax.SAXException;
|
||||
|
||||
/**
|
||||
* DOC Administrator class global comment. Detailled comment
|
||||
@@ -354,121 +334,15 @@ public class CoreService implements ICoreService {
|
||||
}
|
||||
|
||||
@Override
|
||||
@Deprecated
|
||||
public void synchronizeMapptingXML(ITalendProcessJavaProject talendJavaProject) {
|
||||
try {
|
||||
if (talendJavaProject == null) {
|
||||
return;
|
||||
}
|
||||
URL url = MetadataTalendType.getProjectForderURLOfMappingsFile();
|
||||
if (url != null) {
|
||||
// set the project mappings url
|
||||
System.setProperty(ProcessorUtilities.PROP_MAPPINGS_URL, url.toString()); //$NON-NLS-1$
|
||||
IFolder xmlMappingFolder = talendJavaProject.getResourceSubFolder(null, JavaUtils.JAVA_XML_MAPPING);
|
||||
|
||||
File mappingSource = new File(url.getPath());
|
||||
FilenameFilter filter = new FilenameFilter() {
|
||||
|
||||
@Override
|
||||
public boolean accept(File dir, String name) {
|
||||
if (XmlUtil.isXMLFile(name)) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
};
|
||||
|
||||
for (File file : mappingSource.listFiles(filter)) {
|
||||
String targetName = getTargetName(file);
|
||||
IFile targetFile = xmlMappingFolder.getFile(targetName);
|
||||
copyFile(file, targetFile);
|
||||
}
|
||||
}
|
||||
} catch (CoreException e) {
|
||||
ExceptionHandler.process(e);
|
||||
} catch (IOException e) {
|
||||
ExceptionHandler.process(e);
|
||||
} catch (SystemException e) {
|
||||
ExceptionHandler.process(e);
|
||||
}
|
||||
//
|
||||
}
|
||||
|
||||
@Override
|
||||
@Deprecated
|
||||
public void syncMappingsFileFromSystemToProject() {
|
||||
RepositoryWorkUnit workUnit = new RepositoryWorkUnit("Sync mapping files from system to project") { //$NON-NLS-1$
|
||||
|
||||
@Override
|
||||
protected void run() throws LoginException, PersistenceException {
|
||||
try {
|
||||
File sysMappingfolder = new File(MetadataTalendType.getSystemForderURLOfMappingsFile().getPath());
|
||||
IFolder projectMappingFolder = ResourceUtils.getProject(ProjectManager.getInstance().getCurrentProject())
|
||||
.getFolder(MetadataTalendType.PROJECT_MAPPING_FOLDER);
|
||||
if (!projectMappingFolder.exists()) {
|
||||
projectMappingFolder.create(true, true, null);
|
||||
}
|
||||
for (File in : sysMappingfolder.listFiles()) {
|
||||
IFile out = projectMappingFolder.getFile(in.getName());
|
||||
copyFile(in, out);
|
||||
}
|
||||
} catch (SystemException | CoreException | IOException e) {
|
||||
ExceptionHandler.process(e);
|
||||
}
|
||||
}
|
||||
};
|
||||
workUnit.setAvoidUnloadResources(true);
|
||||
ProxyRepositoryFactory.getInstance().executeRepositoryWorkUnit(workUnit);
|
||||
}
|
||||
|
||||
public String getTargetName(File file) {
|
||||
String targetName = file.getName();
|
||||
try {
|
||||
DocumentBuilderFactory documentBuilderFactory = XmlUtils.getSecureDocumentBuilderFactory();
|
||||
DocumentBuilder analyser = documentBuilderFactory.newDocumentBuilder();
|
||||
Document document = analyser.parse(file);
|
||||
NodeList dbmsNodes = document.getElementsByTagName("dbms"); //$NON-NLS-1$
|
||||
String dbmsIdValue = "";
|
||||
for (int iDbms = 0; iDbms < dbmsNodes.getLength(); iDbms++) {
|
||||
Node dbmsNode = dbmsNodes.item(iDbms);
|
||||
NamedNodeMap dbmsAttributes = dbmsNode.getAttributes();
|
||||
dbmsIdValue = dbmsAttributes.getNamedItem("id").getNodeValue(); //$NON-NLS-1$
|
||||
|
||||
}
|
||||
if (dbmsIdValue != null && !"".equals(dbmsIdValue)) {
|
||||
final String[] fileNameSplit = targetName.split("_");
|
||||
String idA = "_id";
|
||||
String idB = "id_";
|
||||
final int indexA = dbmsIdValue.indexOf(idA);
|
||||
final int indexB = dbmsIdValue.indexOf(idB);
|
||||
String secondeName = "";
|
||||
if (indexA > 0) {
|
||||
secondeName = dbmsIdValue.substring(0, dbmsIdValue.length() - idA.length());
|
||||
} else if (indexB == 0) {
|
||||
secondeName = dbmsIdValue.substring(idB.length(), dbmsIdValue.length());
|
||||
} else if (indexA == -1 && indexB == -1) {
|
||||
secondeName = dbmsIdValue;
|
||||
}
|
||||
if (secondeName != null && !"".equals(secondeName)) {
|
||||
targetName = fileNameSplit[0] + "_" + secondeName.toLowerCase() + XmlUtil.FILE_XML_SUFFIX;
|
||||
}
|
||||
|
||||
}
|
||||
} catch (ParserConfigurationException e) {
|
||||
ExceptionHandler.process(e);
|
||||
} catch (SAXException e) {
|
||||
ExceptionHandler.process(e);
|
||||
} catch (IOException e) {
|
||||
ExceptionHandler.process(e);
|
||||
}
|
||||
return targetName;
|
||||
}
|
||||
|
||||
public void copyFile(File in, IFile out) throws CoreException, IOException {
|
||||
FileInputStream fis = new FileInputStream(in);
|
||||
if (out.exists()) {
|
||||
out.setContents(fis, true, false, null);
|
||||
} else {
|
||||
out.create(fis, true, null);
|
||||
}
|
||||
fis.close();
|
||||
//
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -71,7 +71,6 @@ import org.talend.commons.utils.generation.JavaUtils;
|
||||
import org.talend.commons.utils.time.TimeMeasure;
|
||||
import org.talend.core.CorePlugin;
|
||||
import org.talend.core.GlobalServiceRegister;
|
||||
import org.talend.core.ICoreService;
|
||||
import org.talend.core.ITDQItemService;
|
||||
import org.talend.core.PluginChecker;
|
||||
import org.talend.core.context.Context;
|
||||
@@ -115,13 +114,11 @@ import org.talend.core.model.routines.CodesJarInfo;
|
||||
import org.talend.core.model.routines.RoutinesUtil;
|
||||
import org.talend.core.model.utils.JavaResourcesHelper;
|
||||
import org.talend.core.repository.model.ProxyRepositoryFactory;
|
||||
import org.talend.core.runtime.CoreRuntimePlugin;
|
||||
import org.talend.core.runtime.maven.MavenConstants;
|
||||
import org.talend.core.runtime.process.ITalendProcessJavaProject;
|
||||
import org.talend.core.runtime.process.LastGenerationInfo;
|
||||
import org.talend.core.runtime.process.TalendProcessArgumentConstant;
|
||||
import org.talend.core.runtime.process.TalendProcessOptionConstants;
|
||||
import org.talend.core.runtime.projectsetting.ProjectPreferenceManager;
|
||||
import org.talend.core.runtime.repository.build.BuildExportManager;
|
||||
import org.talend.core.runtime.services.IDesignerMavenService;
|
||||
import org.talend.core.service.IResourcesDependenciesService;
|
||||
@@ -152,8 +149,6 @@ public class ProcessorUtilities {
|
||||
|
||||
private static Logger log = Logger.getLogger(ProcessorUtilities.class);
|
||||
|
||||
public static final String PROP_MAPPINGS_URL = "talend.mappings.url"; //$NON-NLS-1$
|
||||
|
||||
/**
|
||||
* For generating code in CI without param -pl
|
||||
*/
|
||||
@@ -293,6 +288,7 @@ public class ProcessorUtilities {
|
||||
exportAsOSGI = false;
|
||||
exportTimeStamp = null;
|
||||
exportJobAsMicroService = false;
|
||||
needExportItemsForDQ = false;
|
||||
}
|
||||
|
||||
public static String getInterpreter() {
|
||||
@@ -746,30 +742,10 @@ public class ProcessorUtilities {
|
||||
boolean hasDynamicMetadata = hasMetadataDynamic(currentProcess, jobInfo);
|
||||
LastGenerationInfo.getInstance().setUseDynamic(jobInfo.getJobId(), jobInfo.getJobVersion(), hasDynamicMetadata);
|
||||
if (hasDynamicMetadata) {
|
||||
try {
|
||||
URL url = MetadataTalendType.getProjectForderURLOfMappingsFile();
|
||||
if (url != null) {
|
||||
// set the project mappings url
|
||||
System.setProperty(ProcessorUtilities.PROP_MAPPINGS_URL, url.toString()); // $NON-NLS-1$
|
||||
|
||||
IFolder xmlMappingFolder = jobInfo.getProcessor().getTalendJavaProject().getResourceSubFolder(null,
|
||||
JavaUtils.JAVA_XML_MAPPING);
|
||||
ProjectPreferenceManager manager = CoreRuntimePlugin.getInstance().getProjectPreferenceManager();
|
||||
boolean updated = manager.getBoolean(MetadataTalendType.UPDATED_MAPPING_FILES);
|
||||
if ((xmlMappingFolder.members().length == 0 || updated)
|
||||
&& GlobalServiceRegister.getDefault().isServiceRegistered(ICoreService.class)) {
|
||||
ICoreService coreService =
|
||||
GlobalServiceRegister.getDefault().getService(ICoreService.class);
|
||||
coreService.synchronizeMapptingXML(jobInfo.getProcessor().getTalendJavaProject());
|
||||
// reset
|
||||
if (updated) {
|
||||
manager.setValue(MetadataTalendType.UPDATED_MAPPING_FILES, false);
|
||||
manager.save();
|
||||
}
|
||||
}
|
||||
}
|
||||
} catch (Exception e) {
|
||||
ExceptionHandler.process(e);
|
||||
ITalendProcessJavaProject talendJavaProject = jobInfo.getProcessor().getTalendJavaProject();
|
||||
if (talendJavaProject != null) {
|
||||
IFolder xmlMappingFolder = talendJavaProject.getResourceSubFolder(null, JavaUtils.JAVA_XML_MAPPING);
|
||||
MetadataTalendType.syncMappingFiles(xmlMappingFolder.getLocation().toFile(), true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -46,6 +46,8 @@ import org.talend.designer.maven.aether.util.TalendAetherProxySelector;
|
||||
*/
|
||||
public class RepositorySystemFactory {
|
||||
|
||||
private static Boolean ignoreArtifactDescriptorRepositories;
|
||||
|
||||
private static Map<LocalRepository, DefaultRepositorySystemSession> sessions = new HashMap<LocalRepository, DefaultRepositorySystemSession>();
|
||||
|
||||
private static DefaultRepositorySystemSession newRepositorySystemSession(String localRepositoryPath)
|
||||
@@ -61,6 +63,8 @@ public class RepositorySystemFactory {
|
||||
repositorySystemSession.setTransferListener(new ChainedTransferListener());
|
||||
repositorySystemSession.setRepositoryListener(new ChainedRepositoryListener());
|
||||
repositorySystemSession.setProxySelector(new TalendAetherProxySelector());
|
||||
repositorySystemSession.setIgnoreArtifactDescriptorRepositories(
|
||||
RepositorySystemFactory.isIgnoreArtifactDescriptorRepositories());
|
||||
sessions.put(localRepo, repositorySystemSession);
|
||||
}
|
||||
|
||||
@@ -157,4 +161,13 @@ public class RepositorySystemFactory {
|
||||
doDeploy(content, pomFile, localRepository, repositoryId, repositoryUrl, userName, password, groupId, artifactId,
|
||||
classifier, extension, version);
|
||||
}
|
||||
|
||||
public static boolean isIgnoreArtifactDescriptorRepositories() {
|
||||
if (ignoreArtifactDescriptorRepositories == null) {
|
||||
ignoreArtifactDescriptorRepositories = Boolean.valueOf(
|
||||
System.getProperty("talend.studio.aether.ignoreArtifactDescriptorRepositories", Boolean.TRUE.toString()));
|
||||
}
|
||||
return ignoreArtifactDescriptorRepositories;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -63,6 +63,7 @@ import org.eclipse.m2e.core.MavenPlugin;
|
||||
import org.talend.commons.exception.ExceptionHandler;
|
||||
import org.talend.designer.maven.aether.DummyDynamicMonitor;
|
||||
import org.talend.designer.maven.aether.IDynamicMonitor;
|
||||
import org.talend.designer.maven.aether.RepositorySystemFactory;
|
||||
import org.talend.designer.maven.aether.node.DependencyNode;
|
||||
import org.talend.designer.maven.aether.node.ExclusionNode;
|
||||
import org.talend.designer.maven.aether.selector.DynamicDependencySelector;
|
||||
@@ -513,6 +514,7 @@ public class DynamicDistributionAetherUtils {
|
||||
LocalRepository localRepo = new LocalRepository(repositoryPath);
|
||||
session.setLocalRepositoryManager(system.newLocalRepositoryManager(session, localRepo));
|
||||
session.setProxySelector(new TalendAetherProxySelector());
|
||||
session.setIgnoreArtifactDescriptorRepositories(RepositorySystemFactory.isIgnoreArtifactDescriptorRepositories());
|
||||
|
||||
updateDependencySelector(session, monitor);
|
||||
|
||||
|
||||
@@ -34,7 +34,6 @@ import org.codehaus.plexus.PlexusContainerException;
|
||||
import org.eclipse.aether.DefaultRepositorySystemSession;
|
||||
import org.eclipse.aether.RepositorySystem;
|
||||
import org.eclipse.aether.RepositorySystemSession;
|
||||
import org.eclipse.aether.artifact.Artifact;
|
||||
import org.eclipse.aether.artifact.DefaultArtifact;
|
||||
import org.eclipse.aether.connector.basic.BasicRepositoryConnectorFactory;
|
||||
import org.eclipse.aether.impl.DefaultServiceLocator;
|
||||
@@ -57,6 +56,7 @@ import org.talend.core.nexus.ArtifactRepositoryBean;
|
||||
import org.talend.core.nexus.NexusConstants;
|
||||
import org.talend.core.nexus.TalendLibsServerManager;
|
||||
import org.talend.core.runtime.maven.MavenArtifact;
|
||||
import org.talend.designer.maven.aether.RepositorySystemFactory;
|
||||
|
||||
public class MavenLibraryResolverProvider {
|
||||
|
||||
@@ -283,8 +283,9 @@ public class MavenLibraryResolverProvider {
|
||||
LocalRepository localRepo = new LocalRepository( /* "target/local-repo" */target);
|
||||
session.setLocalRepositoryManager(system.newLocalRepositoryManager(session, localRepo));
|
||||
session.setProxySelector(new TalendAetherProxySelector());
|
||||
session.setIgnoreArtifactDescriptorRepositories(RepositorySystemFactory.isIgnoreArtifactDescriptorRepositories());
|
||||
|
||||
return session;
|
||||
return session;
|
||||
}
|
||||
|
||||
private String getLocalMVNRepository() {
|
||||
|
||||
@@ -151,6 +151,12 @@
|
||||
<groupId>org.talend.components</groupId>
|
||||
<artifactId>components-marklogic-runtime</artifactId>
|
||||
<version>${components.version}</version>
|
||||
<exclusions>
|
||||
<exclusion>
|
||||
<groupId>org.apache.commons</groupId>
|
||||
<artifactId>commons-text</artifactId>
|
||||
</exclusion>
|
||||
</exclusions>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.talend.components</groupId>
|
||||
@@ -210,6 +216,11 @@
|
||||
<artifactId>commons-beanutils</artifactId>
|
||||
<version>1.9.4</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.apache.commons</groupId>
|
||||
<artifactId>commons-text</artifactId>
|
||||
<version>1.10.0</version>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
<build>
|
||||
<plugins>
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
<module>zip/pom.xml</module>
|
||||
</modules>
|
||||
<properties>
|
||||
<m2.fasterxml.jackson.version>2.13.2</m2.fasterxml.jackson.version>
|
||||
<m2.fasterxml.jackson.version>2.13.4</m2.fasterxml.jackson.version>
|
||||
<jackson-codehaus.version>1.9.16-TALEND</jackson-codehaus.version>
|
||||
</properties>
|
||||
</project>
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
<artifactId>studio-tacokit-dependencies</artifactId>
|
||||
<packaging>pom</packaging>
|
||||
<properties>
|
||||
<tacokit.components.version>1.27.10</tacokit.components.version>
|
||||
<tacokit.components.version>1.27.16</tacokit.components.version>
|
||||
</properties>
|
||||
<repositories>
|
||||
<repository>
|
||||
|
||||
@@ -20,7 +20,11 @@
|
||||
<phase>generate-sources</phase>
|
||||
<configuration>
|
||||
<tasks>
|
||||
<zip destfile="${basedir}/../repository/maven_repository.zip" basedir="${basedir}/../tmp/" />
|
||||
<zip destfile="${basedir}/../repository/maven_repository.zip" basedir="${basedir}/../tmp/" >
|
||||
<fileset dir="${basedir}/../tmp/">
|
||||
<exclude name="repository/dom4j/dom4j/1.6.1/**" />
|
||||
</fileset>
|
||||
</zip>
|
||||
<delete dir="${basedir}/../tmp/" />
|
||||
</tasks>
|
||||
</configuration>
|
||||
|
||||
@@ -10,10 +10,11 @@ ProjectPomProjectSettingPage_ConfirmMessage=Will apply and update for project PO
|
||||
ProjectPomProjectSettingPage_FilterPomLabel=Filter to use to generate poms:
|
||||
ProjectPomProjectSettingPage_FilterErrorMessage=Invalid filter: {0}
|
||||
ProjectPomProjectSettingPage.syncAllPomsButtonText=Force full re-synchronize poms
|
||||
ProjectPomProjectSettingPage.syncBuildTypesButtonText=Force full re-synchronize build types
|
||||
AbstractPersistentProjectSettingPage.syncAllPoms=Do you want to update all poms? \n This operation might take long time depends on your project size.
|
||||
MavenProjectSettingPage.filterExampleMessage=Filter examples:\nlabel=myJob \t\t\t\t=> Generate only the job named "myJob"\n!(label=myJob) \t\t\t\t=> Generate any job except the one named "myJob"\n(path=folder1/folder2) \t\t\t=> Generate any job in the folder "folder1/folder2"\n(path=folder1/folder2)or(label=myJob)\t=> Generate any job in the folder "folder1/folder2" or named "myJob"\n(label=myJob)and(version=0.2) \t=> Generate only the job named "myJob" with version 0.2\n!((label=myJob)and(version=0.1)) \t=> Generate every jobs except the "myJob" version 0.1
|
||||
MavenProjectSettingPage.refModuleText=Set reference project modules in profile
|
||||
MavenProjectSettingPage.excludeDeletedItems=Exclude deleted items
|
||||
MavenProjectSettingPage.syncAllPomsWarning=Click the Force full re-synchronize poms button to apply the new settings.
|
||||
MavenProjectSettingPage.skipFolders=Skip folders
|
||||
BuildProjectSettingPage.allowRecursiveJobs=Allow recursive jobs (Not recommended)
|
||||
BuildProjectSettingPage.allowRecursiveJobs=Allow recursive jobs (Not recommended)
|
||||
|
||||
@@ -34,6 +34,7 @@ import org.talend.core.runtime.projectsetting.AbstractProjectSettingPage;
|
||||
import org.talend.core.runtime.services.IFilterService;
|
||||
import org.talend.designer.maven.DesignerMavenPlugin;
|
||||
import org.talend.designer.maven.tools.AggregatorPomsHelper;
|
||||
import org.talend.designer.maven.tools.BuildTypeManager;
|
||||
import org.talend.designer.maven.ui.i18n.Messages;
|
||||
|
||||
/**
|
||||
@@ -169,7 +170,25 @@ public class MavenProjectSettingPage extends AbstractProjectSettingPage {
|
||||
|
||||
});
|
||||
|
||||
}
|
||||
if (isSyncBuildTypeAllowed()) {
|
||||
Button syncBuildTypes = new Button(parent, SWT.NONE);
|
||||
syncBuildTypes.setText(Messages.getString("ProjectPomProjectSettingPage.syncBuildTypesButtonText")); //$NON-NLS-1$
|
||||
|
||||
syncBuildTypes.addSelectionListener(new SelectionAdapter() {
|
||||
|
||||
@Override
|
||||
public void widgetSelected(SelectionEvent event) {
|
||||
try {
|
||||
new BuildTypeManager().syncBuildTypes(getCurrentPage());
|
||||
} catch (Exception e) {
|
||||
ExceptionHandler.process(e);
|
||||
}
|
||||
}
|
||||
|
||||
});
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private void addSyncWarning() {
|
||||
setMessage(Messages.getString("MavenProjectSettingPage.syncAllPomsWarning"), IMessage.WARNING); //$NON-NLS-1$
|
||||
@@ -203,4 +222,12 @@ public class MavenProjectSettingPage extends AbstractProjectSettingPage {
|
||||
return displayVersion;
|
||||
}
|
||||
|
||||
private static boolean isSyncBuildTypeAllowed() {
|
||||
return Boolean.getBoolean("talend.builtype.syncallowed");
|
||||
}
|
||||
|
||||
private MavenProjectSettingPage getCurrentPage() {
|
||||
return this;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -23,7 +23,8 @@ Require-Bundle: org.eclipse.core.runtime,
|
||||
org.talend.common.ui.runtime,
|
||||
org.talend.core.runtime,
|
||||
org.eclipse.jface,
|
||||
org.talend.core.repository
|
||||
org.talend.core.repository,
|
||||
org.talend.core
|
||||
Bundle-ActivationPolicy: lazy
|
||||
Export-Package: org.talend.designer.maven,
|
||||
org.talend.designer.maven.launch,
|
||||
|
||||
@@ -125,6 +125,11 @@
|
||||
<artifactId>plexus-io</artifactId>
|
||||
<version>3.0.0</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.apache.maven.shared</groupId>
|
||||
<artifactId>maven-shared-utils</artifactId>
|
||||
<version>3.3.3</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.apache.maven</groupId>
|
||||
<artifactId>maven-core</artifactId>
|
||||
@@ -184,6 +189,11 @@
|
||||
<artifactId>plexus-utils</artifactId>
|
||||
<version>3.0.24</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.apache.maven.shared</groupId>
|
||||
<artifactId>maven-shared-utils</artifactId>
|
||||
<version>3.3.3</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.apache.maven</groupId>
|
||||
<artifactId>maven-core</artifactId>
|
||||
|
||||
@@ -0,0 +1,149 @@
|
||||
// ============================================================================
|
||||
//
|
||||
// Copyright (C) 2006-2021 Talend Inc. - www.talend.com
|
||||
//
|
||||
// This source code is available under agreement available at
|
||||
// %InstallDIR%\features\org.talend.rcp.branding.%PRODUCTNAME%\%PRODUCTNAME%license.txt
|
||||
//
|
||||
// You should have received a copy of the agreement
|
||||
// along with this program; if not, write to Talend SA
|
||||
// 9 rue Pages 92150 Suresnes, France
|
||||
//
|
||||
// ============================================================================
|
||||
package org.talend.designer.maven.migration.common;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import org.apache.commons.lang.StringUtils;
|
||||
import org.talend.commons.exception.ExceptionHandler;
|
||||
import org.talend.commons.exception.PersistenceException;
|
||||
import org.talend.core.GlobalServiceRegister;
|
||||
import org.talend.core.model.properties.Item;
|
||||
import org.talend.core.model.properties.Property;
|
||||
import org.talend.core.model.repository.ERepositoryObjectType;
|
||||
import org.talend.core.ui.ITestContainerCoreService;
|
||||
|
||||
/**
|
||||
* DOC jding class global comment. Detailled comment
|
||||
*/
|
||||
public class ItemReportRecorder {
|
||||
|
||||
protected Item item;
|
||||
|
||||
protected String detailMessage;
|
||||
|
||||
public String getItemType() {
|
||||
String type = "";
|
||||
ERepositoryObjectType itemType = ERepositoryObjectType.getItemType(item);
|
||||
if (itemType != null) {
|
||||
if (ERepositoryObjectType.getAllTypesOfTestContainer().contains(itemType)) {
|
||||
Item parentJobItem = getTestCaseParentJobItem(item);
|
||||
if (parentJobItem != null) {
|
||||
ERepositoryObjectType parentJobType = ERepositoryObjectType.getItemType(parentJobItem);
|
||||
if (parentJobType != null) {
|
||||
String parentTypePath = getCompleteObjectTypePath(parentJobType);
|
||||
if (StringUtils.isNotBlank(parentTypePath)) {
|
||||
type = parentTypePath + "/";
|
||||
}
|
||||
}
|
||||
}
|
||||
type += itemType;
|
||||
} else {
|
||||
type = getCompleteObjectTypePath(itemType);
|
||||
}
|
||||
}
|
||||
return type;
|
||||
}
|
||||
|
||||
public String getItemPath() {
|
||||
String path = "";
|
||||
StringBuffer buffer = new StringBuffer();
|
||||
ERepositoryObjectType itemType = ERepositoryObjectType.getItemType(item);
|
||||
|
||||
if (ERepositoryObjectType.getAllTypesOfTestContainer().contains(itemType)) {
|
||||
StringBuffer testcaseBuffer = new StringBuffer();
|
||||
Item parentJobItem = getTestCaseParentJobItem(item);
|
||||
if (parentJobItem != null) {
|
||||
if (parentJobItem.getState() != null && StringUtils.isNotBlank(parentJobItem.getState().getPath())) {
|
||||
testcaseBuffer.append(parentJobItem.getState().getPath()).append("/");
|
||||
}
|
||||
testcaseBuffer.append(parentJobItem.getProperty() != null ? parentJobItem.getProperty().getLabel() : "");
|
||||
if (StringUtils.isNotBlank(testcaseBuffer.toString())) {
|
||||
buffer.append(testcaseBuffer.toString()).append("/");
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if (item.getState() != null && StringUtils.isNotBlank(item.getState().getPath())) {
|
||||
buffer.append(item.getState().getPath()).append("/");
|
||||
}
|
||||
}
|
||||
|
||||
Property property = item.getProperty();
|
||||
if (property != null) {
|
||||
buffer.append(property.getLabel() + "_" + property.getVersion());
|
||||
}
|
||||
path = buffer.toString();
|
||||
return path;
|
||||
}
|
||||
|
||||
private Item getTestCaseParentJobItem(Item testcaseItem) {
|
||||
Item parentJobItem = null;
|
||||
if (GlobalServiceRegister.getDefault().isServiceRegistered(ITestContainerCoreService.class)) {
|
||||
ITestContainerCoreService testcaseService = GlobalServiceRegister.getDefault()
|
||||
.getService(ITestContainerCoreService.class);
|
||||
if (testcaseService != null) {
|
||||
try {
|
||||
parentJobItem = testcaseService.getParentJobItem(item);
|
||||
} catch (PersistenceException e) {
|
||||
ExceptionHandler.process(e);
|
||||
}
|
||||
}
|
||||
}
|
||||
return parentJobItem;
|
||||
}
|
||||
|
||||
private String getCompleteObjectTypePath(ERepositoryObjectType itemType) {
|
||||
ERepositoryObjectType rootItemType = itemType;
|
||||
if (ERepositoryObjectType.JDBC != null && ERepositoryObjectType.JDBC.equals(rootItemType)) {
|
||||
rootItemType = ERepositoryObjectType.METADATA_CONNECTIONS;
|
||||
}
|
||||
List<String> typeLabels = new ArrayList<String>();
|
||||
findOutCompleteTypePath(rootItemType, typeLabels);
|
||||
StringBuffer buffer = new StringBuffer();
|
||||
if (!typeLabels.isEmpty()) {
|
||||
for (int i = 0; i < typeLabels.size(); i++) {
|
||||
if (i != 0) {
|
||||
buffer.append("/");
|
||||
}
|
||||
buffer.append(typeLabels.get(i));
|
||||
}
|
||||
}
|
||||
return buffer.toString();
|
||||
}
|
||||
|
||||
private void findOutCompleteTypePath(ERepositoryObjectType type, List<String> typeLabels) {
|
||||
ERepositoryObjectType parentType = ERepositoryObjectType.findParentType(type);
|
||||
if (parentType != null) {
|
||||
findOutCompleteTypePath(parentType, typeLabels);
|
||||
}
|
||||
typeLabels.add(type.getLabel());
|
||||
}
|
||||
|
||||
public Item getItem() {
|
||||
return item;
|
||||
}
|
||||
|
||||
public void setItem(Item item) {
|
||||
this.item = item;
|
||||
}
|
||||
|
||||
public String getDetailMessage() {
|
||||
return detailMessage;
|
||||
}
|
||||
|
||||
public void setDetailMessage(String detailMessage) {
|
||||
this.detailMessage = detailMessage;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,81 @@
|
||||
// ============================================================================
|
||||
//
|
||||
// Copyright (C) 2006-2021 Talend Inc. - www.talend.com
|
||||
//
|
||||
// This source code is available under agreement available at
|
||||
// %InstallDIR%\features\org.talend.rcp.branding.%PRODUCTNAME%\%PRODUCTNAME%license.txt
|
||||
//
|
||||
// You should have received a copy of the agreement
|
||||
// along with this program; if not, write to Talend SA
|
||||
// 9 rue Pages 92150 Suresnes, France
|
||||
//
|
||||
// ============================================================================
|
||||
package org.talend.designer.maven.migration.common;
|
||||
|
||||
import java.io.BufferedWriter;
|
||||
import java.io.File;
|
||||
import java.io.FileOutputStream;
|
||||
import java.io.OutputStreamWriter;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
import org.apache.commons.lang.StringUtils;
|
||||
import org.eclipse.core.runtime.Path;
|
||||
import org.talend.core.utils.TalendQuoteUtils;
|
||||
|
||||
/**
|
||||
* DOC jding class global comment. Detailled comment
|
||||
*/
|
||||
public class ItemsReportUtil {
|
||||
|
||||
|
||||
public static boolean generateReportFile(File reportFile, String header, List<String> records) throws Exception {
|
||||
boolean generateDone = false;
|
||||
BufferedWriter printWriter = null;
|
||||
try {
|
||||
File parentFolder = new Path(reportFile.getAbsolutePath()).removeLastSegments(1).toFile();
|
||||
// File parentFolder = new File(parentPath);
|
||||
if (!parentFolder.exists()) {
|
||||
parentFolder.mkdirs();
|
||||
}
|
||||
if (!reportFile.exists()) {
|
||||
reportFile.createNewFile();
|
||||
}
|
||||
FileOutputStream fos = new FileOutputStream(reportFile);
|
||||
fos.write(new byte[] { (byte) 0xEF, (byte) 0xBB, (byte) 0xBF });
|
||||
OutputStreamWriter outputWriter = new OutputStreamWriter(fos, "UTF-8");
|
||||
printWriter = new BufferedWriter(outputWriter);
|
||||
printWriter.write(header);
|
||||
printWriter.newLine();
|
||||
for (String recordStr : records) {
|
||||
printWriter.write(recordStr);
|
||||
printWriter.newLine();
|
||||
}
|
||||
printWriter.flush();
|
||||
generateDone = true;
|
||||
} finally {
|
||||
if (printWriter != null) {
|
||||
printWriter.close();
|
||||
}
|
||||
}
|
||||
return generateDone;
|
||||
}
|
||||
|
||||
public static String handleColumnQuotes(String text) {
|
||||
String quoteMark = TalendQuoteUtils.QUOTATION_MARK;
|
||||
text = StringUtils.isBlank(text) ? "" : text;
|
||||
if (text.contains(quoteMark)) {
|
||||
// replace to double quote surround
|
||||
text = text.replace(quoteMark, quoteMark + quoteMark);
|
||||
}
|
||||
return quoteMark + text + quoteMark;
|
||||
}
|
||||
|
||||
public static String getCurrentTimeString() {
|
||||
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMddHHmmss");
|
||||
String time = dateFormat.format(new Date());
|
||||
return time;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,177 @@
|
||||
// ============================================================================
|
||||
//
|
||||
// Copyright (C) 2006-2021 Talend Inc. - www.talend.com
|
||||
//
|
||||
// This source code is available under agreement available at
|
||||
// %InstallDIR%\features\org.talend.rcp.branding.%PRODUCTNAME%\%PRODUCTNAME%license.txt
|
||||
//
|
||||
// You should have received a copy of the agreement
|
||||
// along with this program; if not, write to Talend SA
|
||||
// 9 rue Pages 92150 Suresnes, France
|
||||
//
|
||||
// ============================================================================
|
||||
package org.talend.designer.maven.migration.common;
|
||||
|
||||
import java.io.File;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Calendar;
|
||||
import java.util.Date;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
import org.eclipse.core.resources.ResourcesPlugin;
|
||||
import org.eclipse.core.runtime.preferences.ConfigurationScope;
|
||||
import org.eclipse.core.runtime.preferences.IEclipsePreferences;
|
||||
import org.eclipse.core.runtime.preferences.IScopeContext;
|
||||
import org.osgi.service.prefs.BackingStoreException;
|
||||
import org.talend.commons.exception.ExceptionHandler;
|
||||
import org.talend.core.PluginChecker;
|
||||
import org.talend.core.model.properties.Item;
|
||||
import org.talend.core.model.properties.Property;
|
||||
import org.talend.migration.IProjectMigrationTask;
|
||||
|
||||
/**
|
||||
* DOC jding class global comment. Detailled comment
|
||||
*/
|
||||
public class MigrationReportHelper {
|
||||
|
||||
private static final String COMMA = ",";
|
||||
|
||||
private static final String PLUGIN_ID = "org.talend.designer.maven";
|
||||
|
||||
private static final String DO_NOT_SHOW_PREF_KEY = "talend.migrationReportDialog.doNotShowAgain";
|
||||
|
||||
private static final String MIGRATION_REPORT_HEAD = "Task name,Task description,Item type,Path to migrated item,Migration details";
|
||||
|
||||
private static final MigrationReportHelper instance = new MigrationReportHelper();
|
||||
|
||||
public static MigrationReportHelper getInstance() {
|
||||
return instance;
|
||||
}
|
||||
|
||||
private String reportGeneratedPath = "";
|
||||
|
||||
private Set<String> taskItemRecords = new HashSet<String>();
|
||||
|
||||
private List<MigrationReportRecorder> migrationReportRecorders = new ArrayList<MigrationReportRecorder>();
|
||||
|
||||
public void generateMigrationReport(String projectTecName) {
|
||||
if (migrationReportRecorders == null || migrationReportRecorders.isEmpty()) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (!PluginChecker.isTIS()) {
|
||||
clearRecorders();
|
||||
return;
|
||||
}
|
||||
|
||||
File exportFolder = null;
|
||||
File reportFile = null;
|
||||
try {
|
||||
String currentTime = getCurrentTime();
|
||||
String filePath = getReportExportFolder(currentTime) + "/" + getReportFileName(currentTime, projectTecName);
|
||||
reportGeneratedPath = filePath;
|
||||
reportFile = new File(filePath);
|
||||
List<String> recordLines = new ArrayList<String>();
|
||||
for (MigrationReportRecorder record : migrationReportRecorders) {
|
||||
StringBuffer buffer = new StringBuffer();
|
||||
buffer.append(ItemsReportUtil.handleColumnQuotes(record.getTaskClassName())).append(COMMA);
|
||||
buffer.append(ItemsReportUtil.handleColumnQuotes(record.getTaskDescription())).append(COMMA);
|
||||
buffer.append(ItemsReportUtil.handleColumnQuotes(record.getItemType())).append(COMMA);
|
||||
buffer.append(ItemsReportUtil.handleColumnQuotes(record.getItemPath())).append(COMMA);
|
||||
buffer.append(ItemsReportUtil.handleColumnQuotes(record.getDetailMessage()));
|
||||
recordLines.add(buffer.toString());
|
||||
}
|
||||
ItemsReportUtil.generateReportFile(reportFile, MIGRATION_REPORT_HEAD, recordLines);
|
||||
} catch (Exception e) {
|
||||
ExceptionHandler.process(e);
|
||||
if (reportFile != null && reportFile.exists()) {
|
||||
reportFile.delete();
|
||||
}
|
||||
if (exportFolder != null && exportFolder.exists()) {
|
||||
exportFolder.delete();
|
||||
}
|
||||
} finally {
|
||||
migrationReportRecorders.clear();
|
||||
taskItemRecords.clear();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public boolean isRequireDefaultRecord(IProjectMigrationTask task, Item item) {
|
||||
boolean require = true;
|
||||
if (task.getOrder() != null) {
|
||||
Calendar calendar = Calendar.getInstance();
|
||||
calendar.setTime(task.getOrder());
|
||||
int year = calendar.get(Calendar.YEAR);
|
||||
if (year <= 2016) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
if (item.getProperty() != null) {
|
||||
Property property = item.getProperty();
|
||||
String key = task.getId() + "_" + property.getId() + "_" + property.getVersion();
|
||||
if (taskItemRecords.contains(key)) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return require;
|
||||
}
|
||||
|
||||
private String getCurrentTime() {
|
||||
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMddHHmmss");
|
||||
String time = dateFormat.format(new Date());
|
||||
return time;
|
||||
}
|
||||
|
||||
private String getReportExportFolder(String time) {
|
||||
String folderName = "migrationReport" + "_" + time;
|
||||
String path = ResourcesPlugin.getWorkspace().getRoot().getLocation().toString() + "/report/" + folderName;
|
||||
return path;
|
||||
}
|
||||
|
||||
private String getReportFileName(String time, String projectTecName) {
|
||||
String fileName = time + "_" + projectTecName + "_" + "Migration" + "_" + "Report.csv";
|
||||
return fileName;
|
||||
}
|
||||
|
||||
public static void storeDoNotShowAgainPref(boolean selected) {
|
||||
IScopeContext scopeContext = ConfigurationScope.INSTANCE;
|
||||
IEclipsePreferences pref = scopeContext.getNode(PLUGIN_ID);
|
||||
pref.putBoolean(DO_NOT_SHOW_PREF_KEY, selected);
|
||||
try {
|
||||
pref.flush();
|
||||
} catch (BackingStoreException e) {
|
||||
ExceptionHandler.process(e);
|
||||
}
|
||||
}
|
||||
|
||||
public static boolean isReportDialogDisable() {
|
||||
IScopeContext scopeContext = ConfigurationScope.INSTANCE;
|
||||
IEclipsePreferences pref = scopeContext.getNode(PLUGIN_ID);
|
||||
return pref.getBoolean(DO_NOT_SHOW_PREF_KEY, false);
|
||||
}
|
||||
|
||||
public void addRecorder(MigrationReportRecorder recorder) {
|
||||
if (recorder != null) {
|
||||
migrationReportRecorders.add(recorder);
|
||||
if (recorder.getItem() != null && recorder.getItem().getProperty() != null) {
|
||||
Property property = recorder.getItem().getProperty();
|
||||
taskItemRecords.add(recorder.getTask().getId() + "_" + property.getId() + "_" + property.getVersion());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void clearRecorders() {
|
||||
reportGeneratedPath = "";
|
||||
migrationReportRecorders.clear();
|
||||
taskItemRecords.clear();
|
||||
}
|
||||
|
||||
public String getReportGeneratedPath() {
|
||||
return reportGeneratedPath;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,197 @@
|
||||
// ============================================================================
|
||||
//
|
||||
// Copyright (C) 2006-2021 Talend Inc. - www.talend.com
|
||||
//
|
||||
// This source code is available under agreement available at
|
||||
// %InstallDIR%\features\org.talend.rcp.branding.%PRODUCTNAME%\%PRODUCTNAME%license.txt
|
||||
//
|
||||
// You should have received a copy of the agreement
|
||||
// along with this program; if not, write to Talend SA
|
||||
// 9 rue Pages 92150 Suresnes, France
|
||||
//
|
||||
// ============================================================================
|
||||
package org.talend.designer.maven.migration.common;
|
||||
|
||||
import org.apache.commons.lang.StringUtils;
|
||||
import org.talend.core.model.components.ComponentUtilities;
|
||||
import org.talend.core.model.properties.Item;
|
||||
import org.talend.core.utils.TalendQuoteUtils;
|
||||
import org.talend.designer.core.model.utils.emf.talendfile.ElementParameterType;
|
||||
import org.talend.designer.core.model.utils.emf.talendfile.NodeType;
|
||||
import org.talend.migration.IProjectMigrationTask;
|
||||
|
||||
/**
|
||||
* DOC jding class global comment. Detailled comment
|
||||
*/
|
||||
public class MigrationReportRecorder extends ItemReportRecorder {
|
||||
|
||||
private IProjectMigrationTask task;
|
||||
|
||||
private MigrationOperationType operationType;
|
||||
|
||||
private NodeType node;
|
||||
|
||||
private String paramName;
|
||||
|
||||
private String oldValue;
|
||||
|
||||
private String newValue;
|
||||
|
||||
public enum MigrationOperationType {
|
||||
ADD,
|
||||
MODIFY,
|
||||
DELETE
|
||||
}
|
||||
|
||||
public MigrationReportRecorder(IProjectMigrationTask task, Item item) {
|
||||
super();
|
||||
this.task = task;
|
||||
this.item = item;
|
||||
}
|
||||
|
||||
public MigrationReportRecorder(IProjectMigrationTask task, MigrationOperationType operationType, Item item, NodeType node,
|
||||
String paramName, String oldValue, String newValue) {
|
||||
super();
|
||||
this.task = task;
|
||||
this.operationType = operationType;
|
||||
this.item = item;
|
||||
this.node = node;
|
||||
this.paramName = paramName;
|
||||
this.oldValue = oldValue;
|
||||
this.newValue = newValue;
|
||||
}
|
||||
|
||||
public MigrationReportRecorder(IProjectMigrationTask task, Item item, String detailMessage) {
|
||||
super();
|
||||
this.task = task;
|
||||
this.item = item;
|
||||
this.detailMessage = detailMessage;
|
||||
}
|
||||
|
||||
public String getTaskClassName() {
|
||||
return task.getClass().getSimpleName();
|
||||
}
|
||||
|
||||
public String getTaskDescription() {
|
||||
String description = "";
|
||||
if (StringUtils.isNotBlank(task.getDescription())) {
|
||||
description = task.getDescription();
|
||||
}
|
||||
return description;
|
||||
}
|
||||
|
||||
public String getDetailMessage() {
|
||||
String details = detailMessage;
|
||||
if (StringUtils.isNotBlank(detailMessage)) {
|
||||
return details;
|
||||
}
|
||||
|
||||
if (operationType == null || StringUtils.isBlank(paramName)) {
|
||||
details = getTaskClassName() + " task is applied";
|
||||
return details;
|
||||
}
|
||||
|
||||
StringBuffer detailBuffer = new StringBuffer();
|
||||
if (node != null) {
|
||||
// migration for node, e.g. tRESTClient component "tRESTClient_2":
|
||||
detailBuffer.append(node.getComponentName()).append(" component ");
|
||||
ElementParameterType uniqueName = ComponentUtilities.getNodeProperty(node, "UNIQUE_NAME");
|
||||
detailBuffer.append(TalendQuoteUtils.addQuotes(uniqueName.getValue())).append(":");
|
||||
} else {
|
||||
// migration for item, e.g. context item "testContext":
|
||||
detailBuffer.append(getItemType() + " item ")
|
||||
.append(TalendQuoteUtils.addQuotes(item.getProperty().getLabel())).append(":");
|
||||
}
|
||||
|
||||
detailBuffer.append(paramName).append(" was ");
|
||||
switch (operationType) {
|
||||
case ADD:
|
||||
detailBuffer.append("added");
|
||||
if (StringUtils.isNotBlank(newValue)) {
|
||||
detailBuffer.append(" with ").append(newValue);
|
||||
}
|
||||
break;
|
||||
case MODIFY:
|
||||
detailBuffer.append("changed");
|
||||
if (StringUtils.isNotBlank(oldValue)) {
|
||||
detailBuffer.append(" from ").append(oldValue);
|
||||
}
|
||||
if (StringUtils.isNotBlank(newValue)) {
|
||||
detailBuffer.append(" to ").append(newValue);
|
||||
}
|
||||
break;
|
||||
case DELETE:
|
||||
detailBuffer.append("deleted");
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
details = detailBuffer.toString();
|
||||
|
||||
return details;
|
||||
}
|
||||
|
||||
/**
|
||||
* Getter for task.
|
||||
*
|
||||
* @return the task
|
||||
*/
|
||||
public IProjectMigrationTask getTask() {
|
||||
return task;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the task.
|
||||
*
|
||||
* @param task the task to set
|
||||
*/
|
||||
public void setTask(IProjectMigrationTask task) {
|
||||
this.task = task;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the operationType.
|
||||
*
|
||||
* @param operationType the operationType to set
|
||||
*/
|
||||
public void setOperationType(MigrationOperationType operationType) {
|
||||
this.operationType = operationType;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the node.
|
||||
*
|
||||
* @param node the node to set
|
||||
*/
|
||||
public void setNode(NodeType node) {
|
||||
this.node = node;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the paramName.
|
||||
*
|
||||
* @param paramName the paramName to set
|
||||
*/
|
||||
public void setParamName(String paramName) {
|
||||
this.paramName = paramName;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the oldValue.
|
||||
*
|
||||
* @param oldValue the oldValue to set
|
||||
*/
|
||||
public void setOldValue(String oldValue) {
|
||||
this.oldValue = oldValue;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the newValue.
|
||||
*
|
||||
* @param newValue the newValue to set
|
||||
*/
|
||||
public void setNewValue(String newValue) {
|
||||
this.newValue = newValue;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,121 @@
|
||||
package org.talend.designer.maven.migration.tasks;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import org.talend.commons.exception.PersistenceException;
|
||||
import org.talend.commons.runtime.model.emf.EmfHelper;
|
||||
import org.talend.core.GlobalServiceRegister;
|
||||
import org.talend.core.model.components.filters.IComponentFilter;
|
||||
import org.talend.core.model.migration.AbstractItemMigrationTask;
|
||||
import org.talend.core.model.properties.Item;
|
||||
import org.talend.core.model.properties.JobletProcessItem;
|
||||
import org.talend.core.model.properties.ProcessItem;
|
||||
import org.talend.core.model.repository.ERepositoryObjectType;
|
||||
import org.talend.core.repository.utils.ConvertJobsUtil;
|
||||
import org.talend.designer.core.model.utils.emf.talendfile.ElementParameterType;
|
||||
import org.talend.designer.core.model.utils.emf.talendfile.NodeType;
|
||||
import org.talend.designer.core.model.utils.emf.talendfile.ProcessType;
|
||||
import org.talend.designer.maven.migration.common.MigrationReportHelper;
|
||||
import org.talend.designer.maven.migration.common.MigrationReportRecorder;
|
||||
import org.talend.repository.model.IProxyRepositoryFactory;
|
||||
import org.talend.repository.model.IRepositoryService;
|
||||
|
||||
public abstract class AbstractCorrectBuildItemMigrationTask extends AbstractItemMigrationTask implements ICorrectBuildTypeMigrationTask {
|
||||
|
||||
protected static final String BUILD_TYPE_PROPERTY = "BUILD_TYPE";
|
||||
protected static final String BUILD_TYPE_STANDALONE = "STANDALONE";
|
||||
protected static final String BUILD_TYPE_OSGI = "OSGI";
|
||||
protected static final String BUILD_TYPE_ROUTE = "ROUTE";
|
||||
protected static final String BUILD_TYPE_ROUTE_MICROSERVICE = "ROUTE_MICROSERVICE";
|
||||
protected static final String REST_MS = "REST_MS";
|
||||
|
||||
|
||||
protected static Map<String, String> migratedJobs = new HashMap<String, String>();
|
||||
|
||||
protected static void clearMigratedJobs () {
|
||||
migratedJobs.clear();
|
||||
}
|
||||
|
||||
protected static void skipMigrationForJob (String jobName, String migrationTask) {
|
||||
migratedJobs.put(jobName, migrationTask);
|
||||
}
|
||||
|
||||
protected static void storeMigratedJob (String jobName, String migrationTask) {
|
||||
migratedJobs.put(jobName, migrationTask);
|
||||
}
|
||||
|
||||
protected static boolean isJobMigrated (String jobName) {
|
||||
return migratedJobs.containsKey(jobName);
|
||||
}
|
||||
|
||||
protected static String getStoredJobMigraionTask (String jobName) {
|
||||
return migratedJobs.get(jobName);
|
||||
}
|
||||
|
||||
public void generateReportRecord(MigrationReportRecorder recorder) {
|
||||
MigrationReportHelper.getInstance().addRecorder(recorder);
|
||||
}
|
||||
|
||||
public static List<NodeType> searchComponent(ProcessType processType, IComponentFilter filter) {
|
||||
List<NodeType> list = new ArrayList<NodeType>();
|
||||
if (filter == null || processType == null) {
|
||||
return list;
|
||||
}
|
||||
|
||||
for (Object o : processType.getNode()) {
|
||||
if (filter.accept((NodeType) o)) {
|
||||
list.add((NodeType) o);
|
||||
}
|
||||
}
|
||||
return list;
|
||||
}
|
||||
|
||||
public void save(Item item) throws PersistenceException {
|
||||
IRepositoryService service = (IRepositoryService) GlobalServiceRegister.getDefault()
|
||||
.getService(IRepositoryService.class);
|
||||
IProxyRepositoryFactory factory = service.getProxyRepositoryFactory();
|
||||
factory.save(item, true);
|
||||
}
|
||||
|
||||
public ProcessType getProcessType(Item item) {
|
||||
ProcessType processType = null;
|
||||
if (item instanceof ProcessItem) {
|
||||
processType = ((ProcessItem) item).getProcess();
|
||||
}
|
||||
if (item instanceof JobletProcessItem) {
|
||||
processType = ((JobletProcessItem) item).getJobletProcess();
|
||||
}
|
||||
if (processType != null) {
|
||||
EmfHelper.visitChilds(processType);
|
||||
ERepositoryObjectType itemType = ERepositoryObjectType.getItemType(item);
|
||||
if (itemType == ERepositoryObjectType.TEST_CONTAINER
|
||||
&& !ConvertJobsUtil.JobType.STANDARD.getDisplayName().equalsIgnoreCase(processType.getJobType())) {
|
||||
return null;
|
||||
}
|
||||
|
||||
}
|
||||
return processType;
|
||||
}
|
||||
|
||||
/**
|
||||
* Find element parameter with a given parameter name
|
||||
*
|
||||
* @param paramName
|
||||
* @param elementParameterTypes
|
||||
* @return
|
||||
*/
|
||||
public static final ElementParameterType findElementParameterByName(String paramName, NodeType node) {
|
||||
for (Object obj : node.getElementParameter()) {
|
||||
ElementParameterType cpType = (ElementParameterType) obj;
|
||||
if (paramName.equals(cpType.getName())) {
|
||||
return cpType;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
abstract public void clear ();
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
package org.talend.designer.maven.migration.tasks;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import org.talend.core.model.repository.ERepositoryObjectType;
|
||||
|
||||
public abstract class AbstractDataServiceJobMigrationTask extends AbstractCorrectBuildItemMigrationTask {
|
||||
|
||||
@Override
|
||||
public List<ERepositoryObjectType> getTypes() {
|
||||
List<ERepositoryObjectType> toReturn = new ArrayList<ERepositoryObjectType>();
|
||||
toReturn.add(ERepositoryObjectType.PROCESS);
|
||||
return toReturn;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
package org.talend.designer.maven.migration.tasks;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import org.talend.core.model.repository.ERepositoryObjectType;
|
||||
|
||||
public abstract class AbstractRouteMigrationTask extends AbstractCorrectBuildItemMigrationTask {
|
||||
|
||||
@Override
|
||||
public List<ERepositoryObjectType> getTypes() {
|
||||
List<ERepositoryObjectType> toReturn = new ArrayList<ERepositoryObjectType>();
|
||||
toReturn.add(ERepositoryObjectType.PROCESS_ROUTE);
|
||||
toReturn.add(ERepositoryObjectType.PROCESS_ROUTE_MICROSERVICE);
|
||||
return toReturn;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,268 @@
|
||||
package org.talend.designer.maven.migration.tasks;
|
||||
|
||||
import java.util.Date;
|
||||
import java.util.GregorianCalendar;
|
||||
import java.util.List;
|
||||
|
||||
import org.talend.commons.exception.ExceptionHandler;
|
||||
import org.talend.commons.exception.PersistenceException;
|
||||
import org.talend.core.model.components.filters.IComponentFilter;
|
||||
import org.talend.core.model.components.filters.NameComponentFilter;
|
||||
import org.talend.core.model.general.Project;
|
||||
import org.talend.core.model.properties.Item;
|
||||
import org.talend.core.model.properties.ProcessItem;
|
||||
import org.talend.designer.core.model.utils.emf.talendfile.NodeType;
|
||||
import org.talend.designer.core.model.utils.emf.talendfile.ProcessType;
|
||||
import org.talend.designer.maven.migration.common.MigrationReportRecorder;
|
||||
import org.talend.designer.runprocess.ItemCacheManager;
|
||||
import org.talend.repository.ProjectManager;
|
||||
|
||||
/*
|
||||
* If Job does not contain any of the following components: "tRouteInput", "tRESTClient", "tESBConsumer"
|
||||
* then BUILD_TYPE must be STANDALONE
|
||||
* Else (job contains one of "tRouteInput", "tRESTClient" or "tESBConsumer")
|
||||
* If no BUILD_TYPE is set then default BUILD_TYPE must be STANDALONE
|
||||
* Manage child jobs for jobs ( parent, target BUILD_TYPE = STANDALONE )
|
||||
* If BUILD_TYPE is STANDALONE
|
||||
* Manage child jobs for jobs ( parent, target BUILD_TYPE = STANDALONE )
|
||||
* If BUILD_TYPE is ROUTE > EXCEPTION: need warning message! BUILD_TYPE was wrongly set to ROUTE from a previous migration task and has to be manually updated (all subjobs have to be checked manually). Value should be either STANDALONE (in most cases) or OSGI.
|
||||
*/
|
||||
|
||||
public class CorrectBuildTypeForDIJobMigrationTask extends AbstractDataServiceJobMigrationTask {
|
||||
|
||||
private static final String[] ESB_COMPONENTS = { "tRouteInput", "tRESTClient", "tESBConsumer" };
|
||||
|
||||
private static final String T_RUB_JOB_COMPONENT = "tRunJob";
|
||||
|
||||
boolean failure = false;
|
||||
|
||||
/*
|
||||
* (non-Javadoc)
|
||||
*
|
||||
* @see org.talend.migration.IMigrationTask#getOrder()
|
||||
*/
|
||||
@Override
|
||||
public Date getOrder() {
|
||||
GregorianCalendar gc = new GregorianCalendar(2021, 7, 25, 12, 0, 0);
|
||||
return gc.getTime();
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
@Override
|
||||
public ExecutionResult execute(Item item) {
|
||||
|
||||
final ProcessType processType = getProcessType(item);
|
||||
String jobName = item.getProperty().getLabel();
|
||||
|
||||
/*
|
||||
* Migrating remaining jobs only (which was not migrated previously)
|
||||
*/
|
||||
if (isJobMigrated(jobName)) {
|
||||
return ExecutionResult.NOTHING_TO_DO;
|
||||
}
|
||||
|
||||
|
||||
Object originalBuildType = item.getProperty().getAdditionalProperties().get(BUILD_TYPE_PROPERTY);
|
||||
|
||||
/*
|
||||
* If BUILD_TYPE is ROUTE > EXCEPTION: need warning message! BUILD_TYPE was
|
||||
* wrongly set to ROUTE from a previous migration task and has to be manually
|
||||
* updated (all subjobs have to be checked manually). Value should be either
|
||||
* STANDALONE (in most cases) or OSGI.
|
||||
*/
|
||||
|
||||
if (originalBuildType != null && BUILD_TYPE_ROUTE.equalsIgnoreCase((String) originalBuildType)) {
|
||||
ExceptionHandler.process(new RuntimeException("Job [" + jobName + "] has incorrect BUILD_TYPE ["
|
||||
+ BUILD_TYPE_ROUTE
|
||||
+ "] which has to be manually updated (all subjobs have to be checked manually). Value should be either STANDALONE (in most cases) or OSGI"));
|
||||
return ExecutionResult.FAILURE;
|
||||
}
|
||||
|
||||
for (String name : ESB_COMPONENTS) {
|
||||
|
||||
boolean modified = false;
|
||||
|
||||
IComponentFilter filter = new NameComponentFilter(name);
|
||||
|
||||
List<NodeType> c = searchComponent(processType, filter);
|
||||
|
||||
if (!c.isEmpty()) {
|
||||
|
||||
/*
|
||||
* job contains one of "tRouteInput", "tRESTClient" or "tESBConsumer") If no
|
||||
* BUILD_TYPE is set then default BUILD_TYPE must be STANDALONE
|
||||
*/
|
||||
|
||||
if (null == originalBuildType) {
|
||||
item.getProperty().getAdditionalProperties().put(BUILD_TYPE_PROPERTY, BUILD_TYPE_STANDALONE);
|
||||
try {
|
||||
save(item);
|
||||
modified |= true;
|
||||
generateReportRecord(
|
||||
new MigrationReportRecorder(this, MigrationReportRecorder.MigrationOperationType.MODIFY,
|
||||
item, null, "Build Type", null, BUILD_TYPE_STANDALONE));
|
||||
} catch (PersistenceException e) {
|
||||
ExceptionHandler.process(e);
|
||||
return ExecutionResult.FAILURE;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Manage child jobs for jobs ( parent, target BUILD_TYPE = STANDALONE )
|
||||
*/
|
||||
String currentParentJobBuildType = (String) item.getProperty().getAdditionalProperties()
|
||||
.get(BUILD_TYPE_PROPERTY);
|
||||
|
||||
if (BUILD_TYPE_STANDALONE.equalsIgnoreCase(currentParentJobBuildType)) {
|
||||
updateBuildTypeForSubJobs(item, currentParentJobBuildType);
|
||||
}
|
||||
|
||||
if (failure) {
|
||||
return ExecutionResult.FAILURE;
|
||||
}
|
||||
|
||||
if (modified) {
|
||||
return ExecutionResult.SUCCESS_NO_ALERT;
|
||||
}
|
||||
|
||||
return ExecutionResult.NOTHING_TO_DO;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* If Job does not contain any of the following components: "tRouteInput",
|
||||
* "tRESTClient", "tESBConsumer" then BUILD_TYPE must be STANDALONE
|
||||
* Manage child jobs for jobs ( parent, target BUILD_TYPE = STANDALONE )
|
||||
*/
|
||||
|
||||
if (null == originalBuildType || !BUILD_TYPE_STANDALONE.equalsIgnoreCase(originalBuildType.toString())) {
|
||||
item.getProperty().getAdditionalProperties().put(BUILD_TYPE_PROPERTY, BUILD_TYPE_STANDALONE);
|
||||
boolean modified = false;
|
||||
try {
|
||||
save(item);
|
||||
modified |= true;
|
||||
generateReportRecord(new MigrationReportRecorder(this,
|
||||
MigrationReportRecorder.MigrationOperationType.MODIFY, item, null, "Build Type",
|
||||
(null == originalBuildType) ? null : originalBuildType.toString(), BUILD_TYPE_STANDALONE));
|
||||
updateBuildTypeForSubJobs(item, BUILD_TYPE_STANDALONE);
|
||||
} catch (PersistenceException e) {
|
||||
ExceptionHandler.process(e);
|
||||
return ExecutionResult.FAILURE;
|
||||
}
|
||||
|
||||
if (failure) {
|
||||
return ExecutionResult.FAILURE;
|
||||
}
|
||||
|
||||
if (modified) {
|
||||
return ExecutionResult.SUCCESS_NO_ALERT;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* If Job does not contain any of the following components: "tRouteInput",
|
||||
* "tRESTClient", "tESBConsumer" and BUILD_TYPE is STANDALONE
|
||||
* Manage child jobs for jobs ( parent, target BUILD_TYPE = STANDALONE )
|
||||
*/
|
||||
if (BUILD_TYPE_STANDALONE.equalsIgnoreCase(originalBuildType.toString())) {
|
||||
updateBuildTypeForSubJobs(item, BUILD_TYPE_STANDALONE);
|
||||
if (failure) {
|
||||
return ExecutionResult.FAILURE;
|
||||
}
|
||||
}
|
||||
|
||||
return ExecutionResult.NOTHING_TO_DO;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getDescription() {
|
||||
return "Synchronize build types for DI jobs";
|
||||
}
|
||||
|
||||
@Override
|
||||
public void clear() {
|
||||
clearMigratedJobs();
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
private void updateBuildTypeForSubJobs(Item parentJobItem, String parentJobBuiltType) {
|
||||
IComponentFilter filter = new NameComponentFilter(T_RUB_JOB_COMPONENT);
|
||||
|
||||
ProcessType processType = getProcessType(parentJobItem);
|
||||
|
||||
List<NodeType> c = searchComponent(processType, filter);
|
||||
|
||||
if (!c.isEmpty()) {
|
||||
|
||||
for (NodeType tRunJobComponent : c) {
|
||||
String processID = findElementParameterByName("SELECTED_JOB_NAME:PROCESS_TYPE_PROCESS",
|
||||
tRunJobComponent) == null ? null
|
||||
: findElementParameterByName("SELECTED_JOB_NAME:PROCESS_TYPE_PROCESS", tRunJobComponent)
|
||||
.getValue();
|
||||
if (processID == null) {
|
||||
processID = findElementParameterByName("PROCESS:PROCESS_TYPE_PROCESS",
|
||||
tRunJobComponent) == null ? null
|
||||
: findElementParameterByName("PROCESS:PROCESS_TYPE_PROCESS", tRunJobComponent)
|
||||
.getValue();
|
||||
}
|
||||
|
||||
String processVersion = findElementParameterByName("SELECTED_JOB_NAME:PROCESS_TYPE_VERSION",
|
||||
tRunJobComponent) == null ? null
|
||||
: findElementParameterByName("SELECTED_JOB_NAME:PROCESS_TYPE_VERSION", tRunJobComponent)
|
||||
.getValue();
|
||||
|
||||
if (processVersion == null) {
|
||||
processVersion = findElementParameterByName("PROCESS:PROCESS_TYPE_VERSION",
|
||||
tRunJobComponent) == null ? null
|
||||
: findElementParameterByName("PROCESS:PROCESS_TYPE_VERSION", tRunJobComponent)
|
||||
.getValue();
|
||||
}
|
||||
|
||||
if (processID != null && processVersion != null) {
|
||||
ProcessItem childItem = ItemCacheManager.getProcessItem(processID, processVersion);
|
||||
Project childItemProject = ProjectManager.getInstance().getCurrentProject();
|
||||
|
||||
if (childItem == null) {
|
||||
for (Project refProject : ProjectManager.getInstance().getAllReferencedProjects()) {
|
||||
childItem = ItemCacheManager.getRefProcessItem(getProject(), processID);
|
||||
if (childItem != null) {
|
||||
childItemProject = refProject;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (childItem != null) {
|
||||
|
||||
Object currentChildBuildType = childItem.getProperty().getAdditionalProperties()
|
||||
.get(BUILD_TYPE_PROPERTY);
|
||||
|
||||
// String jobID = childItem.getProperty().getLabel();
|
||||
|
||||
String currentChildBuildTypeStr = (null == currentChildBuildType) ? null
|
||||
: (String) currentChildBuildType;
|
||||
|
||||
if (BUILD_TYPE_STANDALONE.equalsIgnoreCase(parentJobBuiltType)
|
||||
&& !BUILD_TYPE_STANDALONE.equalsIgnoreCase(currentChildBuildTypeStr)) {
|
||||
|
||||
childItem.getProperty().getAdditionalProperties().put(BUILD_TYPE_PROPERTY,
|
||||
BUILD_TYPE_STANDALONE);
|
||||
|
||||
try {
|
||||
save(childItem);
|
||||
generateReportRecord(new MigrationReportRecorder(this,
|
||||
MigrationReportRecorder.MigrationOperationType.MODIFY, childItem, null,
|
||||
"Build Type", currentChildBuildTypeStr, BUILD_TYPE_STANDALONE));
|
||||
} catch (PersistenceException e) {
|
||||
ExceptionHandler.process(e);
|
||||
failure = true;
|
||||
}
|
||||
}
|
||||
|
||||
updateBuildTypeForSubJobs(childItem, parentJobBuiltType);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,107 @@
|
||||
package org.talend.designer.maven.migration.tasks;
|
||||
|
||||
import java.util.Date;
|
||||
import java.util.GregorianCalendar;
|
||||
import java.util.List;
|
||||
|
||||
import org.talend.commons.exception.ExceptionHandler;
|
||||
import org.talend.commons.exception.PersistenceException;
|
||||
import org.talend.core.model.components.filters.IComponentFilter;
|
||||
import org.talend.core.model.components.filters.NameComponentFilter;
|
||||
import org.talend.core.model.properties.Item;
|
||||
import org.talend.designer.core.model.utils.emf.talendfile.NodeType;
|
||||
import org.talend.designer.core.model.utils.emf.talendfile.ProcessType;
|
||||
import org.talend.designer.maven.migration.common.MigrationReportRecorder;
|
||||
|
||||
/*
|
||||
* (non-Javadoc)
|
||||
* Data service REST (process) = Job with "tRESTRequest"
|
||||
* If no BUILD_TYPE is set then default BUILD_TYPE must be OSGI
|
||||
* If Job does not contain any of the following components: "tRouteInput", "tRESTClient", "tESBConsumer" then BUILD_TYPE must be STANDALONE
|
||||
*/
|
||||
|
||||
public class CorrectBuildTypeForDsRestMigrationTask extends AbstractDataServiceJobMigrationTask {
|
||||
|
||||
private static final String T_REST_REQUEST = "tRESTRequest";
|
||||
|
||||
/*
|
||||
* (non-Javadoc)
|
||||
*
|
||||
* @see org.talend.migration.IMigrationTask#getOrder()
|
||||
*/
|
||||
@Override
|
||||
public Date getOrder() {
|
||||
GregorianCalendar gc = new GregorianCalendar(2021, 7, 25, 12, 0, 0);
|
||||
return gc.getTime();
|
||||
}
|
||||
|
||||
/*
|
||||
* (non-Javadoc)
|
||||
*
|
||||
* @see
|
||||
* org.talend.core.model.migration.AbstractDataserviceMigrationTask#execute(org
|
||||
* .talend.core.model.properties.Item)
|
||||
*/
|
||||
@SuppressWarnings("unchecked")
|
||||
@Override
|
||||
public ExecutionResult execute(Item item) {
|
||||
final ProcessType processType = getProcessType(item);
|
||||
|
||||
boolean modified = false;
|
||||
|
||||
/*
|
||||
* If no BUILD_TYPE is set then default BUILD_TYPE must be OSGI
|
||||
*/
|
||||
|
||||
IComponentFilter filter = new NameComponentFilter(T_REST_REQUEST);
|
||||
|
||||
List<NodeType> c = searchComponent(processType, filter);
|
||||
|
||||
if (!c.isEmpty()) {
|
||||
Object buildType = item.getProperty().getAdditionalProperties().get(BUILD_TYPE_PROPERTY);
|
||||
if (null == buildType) {
|
||||
item.getProperty().getAdditionalProperties().put(BUILD_TYPE_PROPERTY, BUILD_TYPE_OSGI);
|
||||
try {
|
||||
save(item);
|
||||
modified |= true;
|
||||
generateReportRecord(
|
||||
new MigrationReportRecorder(this, MigrationReportRecorder.MigrationOperationType.MODIFY,
|
||||
item, null, "Build Type", null, BUILD_TYPE_OSGI));
|
||||
storeMigratedJob(item.getProperty().getLabel(), this.getClass().getName());
|
||||
} catch (PersistenceException e) {
|
||||
ExceptionHandler.process(e);
|
||||
return ExecutionResult.FAILURE;
|
||||
}
|
||||
return ExecutionResult.SUCCESS_NO_ALERT;
|
||||
} else if (BUILD_TYPE_OSGI.equalsIgnoreCase((String)buildType)){
|
||||
// current job has correct build type
|
||||
// skip this job during next migrations
|
||||
skipMigrationForJob(item.getProperty().getLabel(), this.getClass().getName());
|
||||
} else if (REST_MS.equalsIgnoreCase((String)buildType)){
|
||||
// current job has correct build type
|
||||
// skip this job during next migrations
|
||||
skipMigrationForJob(item.getProperty().getLabel(), this.getClass().getName());
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
if (modified) {
|
||||
return ExecutionResult.SUCCESS_NO_ALERT;
|
||||
} else {
|
||||
return ExecutionResult.NOTHING_TO_DO;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getDescription() {
|
||||
return "Synchronize build types for DS Rest jobs";
|
||||
}
|
||||
|
||||
@Override
|
||||
public void clear () {
|
||||
clearMigratedJobs();
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,255 @@
|
||||
package org.talend.designer.maven.migration.tasks;
|
||||
|
||||
import java.util.Date;
|
||||
import java.util.GregorianCalendar;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import org.talend.commons.exception.ExceptionHandler;
|
||||
import org.talend.commons.exception.PersistenceException;
|
||||
import org.talend.core.model.components.filters.IComponentFilter;
|
||||
import org.talend.core.model.components.filters.NameComponentFilter;
|
||||
import org.talend.core.model.general.Project;
|
||||
import org.talend.core.model.properties.Item;
|
||||
import org.talend.core.model.properties.ProcessItem;
|
||||
import org.talend.core.repository.model.ProxyRepositoryFactory;
|
||||
import org.talend.core.runtime.process.TalendProcessArgumentConstant;
|
||||
import org.talend.designer.core.model.utils.emf.talendfile.NodeType;
|
||||
import org.talend.designer.core.model.utils.emf.talendfile.ProcessType;
|
||||
import org.talend.designer.maven.migration.common.MigrationReportRecorder;
|
||||
import org.talend.designer.runprocess.ItemCacheManager;
|
||||
import org.talend.repository.ProjectManager;
|
||||
|
||||
/*
|
||||
* Routes
|
||||
* If no BUILD_TYPE is set then Default BUILD_TYPE must be ROUTE
|
||||
* - Manage child jobs for routes ( parent, target BUILD_TYPE = OSGI )
|
||||
* Else if BUILD_TYPE is ROUTE
|
||||
* - Manage child jobs for routes ( parent, target BUILD_TYPE = OSGI )
|
||||
* Else if BUILD_TYPE is ROUTE_MICROSERVICE
|
||||
* -Manage child jobs for jobs ( parent, target BUILD_TYPE = STANDALONE )
|
||||
*/
|
||||
|
||||
public class CorrectBuildTypeForRoutesMigrationTask extends AbstractRouteMigrationTask {
|
||||
|
||||
private static final String C_TALEND_JOB = "cTalendJob";
|
||||
|
||||
protected Map<String, String> migratedChildJobs = new HashMap<String, String>();
|
||||
|
||||
/*
|
||||
* (non-Javadoc)
|
||||
*
|
||||
* @see org.talend.migration.IMigrationTask#getOrder()
|
||||
*/
|
||||
@Override
|
||||
public Date getOrder() {
|
||||
GregorianCalendar gc = new GregorianCalendar(2021, 7, 25, 12, 0, 0);
|
||||
return gc.getTime();
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
@Override
|
||||
public ExecutionResult execute(Item item) {
|
||||
|
||||
final ProcessType processType = getProcessType(item);
|
||||
|
||||
boolean modified = false;
|
||||
boolean migrationFailure = false;
|
||||
/*
|
||||
* If no BUILD_TYPE is set then default BUILD_TYPE must be ROUTE
|
||||
*/
|
||||
|
||||
Object buildType = item.getProperty().getAdditionalProperties().get(BUILD_TYPE_PROPERTY);
|
||||
if (null == buildType) {
|
||||
item.getProperty().getAdditionalProperties().put(BUILD_TYPE_PROPERTY, BUILD_TYPE_ROUTE);
|
||||
try {
|
||||
save(item);
|
||||
modified |= true;
|
||||
generateReportRecord(
|
||||
new MigrationReportRecorder(this, MigrationReportRecorder.MigrationOperationType.MODIFY, item,
|
||||
null, "Build Type", "null", BUILD_TYPE_OSGI));
|
||||
} catch (PersistenceException e) {
|
||||
ExceptionHandler.process(e);
|
||||
return ExecutionResult.FAILURE;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* If no BUILD_TYPE is set then Default BUILD_TYPE must be ROUTE - Manage child
|
||||
* jobs for routes ( parent, target BUILD_TYPE = OSGI ) Else if BUILD_TYPE is
|
||||
* ROUTE - Manage child jobs for routes ( parent, target BUILD_TYPE = OSGI )
|
||||
* Else if BUILD_TYPE is ROUTE_MICROSERVICE -Manage child jobs for jobs (
|
||||
* parent, target BUILD_TYPE = STANDALONE )
|
||||
*/
|
||||
|
||||
String currentRouteBuildType = (String) item.getProperty().getAdditionalProperties().get(BUILD_TYPE_PROPERTY);
|
||||
|
||||
String currentRouteID = item.getProperty().getLabel();
|
||||
|
||||
IComponentFilter filter = new NameComponentFilter(C_TALEND_JOB);
|
||||
|
||||
List<NodeType> c = searchComponent(processType, filter);
|
||||
|
||||
if (!c.isEmpty()) {
|
||||
|
||||
for (NodeType cTalendJobComponent : c) {
|
||||
|
||||
String processID = findElementParameterByName("SELECTED_JOB_NAME:PROCESS_TYPE_PROCESS",
|
||||
cTalendJobComponent) == null ? null
|
||||
: findElementParameterByName("SELECTED_JOB_NAME:PROCESS_TYPE_PROCESS",
|
||||
cTalendJobComponent).getValue();
|
||||
String processVersion = findElementParameterByName("SELECTED_JOB_NAME:PROCESS_TYPE_VERSION",
|
||||
cTalendJobComponent) == null ? null
|
||||
: findElementParameterByName("SELECTED_JOB_NAME:PROCESS_TYPE_VERSION",
|
||||
cTalendJobComponent).getValue();
|
||||
|
||||
if (processID != null && processVersion != null) {
|
||||
ProcessItem childItem = ItemCacheManager.getProcessItem(processID, processVersion);
|
||||
Project childItemProject = ProjectManager.getInstance().getCurrentProject();
|
||||
|
||||
if (childItem == null) {
|
||||
for (Project refProject : ProjectManager.getInstance().getAllReferencedProjects()) {
|
||||
childItem = ItemCacheManager.getRefProcessItem(getProject(), processID);
|
||||
if (childItem != null) {
|
||||
childItemProject = refProject;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (childItem != null) {
|
||||
|
||||
Object currentChildBuildType = childItem.getProperty().getAdditionalProperties()
|
||||
.get(BUILD_TYPE_PROPERTY);
|
||||
|
||||
String jobID = childItem.getProperty().getLabel();
|
||||
|
||||
String currentChildBuildTypeStr = (null == currentChildBuildType) ? null
|
||||
: (String) currentChildBuildType;
|
||||
|
||||
if (BUILD_TYPE_ROUTE.equalsIgnoreCase(currentRouteBuildType)
|
||||
&& BUILD_TYPE_OSGI.equalsIgnoreCase(currentChildBuildTypeStr)) {
|
||||
storeMigratedModel(jobID, currentRouteID);
|
||||
}
|
||||
|
||||
if (BUILD_TYPE_ROUTE.equalsIgnoreCase(currentRouteBuildType)
|
||||
&& !BUILD_TYPE_OSGI.equalsIgnoreCase(currentChildBuildTypeStr)) {
|
||||
|
||||
try {
|
||||
if (isModelMigrated(jobID)) {
|
||||
ExceptionHandler.process(new RuntimeException(
|
||||
"Child Job is called by 2 or more different Routes which have different build types. Build type for child Job ["
|
||||
+ jobID + "] was previously updated to [" + currentChildBuildTypeStr
|
||||
+ "] to be compatible with parent Route ["
|
||||
+ getStoredMigratedModelParentRoute(jobID)
|
||||
+ "] which is not compatible with current parent Route ["
|
||||
+ currentRouteID + "] with build type [" + currentRouteBuildType
|
||||
+ "]. "));
|
||||
migrationFailure = true;
|
||||
continue;
|
||||
} else {
|
||||
|
||||
childItem.getProperty().getAdditionalProperties()
|
||||
.put(TalendProcessArgumentConstant.ARG_BUILD_TYPE, BUILD_TYPE_OSGI);
|
||||
|
||||
generateReportRecord(new MigrationReportRecorder(this,
|
||||
MigrationReportRecorder.MigrationOperationType.MODIFY, childItem, null,
|
||||
"Build Type", currentChildBuildTypeStr, BUILD_TYPE_OSGI));
|
||||
|
||||
|
||||
ProxyRepositoryFactory.getInstance().save(childItemProject, childItem, true);
|
||||
}
|
||||
|
||||
} catch (PersistenceException e) {
|
||||
ExceptionHandler.process(e);
|
||||
return ExecutionResult.FAILURE;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
if (BUILD_TYPE_ROUTE_MICROSERVICE.equalsIgnoreCase(currentRouteBuildType)
|
||||
&& !BUILD_TYPE_STANDALONE.equalsIgnoreCase(currentChildBuildTypeStr)) {
|
||||
|
||||
try {
|
||||
|
||||
if (isModelMigrated(jobID)) {
|
||||
ExceptionHandler.process(new RuntimeException(
|
||||
"Child Job is called by 2 or more different Routes which have different build types. Build type for child Job ["
|
||||
+ jobID + "] was previously updated to [" + currentChildBuildTypeStr
|
||||
+ "] to be compatible with parent Route ["
|
||||
+ getStoredMigratedModelParentRoute(jobID)
|
||||
+ "] which is not compatible with current parent Route ["
|
||||
+ currentRouteID + "] with build type [" + currentRouteBuildType
|
||||
+ "]. "));
|
||||
migrationFailure = true;
|
||||
continue;
|
||||
} else {
|
||||
|
||||
childItem.getProperty().getAdditionalProperties()
|
||||
.put(TalendProcessArgumentConstant.ARG_BUILD_TYPE, BUILD_TYPE_STANDALONE);
|
||||
|
||||
generateReportRecord(new MigrationReportRecorder(this,
|
||||
MigrationReportRecorder.MigrationOperationType.MODIFY, childItem, null,
|
||||
"Build Type", currentChildBuildTypeStr, BUILD_TYPE_STANDALONE));
|
||||
|
||||
ProxyRepositoryFactory.getInstance().save(childItemProject, childItem, true);
|
||||
}
|
||||
} catch (PersistenceException e) {
|
||||
ExceptionHandler.process(e);
|
||||
return ExecutionResult.FAILURE;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if(!isModelMigrated(jobID)) {
|
||||
storeMigratedModel(jobID, currentRouteID);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
if (migrationFailure) {
|
||||
return ExecutionResult.FAILURE;
|
||||
}
|
||||
|
||||
if (modified) {
|
||||
return ExecutionResult.SUCCESS_NO_ALERT;
|
||||
}
|
||||
|
||||
return ExecutionResult.NOTHING_TO_DO;
|
||||
|
||||
}
|
||||
|
||||
protected void clearMigratedChildJobs() {
|
||||
migratedChildJobs.clear();
|
||||
}
|
||||
|
||||
protected void storeMigratedModel(String jobName, String parentRouteName) {
|
||||
migratedChildJobs.put(jobName, parentRouteName);
|
||||
}
|
||||
|
||||
protected boolean isModelMigrated(String jobName) {
|
||||
return migratedChildJobs.containsKey(jobName);
|
||||
}
|
||||
|
||||
protected String getStoredMigratedModelParentRoute(String jobName) {
|
||||
return migratedChildJobs.get(jobName);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getDescription() {
|
||||
return "Synchronize build types for Routes (incuding child jobs)";
|
||||
}
|
||||
|
||||
@Override
|
||||
public void clear() {
|
||||
clearMigratedChildJobs();
|
||||
clearMigratedJobs();
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,103 @@
|
||||
package org.talend.designer.maven.migration.tasks;
|
||||
|
||||
import java.util.Date;
|
||||
import java.util.GregorianCalendar;
|
||||
import java.util.List;
|
||||
|
||||
import org.talend.commons.exception.ExceptionHandler;
|
||||
import org.talend.commons.exception.PersistenceException;
|
||||
import org.talend.core.model.components.filters.IComponentFilter;
|
||||
import org.talend.core.model.components.filters.NameComponentFilter;
|
||||
import org.talend.core.model.properties.Item;
|
||||
import org.talend.designer.core.model.utils.emf.talendfile.NodeType;
|
||||
import org.talend.designer.core.model.utils.emf.talendfile.ProcessType;
|
||||
import org.talend.designer.maven.migration.common.MigrationReportRecorder;
|
||||
|
||||
/*
|
||||
* Data service SOAP = Job with "tESBProviderRequest"
|
||||
* Set BUILD_TYPE as OSGI
|
||||
* Manage child jobs for jobs ( parent job, target BUILD_TYPE = OSGI )
|
||||
*/
|
||||
|
||||
public class CorrectBuildTypeForSOAPServiceJobMigrationTask extends AbstractDataServiceJobMigrationTask {
|
||||
|
||||
private static final String T_ESB_PROVIDER_REQUEST = "tESBProviderRequest";
|
||||
private static final String BUILD_TYPE_PROPERTY = "BUILD_TYPE";
|
||||
|
||||
private static final String BUILD_TYPE_OSGI = "OSGI";
|
||||
|
||||
/*
|
||||
* (non-Javadoc)
|
||||
*
|
||||
* @see org.talend.migration.IMigrationTask#getOrder()
|
||||
*/
|
||||
@Override
|
||||
public Date getOrder() {
|
||||
GregorianCalendar gc = new GregorianCalendar(2021, 7, 25, 12, 0, 0);
|
||||
return gc.getTime();
|
||||
}
|
||||
|
||||
/*
|
||||
* (non-Javadoc)
|
||||
*
|
||||
* @see
|
||||
* org.talend.core.model.migration.AbstractDataserviceMigrationTask#execute(org
|
||||
* .talend.core.model.properties.Item)
|
||||
*/
|
||||
@SuppressWarnings("unchecked")
|
||||
@Override
|
||||
public ExecutionResult execute(Item item) {
|
||||
final ProcessType processType = getProcessType(item);
|
||||
|
||||
boolean modified = false;
|
||||
|
||||
/*
|
||||
* If no BUILD_TYPE is set then default BUILD_TYPE must be OSGI
|
||||
*/
|
||||
|
||||
IComponentFilter filter = new NameComponentFilter(T_ESB_PROVIDER_REQUEST);
|
||||
|
||||
List<NodeType> c = searchComponent(processType, filter);
|
||||
|
||||
if (!c.isEmpty()) {
|
||||
Object originalBuildType = item.getProperty().getAdditionalProperties().get(BUILD_TYPE_PROPERTY);
|
||||
|
||||
if (null == originalBuildType || !BUILD_TYPE_OSGI.equalsIgnoreCase(originalBuildType.toString())) {
|
||||
item.getProperty().getAdditionalProperties().put(BUILD_TYPE_PROPERTY, BUILD_TYPE_OSGI);
|
||||
try {
|
||||
save(item);
|
||||
modified |= true;
|
||||
generateReportRecord(new MigrationReportRecorder(this,
|
||||
MigrationReportRecorder.MigrationOperationType.MODIFY, item, null, "Build Type",
|
||||
(null == originalBuildType) ? null : originalBuildType.toString(), BUILD_TYPE_OSGI));
|
||||
storeMigratedJob(item.getProperty().getLabel(), this.getClass().getName());
|
||||
} catch (PersistenceException e) {
|
||||
ExceptionHandler.process(e);
|
||||
return ExecutionResult.FAILURE;
|
||||
}
|
||||
return ExecutionResult.SUCCESS_NO_ALERT;
|
||||
} else if (BUILD_TYPE_OSGI.equalsIgnoreCase((String)originalBuildType)){
|
||||
// current job has correct build type
|
||||
// skip this job during next migrations
|
||||
skipMigrationForJob(item.getProperty().getLabel(), this.getClass().getName());
|
||||
}
|
||||
}
|
||||
|
||||
if (modified) {
|
||||
return ExecutionResult.SUCCESS_NO_ALERT;
|
||||
}
|
||||
|
||||
return ExecutionResult.NOTHING_TO_DO;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getDescription() {
|
||||
return "Synchronize build types for SOAP service Jobs";
|
||||
}
|
||||
|
||||
@Override
|
||||
public void clear () {
|
||||
clearMigratedJobs();
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
package org.talend.designer.maven.migration.tasks;
|
||||
|
||||
import org.talend.migration.IProjectMigrationTask;
|
||||
|
||||
public interface ICorrectBuildTypeMigrationTask extends IProjectMigrationTask {
|
||||
public void clear ();
|
||||
}
|
||||
@@ -0,0 +1,118 @@
|
||||
package org.talend.designer.maven.tools;
|
||||
|
||||
import java.lang.reflect.InvocationTargetException;
|
||||
import org.eclipse.core.resources.IWorkspace;
|
||||
import org.eclipse.core.resources.IWorkspaceRunnable;
|
||||
import org.eclipse.core.resources.ResourcesPlugin;
|
||||
import org.eclipse.core.runtime.CoreException;
|
||||
import org.eclipse.core.runtime.IProgressMonitor;
|
||||
import org.eclipse.core.runtime.SubMonitor;
|
||||
import org.eclipse.core.runtime.jobs.ISchedulingRule;
|
||||
import org.eclipse.jface.dialogs.ProgressMonitorDialog;
|
||||
import org.eclipse.jface.operation.IRunnableWithProgress;
|
||||
import org.eclipse.jface.preference.FieldEditorPreferencePage;
|
||||
import org.eclipse.swt.widgets.Display;
|
||||
import org.talend.commons.exception.ExceptionHandler;
|
||||
import org.talend.core.model.general.Project;
|
||||
import org.talend.core.repository.model.ProxyRepositoryFactory;
|
||||
import org.talend.designer.maven.migration.common.MigrationReportHelper;
|
||||
import org.talend.designer.maven.migration.tasks.CorrectBuildTypeForDIJobMigrationTask;
|
||||
import org.talend.designer.maven.migration.tasks.CorrectBuildTypeForDsRestMigrationTask;
|
||||
import org.talend.designer.maven.migration.tasks.CorrectBuildTypeForRoutesMigrationTask;
|
||||
import org.talend.designer.maven.migration.tasks.CorrectBuildTypeForSOAPServiceJobMigrationTask;
|
||||
import org.talend.designer.maven.migration.tasks.ICorrectBuildTypeMigrationTask;
|
||||
import org.talend.migration.IMigrationTask;
|
||||
import org.talend.migration.IProjectMigrationTask;
|
||||
import org.talend.repository.ProjectManager;
|
||||
import org.talend.repository.RepositoryWorkUnit;
|
||||
|
||||
public class BuildTypeManager {
|
||||
|
||||
private ICorrectBuildTypeMigrationTask[] syncBuildTypeMigrationTasks = {
|
||||
new CorrectBuildTypeForRoutesMigrationTask(), new CorrectBuildTypeForSOAPServiceJobMigrationTask(),
|
||||
new CorrectBuildTypeForDsRestMigrationTask(), new CorrectBuildTypeForDIJobMigrationTask() };
|
||||
|
||||
|
||||
private boolean hasErrors = false;
|
||||
|
||||
public void syncBuildTypes(FieldEditorPreferencePage page) throws Exception {
|
||||
|
||||
IRunnableWithProgress runnableWithProgress = new IRunnableWithProgress() {
|
||||
|
||||
@Override
|
||||
public void run(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException {
|
||||
|
||||
RepositoryWorkUnit<Object> workUnit = new RepositoryWorkUnit<Object>("Synchronize all build types") { //$NON-NLS-1$
|
||||
|
||||
@Override
|
||||
protected void run() {
|
||||
final IWorkspaceRunnable op = new IWorkspaceRunnable() {
|
||||
|
||||
@Override
|
||||
public void run(final IProgressMonitor monitor) throws CoreException {
|
||||
try {
|
||||
syncAllBuildTypesWithProgress(monitor, page);
|
||||
} catch (Exception e) {
|
||||
ExceptionHandler.process(e);
|
||||
}
|
||||
}
|
||||
|
||||
};
|
||||
IWorkspace workspace = ResourcesPlugin.getWorkspace();
|
||||
try {
|
||||
ISchedulingRule schedulingRule = workspace.getRoot();
|
||||
workspace.run(op, schedulingRule, IWorkspace.AVOID_UPDATE, monitor);
|
||||
} catch (CoreException e) {
|
||||
ExceptionHandler.process(e);
|
||||
}
|
||||
}
|
||||
|
||||
};
|
||||
workUnit.setAvoidUnloadResources(true);
|
||||
ProxyRepositoryFactory.getInstance().executeRepositoryWorkUnit(workUnit);
|
||||
}
|
||||
};
|
||||
|
||||
hasErrors = false;
|
||||
|
||||
new ProgressMonitorDialog(Display.getDefault().getActiveShell()).run(true, true, runnableWithProgress);
|
||||
|
||||
if (hasErrors) {
|
||||
page.setErrorMessage("Build types synchronization finished with errors. Check workspace logs for details.");
|
||||
} else {
|
||||
page.setErrorMessage(null);
|
||||
}
|
||||
}
|
||||
|
||||
public void syncAllBuildTypesWithProgress(IProgressMonitor monitor, FieldEditorPreferencePage page)
|
||||
throws Exception {
|
||||
|
||||
Project project = ProjectManager.getInstance().getCurrentProject();
|
||||
|
||||
SubMonitor subMonitor = SubMonitor.convert(monitor, syncBuildTypeMigrationTasks.length);
|
||||
|
||||
for (ICorrectBuildTypeMigrationTask task : syncBuildTypeMigrationTasks) {
|
||||
task.clear();
|
||||
|
||||
}
|
||||
|
||||
|
||||
for (ICorrectBuildTypeMigrationTask task : syncBuildTypeMigrationTasks) {
|
||||
subMonitor.beginTask(task.getDescription(), syncBuildTypeMigrationTasks.length);
|
||||
IMigrationTask.ExecutionResult result = task.execute(project);
|
||||
if (IMigrationTask.ExecutionResult.FAILURE.equals(result)) {
|
||||
hasErrors = true;
|
||||
}
|
||||
subMonitor.worked(1);
|
||||
|
||||
}
|
||||
|
||||
subMonitor.beginTask("Generate migration report", syncBuildTypeMigrationTasks.length);
|
||||
MigrationReportHelper.getInstance().generateMigrationReport(project.getTechnicalLabel());
|
||||
|
||||
monitor.done();
|
||||
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
@@ -1,5 +1,6 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<classpath>
|
||||
<classpathentry exported="true" kind="lib" path="lib/commons-text-1.10.0.jar"/>
|
||||
<classpathentry exported="true" kind="lib" path="lib/commons-pool2-2.4.2.jar"/>
|
||||
<classpathentry exported="true" kind="lib" path="lib/commons-validator-1.5.1.jar"/>
|
||||
<classpathentry exported="true" kind="lib" path="lib/commons-math3-3.3.jar"/>
|
||||
@@ -8,6 +9,5 @@
|
||||
<classpathentry exported="true" kind="lib" path="lib/commons-digester-2.1.jar"/>
|
||||
<classpathentry exported="true" kind="lib" path="lib/commons-cli-2.0-SNAPSHOT.jar"/>
|
||||
<classpathentry exported="true" kind="lib" path="lib/commons-codec-1.15.jar"/>
|
||||
<classpathentry exported="true" kind="lib" path="lib/commons-text-1.1.jar"/>
|
||||
<classpathentry kind="output" path="bin"/>
|
||||
</classpath>
|
||||
|
||||
@@ -10,7 +10,7 @@ Bundle-ClassPath: .,
|
||||
lib/commons-math3-3.3.jar,
|
||||
lib/commons-validator-1.5.1.jar,
|
||||
lib/commons-pool2-2.4.2.jar,
|
||||
lib/commons-text-1.1.jar
|
||||
lib/commons-text-1.10.0.jar
|
||||
Export-Package: org.apache.commons.cli2,
|
||||
org.apache.commons.cli2.builder,
|
||||
org.apache.commons.cli2.commandline,
|
||||
|
||||
@@ -7,4 +7,4 @@ bin.includes = META-INF/,\
|
||||
lib/commons-math3-3.3.jar,\
|
||||
lib/commons-validator-1.5.1.jar,\
|
||||
lib/commons-pool2-2.4.2.jar,\
|
||||
lib/commons-text-1.1.jar
|
||||
lib/commons-text-1.10.0.jar
|
||||
|
||||
Binary file not shown.
Binary file not shown.
@@ -62,6 +62,11 @@
|
||||
<artifactId>commons-collections</artifactId>
|
||||
<version>3.2.2</version>
|
||||
</artifactItem>
|
||||
<artifactItem>
|
||||
<groupId>org.apache.commons</groupId>
|
||||
<artifactId>commons-text</artifactId>
|
||||
<version>1.10.0</version>
|
||||
</artifactItem>
|
||||
<artifactItem>
|
||||
<groupId>commons-io</groupId>
|
||||
<artifactId>commons-io</artifactId>
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<classpath>
|
||||
<classpathentry exported="true" kind="lib" path="lib/lucene-core-3.0.3.jar"/>
|
||||
<classpathentry exported="true" kind="lib" path="lib/lucene-core-8.11.2.jar"/>
|
||||
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
|
||||
<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
|
||||
<classpathentry kind="output" path="class"/>
|
||||
|
||||
@@ -4,22 +4,38 @@ Bundle-Name: Lucene plug-in
|
||||
Bundle-SymbolicName: org.talend.libraries.apache.lucene
|
||||
Bundle-Version: 7.3.1.qualifier
|
||||
Bundle-Vendor: .Talend SA.
|
||||
Bundle-ClassPath: lib/lucene-core-3.0.3.jar,
|
||||
Bundle-ClassPath: lib/lucene-core-8.11.2.jar,
|
||||
.
|
||||
Export-Package: org.apache.lucene,
|
||||
org.apache.lucene.analysis,
|
||||
org.apache.lucene.analysis.standard,
|
||||
org.apache.lucene.analysis.tokenattributes,
|
||||
org.apache.lucene.codecs,
|
||||
org.apache.lucene.codecs.blocktree,
|
||||
org.apache.lucene.codecs.compressing,
|
||||
org.apache.lucene.codecs.lucene50,
|
||||
org.apache.lucene.codecs.lucene60,
|
||||
org.apache.lucene.codecs.lucene80,
|
||||
org.apache.lucene.codecs.lucene84,
|
||||
org.apache.lucene.codecs.lucene86,
|
||||
org.apache.lucene.codecs.lucene87,
|
||||
org.apache.lucene.codecs.perfield,
|
||||
org.apache.lucene.document,
|
||||
org.apache.lucene.geo,
|
||||
org.apache.lucene.index,
|
||||
org.apache.lucene.messages,
|
||||
org.apache.lucene.queryParser,
|
||||
org.apache.lucene.search,
|
||||
org.apache.lucene.search.function,
|
||||
org.apache.lucene.search.payloads,
|
||||
org.apache.lucene.search.comparators,
|
||||
org.apache.lucene.search.similarities,
|
||||
org.apache.lucene.search.spans,
|
||||
org.apache.lucene.store,
|
||||
org.apache.lucene.util,
|
||||
org.apache.lucene.util.cache
|
||||
org.apache.lucene.util.automaton,
|
||||
org.apache.lucene.util.bkd,
|
||||
org.apache.lucene.util.compress,
|
||||
org.apache.lucene.util.fst,
|
||||
org.apache.lucene.util.graph,
|
||||
org.apache.lucene.util.hppc,
|
||||
org.apache.lucene.util.mutable,
|
||||
org.apache.lucene.util.packed
|
||||
Bundle-ActivationPolicy: lazy
|
||||
Eclipse-BundleShape: dir
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
output.. = class/
|
||||
bin.includes = META-INF/,\
|
||||
.,\
|
||||
lib/lucene-core-2.9.3.jar,\
|
||||
lib/lucene-core-3.0.3.jar
|
||||
lib/lucene-core-8.11.2.jar
|
||||
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -9,4 +9,36 @@
|
||||
</parent>
|
||||
<artifactId>org.talend.libraries.apache.lucene</artifactId>
|
||||
<packaging>eclipse-plugin</packaging>
|
||||
|
||||
<properties>
|
||||
<lucene.version>8.11.2</lucene.version>
|
||||
</properties>
|
||||
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>org.apache.lucene</groupId>
|
||||
<artifactId>lucene-core</artifactId>
|
||||
<version>${lucene.version}</version>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
<build>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-dependency-plugin</artifactId>
|
||||
<executions>
|
||||
<execution>
|
||||
<id>copy-dependencies</id>
|
||||
<phase>generate-sources</phase>
|
||||
<goals>
|
||||
<goal>copy-dependencies</goal>
|
||||
</goals>
|
||||
<configuration>
|
||||
<outputDirectory>${project.basedir}/lib</outputDirectory>
|
||||
</configuration>
|
||||
</execution>
|
||||
</executions>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</build>
|
||||
</project>
|
||||
|
||||
@@ -1,9 +1,10 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<classpath>
|
||||
<classpathentry exported="true" kind="lib" path="lib/lucene-analyzers-common-8.3.1.jar"/>
|
||||
<classpathentry exported="true" kind="lib" path="lib/lucene-core-8.3.1.jar"/>
|
||||
<classpathentry exported="true" kind="lib" path="lib/lucene-queries-8.3.1.jar"/>
|
||||
<classpathentry exported="true" kind="lib" path="lib/lucene-queryparser-8.3.1.jar"/>
|
||||
<classpathentry exported="true" kind="lib" path="lib/lucene-analyzers-common-8.11.2.jar"/>
|
||||
<classpathentry exported="true" kind="lib" path="lib/lucene-backward-codecs-8.11.2.jar"/>
|
||||
<classpathentry exported="true" kind="lib" path="lib/lucene-core-8.11.2.jar"/>
|
||||
<classpathentry exported="true" kind="lib" path="lib/lucene-queries-8.11.2.jar"/>
|
||||
<classpathentry exported="true" kind="lib" path="lib/lucene-queryparser-8.11.2.jar"/>
|
||||
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
|
||||
<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
|
||||
<classpathentry kind="output" path="bin"/>
|
||||
|
||||
@@ -5,10 +5,11 @@ Bundle-SymbolicName: org.talend.libraries.apache.lucene8
|
||||
Bundle-Version: 7.3.1.qualifier
|
||||
Bundle-Vendor: .Talend SA.
|
||||
Bundle-ActivationPolicy: lazy
|
||||
Bundle-ClassPath: lib/lucene-analyzers-common-8.3.1.jar,
|
||||
lib/lucene-core-8.3.1.jar,
|
||||
lib/lucene-queries-8.3.1.jar,
|
||||
lib/lucene-queryparser-8.3.1.jar
|
||||
Bundle-ClassPath: lib/lucene-analyzers-common-8.11.2.jar,
|
||||
lib/lucene-backward-codecs-8.11.2.jar,
|
||||
lib/lucene-core-8.11.2.jar,
|
||||
lib/lucene-queries-8.11.2.jar,
|
||||
lib/lucene-queryparser-8.11.2.jar
|
||||
Export-Package: org.apache.lucene,
|
||||
org.apache.lucene.analysis,
|
||||
org.apache.lucene.analysis.ar,
|
||||
@@ -78,6 +79,8 @@ Export-Package: org.apache.lucene,
|
||||
org.apache.lucene.codecs.lucene60,
|
||||
org.apache.lucene.codecs.lucene70,
|
||||
org.apache.lucene.codecs.lucene80,
|
||||
org.apache.lucene.codecs.lucene84,
|
||||
org.apache.lucene.codecs.lucene86,
|
||||
org.apache.lucene.codecs.perfield,
|
||||
org.apache.lucene.collation,
|
||||
org.apache.lucene.collation.tokenattributes,
|
||||
|
||||
@@ -1,7 +1,8 @@
|
||||
bin.includes = META-INF/,\
|
||||
.,\
|
||||
lib/lucene-analyzers-common-8.3.1.jar,\
|
||||
lib/lucene-core-8.3.1.jar,\
|
||||
lib/lucene-queries-8.3.1.jar,\
|
||||
lib/lucene-queryparser-8.3.1.jar
|
||||
lib/lucene-analyzers-common-8.11.2.jar,\
|
||||
lib/lucene-backward-codecs-8.11.2.jar,\
|
||||
lib/lucene-core-8.11.2.jar,\
|
||||
lib/lucene-queries-8.11.2.jar,\
|
||||
lib/lucene-queryparser-8.11.2.jar
|
||||
|
||||
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -9,4 +9,57 @@
|
||||
</parent>
|
||||
<artifactId>org.talend.libraries.apache.lucene8</artifactId>
|
||||
<packaging>eclipse-plugin</packaging>
|
||||
|
||||
<properties>
|
||||
<lucene.version>8.11.2</lucene.version>
|
||||
</properties>
|
||||
|
||||
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>org.apache.lucene</groupId>
|
||||
<artifactId>lucene-analyzers-common</artifactId>
|
||||
<version>${lucene.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.apache.lucene</groupId>
|
||||
<artifactId>lucene-backward-codecs</artifactId>
|
||||
<version>${lucene.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.apache.lucene</groupId>
|
||||
<artifactId>lucene-core</artifactId>
|
||||
<version>${lucene.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.apache.lucene</groupId>
|
||||
<artifactId>lucene-queries</artifactId>
|
||||
<version>${lucene.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.apache.lucene</groupId>
|
||||
<artifactId>lucene-queryparser</artifactId>
|
||||
<version>${lucene.version}</version>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
<build>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-dependency-plugin</artifactId>
|
||||
<executions>
|
||||
<execution>
|
||||
<id>copy-dependencies</id>
|
||||
<phase>generate-sources</phase>
|
||||
<goals>
|
||||
<goal>copy-dependencies</goal>
|
||||
</goals>
|
||||
<configuration>
|
||||
<outputDirectory>${project.basedir}/lib</outputDirectory>
|
||||
</configuration>
|
||||
</execution>
|
||||
</executions>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</build>
|
||||
</project>
|
||||
|
||||
@@ -35,7 +35,7 @@
|
||||
<!-- same as xercesImpl.jar-->
|
||||
<groupId>xerces</groupId>
|
||||
<artifactId>xercesImpl</artifactId>
|
||||
<version>2.12.0</version>
|
||||
<version>2.12.2</version>
|
||||
</artifactItem>
|
||||
<artifactItem>
|
||||
<groupId>org.apache.ws.xmlschema</groupId>
|
||||
|
||||
Binary file not shown.
@@ -6,9 +6,42 @@ COPYRIGHTS AND LICENSES
|
||||
|
||||
ORIGINAL LICENSE (a.k.a. "hypersonic_lic.txt")
|
||||
|
||||
For content, code, and products originally developed by Thomas Mueller and the Hypersonic SQL Group:
|
||||
For work developed by the HSQL Development Group:
|
||||
|
||||
Copyright (c) 1995-2000 by the Hypersonic SQL Group.
|
||||
Copyright (c) 2001-2022, The HSQL Development Group
|
||||
All rights reserved.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions are met:
|
||||
|
||||
Redistributions of source code must retain the above copyright notice, this
|
||||
list of conditions and the following disclaimer.
|
||||
|
||||
Redistributions in binary form must reproduce the above copyright notice,
|
||||
this list of conditions and the following disclaimer in the documentation
|
||||
and/or other materials provided with the distribution.
|
||||
|
||||
Neither the name of the HSQL Development Group nor the names of its
|
||||
contributors may be used to endorse or promote products derived from this
|
||||
software without specific prior written permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
ARE DISCLAIMED. IN NO EVENT SHALL HSQL DEVELOPMENT GROUP, HSQLDB.ORG,
|
||||
OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||
EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
||||
PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
||||
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
|
||||
|
||||
For work originally developed by the Hypersonic SQL Group:
|
||||
|
||||
Copyright (c) 1995-2000, The Hypersonic SQL Group.
|
||||
All rights reserved.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
@@ -37,12 +70,12 @@ ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
This software consists of voluntary contributions made by many individuals on behalf of the
|
||||
Hypersonic SQL Group.
|
||||
This software consists of voluntary contributions made by many individuals
|
||||
on behalf of the Hypersonic SQL Group.
|
||||
|
||||
For work added by the HSQL Development Group (a.k.a. hsqldb_lic.txt):
|
||||
|
||||
Copyright (c) 2001-2005, The HSQL Development Group
|
||||
Copyright (c) 2001-2022, The HSQL Development Group
|
||||
All rights reserved.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
|
||||
29
main/plugins/org.talend.libraries.jdbc.hsql/pom.xml
Normal file → Executable file
29
main/plugins/org.talend.libraries.jdbc.hsql/pom.xml
Normal file → Executable file
@@ -9,4 +9,33 @@
|
||||
</parent>
|
||||
<artifactId>org.talend.libraries.jdbc.hsql</artifactId>
|
||||
<packaging>eclipse-plugin</packaging>
|
||||
<build>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-dependency-plugin</artifactId>
|
||||
<executions>
|
||||
<execution>
|
||||
<id>copy</id>
|
||||
<phase>generate-sources</phase>
|
||||
<goals>
|
||||
<goal>copy</goal>
|
||||
</goals>
|
||||
<configuration>
|
||||
<artifactItems>
|
||||
<artifactItem>
|
||||
<groupId>org.hsqldb</groupId>
|
||||
<artifactId>hsqldb</artifactId>
|
||||
<version>2.7.1</version>
|
||||
<classifier>jdk8</classifier>
|
||||
<outputDirectory>${project.basedir}/lib</outputDirectory>
|
||||
<destFileName>hsqldb.jar</destFileName>
|
||||
</artifactItem>
|
||||
</artifactItems>
|
||||
</configuration>
|
||||
</execution>
|
||||
</executions>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</build>
|
||||
</project>
|
||||
|
||||
@@ -243,10 +243,39 @@ public class JSONObject {
|
||||
*
|
||||
* @param bean An object that has getter methods that should be used to make a JSONObject.
|
||||
*/
|
||||
@Deprecated
|
||||
public JSONObject(Object bean) {
|
||||
this();
|
||||
populateMap(bean);
|
||||
}
|
||||
|
||||
/**
|
||||
* Construct a JSONObject from an Object using bean getters. It reflects on all of the public methods of the object.
|
||||
* For each of the methods with no parameters and a name starting with <code>"get"</code> or <code>"is"</code>
|
||||
* followed by an uppercase letter, the method is invoked, and a key and the value returned from the getter method
|
||||
* are put into the new JSONObject.
|
||||
*
|
||||
* The key is formed by removing the <code>"get"</code> or <code>"is"</code> prefix. If the second remaining
|
||||
* character is not upper case, then the first character is converted to lower case.
|
||||
*
|
||||
* For example, if an object has a method named <code>"getName"</code>, and if the result of calling
|
||||
* <code>object.getName()</code> is <code>"Larry Fine"</code>, then the JSONObject will contain
|
||||
* <code>"name": "Larry Fine"</code>.
|
||||
*
|
||||
* @param bean An object that has getter methods that should be used to make a JSONObject.
|
||||
* @param expectedClass Bean must be the instance of this class, for safe to avoid evil script inject
|
||||
*/
|
||||
public JSONObject(Object bean, Class<?> expectedClass) {
|
||||
this();
|
||||
|
||||
Class<?> clazz = bean.getClass();
|
||||
if((clazz == expectedClass) || (expectedClass!=null && expectedClass.isAssignableFrom(clazz))) {
|
||||
populateMap(bean);
|
||||
return;
|
||||
}
|
||||
|
||||
throw new JSONException("expectedClass doesn't match the bean or is null");
|
||||
}
|
||||
|
||||
/**
|
||||
* Construct a JSONObject from an Object, using reflection to find the public members. The resulting JSONObject's
|
||||
|
||||
@@ -105,7 +105,7 @@ public class ResumeUtil {
|
||||
csvWriter.write("stackTrace");// stackTrace
|
||||
csvWriter.write("dynamicData");// dynamicData
|
||||
csvWriter.endRecord();
|
||||
csvWriter.flush();
|
||||
csvWriter.flush(true);
|
||||
}
|
||||
// shared
|
||||
sharedWriterMap.put(this.root_pid, this.csvWriter);
|
||||
@@ -171,7 +171,7 @@ public class ResumeUtil {
|
||||
csvWriter.write(item.stackTrace);// stackTrace
|
||||
csvWriter.write(item.dynamicData);// dynamicData--->it is the 17th field. @see:feature:11296
|
||||
csvWriter.endRecord();
|
||||
csvWriter.flush();
|
||||
csvWriter.flush(false);
|
||||
fileLock.release();
|
||||
}
|
||||
// for test the order
|
||||
@@ -194,6 +194,16 @@ public class ResumeUtil {
|
||||
}
|
||||
}
|
||||
|
||||
public void flush() {
|
||||
if (csvWriter == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
synchronized (csvWriter) {
|
||||
csvWriter.flush(true);
|
||||
}
|
||||
}
|
||||
|
||||
// Util: invoke target check point
|
||||
@Deprecated
|
||||
public static void invokeTargetCheckPoint(String resuming_checkpoint_path, Object jobObject,
|
||||
@@ -353,13 +363,12 @@ public class ResumeUtil {
|
||||
String str = out.toString();
|
||||
return str;
|
||||
}
|
||||
|
||||
// to support encrypt the password in the resume
|
||||
public static String convertToJsonText(Object context, List<String> parametersToEncrypt) {
|
||||
|
||||
public static String convertToJsonText(Object context, Class<?> expectedClass, List<String> parametersToEncrypt) {
|
||||
String jsonText = "";
|
||||
try {
|
||||
JSONObject firstNode = new JSONObject();
|
||||
JSONObject secondNode = new JSONObject(context);
|
||||
JSONObject secondNode = new JSONObject(context, expectedClass);
|
||||
if (parametersToEncrypt != null) {
|
||||
for (String parameterToEncrypt : parametersToEncrypt) {
|
||||
if (secondNode.isNull(parameterToEncrypt)) {
|
||||
@@ -379,9 +388,15 @@ public class ResumeUtil {
|
||||
return jsonText;
|
||||
}
|
||||
|
||||
// to support encrypt the password in the resume
|
||||
@Deprecated
|
||||
public static String convertToJsonText(Object context, List<String> parametersToEncrypt) {
|
||||
return convertToJsonText(context, context == null ? null : context.getClass(), parametersToEncrypt);
|
||||
}
|
||||
|
||||
// Util: convert the context variable to json style text.
|
||||
// feature:11296
|
||||
// @Deprecated
|
||||
@Deprecated
|
||||
public static String convertToJsonText(Object context) {
|
||||
return convertToJsonText(context, null);
|
||||
}
|
||||
@@ -459,6 +474,8 @@ public class ResumeUtil {
|
||||
USER_DEF_LOG,
|
||||
JOB_ENDED;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* this class is reference with CsvWriter.
|
||||
@@ -503,7 +520,14 @@ public class ResumeUtil {
|
||||
|
||||
private String lineSeparator = System.getProperty("line.separator");
|
||||
|
||||
private int capibility = 2<<14; //32k
|
||||
private final int capibility = 2 << 22; //8M
|
||||
|
||||
private final int FLUSH_FACTOR = 6 *1024 *1024; //6M
|
||||
|
||||
private final int SUBSTRING_SIZE = 2 << 20; //2M
|
||||
|
||||
|
||||
|
||||
|
||||
public SimpleCsvWriter(FileChannel channel) {
|
||||
this.channel = channel;
|
||||
@@ -533,11 +557,19 @@ public class ResumeUtil {
|
||||
content = replace(content, "" + TextQualifier, "" + TextQualifier + TextQualifier);
|
||||
}
|
||||
|
||||
if (content.length() > SUBSTRING_SIZE) { //2M
|
||||
int index = 0;
|
||||
for (; content.length() - index > SUBSTRING_SIZE; index += SUBSTRING_SIZE) {
|
||||
flush(true);
|
||||
final String substring = content.substring(index, index + SUBSTRING_SIZE);
|
||||
buf.put(substring.getBytes());
|
||||
}
|
||||
content = content.substring(index);
|
||||
}
|
||||
|
||||
byte[] contentByte = content.getBytes();
|
||||
if(contentByte.length > capibility - 1024) {
|
||||
flush();
|
||||
capibility = contentByte.length * 2;
|
||||
buf = ByteBuffer.allocate(capibility);
|
||||
if(contentByte.length > capibility - buf.position()) {
|
||||
flush(true);
|
||||
}
|
||||
|
||||
buf.put(contentByte);
|
||||
@@ -562,18 +594,20 @@ public class ResumeUtil {
|
||||
/**
|
||||
* flush
|
||||
*/
|
||||
public void flush() {
|
||||
try {
|
||||
((Buffer) buf).flip();
|
||||
channel.position(channel.size());
|
||||
while(buf.hasRemaining()) {
|
||||
channel.write(buf);
|
||||
public void flush(boolean force) {
|
||||
if(force || buf.position() > FLUSH_FACTOR) {
|
||||
try {
|
||||
((Buffer) buf).flip();
|
||||
channel.position(channel.size());
|
||||
while(buf.hasRemaining()) {
|
||||
channel.write(buf);
|
||||
}
|
||||
channel.force(true);
|
||||
((Buffer) buf).clear();
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
channel.force(true);
|
||||
((Buffer) buf).clear();
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -510,10 +510,12 @@ InegerCellEditorListener.NumeralMessage=Input value invalid
|
||||
MetadataTalendTypeEditor.button.edit=E&dit
|
||||
MetadataTalendTypeEditor.button.export=E&xport Mapping
|
||||
MetadataTalendTypeEditor.button.import=I&mport Mapping
|
||||
MetadataTalendTypeEditor.button.restore=R&estore
|
||||
MetadataTalendTypeEditor.column1.Name=Metadata Mapping File
|
||||
MetadataTalendTypeEditor.editMappingDialog.title=Edit Mapping File
|
||||
MetadataTalendTypeEditor.error.message=Error Message
|
||||
MetadataTalendTypeEditor.fileIsImported=This file is already imported.
|
||||
MetadataTalendTypeEditor.fileOverwrite=This file already exists. Do you want to overwrite it?
|
||||
MetadataTalendTypeEditor.fileIsInvalid=The imported metadata file is not valid.
|
||||
MetadataTalendTypeEditor.fileNameStartRule=File name must start with 'mapping_'.
|
||||
ContextModeSelectPage.contextModes=Create a new context or reuse the existing one
|
||||
|
||||
@@ -12,16 +12,23 @@
|
||||
// ============================================================================
|
||||
package org.talend.metadata.managment.ui.editor;
|
||||
|
||||
import java.io.ByteArrayInputStream;
|
||||
import java.io.File;
|
||||
import java.io.FileWriter;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.net.URL;
|
||||
import java.nio.file.Files;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Optional;
|
||||
import java.util.Set;
|
||||
import java.util.function.Function;
|
||||
import java.util.stream.Collectors;
|
||||
import java.util.stream.Stream;
|
||||
|
||||
import org.eclipse.core.resources.IFile;
|
||||
import org.eclipse.core.resources.IFolder;
|
||||
import org.eclipse.core.resources.IResource;
|
||||
import org.eclipse.core.runtime.CoreException;
|
||||
import org.eclipse.core.runtime.FileLocator;
|
||||
import org.eclipse.core.runtime.IStatus;
|
||||
@@ -33,6 +40,7 @@ import org.eclipse.jface.dialogs.IDialogConstants;
|
||||
import org.eclipse.jface.dialogs.MessageDialog;
|
||||
import org.eclipse.jface.preference.FieldEditor;
|
||||
import org.eclipse.jface.resource.JFaceResources;
|
||||
import org.eclipse.jface.text.Document;
|
||||
import org.eclipse.jface.text.IDocument;
|
||||
import org.eclipse.jface.viewers.ArrayContentProvider;
|
||||
import org.eclipse.jface.viewers.DoubleClickEvent;
|
||||
@@ -61,19 +69,16 @@ import org.eclipse.swt.widgets.Table;
|
||||
import org.eclipse.swt.widgets.TableColumn;
|
||||
import org.osgi.framework.Bundle;
|
||||
import org.talend.commons.exception.ExceptionHandler;
|
||||
import org.talend.commons.exception.LoginException;
|
||||
import org.talend.commons.exception.PersistenceException;
|
||||
import org.talend.commons.exception.SystemException;
|
||||
import org.talend.commons.utils.io.FilesUtils;
|
||||
import org.talend.commons.utils.workbench.resources.ResourceUtils;
|
||||
import org.talend.core.GlobalServiceRegister;
|
||||
import org.talend.core.ICoreService;
|
||||
import org.talend.core.model.metadata.Dbms;
|
||||
import org.talend.core.model.metadata.MetadataTalendType;
|
||||
import org.talend.core.model.utils.ResourceModelHelper;
|
||||
import org.talend.core.model.utils.XSDValidater;
|
||||
import org.talend.core.repository.model.ProxyRepositoryFactory;
|
||||
import org.talend.core.runtime.CoreRuntimePlugin;
|
||||
import org.talend.core.runtime.projectsetting.ProjectPreferenceManager;
|
||||
import org.talend.metadata.managment.ui.MetadataManagmentUiPlugin;
|
||||
import org.talend.metadata.managment.ui.dialog.MappingFileCheckViewerDialog;
|
||||
import org.talend.metadata.managment.ui.i18n.Messages;
|
||||
@@ -131,6 +136,16 @@ public class MetadataTalendTypeEditor extends FieldEditor {
|
||||
|
||||
IDocument fileContent;
|
||||
|
||||
FileType type;
|
||||
|
||||
boolean isDeleted;
|
||||
|
||||
}
|
||||
|
||||
enum FileType {
|
||||
USER_DEFINED,
|
||||
SYSTEM_DEFAULT,
|
||||
USER_EXTERNAL,
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -141,7 +156,7 @@ public class MetadataTalendTypeEditor extends FieldEditor {
|
||||
*/
|
||||
class TmpFilesManager {
|
||||
|
||||
// store the editing tempertory files
|
||||
// store the editing temporary files
|
||||
private List<FileInfo> tmpFiles = new ArrayList<FileInfo>();
|
||||
|
||||
TmpFilesManager() {
|
||||
@@ -149,13 +164,30 @@ public class MetadataTalendTypeEditor extends FieldEditor {
|
||||
}
|
||||
|
||||
private void init() {
|
||||
List<File> files = MetadataTalendType.getMetadataMappingFiles();
|
||||
tmpFiles.clear();
|
||||
for (File file : files) {
|
||||
FileInfo info = new FileInfo();
|
||||
info.file = file;
|
||||
info.fileName = file.getName();
|
||||
this.addFile(info);
|
||||
try {
|
||||
tmpFiles.clear();
|
||||
java.nio.file.Path systemMappingPath = new File(MetadataTalendType.getSystemFolderURLOfMappingsFile().getFile())
|
||||
.toPath();
|
||||
Map<String, File> systemFileMap = Stream
|
||||
.of(systemMappingPath.toFile()
|
||||
.listFiles(f -> f.getName().matches(MetadataTalendType.MAPPING_FILE_PATTERN)))
|
||||
.collect(Collectors.toMap(File::getName, Function.identity()));
|
||||
List<File> files = MetadataTalendType.getMetadataMappingFiles();
|
||||
for (File file : files) {
|
||||
FileInfo info = new FileInfo();
|
||||
info.file = file;
|
||||
info.fileName = file.getName();
|
||||
if (file.toPath().startsWith(systemMappingPath)) {
|
||||
info.type = FileType.SYSTEM_DEFAULT;
|
||||
} else if (systemFileMap.containsKey(file.getName())) {
|
||||
info.type = FileType.USER_DEFINED;
|
||||
} else {
|
||||
info.type = FileType.USER_EXTERNAL;
|
||||
}
|
||||
this.addFile(info);
|
||||
}
|
||||
} catch (SystemException e) {
|
||||
ExceptionHandler.process(e);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -163,8 +195,9 @@ public class MetadataTalendTypeEditor extends FieldEditor {
|
||||
tmpFiles.add(file);
|
||||
}
|
||||
|
||||
List<FileInfo> getTempFiles() {
|
||||
return tmpFiles;
|
||||
List<FileInfo> getTempFiles(boolean includeDeleted) {
|
||||
return tmpFiles.stream().filter(f -> includeDeleted || !f.isDeleted || FileType.SYSTEM_DEFAULT == f.type)
|
||||
.sorted((f1, f2) -> f1.fileName.compareTo(f2.fileName)).collect(Collectors.toList());
|
||||
}
|
||||
|
||||
boolean contains(String fileName) {
|
||||
@@ -176,15 +209,6 @@ public class MetadataTalendTypeEditor extends FieldEditor {
|
||||
return false;
|
||||
}
|
||||
|
||||
boolean contains(File file) {
|
||||
for (FileInfo info : tmpFiles) {
|
||||
if (info.file.equals(file)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
void remove(FileInfo file) {
|
||||
tmpFiles.remove(file);
|
||||
}
|
||||
@@ -297,8 +321,29 @@ public class MetadataTalendTypeEditor extends FieldEditor {
|
||||
sourceViewerDialog.setDocument(fileSelected.file);
|
||||
}
|
||||
if (sourceViewerDialog.open() == IDialogConstants.OK_ID) {
|
||||
System.out.println(sourceViewerDialog.getDocument().get());
|
||||
fileSelected.fileContent = sourceViewerDialog.getDocument();
|
||||
System.out.println(sourceViewerDialog.getResult());
|
||||
try {
|
||||
File systemFile = new File(MetadataTalendType.getSystemFolderURLOfMappingsFile().getFile(),
|
||||
fileSelected.fileName);
|
||||
if (systemFile.exists()) {
|
||||
String currentSha1 = MetadataTalendType.getSha1OfText(sourceViewerDialog.getDocument().get());
|
||||
String systemSha1 = MetadataTalendType.getSha1OfFile(systemFile);
|
||||
if (currentSha1 != null && currentSha1.equals(systemSha1)) {
|
||||
fileSelected.type = FileType.SYSTEM_DEFAULT;
|
||||
fileSelected.file = systemFile;
|
||||
setControlEnable(removeButton, false);
|
||||
} else {
|
||||
fileSelected.type = FileType.USER_DEFINED;
|
||||
fileSelected.file = new File(MetadataTalendType.getProjectFolderURLOfMappingsFile().getFile(),
|
||||
fileSelected.fileName);
|
||||
setControlEnable(removeButton, true);
|
||||
}
|
||||
}
|
||||
fileSelected.fileContent = sourceViewerDialog.getDocument();
|
||||
fileSelected.isDeleted = false;
|
||||
} catch (SystemException e) {
|
||||
ExceptionHandler.process(e);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -382,7 +427,16 @@ public class MetadataTalendTypeEditor extends FieldEditor {
|
||||
*/
|
||||
protected void removeItem() {
|
||||
FileInfo info = getSelection();
|
||||
tmpFileManager.remove(info);
|
||||
info.isDeleted = true;
|
||||
if (FileType.USER_DEFINED == info.type) {
|
||||
try {
|
||||
info.type = FileType.SYSTEM_DEFAULT;
|
||||
info.file = new File(MetadataTalendType.getSystemFolderURLOfMappingsFile().getFile(), info.fileName);
|
||||
info.fileContent = null;
|
||||
} catch (SystemException e) {
|
||||
ExceptionHandler.process(e);
|
||||
}
|
||||
}
|
||||
refreshViewer();
|
||||
}
|
||||
|
||||
@@ -413,16 +467,21 @@ public class MetadataTalendTypeEditor extends FieldEditor {
|
||||
}
|
||||
|
||||
private void exportItem() {
|
||||
File existing = getSelection().file;
|
||||
FileInfo selectedFileInfo = getSelection();
|
||||
FileDialog dia = new FileDialog(getShell(), SWT.SAVE);
|
||||
dia.setFileName(existing.getName());
|
||||
dia.setFileName(selectedFileInfo.fileName);
|
||||
dia.setFilterExtensions(new String[] { "*.xml" }); //$NON-NLS-1$
|
||||
String destination = dia.open();
|
||||
if (destination == null) {
|
||||
return;
|
||||
}
|
||||
File destinationFile = new File(destination);
|
||||
try {
|
||||
FilesUtils.copyFile(existing, new File(destination));
|
||||
if (selectedFileInfo.fileContent != null) {
|
||||
Files.write(destinationFile.toPath(), selectedFileInfo.fileContent.get().getBytes());
|
||||
} else {
|
||||
FilesUtils.copyFile(selectedFileInfo.file, destinationFile);
|
||||
}
|
||||
} catch (Exception e) {
|
||||
ExceptionHandler.process(e);
|
||||
}
|
||||
@@ -472,17 +531,39 @@ public class MetadataTalendTypeEditor extends FieldEditor {
|
||||
private void importItem() {
|
||||
setPresentsDefaultValue(false);
|
||||
File input = getNewInputObject();
|
||||
|
||||
if (input != null) {
|
||||
FileInfo fileInfo = new FileInfo();
|
||||
fileInfo.file = input;
|
||||
fileInfo.fileName = input.getName();
|
||||
tmpFileManager.addFile(fileInfo);
|
||||
Optional<FileInfo> optional = tmpFileManager.getTempFiles(true).stream()
|
||||
.filter(f -> f.fileName.equals(input.getName())).findAny();
|
||||
if (optional.isPresent()) {
|
||||
FileInfo tmpFileInfo = optional.get();
|
||||
try {
|
||||
String content = new String(Files.readAllBytes(input.toPath()));
|
||||
if (FileType.SYSTEM_DEFAULT == tmpFileInfo.type) {
|
||||
String systemSha1 = MetadataTalendType.getSha1OfSystemMappingFile(tmpFileInfo.fileName);
|
||||
String inputSha1 = MetadataTalendType.getSha1OfText(content);
|
||||
if (inputSha1.equals(systemSha1)) {
|
||||
return;
|
||||
}
|
||||
tmpFileInfo.type = FileType.USER_DEFINED;
|
||||
}
|
||||
tmpFileInfo.fileContent = new Document(content);
|
||||
tmpFileInfo.isDeleted = false;
|
||||
} catch (IOException e) {
|
||||
ExceptionHandler.process(e);
|
||||
}
|
||||
} else {
|
||||
FileInfo fileInfo = new FileInfo();
|
||||
fileInfo.file = input;
|
||||
fileInfo.fileName = input.getName();
|
||||
fileInfo.type = FileType.USER_EXTERNAL;
|
||||
tmpFileManager.addFile(fileInfo);
|
||||
}
|
||||
refreshViewer();
|
||||
}
|
||||
}
|
||||
|
||||
private void refreshViewer() {
|
||||
viewer.setInput(tmpFileManager.getTempFiles(false));
|
||||
viewer.refresh();
|
||||
selectionChanged();
|
||||
}
|
||||
@@ -497,11 +578,11 @@ public class MetadataTalendTypeEditor extends FieldEditor {
|
||||
}
|
||||
File xmlFile = new File(fileName);
|
||||
if (tmpFileManager.contains(xmlFile.getName())) {
|
||||
MessageDialog
|
||||
.openWarning(
|
||||
boolean confirm = MessageDialog.openConfirm(
|
||||
shell,
|
||||
Messages.getString("MetadataTalendTypeEditor.error.message"), Messages.getString("MetadataTalendTypeEditor.fileIsImported")); //$NON-NLS-1$ //$NON-NLS-2$
|
||||
return null;
|
||||
Messages.getString("MetadataTalendTypeEditor.confirmTitle"), //$NON-NLS-1$
|
||||
Messages.getString("MetadataTalendTypeEditor.fileOverwrite")); //$NON-NLS-1$
|
||||
return confirm ? xmlFile : null;
|
||||
}
|
||||
|
||||
if (!xmlFile.getName().startsWith("mapping_")) { //$NON-NLS-1$
|
||||
@@ -536,13 +617,21 @@ public class MetadataTalendTypeEditor extends FieldEditor {
|
||||
boolean selected = !viewer.getSelection().isEmpty();
|
||||
setControlEnable(exportButton, selected);
|
||||
setControlEnable(editButton, selected);
|
||||
setControlEnable(removeButton, selected);
|
||||
|
||||
boolean removeEnable = selected;
|
||||
StructuredSelection select = (StructuredSelection) viewer.getSelection();
|
||||
|
||||
if (select != null) {
|
||||
FileInfo info = (FileInfo) select.getFirstElement();
|
||||
if (info != null) {
|
||||
String buttonText = null;
|
||||
if (FileType.USER_DEFINED == info.type || FileType.SYSTEM_DEFAULT == info.type) {
|
||||
buttonText = Messages.getString("MetadataTalendTypeEditor.button.restore"); //$NON-NLS-1$
|
||||
} else if (FileType.USER_EXTERNAL == info.type) {
|
||||
buttonText = JFaceResources.getString("ListEditor.remove"); //$NON-NLS-1$
|
||||
}
|
||||
removeButton.setText(buttonText);
|
||||
removeEnable = FileType.SYSTEM_DEFAULT != info.type;
|
||||
String id = null;
|
||||
String infoName = info.fileName;
|
||||
for (Dbms allDbm : allDbms) {
|
||||
@@ -553,6 +642,7 @@ public class MetadataTalendTypeEditor extends FieldEditor {
|
||||
setSelectId(id);
|
||||
}
|
||||
}
|
||||
setControlEnable(removeButton, removeEnable);
|
||||
}
|
||||
|
||||
protected void setControlEnable(Control control, boolean enable) {
|
||||
@@ -569,13 +659,31 @@ public class MetadataTalendTypeEditor extends FieldEditor {
|
||||
Messages.getString("MetadataTalendTypeEditor.confirmTitle"), //$NON-NLS-1$
|
||||
Messages.getString("MetadataTalendTypeEditor.confirmMessage")); //$NON-NLS-1$
|
||||
if (confirm) {
|
||||
ICoreService coreService = null;
|
||||
if (GlobalServiceRegister.getDefault().isServiceRegistered(ICoreService.class)) {
|
||||
coreService = GlobalServiceRegister.getDefault().getService(ICoreService.class);
|
||||
coreService.syncMappingsFileFromSystemToProject();
|
||||
tmpFileManager.reload();
|
||||
}
|
||||
RepositoryWorkUnit workUnit = new RepositoryWorkUnit("Restore mapping files") { //$NON-NLS-1$
|
||||
|
||||
@Override
|
||||
protected void run() throws LoginException, PersistenceException {
|
||||
try {
|
||||
File[] projectMappingFiles = new File(MetadataTalendType.getProjectFolderURLOfMappingsFile().getFile())
|
||||
.listFiles();
|
||||
if (projectMappingFiles != null) {
|
||||
Set<String> systemFileNames = Stream
|
||||
.of(new File(MetadataTalendType.getSystemFolderURLOfMappingsFile().getFile())
|
||||
.listFiles(f -> f.getName().matches(MetadataTalendType.MAPPING_FILE_PATTERN)))
|
||||
.map(File::getName).collect(Collectors.toSet());
|
||||
Stream.of(projectMappingFiles).filter(f -> systemFileNames.contains(f.getName()))
|
||||
.forEach(File::delete);
|
||||
}
|
||||
} catch (SystemException e) {
|
||||
ExceptionHandler.process(e);
|
||||
}
|
||||
}
|
||||
};
|
||||
workUnit.setAvoidUnloadResources(true);
|
||||
ProxyRepositoryFactory.getInstance().executeRepositoryWorkUnit(workUnit);
|
||||
tmpFileManager.reload();
|
||||
super.load();
|
||||
viewer.refresh();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -586,7 +694,7 @@ public class MetadataTalendTypeEditor extends FieldEditor {
|
||||
*/
|
||||
@Override
|
||||
protected void doLoad() {
|
||||
viewer.setInput(tmpFileManager.getTempFiles());
|
||||
viewer.setInput(tmpFileManager.getTempFiles(false));
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -595,7 +703,7 @@ public class MetadataTalendTypeEditor extends FieldEditor {
|
||||
* DOC YeXiaowei Comment method "forceLoad".
|
||||
*/
|
||||
public void forceLoad() {
|
||||
viewer.setInput(tmpFileManager.getTempFiles());
|
||||
viewer.setInput(tmpFileManager.getTempFiles(false));
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -635,98 +743,44 @@ public class MetadataTalendTypeEditor extends FieldEditor {
|
||||
}
|
||||
|
||||
boolean needReload = false;
|
||||
|
||||
List<FileInfo> tempFiles = tmpFileManager.getTempFiles();
|
||||
List<File> realFiles = MetadataTalendType.getMetadataMappingFiles();
|
||||
|
||||
// delete the removed files
|
||||
for (File file : realFiles) {
|
||||
if (!tmpFileManager.contains(file.getName())) {
|
||||
IFile iFile = mappingFolder.getFile(file.getName());
|
||||
List<FileInfo> tmpFiles = tmpFileManager.getTempFiles(true);
|
||||
for (FileInfo info : tmpFiles) {
|
||||
IFile file = mappingFolder.getFile(info.fileName);
|
||||
if (FileType.SYSTEM_DEFAULT == info.type || info.isDeleted) {
|
||||
try {
|
||||
iFile.delete(true, null);
|
||||
needReload = true;
|
||||
if (file.exists()) {
|
||||
file.delete(true, null);
|
||||
needReload = true;
|
||||
}
|
||||
} catch (CoreException e) {
|
||||
ExceptionHandler.process(e);
|
||||
}
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
// add the new files;
|
||||
for (FileInfo newFile : tempFiles) {
|
||||
if (!realFiles.contains(newFile.file)) {
|
||||
if (FileType.USER_DEFINED == info.type || FileType.USER_EXTERNAL == info.type) {
|
||||
try {
|
||||
importFileIntoTalend(newFile.file);
|
||||
byte[] newContent = info.fileContent == null ? Files.readAllBytes(info.file.toPath())
|
||||
: info.fileContent.get().getBytes();
|
||||
InputStream inputStream = new ByteArrayInputStream(newContent);
|
||||
if (file.exists()) {
|
||||
file.setContents(inputStream, true, false, null);
|
||||
} else {
|
||||
if (!mappingFolder.exists()) {
|
||||
ResourceUtils.createFolder(mappingFolder);
|
||||
}
|
||||
file.create(inputStream, true, null);
|
||||
}
|
||||
needReload = true;
|
||||
} catch (Exception e) {
|
||||
ExceptionHandler.process(e);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// for editing files
|
||||
for (FileInfo tempFile : tempFiles) {
|
||||
for (File realFile : realFiles) {
|
||||
if (realFile.equals(tempFile.file)) {
|
||||
if (tempFile.fileContent != null) {
|
||||
try {
|
||||
updateFileContent(realFile, tempFile.fileContent.get());
|
||||
needReload = true;
|
||||
break;
|
||||
} catch (Exception e) {
|
||||
ExceptionHandler.process(e);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
try {
|
||||
mappingFolder.refreshLocal(IResource.DEPTH_ONE, null);
|
||||
} catch (CoreException e) {
|
||||
ExceptionHandler.process(e);
|
||||
}
|
||||
if (needReload) {
|
||||
tmpFileManager.reload();
|
||||
ProjectPreferenceManager manager = CoreRuntimePlugin.getInstance().getProjectPreferenceManager();
|
||||
manager.setValue(MetadataTalendType.UPDATED_MAPPING_FILES, true);
|
||||
manager.save();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* bqian Comment method "updateFileContent".
|
||||
*
|
||||
* @param realFile
|
||||
* @param string
|
||||
*/
|
||||
private void updateFileContent(File realFile, String string) throws Exception {
|
||||
FileWriter fw = null;
|
||||
try {
|
||||
fw = new FileWriter(realFile);
|
||||
fw.write(string);
|
||||
fw.flush();
|
||||
} finally {
|
||||
fw.close();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Import the selected file into talend.
|
||||
*
|
||||
* @param xmlFile
|
||||
* @throws SystemException
|
||||
*/
|
||||
private File importFileIntoTalend(File xmlFile) throws IOException, SystemException {
|
||||
String fileName = xmlFile.getName();
|
||||
|
||||
URL url = MetadataTalendType.getProjectForderURLOfMappingsFile();
|
||||
File targetFile = new File(url.getPath(), fileName);
|
||||
|
||||
FilesUtils.copyFile(xmlFile, targetFile);
|
||||
return targetFile;
|
||||
}
|
||||
|
||||
/*
|
||||
* (non-Javadoc) Method declared on FieldEditor.
|
||||
*/
|
||||
|
||||
@@ -893,6 +893,7 @@ public final class DBConnectionContextUtils {
|
||||
managerConnection.setValue(0, dbType, urlConnection, server, username, password, sidOrDatabase, port, filePath,
|
||||
datasource, schemaOracle, additionParam, driverClassName, driverJarPath, dbVersionString);
|
||||
managerConnection.setDbRootPath(dbRootPath);
|
||||
managerConnection.setSupportNLS(dbConn.isSupportNLS());
|
||||
|
||||
return urlConnection;
|
||||
}
|
||||
@@ -1058,6 +1059,12 @@ public final class DBConnectionContextUtils {
|
||||
cloneConn.setSQLMode(true);
|
||||
}
|
||||
|
||||
if(dbConn.isSetSupportNLS()) {
|
||||
cloneConn.setSupportNLS(dbConn.isSupportNLS());
|
||||
} else {
|
||||
cloneConn.setSupportNLS(false);
|
||||
}
|
||||
|
||||
// cloneConn.setProperties(dbConn.getProperties());
|
||||
// cloneConn.setCdcConns(dbConn.getCdcConns());
|
||||
// cloneConn.setQueries(dbConn.getQueries());
|
||||
|
||||
@@ -166,7 +166,8 @@ public class ExtendedNodeConnectionContextUtils {
|
||||
KnoxUrl,
|
||||
KnoxUsername,
|
||||
KnoxPassword,
|
||||
KnoxDirectory
|
||||
KnoxDirectory,
|
||||
KnoxTimeout
|
||||
}
|
||||
|
||||
static List<IContextParameter> getContextVariables(final String prefixName, Connection conn, Set<IConnParamName> paramSet) {
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
<!-- Seems those 3 are not useful -->
|
||||
<classloader
|
||||
index="HIVE:HORTONWORKS:HDP_1_0:EMBEDDED"
|
||||
libraries="hive-hbase-handler-0.9.0.jar;hbase-0.92.0.jar;hadoop-core-1.0.3.jar;commons-logging-1.0.4.jar;datanucleus-api-jdo-3.0.7.jar;datanucleus-core-3.0.9.jar;datanucleus-rdbms-3.0.8.jar;hive-builtins-0.9.0.jar;hive-exec-0.9.0_hdp.jar;hive-jdbc-0.9.0_hdp.jar;hive-metastore-0.9.0_hdp.jar;hive-service-0.9.0_hdp.jar;libfb303-0.7.0.jar;libthrift-0.7.0.jar;commons-lang-2.4.jar;antlr-runtime-3.0.1.jar;commons-dbcp-1.4.jar;commons-pool-1.5.4.jar;derby-10.4.2.0.jar;commons-configuration-1.6.jar;jdo2-api-2.3-ec.jar;reload4j-1.2.19.jar;slf4j-api-1.6.1.jar;slf4j-log4j12-1.6.1.jar;jackson-core-asl-1.8.8.jar;jackson-mapper-asl-1.8.8.jar">
|
||||
libraries="hive-hbase-handler-0.9.0.jar;hbase-0.92.0.jar;hadoop-core-1.0.3.jar;commons-logging-1.0.4.jar;datanucleus-api-jdo-3.0.7.jar;datanucleus-core-3.0.9.jar;datanucleus-rdbms-3.0.8.jar;hive-builtins-0.9.0.jar;hive-exec-0.9.0_hdp.jar;hive-jdbc-0.9.0_hdp.jar;hive-metastore-0.9.0_hdp.jar;hive-service-0.9.0_hdp.jar;libfb303-0.7.0.jar;libthrift-0.7.0.jar;commons-lang-2.4.jar;antlr-runtime-3.0.1.jar;commons-dbcp-1.4.jar;commons-pool-1.5.4.jar;derby-10.4.2.0.jar;commons-configuration2-2.8.0.jar;jdo2-api-2.3-ec.jar;reload4j-1.2.19.jar;slf4j-api-1.6.1.jar;slf4j-log4j12-1.6.1.jar;jackson-core-asl-1.8.8.jar;jackson-mapper-asl-1.8.8.jar">
|
||||
</classloader>
|
||||
<classloader
|
||||
index="HIVE:CLOUDERA:Cloudera_CDH3:STANDALONE"
|
||||
@@ -40,8 +40,8 @@
|
||||
context="PostgresPlus wizard"
|
||||
language="java"
|
||||
message="wizard for PostgresPlus"
|
||||
mvn_uri="mvn:org.postgresql/postgresql/42.2.25"
|
||||
name="postgresql-42.2.25.jar"
|
||||
mvn_uri="mvn:org.postgresql/postgresql/42.2.26"
|
||||
name="postgresql-42.2.26.jar"
|
||||
required="true">
|
||||
</libraryNeeded>
|
||||
<libraryNeeded
|
||||
@@ -132,6 +132,22 @@
|
||||
required="true"
|
||||
uripath="platform:/plugin/org.talend.libraries.apache.common/lib/commons-lang-2.4.jar">
|
||||
</libraryNeeded>
|
||||
<libraryNeeded
|
||||
context="plugin:org.talend.libraries.jdbc.oracle"
|
||||
language="java"
|
||||
message="Needed for Oracle jdbc plugin National Language Support (NLS)."
|
||||
mvn_uri="mvn:com.oracle.database.nls/orai18n/19.3.0.0/jar"
|
||||
name="orai18n-19.3.0.0.jar"
|
||||
required="true">
|
||||
</libraryNeeded>
|
||||
<libraryNeeded
|
||||
context="plugin:org.talend.metadata.managment"
|
||||
language="java"
|
||||
message="Needed for plugin org.talend.metadata.managment"
|
||||
name="hsqldb.jar" mvn_uri="mvn:org.hsqldb/hsqldb/2.7.1"
|
||||
required="true"
|
||||
uripath="platform:/plugin/org.talend.libraries.jdbc.hsql/lib/hsqldb.jar">
|
||||
</libraryNeeded>
|
||||
</extension>
|
||||
<extension
|
||||
point="org.talend.core.migrationTask">
|
||||
|
||||
@@ -291,6 +291,7 @@ public class ExtractMetaDataFromDataBase {
|
||||
* DOC cantoine. Method to test DataBaseConnection.
|
||||
*
|
||||
* @param dbVersionString
|
||||
* @param supportNLS
|
||||
*
|
||||
* @param String driverClass
|
||||
* @param String urlString pwd
|
||||
@@ -299,14 +300,14 @@ public class ExtractMetaDataFromDataBase {
|
||||
* @return ConnectionStatus : the result of connection(boolean Result, String messageException)
|
||||
*/
|
||||
public static ConnectionStatus testConnection(String dbType, String url, String username, String pwd, String schema,
|
||||
final String driverClassName, final String driverJarPath, String dbVersionString, String additionalParam) {
|
||||
final String driverClassName, final String driverJarPath, String dbVersionString, String additionalParam, boolean supportNLS) {
|
||||
return testConnection(dbType, url, username, pwd, schema, driverClassName, driverJarPath, dbVersionString,
|
||||
additionalParam, null, null);
|
||||
additionalParam, supportNLS, null, null);
|
||||
}
|
||||
|
||||
public static ConnectionStatus testConnection(String dbType, String url, String username, String pwd, String schema,
|
||||
final String driverClassName, final String driverJarPath, String dbVersionString, String additionalParam,
|
||||
StringBuffer retProposedSchema, String sidOrDatabase) {
|
||||
boolean supportNLS, StringBuffer retProposedSchema, String sidOrDatabase) {
|
||||
Connection connection = null;
|
||||
ConnectionStatus connectionStatus = new ConnectionStatus();
|
||||
connectionStatus.setResult(false);
|
||||
@@ -315,7 +316,7 @@ public class ExtractMetaDataFromDataBase {
|
||||
List list = new ArrayList();
|
||||
|
||||
list = ExtractMetaDataUtils.getInstance().connect(dbType, url, username, pwd, driverClassName, driverJarPath,
|
||||
dbVersionString, additionalParam);
|
||||
dbVersionString, additionalParam, supportNLS);
|
||||
if (list != null && list.size() > 0) {
|
||||
for (int i = 0; i < list.size(); i++) {
|
||||
if (list.get(i) instanceof Connection) {
|
||||
@@ -498,7 +499,7 @@ public class ExtractMetaDataFromDataBase {
|
||||
List list = metaData.getConnection(iMetadataConnection.getDbType(), url, iMetadataConnection.getUsername(),
|
||||
iMetadataConnection.getPassword(), iMetadataConnection.getDatabase(), iMetadataConnection.getSchema(),
|
||||
iMetadataConnection.getDriverClass(), iMetadataConnection.getDriverJarPath(),
|
||||
iMetadataConnection.getDbVersionString(), iMetadataConnection.getAdditionalParams());
|
||||
iMetadataConnection.getDbVersionString(), iMetadataConnection.getAdditionalParams(), iMetadataConnection.isSupportNLS());
|
||||
Connection conn = null;
|
||||
DriverShim wapperDriver = null;
|
||||
|
||||
@@ -582,7 +583,7 @@ public class ExtractMetaDataFromDataBase {
|
||||
List list = extractMeta.getConnection(iMetadataConnection.getDbType(), iMetadataConnection.getUrl(),
|
||||
iMetadataConnection.getUsername(), iMetadataConnection.getPassword(), iMetadataConnection.getDatabase(),
|
||||
iMetadataConnection.getSchema(), iMetadataConnection.getDriverClass(), iMetadataConnection.getDriverJarPath(),
|
||||
iMetadataConnection.getDbVersionString(), iMetadataConnection.getAdditionalParams());
|
||||
iMetadataConnection.getDbVersionString(), iMetadataConnection.getAdditionalParams(), iMetadataConnection.isSupportNLS());
|
||||
DriverShim wapperDriver = null;
|
||||
if (list != null && list.size() > 0) {
|
||||
for (int i = 0; i < list.size(); i++) {
|
||||
|
||||
@@ -121,6 +121,8 @@ public class ExtractMetaDataUtils {
|
||||
|
||||
private String[] ORACLE_SSL_JARS = new String[] { "oraclepki-12.2.0.1.jar", "osdt_cert-12.2.0.1.jar", //$NON-NLS-1$//$NON-NLS-2$
|
||||
"osdt_core-12.2.0.1.jar" }; //$NON-NLS-1$
|
||||
|
||||
private String ORACLE_NLS_JARS = "orai18n-19.3.0.0.jar";
|
||||
|
||||
public static final String SNOWFLAKE = "Snowflake"; //$NON-NLS-1$
|
||||
|
||||
@@ -829,6 +831,11 @@ public class ExtractMetaDataUtils {
|
||||
*/
|
||||
public List getConnection(String dbType, String url, String username, String pwd, String dataBase, String schemaBase,
|
||||
final String driverClassName, final String driverJarPath, String dbVersion, String additionalParams) {
|
||||
return getConnection(dbType, url, username, pwd, dataBase, schemaBase, driverClassName, driverJarPath, dbVersion, additionalParams, false);
|
||||
}
|
||||
|
||||
public List getConnection(String dbType, String url, String username, String pwd, String dataBase, String schemaBase,
|
||||
final String driverClassName, final String driverJarPath, String dbVersion, String additionalParams, boolean supportNLS) {
|
||||
boolean isColsed = false;
|
||||
List conList = new ArrayList();
|
||||
try {
|
||||
@@ -846,7 +853,7 @@ public class ExtractMetaDataUtils {
|
||||
closeConnection(true); // colse before connection.
|
||||
checkDBConnectionTimeout();
|
||||
|
||||
list = connect(dbType, url, username, pwd, driverClassName, driverJarPath, dbVersion, additionalParams);
|
||||
list = connect(dbType, url, username, pwd, driverClassName, driverJarPath, dbVersion, additionalParams, supportNLS);
|
||||
if (list != null && list.size() > 0) {
|
||||
for (int i = 0; i < list.size(); i++) {
|
||||
if (list.get(i) instanceof Connection) {
|
||||
@@ -938,7 +945,7 @@ public class ExtractMetaDataUtils {
|
||||
* @throws Exception
|
||||
*/
|
||||
public List connect(String dbType, String url, String username, String pwd, final String driverClassNameArg,
|
||||
final String driverJarPathArg, String dbVersion, String additionalParams) throws Exception {
|
||||
final String driverJarPathArg, String dbVersion, String additionalParams, boolean supportNLS) throws Exception {
|
||||
Connection connection = null;
|
||||
DriverShim wapperDriver = null;
|
||||
List conList = new ArrayList();
|
||||
@@ -953,11 +960,18 @@ public class ExtractMetaDataUtils {
|
||||
if ((driverJarPathArg == null || driverJarPathArg.equals(""))) { //$NON-NLS-1$
|
||||
List<String> driverNames = EDatabaseVersion4Drivers.getDrivers(dbType, dbVersion);
|
||||
if (driverNames != null) {
|
||||
if(EDatabaseTypeName.ORACLEFORSID.getProduct().equals(EDatabaseTypeName.getTypeFromDbType(dbType).getProduct())) {
|
||||
if(supportNLS){
|
||||
driverNames.add(ORACLE_NLS_JARS);
|
||||
}
|
||||
}
|
||||
|
||||
if (EDatabaseTypeName.ORACLE_CUSTOM.getDisplayName().equals(dbType)
|
||||
&& StringUtils.isNotEmpty(additionalParams)) {
|
||||
if (additionalParams.contains(SSLPreferenceConstants.TRUSTSTORE_TYPE)) {
|
||||
driverNames.addAll(Arrays.asList(ORACLE_SSL_JARS));
|
||||
}
|
||||
|
||||
} else if (SNOWFLAKE.equals(dbType)) { // $NON-NLS-1$
|
||||
// TDQ-17294 msjian Support of Snowflake for DQ Datamart
|
||||
driverNames.add(SNOWFLAKE_DRIVER_JAR);
|
||||
@@ -1285,7 +1299,7 @@ public class ExtractMetaDataUtils {
|
||||
List list = getConnection(metadataConnection.getDbType(), metadataConnection.getUrl(), metadataConnection.getUsername(),
|
||||
metadataConnection.getPassword(), metadataConnection.getDatabase(), metadataConnection.getSchema(),
|
||||
metadataConnection.getDriverClass(), metadataConnection.getDriverJarPath(),
|
||||
metadataConnection.getDbVersionString(), metadataConnection.getAdditionalParams());
|
||||
metadataConnection.getDbVersionString(), metadataConnection.getAdditionalParams(), metadataConnection.isSupportNLS());
|
||||
return list;
|
||||
}
|
||||
|
||||
|
||||
@@ -17,6 +17,7 @@ import java.nio.charset.Charset;
|
||||
import java.security.Provider;
|
||||
import java.sql.Connection;
|
||||
import java.sql.Driver;
|
||||
import java.sql.ResultSet;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.HashMap;
|
||||
@@ -166,6 +167,11 @@ public class JDBCDriverLoader {
|
||||
info.put("charSet", systemCharset.displayName()); //$NON-NLS-1$
|
||||
}
|
||||
}
|
||||
|
||||
//TUP-37016:Upgrade hsqldb to 2.7.1
|
||||
if (dbType.equals(EDatabaseTypeName.ACCESS.getXmlName()) || ConnectionUtils.isHsql(url)) {
|
||||
System.setProperty("hsqldb.method_class_names", "net.ucanaccess.converters.*");
|
||||
}
|
||||
|
||||
if (additionalParams != null && !"".equals(additionalParams) && dbType.toUpperCase().contains("ORACLE")) {//$NON-NLS-1$//$NON-NLS-2$
|
||||
if (additionalParams.contains(SSLPreferenceConstants.TRUSTSTORE_TYPE)) {
|
||||
@@ -198,10 +204,20 @@ public class JDBCDriverLoader {
|
||||
}
|
||||
connection = wapperDriver.connect(url, info);
|
||||
}
|
||||
|
||||
try {
|
||||
ResultSet schemas = connection.getMetaData().getSchemas();
|
||||
if(schemas.next()) {
|
||||
schemas.getString(1);
|
||||
}
|
||||
} catch (Exception e) {
|
||||
}
|
||||
|
||||
// }
|
||||
// DriverManager.deregisterDriver(wapperDriver);
|
||||
// bug 9162
|
||||
list.add(connection);
|
||||
|
||||
list.add(wapperDriver);
|
||||
return list;
|
||||
} catch (Throwable e) {
|
||||
|
||||
@@ -470,7 +470,7 @@ public class ExtractManager {
|
||||
metadataConnection.getUsername(), metadataConnection.getPassword(), metadataConnection.getDatabase(),
|
||||
metadataConnection.getSchema(), metadataConnection.getDriverClass(),
|
||||
metadataConnection.getDriverJarPath(), metadataConnection.getDbVersionString(),
|
||||
metadataConnection.getAdditionalParams());
|
||||
metadataConnection.getAdditionalParams(), metadataConnection.isSupportNLS());
|
||||
if (list != null && list.size() > 0) {
|
||||
for (int i = 0; i < list.size(); i++) {
|
||||
if (list.get(i) instanceof Driver) {
|
||||
@@ -574,7 +574,7 @@ public class ExtractManager {
|
||||
metadataConnection.getUsername(), metadataConnection.getPassword(), metadataConnection.getDatabase(),
|
||||
metadataConnection.getSchema(), metadataConnection.getDriverClass(),
|
||||
metadataConnection.getDriverJarPath(), metadataConnection.getDbVersionString(),
|
||||
metadataConnection.getAdditionalParams());
|
||||
metadataConnection.getAdditionalParams(), metadataConnection.isSupportNLS());
|
||||
if (list != null && list.size() > 0) {
|
||||
for (int i = 0; i < list.size(); i++) {
|
||||
if (list.get(i) instanceof DriverShim) {
|
||||
@@ -1064,7 +1064,7 @@ public class ExtractManager {
|
||||
List connList = extractMeta.getConnection(metadataConnection.getDbType(), metadataConnection.getUrl(),
|
||||
metadataConnection.getUsername(), metadataConnection.getPassword(), metadataConnection.getDatabase(),
|
||||
metadataConnection.getSchema(), metadataConnection.getDriverClass(), metadataConnection.getDriverJarPath(),
|
||||
metadataConnection.getDbVersionString(), metadataConnection.getAdditionalParams());
|
||||
metadataConnection.getDbVersionString(), metadataConnection.getAdditionalParams(), metadataConnection.isSupportNLS());
|
||||
try {
|
||||
if (!tableInfoParameters.isUsedName()) {
|
||||
if (tableInfoParameters.getSqlFiter() != null && !"".equals(tableInfoParameters.getSqlFiter())) { //$NON-NLS-1$
|
||||
|
||||
@@ -12,6 +12,7 @@
|
||||
// ============================================================================
|
||||
package org.talend.metadata.managment.connection.manager;
|
||||
|
||||
import java.security.PrivilegedExceptionAction;
|
||||
import java.sql.Connection;
|
||||
import java.sql.Driver;
|
||||
import java.sql.SQLException;
|
||||
@@ -26,6 +27,7 @@ import org.eclipse.core.runtime.IProgressMonitor;
|
||||
import org.eclipse.core.runtime.IStatus;
|
||||
import org.eclipse.core.runtime.Status;
|
||||
import org.eclipse.core.runtime.jobs.Job;
|
||||
import org.talend.commons.exception.CommonExceptionHandler;
|
||||
import org.talend.core.GlobalServiceRegister;
|
||||
import org.talend.core.classloader.ClassLoaderFactory;
|
||||
import org.talend.core.classloader.DynamicClassLoader;
|
||||
@@ -58,37 +60,34 @@ public class ImpalaConnectionManager extends DataBaseConnectionManager {
|
||||
return manager;
|
||||
}
|
||||
|
||||
public void checkConnection(IMetadataConnection metadataConn) throws ClassNotFoundException, InstantiationException,
|
||||
IllegalAccessException, SQLException {
|
||||
public void checkConnection(IMetadataConnection metadataConn) throws ClassNotFoundException, InstantiationException, IllegalAccessException, SQLException {
|
||||
createConnection(metadataConn);
|
||||
}
|
||||
|
||||
public Connection createConnection(final IMetadataConnection metadataConn) throws ClassNotFoundException,
|
||||
InstantiationException, IllegalAccessException, SQLException {
|
||||
public Connection createConnection(final IMetadataConnection metadataConn) throws ClassNotFoundException, InstantiationException, IllegalAccessException, SQLException {
|
||||
FutureTask<Connection> futureTask = new FutureTask<Connection>(new Callable<Connection>() {
|
||||
|
||||
@Override
|
||||
public Connection call() throws Exception {
|
||||
Connection conn = null;
|
||||
|
||||
|
||||
if( !("".equals( metadataConn.getPassword() ) || "\"\"".equals( metadataConn.getPassword() )) ) {
|
||||
String url = metadataConn.getUrl().replace(";auth=noSasl", "");
|
||||
|
||||
|
||||
|
||||
if (url.startsWith("jdbc:hive2") && !url.contains(";user=")) {
|
||||
url = url + ";user=" + metadataConn.getUsername() + ";password=" + metadataConn.getPassword();
|
||||
} else if (!url.contains(";AuthMech=3;UID=")) {
|
||||
url = url + ";AuthMech=3;UID=" + metadataConn.getUsername() + ";PWD=" + metadataConn.getPassword();
|
||||
}
|
||||
|
||||
|
||||
metadataConn.setUrl(url);
|
||||
}
|
||||
|
||||
|
||||
|
||||
String connURL = metadataConn.getUrl();
|
||||
String username = metadataConn.getUsername();
|
||||
String password = metadataConn.getPassword();
|
||||
|
||||
String password = metadataConn.getPassword();
|
||||
|
||||
// 1. Get class loader.
|
||||
ClassLoader currClassLoader = Thread.currentThread().getContextClassLoader();
|
||||
ClassLoader impalaClassLoader = getClassLoader(metadataConn);
|
||||
@@ -98,35 +97,43 @@ public class ImpalaConnectionManager extends DataBaseConnectionManager {
|
||||
String driverClass = EDatabase4DriverClassName.IMPALA.getDriverClass();
|
||||
|
||||
Map<String, Object> otherParametersMap = metadataConn.getOtherParameters();
|
||||
Object userGroupInformation = null;
|
||||
boolean useKerberos = false;
|
||||
boolean useKeytab = false;
|
||||
if (otherParametersMap != null) {
|
||||
if (Boolean.valueOf((String) otherParametersMap.get(ConnParameterKeys.CONN_PARA_KEY_USE_KRB))) {
|
||||
if (Boolean.valueOf((String) metadataConn.getParameter(ConnParameterKeys.CONN_PARA_KEY_USEKEYTAB))) {
|
||||
|
||||
// driver
|
||||
Object driverObj = otherParametersMap.get(ConnParameterKeys.IMPALA_DRIVER);
|
||||
String driverType = null;
|
||||
if (driverObj != null) {
|
||||
driverType = String.valueOf(driverObj);
|
||||
}
|
||||
|
||||
useKerberos = Boolean.valueOf((String) otherParametersMap.get(ConnParameterKeys.CONN_PARA_KEY_USE_KRB));
|
||||
if (useKerberos) {
|
||||
// Set hadoop.security.authentication to Kerberos
|
||||
Object conf = Class.forName("org.apache.hadoop.conf.Configuration", true, impalaClassLoader) //$NON-NLS-1$
|
||||
.newInstance();
|
||||
EHadoopConfProperties.AUTHENTICATION.set(conf, "KERBEROS"); //$NON-NLS-1$
|
||||
ReflectionUtils.invokeStaticMethod("org.apache.hadoop.security.UserGroupInformation", //$NON-NLS-1$
|
||||
impalaClassLoader, "setConfiguration", new Object[] { conf }); //$NON-NLS-1$
|
||||
|
||||
useKeytab = Boolean.valueOf((String) metadataConn.getParameter(ConnParameterKeys.CONN_PARA_KEY_USEKEYTAB));
|
||||
if (useKeytab) {
|
||||
// Login user using keytab
|
||||
String principal = (String) metadataConn
|
||||
.getParameter(ConnParameterKeys.CONN_PARA_KEY_KEYTAB_PRINCIPAL);
|
||||
String keytabPath = (String) metadataConn.getParameter(ConnParameterKeys.CONN_PARA_KEY_KEYTAB);
|
||||
try {
|
||||
ReflectionUtils.invokeStaticMethod("org.apache.hadoop.security.UserGroupInformation", //$NON-NLS-1$
|
||||
impalaClassLoader, "loginUserFromKeytab", new String[] { principal, keytabPath });
|
||||
userGroupInformation = ReflectionUtils.invokeStaticMethod("org.apache.hadoop.security.UserGroupInformation", //$NON-NLS-1$
|
||||
impalaClassLoader, "loginUserFromKeytabAndReturnUGI", new String[] { principal, keytabPath }); //$NON-NLS-1$
|
||||
} catch (Exception e) {
|
||||
throw new SQLException(e);
|
||||
}
|
||||
} else {
|
||||
Object conf = Class.forName("org.apache.hadoop.conf.Configuration", true, impalaClassLoader) //$NON-NLS-1$
|
||||
.newInstance();
|
||||
EHadoopConfProperties.AUTHENTICATION.set(conf, "KERBEROS"); //$NON-NLS-1$
|
||||
ReflectionUtils.invokeStaticMethod("org.apache.hadoop.security.UserGroupInformation", //$NON-NLS-1$
|
||||
impalaClassLoader, "setConfiguration", new Object[] { conf }); //$NON-NLS-1$
|
||||
}
|
||||
}
|
||||
IHadoopDistributionService hadoopService = getHadoopDistributionService();
|
||||
if ((hadoopService != null)) {
|
||||
// driver
|
||||
Object driverObj = otherParametersMap.get(ConnParameterKeys.IMPALA_DRIVER);
|
||||
String driverType = null;
|
||||
String impalaDriver = null;
|
||||
if (driverObj != null) {
|
||||
driverType = String.valueOf(driverObj);
|
||||
}
|
||||
// distribution
|
||||
Object distObj = otherParametersMap.get(ConnParameterKeys.CONN_PARA_KEY_IMPALA_DISTRIBUTION);
|
||||
String distribution = null;
|
||||
@@ -163,12 +170,25 @@ public class ImpalaConnectionManager extends DataBaseConnectionManager {
|
||||
Properties info = new Properties();
|
||||
username = username != null ? username : ""; //$NON-NLS-1$
|
||||
password = password != null ? password : "";//$NON-NLS-1$
|
||||
|
||||
|
||||
// info.setProperty("user", username);//$NON-NLS-1$
|
||||
// info.setProperty("password", password);//$NON-NLS-1$
|
||||
|
||||
conn = hiveDriver.connect(connURL, info);
|
||||
|
||||
if (!useKeytab) {
|
||||
conn = hiveDriver.connect(connURL, info);
|
||||
} else {
|
||||
PrivilegedExceptionAction<Object> privilegedExceptionAction = new java.security.PrivilegedExceptionAction<Object>() {
|
||||
@Override
|
||||
public Object run() {
|
||||
java.sql.Connection con = null;
|
||||
|
||||
try {
|
||||
con = hiveDriver.connect(connURL, info);
|
||||
} catch (java.sql.SQLException e) {
|
||||
CommonExceptionHandler.process(e);
|
||||
}
|
||||
return con;
|
||||
}
|
||||
};
|
||||
conn = (Connection) ReflectionUtils.invokeMethod(userGroupInformation, "doAs", new Object[] {privilegedExceptionAction}, PrivilegedExceptionAction.class ); //$NON-NLS-1$
|
||||
}
|
||||
} finally {
|
||||
Thread.currentThread().setContextClassLoader(currClassLoader);
|
||||
}
|
||||
@@ -240,7 +260,7 @@ public class ImpalaConnectionManager extends DataBaseConnectionManager {
|
||||
|
||||
private IHadoopDistributionService getHadoopDistributionService() {
|
||||
if (GlobalServiceRegister.getDefault().isServiceRegistered(IHadoopDistributionService.class)) {
|
||||
return (IHadoopDistributionService) GlobalServiceRegister.getDefault().getService(IHadoopDistributionService.class);
|
||||
return GlobalServiceRegister.getDefault().getService(IHadoopDistributionService.class);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@@ -40,7 +40,7 @@ public enum EHiveWithTezJars {
|
||||
"api-asn1-api-1.0.0-M20.jar", "api-util-1.0.0-M20.jar", "asm-3.1.jar", "avro-1.7.4.jar",
|
||||
"commons-beanutils-1.7.0.jar", "commons-beanutils-core-1.8.0.jar", "commons-compress-1.4.1.jar",
|
||||
"commons-configuration-1.6.jar", "commons-digester-1.8.jar", "commons-net-3.1.jar", "curator-client-2.6.0.jar",
|
||||
"curator-framework-2.6.0.jar", "curator-recipes-2.6.0.jar", "gson-2.2.4.jar", "guice-3.0.jar",
|
||||
"curator-framework-2.6.0.jar", "curator-recipes-2.6.0.jar", "gson-2.9.0.jar", "guice-3.0.jar",
|
||||
"guice-servlet-3.0.jar", "hadoop-auth-2.6.0.2.2.0.0-2041.jar", "hadoop-common-2.6.0.2.2.0.0-2041.jar",
|
||||
"hadoop-hdfs-2.6.0.2.2.0.0-2041.jar", "hadoop-yarn-api-2.6.0.2.2.0.0-2041.jar",
|
||||
"hadoop-yarn-client-2.6.0.2.2.0.0-2041.jar", "hadoop-yarn-common-2.6.0.2.2.0.0-2041.jar", "htrace-core-3.0.4.jar",
|
||||
@@ -56,7 +56,7 @@ public enum EHiveWithTezJars {
|
||||
"api-asn1-api-1.0.0-M20.jar", "api-util-1.0.0-M20.jar", "asm-3.2.jar", "avro-1.7.5.jar",
|
||||
"commons-beanutils-1.7.0.jar", "commons-beanutils-core-1.8.0.jar", "commons-compress-1.4.1.jar",
|
||||
"commons-configuration-1.6.jar", "commons-digester-1.8.jar", "commons-net-3.1.jar", "curator-client-2.7.1.jar",
|
||||
"curator-framework-2.7.1.jar", "curator-recipes-2.7.1.jar", "gson-2.2.4.jar", "guice-3.0.jar",
|
||||
"curator-framework-2.7.1.jar", "curator-recipes-2.7.1.jar", "gson-2.9.0.jar", "guice-3.0.jar",
|
||||
"guice-servlet-3.0.jar", "hadoop-auth-2.7.1.2.3.2.0-2950.jar", "hadoop-common-2.7.1.2.3.2.0-2950.jar",
|
||||
"hadoop-hdfs-2.7.1.2.3.2.0-2950.jar", "hadoop-yarn-api-2.7.1.2.3.2.0-2950.jar",
|
||||
"hadoop-yarn-client-2.7.1.2.3.2.0-2950.jar", "hadoop-yarn-common-2.7.1.2.3.2.0-2950.jar",
|
||||
|
||||
@@ -90,6 +90,8 @@ public class ManagerConnection {
|
||||
Integer id = null;
|
||||
|
||||
String additionalParams;
|
||||
|
||||
private boolean supportNLS;
|
||||
|
||||
private String schemaOracle;
|
||||
|
||||
@@ -288,7 +290,7 @@ public class ManagerConnection {
|
||||
}
|
||||
// test the connection
|
||||
testConnection = ExtractMetaDataFromDataBase.testConnection(dbTypeString, urlConnectionString, username, password,
|
||||
schemaName, driverClassName, driverJarPath, dbVersionString, additionalParams, retProposedSchema,
|
||||
schemaName, driverClassName, driverJarPath, dbVersionString, additionalParams, supportNLS, retProposedSchema,
|
||||
sidOrDatabase);
|
||||
isValide = testConnection.getResult();
|
||||
messageException = testConnection.getMessageException();
|
||||
@@ -388,7 +390,7 @@ public class ManagerConnection {
|
||||
metadataConnection.getUrl(), metadataConnection.getUsername(), metadataConnection.getPassword(),
|
||||
metadataConnection.getSchema(), metadataConnection.getDriverClass(),
|
||||
metadataConnection.getDriverJarPath(), metadataConnection.getDbVersionString(),
|
||||
metadataConnection.getAdditionalParams(), retProposedSchema, metadataConnection.getDatabase());
|
||||
metadataConnection.getAdditionalParams(), metadataConnection.isSupportNLS(), retProposedSchema, metadataConnection.getDatabase());
|
||||
}
|
||||
// qli
|
||||
// record this metadataConnection as old connection.
|
||||
@@ -475,4 +477,13 @@ public class ManagerConnection {
|
||||
this.isValide = isValide;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Sets the supportNLS.
|
||||
* @param supportNLS the supportNLS to set
|
||||
*/
|
||||
public void setSupportNLS(boolean supportNLS) {
|
||||
this.supportNLS = supportNLS;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -188,7 +188,7 @@ public class MetadataConnectionUtils {
|
||||
}
|
||||
list = ExtractMetaDataUtils.getInstance().connect(metadataBean.getDbType(), metadataBean.getUrl(),
|
||||
metadataBean.getUsername(), metadataBean.getPassword(), metadataBean.getDriverClass(),
|
||||
metadataBean.getDriverJarPath(), metadataBean.getDbVersionString(), metadataBean.getAdditionalParams());
|
||||
metadataBean.getDriverJarPath(), metadataBean.getDbVersionString(), metadataBean.getAdditionalParams(), metadataBean.isSupportNLS());
|
||||
} catch (Exception e) {
|
||||
rc.setMessage("fail to connect database!"); //$NON-NLS-1$
|
||||
CommonExceptionHandler.process(e);
|
||||
@@ -274,6 +274,7 @@ public class MetadataConnectionUtils {
|
||||
String dataBase = databaseConnection.getSID();
|
||||
String dbVersionString = databaseConnection.getDbVersionString();
|
||||
String additionalParams = databaseConnection.getAdditionalParams();
|
||||
boolean supportNLS = databaseConnection.isSupportNLS();
|
||||
|
||||
// MOD qiongli 2011-9-6,TDQ 3317.handle context mode
|
||||
if (databaseConnection.isContextMode()) {
|
||||
@@ -313,6 +314,7 @@ public class MetadataConnectionUtils {
|
||||
metadataConnection.setUsername(userName);
|
||||
metadataConnection.setPassword(password);
|
||||
metadataConnection.setUrl(dbUrl);
|
||||
metadataConnection.setSupportNLS(supportNLS);
|
||||
|
||||
// TDQ-12299: transfer the OtherParameters to metadataConnection, because create impala connection use that
|
||||
// values
|
||||
@@ -1312,7 +1314,7 @@ public class MetadataConnectionUtils {
|
||||
return ExtractMetaDataUtils.getInstance().getConnection(metadataBean.getDbType(), metadataBean.getUrl(),
|
||||
metadataBean.getUsername(), metadataBean.getPassword(), metadataBean.getDatabase(), metadataBean.getSchema(),
|
||||
metadataBean.getDriverClass(), metadataBean.getDriverJarPath(), metadataBean.getDbVersionString(),
|
||||
metadataBean.getAdditionalParams());
|
||||
metadataBean.getAdditionalParams(), metadataBean.isSupportNLS());
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -80,6 +80,7 @@ public class DatabaseConnectionItemProvider extends ConnectionItemProvider imple
|
||||
addCdcTypeModePropertyDescriptor(object);
|
||||
addSQLModePropertyDescriptor(object);
|
||||
addUiSchemaPropertyDescriptor(object);
|
||||
addSupportNLSPropertyDescriptor(object);
|
||||
}
|
||||
return itemPropertyDescriptors;
|
||||
}
|
||||
@@ -468,6 +469,22 @@ public class DatabaseConnectionItemProvider extends ConnectionItemProvider imple
|
||||
false, ItemPropertyDescriptor.GENERIC_VALUE_IMAGE, null, null));
|
||||
}
|
||||
|
||||
/**
|
||||
* This adds a property descriptor for the Support NLS feature.
|
||||
* <!-- begin-user-doc -->
|
||||
* <!-- end-user-doc -->
|
||||
* @generated
|
||||
*/
|
||||
protected void addSupportNLSPropertyDescriptor(Object object) {
|
||||
itemPropertyDescriptors
|
||||
.add(createItemPropertyDescriptor(((ComposeableAdapterFactory) adapterFactory).getRootAdapterFactory(),
|
||||
getResourceLocator(), getString("_UI_DatabaseConnection_supportNLS_feature"),
|
||||
getString("_UI_PropertyDescriptor_description", "_UI_DatabaseConnection_supportNLS_feature",
|
||||
"_UI_DatabaseConnection_type"),
|
||||
ConnectionPackage.Literals.DATABASE_CONNECTION__SUPPORT_NLS, true, false, false,
|
||||
ItemPropertyDescriptor.BOOLEAN_VALUE_IMAGE, null, null));
|
||||
}
|
||||
|
||||
/**
|
||||
* This specifies how to implement {@link #getChildren} and is used to deduce an appropriate feature for an
|
||||
* {@link org.eclipse.emf.edit.command.AddCommand}, {@link org.eclipse.emf.edit.command.RemoveCommand} or
|
||||
@@ -558,6 +575,7 @@ public class DatabaseConnectionItemProvider extends ConnectionItemProvider imple
|
||||
case ConnectionPackage.DATABASE_CONNECTION__CDC_TYPE_MODE:
|
||||
case ConnectionPackage.DATABASE_CONNECTION__SQL_MODE:
|
||||
case ConnectionPackage.DATABASE_CONNECTION__UI_SCHEMA:
|
||||
case ConnectionPackage.DATABASE_CONNECTION__SUPPORT_NLS:
|
||||
fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), false, true));
|
||||
return;
|
||||
case ConnectionPackage.DATABASE_CONNECTION__CDC_CONNS:
|
||||
|
||||
@@ -348,6 +348,8 @@
|
||||
<eStructuralFeatures xsi:type="ecore:EAttribute" name="UiSchema" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
|
||||
<eStructuralFeatures xsi:type="ecore:EReference" name="parameters" upperBound="-1"
|
||||
eType="#//AdditionalProperties" containment="true"/>
|
||||
<eStructuralFeatures xsi:type="ecore:EAttribute" name="supportNLS" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"
|
||||
defaultValueLiteral="false" unsettable="true"/>
|
||||
</eClassifiers>
|
||||
<eClassifiers xsi:type="ecore:EClass" name="SAPConnection" eSuperTypes="#//Connection">
|
||||
<eStructuralFeatures xsi:type="ecore:EAttribute" name="Host" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
|
||||
|
||||
@@ -187,6 +187,7 @@
|
||||
<genFeatures createChild="false" ecoreFeature="ecore:EAttribute metadata.ecore#//DatabaseConnection/SQLMode"/>
|
||||
<genFeatures createChild="false" ecoreFeature="ecore:EAttribute metadata.ecore#//DatabaseConnection/UiSchema"/>
|
||||
<genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference metadata.ecore#//DatabaseConnection/parameters"/>
|
||||
<genFeatures createChild="false" ecoreFeature="ecore:EAttribute metadata.ecore#//DatabaseConnection/supportNLS"/>
|
||||
</genClasses>
|
||||
<genClasses ecoreClass="metadata.ecore#//SAPConnection">
|
||||
<genFeatures createChild="false" ecoreFeature="ecore:EAttribute metadata.ecore#//SAPConnection/Host"/>
|
||||
|
||||
@@ -5238,6 +5238,15 @@ public interface ConnectionPackage extends EPackage {
|
||||
*/
|
||||
int DATABASE_CONNECTION__PARAMETERS = CONNECTION_FEATURE_COUNT + 25;
|
||||
|
||||
/**
|
||||
* The feature id for the '<em><b>Support NLS</b></em>' attribute.
|
||||
* <!-- begin-user-doc -->
|
||||
* <!-- end-user-doc -->
|
||||
* @generated
|
||||
* @ordered
|
||||
*/
|
||||
int DATABASE_CONNECTION__SUPPORT_NLS = CONNECTION_FEATURE_COUNT + 26;
|
||||
|
||||
/**
|
||||
* The number of structural features of the '<em>Database Connection</em>' class.
|
||||
* <!-- begin-user-doc --> <!--
|
||||
@@ -5245,7 +5254,7 @@ public interface ConnectionPackage extends EPackage {
|
||||
* @generated
|
||||
* @ordered
|
||||
*/
|
||||
int DATABASE_CONNECTION_FEATURE_COUNT = CONNECTION_FEATURE_COUNT + 26;
|
||||
int DATABASE_CONNECTION_FEATURE_COUNT = CONNECTION_FEATURE_COUNT + 27;
|
||||
|
||||
/**
|
||||
* The meta object id for the '{@link org.talend.core.model.metadata.builder.connection.impl.SAPConnectionImpl <em>SAP Connection</em>}' class.
|
||||
@@ -21887,6 +21896,17 @@ public interface ConnectionPackage extends EPackage {
|
||||
*/
|
||||
EReference getDatabaseConnection_Parameters();
|
||||
|
||||
/**
|
||||
* Returns the meta object for the attribute '{@link org.talend.core.model.metadata.builder.connection.DatabaseConnection#isSupportNLS <em>Support NLS</em>}'.
|
||||
* <!-- begin-user-doc -->
|
||||
* <!-- end-user-doc -->
|
||||
* @return the meta object for the attribute '<em>Support NLS</em>'.
|
||||
* @see org.talend.core.model.metadata.builder.connection.DatabaseConnection#isSupportNLS()
|
||||
* @see #getDatabaseConnection()
|
||||
* @generated
|
||||
*/
|
||||
EAttribute getDatabaseConnection_SupportNLS();
|
||||
|
||||
/**
|
||||
* Returns the meta object for class '{@link org.talend.core.model.metadata.builder.connection.SAPConnection <em>SAP Connection</em>}'.
|
||||
* <!-- begin-user-doc --> <!-- end-user-doc -->
|
||||
@@ -26439,6 +26459,14 @@ public interface ConnectionPackage extends EPackage {
|
||||
*/
|
||||
EReference DATABASE_CONNECTION__PARAMETERS = eINSTANCE.getDatabaseConnection_Parameters();
|
||||
|
||||
/**
|
||||
* The meta object literal for the '<em><b>Support NLS</b></em>' attribute feature.
|
||||
* <!-- begin-user-doc -->
|
||||
* <!-- end-user-doc -->
|
||||
* @generated
|
||||
*/
|
||||
EAttribute DATABASE_CONNECTION__SUPPORT_NLS = eINSTANCE.getDatabaseConnection_SupportNLS();
|
||||
|
||||
/**
|
||||
* The meta object literal for the '{@link org.talend.core.model.metadata.builder.connection.impl.SAPConnectionImpl <em>SAP Connection</em>}' class.
|
||||
* <!-- begin-user-doc --> <!-- end-user-doc -->
|
||||
|
||||
@@ -755,4 +755,54 @@ public interface DatabaseConnection extends Connection {
|
||||
*/
|
||||
EMap<String, String> getParameters();
|
||||
|
||||
/**
|
||||
* Returns the value of the '<em><b>Support NLS</b></em>' attribute.
|
||||
* The default value is <code>"false"</code>.
|
||||
* <!-- begin-user-doc -->
|
||||
* <!-- end-user-doc -->
|
||||
* @return the value of the '<em>Support NLS</em>' attribute.
|
||||
* @see #isSetSupportNLS()
|
||||
* @see #unsetSupportNLS()
|
||||
* @see #setSupportNLS(boolean)
|
||||
* @see org.talend.core.model.metadata.builder.connection.ConnectionPackage#getDatabaseConnection_SupportNLS()
|
||||
* @model default="false" unsettable="true"
|
||||
* @generated
|
||||
*/
|
||||
boolean isSupportNLS();
|
||||
|
||||
/**
|
||||
* Sets the value of the '{@link org.talend.core.model.metadata.builder.connection.DatabaseConnection#isSupportNLS <em>Support NLS</em>}' attribute.
|
||||
* <!-- begin-user-doc -->
|
||||
* <!-- end-user-doc -->
|
||||
* @param value the new value of the '<em>Support NLS</em>' attribute.
|
||||
* @see #isSetSupportNLS()
|
||||
* @see #unsetSupportNLS()
|
||||
* @see #isSupportNLS()
|
||||
* @generated
|
||||
*/
|
||||
void setSupportNLS(boolean value);
|
||||
|
||||
/**
|
||||
* Unsets the value of the '{@link org.talend.core.model.metadata.builder.connection.DatabaseConnection#isSupportNLS <em>Support NLS</em>}' attribute.
|
||||
* <!-- begin-user-doc -->
|
||||
* <!-- end-user-doc -->
|
||||
* @see #isSetSupportNLS()
|
||||
* @see #isSupportNLS()
|
||||
* @see #setSupportNLS(boolean)
|
||||
* @generated
|
||||
*/
|
||||
void unsetSupportNLS();
|
||||
|
||||
/**
|
||||
* Returns whether the value of the '{@link org.talend.core.model.metadata.builder.connection.DatabaseConnection#isSupportNLS <em>Support NLS</em>}' attribute is set.
|
||||
* <!-- begin-user-doc -->
|
||||
* <!-- end-user-doc -->
|
||||
* @return whether the value of the '<em>Support NLS</em>' attribute is set.
|
||||
* @see #unsetSupportNLS()
|
||||
* @see #isSupportNLS()
|
||||
* @see #setSupportNLS(boolean)
|
||||
* @generated
|
||||
*/
|
||||
boolean isSetSupportNLS();
|
||||
|
||||
} // DatabaseConnection
|
||||
|
||||
@@ -1562,6 +1562,15 @@ public class ConnectionPackageImpl extends EPackageImpl implements ConnectionPac
|
||||
return (EReference) databaseConnectionEClass.getEStructuralFeatures().get(25);
|
||||
}
|
||||
|
||||
/**
|
||||
* <!-- begin-user-doc -->
|
||||
* <!-- end-user-doc -->
|
||||
* @generated
|
||||
*/
|
||||
public EAttribute getDatabaseConnection_SupportNLS() {
|
||||
return (EAttribute) databaseConnectionEClass.getEStructuralFeatures().get(26);
|
||||
}
|
||||
|
||||
/**
|
||||
* <!-- begin-user-doc --> <!-- end-user-doc -->
|
||||
* @generated
|
||||
@@ -4516,6 +4525,7 @@ public class ConnectionPackageImpl extends EPackageImpl implements ConnectionPac
|
||||
createEAttribute(databaseConnectionEClass, DATABASE_CONNECTION__SQL_MODE);
|
||||
createEAttribute(databaseConnectionEClass, DATABASE_CONNECTION__UI_SCHEMA);
|
||||
createEReference(databaseConnectionEClass, DATABASE_CONNECTION__PARAMETERS);
|
||||
createEAttribute(databaseConnectionEClass, DATABASE_CONNECTION__SUPPORT_NLS);
|
||||
|
||||
sapConnectionEClass = createEClass(SAP_CONNECTION);
|
||||
createEAttribute(sapConnectionEClass, SAP_CONNECTION__HOST);
|
||||
@@ -5294,6 +5304,9 @@ public class ConnectionPackageImpl extends EPackageImpl implements ConnectionPac
|
||||
initEReference(getDatabaseConnection_Parameters(), this.getAdditionalProperties(), null, "parameters", null, 0, -1,
|
||||
DatabaseConnection.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, IS_RESOLVE_PROXIES,
|
||||
!IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
|
||||
initEAttribute(getDatabaseConnection_SupportNLS(), ecorePackage.getEBoolean(), "supportNLS", "false", 0, 1,
|
||||
DatabaseConnection.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_UNSETTABLE, !IS_ID, IS_UNIQUE,
|
||||
!IS_DERIVED, IS_ORDERED);
|
||||
|
||||
initEClass(sapConnectionEClass, SAPConnection.class, "SAPConnection", !IS_ABSTRACT, !IS_INTERFACE,
|
||||
IS_GENERATED_INSTANCE_CLASS);
|
||||
|
||||
@@ -51,6 +51,7 @@ import org.talend.core.model.metadata.builder.connection.DatabaseConnection;
|
||||
* <li>{@link org.talend.core.model.metadata.builder.connection.impl.DatabaseConnectionImpl#isSQLMode <em>SQL Mode</em>}</li>
|
||||
* <li>{@link org.talend.core.model.metadata.builder.connection.impl.DatabaseConnectionImpl#getUiSchema <em>Ui Schema</em>}</li>
|
||||
* <li>{@link org.talend.core.model.metadata.builder.connection.impl.DatabaseConnectionImpl#getParameters <em>Parameters</em>}</li>
|
||||
* <li>{@link org.talend.core.model.metadata.builder.connection.impl.DatabaseConnectionImpl#isSupportNLS <em>Support NLS</em>}</li>
|
||||
* </ul>
|
||||
*
|
||||
* @generated
|
||||
@@ -563,6 +564,35 @@ public class DatabaseConnectionImpl extends ConnectionImpl implements DatabaseCo
|
||||
*/
|
||||
protected EMap<String, String> parameters;
|
||||
|
||||
/**
|
||||
* The default value of the '{@link #isSupportNLS() <em>Support NLS</em>}' attribute.
|
||||
* <!-- begin-user-doc -->
|
||||
* <!-- end-user-doc -->
|
||||
* @see #isSupportNLS()
|
||||
* @generated
|
||||
* @ordered
|
||||
*/
|
||||
protected static final boolean SUPPORT_NLS_EDEFAULT = false;
|
||||
|
||||
/**
|
||||
* The cached value of the '{@link #isSupportNLS() <em>Support NLS</em>}' attribute.
|
||||
* <!-- begin-user-doc -->
|
||||
* <!-- end-user-doc -->
|
||||
* @see #isSupportNLS()
|
||||
* @generated
|
||||
* @ordered
|
||||
*/
|
||||
protected boolean supportNLS = SUPPORT_NLS_EDEFAULT;
|
||||
|
||||
/**
|
||||
* This is true if the Support NLS attribute has been set.
|
||||
* <!-- begin-user-doc -->
|
||||
* <!-- end-user-doc -->
|
||||
* @generated
|
||||
* @ordered
|
||||
*/
|
||||
protected boolean supportNLSESet = true;
|
||||
|
||||
/**
|
||||
* <!-- begin-user-doc --> <!-- end-user-doc -->
|
||||
* @generated
|
||||
@@ -1173,6 +1203,54 @@ public class DatabaseConnectionImpl extends ConnectionImpl implements DatabaseCo
|
||||
return parameters;
|
||||
}
|
||||
|
||||
/**
|
||||
* <!-- begin-user-doc -->
|
||||
* <!-- end-user-doc -->
|
||||
* @generated
|
||||
*/
|
||||
public boolean isSupportNLS() {
|
||||
return supportNLS;
|
||||
}
|
||||
|
||||
/**
|
||||
* <!-- begin-user-doc -->
|
||||
* <!-- end-user-doc -->
|
||||
* @generated
|
||||
*/
|
||||
public void setSupportNLS(boolean newSupportNLS) {
|
||||
boolean oldSupportNLS = supportNLS;
|
||||
supportNLS = newSupportNLS;
|
||||
boolean oldSupportNLSESet = supportNLSESet;
|
||||
supportNLSESet = true;
|
||||
if (eNotificationRequired())
|
||||
eNotify(new ENotificationImpl(this, Notification.SET, ConnectionPackage.DATABASE_CONNECTION__SUPPORT_NLS,
|
||||
oldSupportNLS, supportNLS, !oldSupportNLSESet));
|
||||
}
|
||||
|
||||
/**
|
||||
* <!-- begin-user-doc -->
|
||||
* <!-- end-user-doc -->
|
||||
* @generated
|
||||
*/
|
||||
public void unsetSupportNLS() {
|
||||
boolean oldSupportNLS = supportNLS;
|
||||
boolean oldSupportNLSESet = supportNLSESet;
|
||||
supportNLS = SUPPORT_NLS_EDEFAULT;
|
||||
supportNLSESet = false;
|
||||
if (eNotificationRequired())
|
||||
eNotify(new ENotificationImpl(this, Notification.UNSET, ConnectionPackage.DATABASE_CONNECTION__SUPPORT_NLS,
|
||||
oldSupportNLS, SUPPORT_NLS_EDEFAULT, oldSupportNLSESet));
|
||||
}
|
||||
|
||||
/**
|
||||
* <!-- begin-user-doc -->
|
||||
* <!-- end-user-doc -->
|
||||
* @generated
|
||||
*/
|
||||
public boolean isSetSupportNLS() {
|
||||
return supportNLSESet;
|
||||
}
|
||||
|
||||
/**
|
||||
* <!-- begin-user-doc --> <!-- end-user-doc -->
|
||||
* @generated
|
||||
@@ -1267,6 +1345,8 @@ public class DatabaseConnectionImpl extends ConnectionImpl implements DatabaseCo
|
||||
return getParameters();
|
||||
else
|
||||
return getParameters().map();
|
||||
case ConnectionPackage.DATABASE_CONNECTION__SUPPORT_NLS:
|
||||
return isSupportNLS();
|
||||
}
|
||||
return super.eGet(featureID, resolve, coreType);
|
||||
}
|
||||
@@ -1335,6 +1415,8 @@ public class DatabaseConnectionImpl extends ConnectionImpl implements DatabaseCo
|
||||
return getParameters();
|
||||
else
|
||||
return getParameters().map();
|
||||
case ConnectionPackage.DATABASE_CONNECTION__SUPPORT_NLS:
|
||||
return isSupportNLS();
|
||||
}
|
||||
return super.eGet(featureID, resolve, coreType);
|
||||
}
|
||||
@@ -1424,6 +1506,9 @@ public class DatabaseConnectionImpl extends ConnectionImpl implements DatabaseCo
|
||||
case ConnectionPackage.DATABASE_CONNECTION__PARAMETERS:
|
||||
((EStructuralFeature.Setting) getParameters()).set(newValue);
|
||||
return;
|
||||
case ConnectionPackage.DATABASE_CONNECTION__SUPPORT_NLS:
|
||||
setSupportNLS((Boolean) newValue);
|
||||
return;
|
||||
}
|
||||
super.eSet(featureID, newValue);
|
||||
}
|
||||
@@ -1513,6 +1598,9 @@ public class DatabaseConnectionImpl extends ConnectionImpl implements DatabaseCo
|
||||
case ConnectionPackage.DATABASE_CONNECTION__PARAMETERS:
|
||||
getParameters().clear();
|
||||
return;
|
||||
case ConnectionPackage.DATABASE_CONNECTION__SUPPORT_NLS:
|
||||
unsetSupportNLS();
|
||||
return;
|
||||
}
|
||||
super.eUnset(featureID);
|
||||
}
|
||||
@@ -1578,6 +1666,8 @@ public class DatabaseConnectionImpl extends ConnectionImpl implements DatabaseCo
|
||||
return UI_SCHEMA_EDEFAULT == null ? uiSchema != null : !UI_SCHEMA_EDEFAULT.equals(uiSchema);
|
||||
case ConnectionPackage.DATABASE_CONNECTION__PARAMETERS:
|
||||
return parameters != null && !parameters.isEmpty();
|
||||
case ConnectionPackage.DATABASE_CONNECTION__SUPPORT_NLS:
|
||||
return isSetSupportNLS();
|
||||
}
|
||||
return super.eIsSet(featureID);
|
||||
}
|
||||
@@ -1643,6 +1733,11 @@ public class DatabaseConnectionImpl extends ConnectionImpl implements DatabaseCo
|
||||
result.append("<unset>");
|
||||
result.append(", UiSchema: ");
|
||||
result.append(uiSchema);
|
||||
result.append(", supportNLS: ");
|
||||
if (supportNLSESet)
|
||||
result.append(supportNLS);
|
||||
else
|
||||
result.append("<unset>");
|
||||
result.append(')');
|
||||
return result.toString();
|
||||
}
|
||||
|
||||
@@ -721,6 +721,10 @@ public class ImportItemsWizardPage extends WizardPage {
|
||||
|
||||
ImportDependencyRelationsHelper.getInstance().checkImportRelationDependency(checkedNodeList, toSelectSet,
|
||||
nodesBuilder.getAllImportItemNode());
|
||||
|
||||
|
||||
// to make doCheckStateChanged execute from ContainerCheckedTreeViewer.setCheckedElements(Object[])
|
||||
filteredCheckboxTree.getViewer().setCheckedElements(new Object[0]);
|
||||
filteredCheckboxTree.getViewer().setCheckedElements(toSelectSet.toArray());
|
||||
}
|
||||
|
||||
|
||||
@@ -23,6 +23,7 @@ import java.io.InputStream;
|
||||
import java.io.OutputStream;
|
||||
import java.net.URL;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
@@ -51,6 +52,8 @@ import org.eclipse.emf.ecore.impl.EObjectImpl;
|
||||
import org.eclipse.emf.ecore.resource.Resource;
|
||||
import org.eclipse.emf.ecore.resource.ResourceSet;
|
||||
import org.eclipse.emf.ecore.util.EcoreUtil;
|
||||
import org.eclipse.emf.ecore.xmi.XMLResource;
|
||||
import org.eclipse.emf.ecore.xmi.impl.XMLParserPoolImpl;
|
||||
import org.talend.commons.exception.ExceptionHandler;
|
||||
import org.talend.commons.exception.PersistenceException;
|
||||
import org.talend.commons.runtime.model.repository.ERepositoryStatus;
|
||||
@@ -1121,6 +1124,13 @@ public class ImportBasicHandler extends AbstractImportExecutableHandler {
|
||||
}
|
||||
stream = manager.getStream(itemPath, importItem);
|
||||
Resource resource = createResource(importItem, itemPath, byteArray);
|
||||
//TUP-36820:Add options for improving performance for deserialization (loading) of large XML resource
|
||||
Map optionMap = new HashMap();
|
||||
optionMap.put(XMLResource.OPTION_DEFER_ATTACHMENT, Boolean.TRUE);
|
||||
optionMap.put(XMLResource.OPTION_DEFER_IDREF_RESOLUTION, Boolean.TRUE);
|
||||
optionMap.put(XMLResource.OPTION_USE_PARSER_POOL, new XMLParserPoolImpl());
|
||||
optionMap.put(XMLResource.OPTION_USE_XML_NAME_TO_FEATURE_MAP, new HashMap());
|
||||
optionMap.put(XMLResource.OPTION_USE_DEPRECATED_METHODS, Boolean.FALSE);
|
||||
|
||||
if (byteArray) {
|
||||
// TDI-24612
|
||||
@@ -1133,16 +1143,16 @@ public class ImportBasicHandler extends AbstractImportExecutableHandler {
|
||||
baos.write(buf, 0, i);
|
||||
}
|
||||
ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());
|
||||
resource.load(bais, null);
|
||||
resource.load(bais, optionMap);
|
||||
} else {
|
||||
resource.load(stream, null);
|
||||
resource.load(stream, optionMap);
|
||||
}
|
||||
|
||||
for (ReferenceFileItem rfItem : (List<ReferenceFileItem>) item.getReferenceResources()) {
|
||||
itemPath = getReferenceItemPath(importItem.getPath(), rfItem);
|
||||
stream = manager.getStream(itemPath, importItem);
|
||||
Resource rfResource = createResource(importItem, itemPath, true);
|
||||
rfResource.load(stream, null);
|
||||
rfResource.load(stream, optionMap);
|
||||
}
|
||||
|
||||
Iterator<EObject> itRef = item.eCrossReferences().iterator();
|
||||
|
||||
@@ -132,11 +132,12 @@ public class ImportDependencyRelationsHelper {
|
||||
id = split[1];
|
||||
}
|
||||
}
|
||||
boolean isGlobalRoutine = RelationshipItemBuilder.ROUTINE_RELATION.equals(relation.getType());
|
||||
if (RelationshipItemBuilder.LATEST_VERSION.equals(relation.getVersion())) {
|
||||
relatedNode = getLatestVersionItemImportNode(id, projectLabel, allImportItemNodesList);
|
||||
relatedNode = getLatestVersionItemImportNode(id, projectLabel, allImportItemNodesList, isGlobalRoutine);
|
||||
} else {
|
||||
relatedNode = getItemImportNodeByIdVersion(id, projectLabel, relation.getVersion(),
|
||||
allImportItemNodesList);
|
||||
relatedNode = getItemImportNodeByIdVersion(id, relation.getVersion(), projectLabel,
|
||||
allImportItemNodesList, isGlobalRoutine);
|
||||
}
|
||||
if (relatedNode != null && !toSelectSet.contains(relatedNode)) {
|
||||
// avoid loop
|
||||
@@ -148,13 +149,14 @@ public class ImportDependencyRelationsHelper {
|
||||
}
|
||||
|
||||
public ItemImportNode getLatestVersionItemImportNode(String id, String projectTecLabel,
|
||||
List<ItemImportNode> allImportItemNodesList) {
|
||||
List<ItemImportNode> allImportItemNodesList, boolean isGlobalRoutine) {
|
||||
List<ItemImportNode> allItemImportNodesById = getItemImportNode(allImportItemNodesList, node -> {
|
||||
Property property = node.getItemRecord().getProperty();
|
||||
boolean projectFlag = true;
|
||||
if (StringUtils.isNotBlank(projectTecLabel)) {
|
||||
projectFlag = node.getProjectNode().getProject().getTechnicalLabel().equals(projectTecLabel);
|
||||
}
|
||||
return node.getItemRecord().getProperty().getId().equals(id) && projectFlag;
|
||||
return (isGlobalRoutine ? property.getLabel().equals(id) : property.getId().equals(id)) && projectFlag;
|
||||
});
|
||||
Optional<ItemImportNode> optional = allItemImportNodesById.stream().max((node1, node2) -> VersionUtils
|
||||
.compareTo(node1.getItemRecord().getProperty().getVersion(), node2.getItemRecord().getProperty().getVersion()));
|
||||
@@ -162,14 +164,15 @@ public class ImportDependencyRelationsHelper {
|
||||
}
|
||||
|
||||
public ItemImportNode getItemImportNodeByIdVersion(String id, String version, String projectTecLabel,
|
||||
List<ItemImportNode> allImportItemNodesList) {
|
||||
List<ItemImportNode> allImportItemNodesList, boolean isGlobalRoutine) {
|
||||
List<ItemImportNode> importNodeList = getItemImportNode(allImportItemNodesList, node -> {
|
||||
boolean projectFlag = true;
|
||||
if (StringUtils.isNotBlank(projectTecLabel)) {
|
||||
projectFlag = node.getProjectNode().getProject().getTechnicalLabel().equals(projectTecLabel);
|
||||
}
|
||||
Property property = node.getItemRecord().getProperty();
|
||||
return property.getId().equals(id) && property.getVersion().equals(version) && projectFlag;
|
||||
return (isGlobalRoutine ? property.getLabel().equals(id) : property.getId().equals(id))
|
||||
&& property.getVersion().equals(version) && projectFlag;
|
||||
});
|
||||
return importNodeList == null || importNodeList.isEmpty() ? null : importNodeList.get(0);
|
||||
}
|
||||
|
||||
@@ -1008,6 +1008,8 @@ DatabaseForm.hc.link.repository=Repository
|
||||
DatabaseForm.hc.link.title=Hadoop Cluster
|
||||
DatabaseForm.helpInfo.installDriverLink.url=https://document-link.us.cloud.talend.com/ts_ig_install-external-modules?version=73&lang=en&env=prd
|
||||
DatabaseForm.helpInfo.installDriverLink.label=How to install a driver
|
||||
DatabaseForm.supportnls=Support NLS
|
||||
DatabaseForm.supportnls.warntip=This setting takes effect only after restarting the Studio.
|
||||
DatabaseTableFilterForm.allSynonyms=All synonyms
|
||||
DatabaseTableFilterForm.edit=Edit...
|
||||
DatabaseTableFilterForm.editFilterName=Edit Filter Name
|
||||
|
||||
@@ -66,6 +66,7 @@ import org.eclipse.swt.widgets.Button;
|
||||
import org.eclipse.swt.widgets.Composite;
|
||||
import org.eclipse.swt.widgets.Event;
|
||||
import org.eclipse.swt.widgets.Group;
|
||||
import org.eclipse.swt.widgets.Label;
|
||||
import org.eclipse.swt.widgets.Link;
|
||||
import org.eclipse.swt.widgets.Listener;
|
||||
import org.eclipse.swt.widgets.Text;
|
||||
@@ -567,6 +568,8 @@ public class DatabaseForm extends AbstractForm {
|
||||
|
||||
private LabelledFileField dataprocPathToCredentialsForHiveTxt;
|
||||
|
||||
private Button isOracleSupportNLS;
|
||||
|
||||
/**
|
||||
* Constructor to use by a Wizard to create a new database connection.
|
||||
*
|
||||
@@ -684,6 +687,8 @@ public class DatabaseForm extends AbstractForm {
|
||||
if (getConnection().getDbVersionString() != null) {
|
||||
dbVersionCombo.setText(getConnection().getDbVersionString());
|
||||
}
|
||||
|
||||
isOracleSupportNLS.setSelection(getConnection().isSupportNLS());
|
||||
|
||||
fileField.setText(getConnection().getFileFieldName());
|
||||
directoryField.setText(getConnection().getDBRootPath());
|
||||
@@ -859,6 +864,7 @@ public class DatabaseForm extends AbstractForm {
|
||||
dbVersionCombo.setReadOnly(isReadOnly());
|
||||
datasourceText.setReadOnly(isReadOnly());
|
||||
additionParamText.setReadOnly(isReadOnly());
|
||||
isOracleSupportNLS.setEnabled(!isReadOnly());
|
||||
fileField.setReadOnly(isReadOnly());
|
||||
mappingFileText.setReadOnly(isReadOnly());
|
||||
mappingSelectButton.setEnabled(isReadOnly());
|
||||
@@ -1035,6 +1041,7 @@ public class DatabaseForm extends AbstractForm {
|
||||
additionParamText = new LabelledText(typeDbCompositeParent, Messages.getString("DatabaseForm.AddParams"), 2); //$NON-NLS-1$
|
||||
additionalJDBCSettingsText = new LabelledText(typeDbCompositeParent,
|
||||
Messages.getString("DatabaseForm.hive.additionalJDBCSettings"), 2); //$NON-NLS-1$
|
||||
createOracleUIForNLS(typeDbCompositeParent);
|
||||
|
||||
String[] extensions = { "*.*" }; //$NON-NLS-1$
|
||||
fileField = new LabelledFileField(typeDbCompositeParent, Messages.getString("DatabaseForm.mdbFile"), extensions); //$NON-NLS-1$
|
||||
@@ -1062,6 +1069,38 @@ public class DatabaseForm extends AbstractForm {
|
||||
createHivePropertiesFields(typeDbCompositeParent);
|
||||
}
|
||||
|
||||
private void createOracleUIForNLS(Composite parent) {
|
||||
supportNLSContainer = new Composite(parent, SWT.NONE);
|
||||
GridData containerLayoutData = new GridData();
|
||||
containerLayoutData.exclude = true;
|
||||
supportNLSContainer.setLayoutData(containerLayoutData);
|
||||
supportNLSContainer.setVisible(false);
|
||||
|
||||
GridLayout containerLayout = new GridLayout();
|
||||
containerLayout.numColumns = 2;
|
||||
containerLayout.marginWidth = 0;
|
||||
containerLayout.marginHeight = 0;
|
||||
containerLayout.horizontalSpacing = 0;
|
||||
containerLayout.makeColumnsEqualWidth = false;
|
||||
supportNLSContainer.setLayout(containerLayout);
|
||||
|
||||
isOracleSupportNLS = new Button(supportNLSContainer, SWT.CHECK);
|
||||
isOracleSupportNLS.setText(Messages.getString("DatabaseForm.supportnls"));//$NON-NLS-1$
|
||||
GridData oracleSupportNLSLayoutData = new GridData();
|
||||
isOracleSupportNLS.setLayoutData(oracleSupportNLSLayoutData);
|
||||
isOracleSupportNLS.addSelectionListener(new SelectionAdapter() {
|
||||
|
||||
@Override
|
||||
public void widgetSelected(SelectionEvent e) {
|
||||
getConnection().setSupportNLS(isOracleSupportNLS.getSelection());
|
||||
}
|
||||
});
|
||||
imageLabel = new Label(supportNLSContainer, SWT.NONE);
|
||||
imageLabel.setImage(ImageProvider.getImage(EImage.WARNING_ICON));
|
||||
imageLabel.setLayoutData(new GridData());
|
||||
imageLabel.setToolTipText(Messages.getString("DatabaseForm.supportnls.warntip"));
|
||||
}
|
||||
|
||||
private void createHiveDataprocField(Composite parent) {
|
||||
dataprocProjectIdForHiveTxt = new LabelledText(parent, Messages.getString("DatabaseForm.dataproc.projectId"), 2);//$NON-NLS-1$
|
||||
dataprocClusterIdForHiveTxt = new LabelledText(parent, Messages.getString("DatabaseForm.dataproc.clusterId"), 2); //$NON-NLS-1$
|
||||
@@ -4464,6 +4503,7 @@ public class DatabaseForm extends AbstractForm {
|
||||
enableDbVersion() ? versionStr : null, metadataconnection.getOtherParameters());
|
||||
|
||||
managerConnection.setDbRootPath(directoryField.getText());
|
||||
managerConnection.setSupportNLS(isOracleSupportNLS.getSelection());
|
||||
|
||||
}
|
||||
IPreferenceStore store = CoreUIPlugin.getDefault().getPreferenceStore();
|
||||
@@ -5071,6 +5111,10 @@ public class DatabaseForm extends AbstractForm {
|
||||
|
||||
getConnection().setDbVersionString(version.getVersionValue());
|
||||
|
||||
boolean supportNLSOracleVersion = oracleVersionEnable()
|
||||
&& isSupportNLSOracleVersion(dbVersionCombo.getText());
|
||||
showOracleSupportNLS(supportNLSOracleVersion, supportNLSOracleVersion);
|
||||
|
||||
}
|
||||
urlConnectionStringText.setText(getStringConnection());
|
||||
checkFieldsValue();
|
||||
@@ -6508,6 +6552,10 @@ public class DatabaseForm extends AbstractForm {
|
||||
|
||||
private static String DEFAULT_HIVE_METASTORE_PORT = "9083";
|
||||
|
||||
private Label imageLabel;
|
||||
|
||||
private Composite supportNLSContainer;
|
||||
|
||||
/**
|
||||
* SetEditable fields.
|
||||
*
|
||||
@@ -6665,6 +6713,7 @@ public class DatabaseForm extends AbstractForm {
|
||||
showIfHiveMetastore();
|
||||
showIfSupportEncryption();
|
||||
showIfAuthentication();
|
||||
showOracleSupportNLS(oracleVersionEnable() && isSupportNLSOracleVersion(dbVersionCombo.getText()), visible);
|
||||
hideHiveExecutionFields(!doSupportTez());
|
||||
|
||||
urlConnectionStringText.setEditable(!visible);
|
||||
@@ -6969,6 +7018,34 @@ public class DatabaseForm extends AbstractForm {
|
||||
compositeGroupDbSettings.layout();
|
||||
}
|
||||
|
||||
private void showOracleSupportNLS(boolean show, boolean editable) {
|
||||
GridData layoutData = (GridData) supportNLSContainer.getLayoutData();
|
||||
layoutData.exclude = !show;
|
||||
supportNLSContainer.setLayoutData(layoutData);
|
||||
supportNLSContainer.setVisible(show);
|
||||
imageLabel.setVisible(show);
|
||||
if(!show) {
|
||||
isOracleSupportNLS.setSelection(false);
|
||||
getConnection().setSupportNLS(false);
|
||||
} else {
|
||||
isOracleSupportNLS.setEnabled(editable);
|
||||
}
|
||||
supportNLSContainer.getParent().layout();
|
||||
}
|
||||
|
||||
private boolean isSupportNLSOracleVersion(String dbVersionString) {
|
||||
if (!EDatabaseVersion4Drivers.ORACLE_8.getVersionDisplay().equals(dbVersionString)
|
||||
&& !EDatabaseVersion4Drivers.ORACLE_9.getVersionDisplay().equals(dbVersionString)
|
||||
&& !EDatabaseVersion4Drivers.ORACLE_10.getVersionDisplay().equals(dbVersionString)
|
||||
&& !EDatabaseVersion4Drivers.ORACLE_11.getVersionDisplay().equals(dbVersionString)
|
||||
&& !EDatabaseVersion4Drivers.ORACLE_12.getVersionDisplay().equals(dbVersionString)
|
||||
) {
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
private void collectContextParams() {
|
||||
collectHiveContextParams();
|
||||
collectHBaseContextParams();
|
||||
@@ -7365,6 +7442,7 @@ public class DatabaseForm extends AbstractForm {
|
||||
|
||||
jDBCschemaText.setEditable(!isContextMode());
|
||||
|
||||
isOracleSupportNLS.setEnabled(!isContextMode());
|
||||
generalMappingFileText.setEditable(!isContextMode());
|
||||
mappingFileText.setEditable(!isContextMode());
|
||||
if (isContextMode()) {
|
||||
|
||||
@@ -60,7 +60,7 @@
|
||||
<dependency>
|
||||
<groupId>org.apache.commons</groupId>
|
||||
<artifactId>commons-text</artifactId>
|
||||
<version>1.1</version>
|
||||
<version>1.10.0</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.slf4j</groupId>
|
||||
|
||||
@@ -55,7 +55,7 @@
|
||||
<dependency>
|
||||
<groupId>org.apache.commons</groupId>
|
||||
<artifactId>commons-text</artifactId>
|
||||
<version>1.1</version>
|
||||
<version>1.10.0</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.apache.httpcomponents</groupId>
|
||||
|
||||
@@ -1,19 +1,182 @@
|
||||
package org.talend.core.model.metadata;
|
||||
|
||||
import static org.junit.Assert.*;
|
||||
import static org.junit.Assert.assertEquals;
|
||||
import static org.junit.Assert.assertFalse;
|
||||
import static org.junit.Assert.assertTrue;
|
||||
|
||||
import java.io.ByteArrayInputStream;
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.net.URL;
|
||||
import java.nio.file.Files;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.eclipse.core.resources.IFile;
|
||||
import org.eclipse.core.resources.IFolder;
|
||||
import org.eclipse.core.resources.IProject;
|
||||
import org.eclipse.core.resources.IResource;
|
||||
import org.eclipse.core.runtime.CoreException;
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
import org.talend.commons.exception.SystemException;
|
||||
import org.talend.commons.utils.generation.JavaUtils;
|
||||
import org.talend.commons.utils.workbench.resources.ResourceUtils;
|
||||
import org.talend.core.runtime.process.ITalendProcessJavaProject;
|
||||
import org.talend.designer.runprocess.IRunProcessService;
|
||||
import org.talend.repository.ProjectManager;
|
||||
import org.talend.repository.model.RepositoryConstants;
|
||||
|
||||
public class MetadataTalendTypeTest {
|
||||
|
||||
private ITalendProcessJavaProject talendProcessJavaProject;
|
||||
|
||||
@Before
|
||||
public void setUp() throws Exception {
|
||||
if (IRunProcessService.get() != null) {
|
||||
IRunProcessService runProcessService = IRunProcessService.get();
|
||||
talendProcessJavaProject = runProcessService.getTempJavaProject();
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGetProjectForderURLOfMappingsFile() throws SystemException {
|
||||
URL url = MetadataTalendType.getProjectForderURLOfMappingsFile();
|
||||
URL url = MetadataTalendType.getProjectFolderURLOfMappingsFile();
|
||||
String projectLabel = ProjectManager.getInstance().getCurrentProject().getTechnicalLabel();
|
||||
assertTrue(url.getFile().endsWith(projectLabel + "/.settings/mappings/"));
|
||||
assertTrue(StringUtils.removeEnd(url.getFile(), "/").endsWith(projectLabel + "/.settings/mappings"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testRestoreMappingFiles() throws Exception {
|
||||
IFolder projectMappingFolder = ResourceUtils.getProject(ProjectManager.getInstance().getCurrentProject())
|
||||
.getFolder(MetadataTalendType.PROJECT_MAPPING_FOLDER);
|
||||
if (!projectMappingFolder.exists()) {
|
||||
projectMappingFolder.create(true, true, null);
|
||||
}
|
||||
|
||||
MetadataTalendType.restoreMappingFiles();
|
||||
IFile keep = null;
|
||||
IFile restore = null;
|
||||
IFile externalKeep = null;
|
||||
try {
|
||||
keep = projectMappingFolder.getFile("mapping_Access.xml");
|
||||
if (keep.exists()) {
|
||||
keep.delete(true, null);
|
||||
}
|
||||
keep.create(new ByteArrayInputStream("test1".getBytes()), true, null);
|
||||
String keepSha1_before = MetadataTalendType.getSha1OfFile(keep.getLocation().toFile());
|
||||
|
||||
restore = projectMappingFolder.getFile("mapping_Firebird.xml");
|
||||
if (restore.exists()) {
|
||||
restore.delete(true, null);
|
||||
}
|
||||
restore.create(new ByteArrayInputStream(Files.readAllBytes(
|
||||
new File(MetadataTalendType.getSystemFolderURLOfMappingsFile().getFile(), restore.getName()).toPath())), true,
|
||||
null);
|
||||
|
||||
externalKeep = projectMappingFolder.getFile("mapping_ExternalTest.xml");
|
||||
if (externalKeep.exists()) {
|
||||
externalKeep.delete(true, null);
|
||||
}
|
||||
externalKeep.create(new ByteArrayInputStream("test2".getBytes()), true, null);
|
||||
String externalKeepSha1_before = MetadataTalendType.getSha1OfFile(externalKeep.getLocation().toFile());
|
||||
|
||||
MetadataTalendType.restoreMappingFiles();
|
||||
|
||||
// kept
|
||||
assertTrue(keep.getLocation().toFile().exists());
|
||||
String keepSha1_after = MetadataTalendType.getSha1OfFile(keep.getLocation().toFile());
|
||||
assertEquals(keepSha1_before, keepSha1_after);
|
||||
|
||||
// restored(migration)
|
||||
assertFalse(restore.getLocation().toFile().exists());
|
||||
|
||||
// not impacted
|
||||
assertTrue(externalKeep.getLocation().toFile().exists());
|
||||
String externalKeepSha1_after = MetadataTalendType.getSha1OfFile(externalKeep.getLocation().toFile());
|
||||
assertEquals(externalKeepSha1_before, externalKeepSha1_after);
|
||||
} finally {
|
||||
if (keep != null && keep.getLocation().toFile().exists()) {
|
||||
keep.getLocation().toFile().delete();
|
||||
}
|
||||
if (restore != null && restore.getLocation().toFile().exists()) {
|
||||
restore.getLocation().toFile().delete();
|
||||
}
|
||||
if (externalKeep != null && externalKeep.getLocation().toFile().exists()) {
|
||||
externalKeep.getLocation().toFile().delete();
|
||||
}
|
||||
projectMappingFolder.refreshLocal(IResource.DEPTH_ONE, null);
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testSyncMappingFilesToTempMappingFolder() throws Exception {
|
||||
boolean renamed = false;
|
||||
List<File> workingMappingFiles = MetadataTalendType.getWorkingMappingFiles();
|
||||
IProject project = ResourceUtils.getProject(ProjectManager.getInstance().getCurrentProject());
|
||||
IFolder tmpMappingFolder = ResourceUtils.getFolder(project,
|
||||
RepositoryConstants.TEMP_DIRECTORY + "/" + MetadataTalendType.INTERNAL_MAPPINGS_FOLDER, false);
|
||||
|
||||
MetadataTalendType.getProjectTempMappingFolder();
|
||||
|
||||
modifyTargetFolder(tmpMappingFolder, renamed);
|
||||
|
||||
MetadataTalendType.getProjectTempMappingFolder();
|
||||
|
||||
List<File> tmpMappingFiles = Arrays.asList(tmpMappingFolder.getLocation().toFile()
|
||||
.listFiles(f -> f.getName().matches(MetadataTalendType.MAPPING_FILE_PATTERN)));
|
||||
validateConsistence(workingMappingFiles, tmpMappingFiles, renamed);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testSyncMappingFilesToJobProjectMappingFolder() throws Exception {
|
||||
boolean renamed = true;
|
||||
|
||||
List<File> workingMappingFiles = MetadataTalendType.getWorkingMappingFiles();
|
||||
IFolder jobProjectMappingFolder = talendProcessJavaProject.getResourceSubFolder(null, JavaUtils.JAVA_XML_MAPPING);
|
||||
|
||||
MetadataTalendType.syncMappingFiles(jobProjectMappingFolder.getLocation().toFile(), renamed);
|
||||
|
||||
modifyTargetFolder(jobProjectMappingFolder, renamed);
|
||||
|
||||
MetadataTalendType.syncMappingFiles(jobProjectMappingFolder.getLocation().toFile(), renamed);
|
||||
|
||||
List<File> jobMappingFiles = Arrays.asList(jobProjectMappingFolder.getLocation().toFile()
|
||||
.listFiles(f -> f.getName().matches(MetadataTalendType.MAPPING_FILE_PATTERN)));
|
||||
validateConsistence(workingMappingFiles, jobMappingFiles, renamed);
|
||||
}
|
||||
|
||||
private void modifyTargetFolder(IFolder folder, boolean renamed) throws CoreException {
|
||||
folder.refreshLocal(IResource.DEPTH_ONE, null);
|
||||
String fileName1 = "mapping_Access.xml";
|
||||
IFile file1 = folder.getFile(renamed ? fileName1.toLowerCase() : fileName1);
|
||||
assertTrue(file1.getLocation().toFile().exists());
|
||||
file1.delete(true, null);
|
||||
String fileName2 = "mapping_AS400.xml";
|
||||
IFile file2 = folder.getFile(renamed ? fileName2.toLowerCase() : fileName2);
|
||||
assertTrue(file2.getLocation().toFile().exists());
|
||||
String content = "test modification";
|
||||
InputStream in = new ByteArrayInputStream(content.getBytes());
|
||||
file2.setContents(in, true, false, null);
|
||||
}
|
||||
|
||||
private void validateConsistence(List<File> sources, List<File> targets, boolean renamed) throws IOException {
|
||||
assertEquals(sources.size(), targets.size());
|
||||
for (File source : sources) {
|
||||
boolean isFound = false;
|
||||
String sourceSha1 = MetadataTalendType.getSha1OfFile(source);
|
||||
String sourceFileName = MetadataTalendType.getTargetName(source, renamed);
|
||||
for (File target : targets) {
|
||||
if (target.getName().equals(sourceFileName)) {
|
||||
isFound = true;
|
||||
String targetSha1 = MetadataTalendType.getSha1OfFile(target);
|
||||
assertEquals(sourceSha1, targetSha1);
|
||||
}
|
||||
}
|
||||
assertTrue(isFound);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -1,12 +1,9 @@
|
||||
package org.talend.core;
|
||||
|
||||
import static org.junit.Assert.assertEquals;
|
||||
import static org.junit.Assert.assertTrue;
|
||||
|
||||
import java.io.BufferedReader;
|
||||
import java.io.ByteArrayInputStream;
|
||||
import java.io.File;
|
||||
import java.io.FilenameFilter;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.io.InputStreamReader;
|
||||
@@ -15,38 +12,16 @@ import org.eclipse.core.resources.IFile;
|
||||
import org.eclipse.core.resources.IFolder;
|
||||
import org.eclipse.core.runtime.CoreException;
|
||||
import org.junit.Before;
|
||||
import org.junit.FixMethodOrder;
|
||||
import org.junit.Test;
|
||||
import org.junit.runners.MethodSorters;
|
||||
import org.talend.commons.runtime.xml.XmlUtil;
|
||||
import org.talend.commons.utils.generation.JavaUtils;
|
||||
import org.talend.commons.utils.workbench.resources.ResourceUtils;
|
||||
import org.talend.core.model.metadata.MetadataTalendType;
|
||||
import org.talend.core.runtime.process.ITalendProcessJavaProject;
|
||||
import org.talend.designer.runprocess.IRunProcessService;
|
||||
import org.talend.repository.ProjectManager;
|
||||
import org.talend.utils.io.FilesUtils;
|
||||
|
||||
@FixMethodOrder(MethodSorters.NAME_ASCENDING)
|
||||
public class CoreServiceTest {
|
||||
|
||||
private boolean withFilter = false;
|
||||
|
||||
private CoreService service;
|
||||
|
||||
private ITalendProcessJavaProject talendProcessJavaProject;
|
||||
|
||||
private FilenameFilter filter = new FilenameFilter() {
|
||||
|
||||
@Override
|
||||
public boolean accept(File dir, String name) {
|
||||
if (XmlUtil.isXMLFile(name)) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
};
|
||||
|
||||
@Before
|
||||
public void setUp() throws Exception {
|
||||
service = new CoreService();
|
||||
@@ -54,45 +29,11 @@ public class CoreServiceTest {
|
||||
IRunProcessService runProcessService = (IRunProcessService) GlobalServiceRegister.getDefault()
|
||||
.getService(IRunProcessService.class);
|
||||
talendProcessJavaProject = runProcessService.getTempJavaProject();
|
||||
//TODO create a temp job code project
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testASyncMappingsFileFromSystemToProject() throws Exception {
|
||||
withFilter = false;
|
||||
|
||||
String sysMappingFolder = MetadataTalendType.getSystemForderURLOfMappingsFile().getPath();
|
||||
IFolder projectMappingFolder = ResourceUtils.getProject(ProjectManager.getInstance().getCurrentProject())
|
||||
.getFolder(MetadataTalendType.PROJECT_MAPPING_FOLDER);
|
||||
|
||||
service.syncMappingsFileFromSystemToProject();
|
||||
|
||||
modifyTargetFolder(projectMappingFolder);
|
||||
|
||||
service.syncMappingsFileFromSystemToProject();
|
||||
|
||||
validateConsistence(sysMappingFolder, projectMappingFolder.getLocation().toPortableString());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testBSynchronizeMapptingXML() throws Exception {
|
||||
withFilter = true;
|
||||
|
||||
IFolder resourceMappingFolder = talendProcessJavaProject.getResourceSubFolder(null, JavaUtils.JAVA_XML_MAPPING);
|
||||
String projectMappingFolder = MetadataTalendType.getProjectForderURLOfMappingsFile().getPath();
|
||||
|
||||
service.synchronizeMapptingXML(talendProcessJavaProject);
|
||||
|
||||
modifyTargetFolder(resourceMappingFolder);
|
||||
|
||||
service.synchronizeMapptingXML(talendProcessJavaProject);
|
||||
|
||||
validateConsistence(projectMappingFolder, resourceMappingFolder.getLocation().toPortableString());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testCSyncLog4jSettings() throws CoreException, IOException {
|
||||
public void testSyncLog4jSettings() throws CoreException, IOException {
|
||||
IRunProcessService runProcessService = null;
|
||||
if (GlobalServiceRegister.getDefault().isServiceRegistered(IRunProcessService.class)) {
|
||||
runProcessService = (IRunProcessService) GlobalServiceRegister.getDefault().getService(IRunProcessService.class);
|
||||
@@ -144,38 +85,4 @@ public class CoreServiceTest {
|
||||
return log4jStrFromResouce;
|
||||
}
|
||||
|
||||
private void modifyTargetFolder(IFolder folder) throws CoreException {
|
||||
String fileName1 = "mapping_Access.xml";
|
||||
IFile file1 = folder.getFile(withFilter? fileName1.toLowerCase() : fileName1);
|
||||
assertTrue(file1.exists());
|
||||
file1.delete(true, null);
|
||||
String fileName2 = "mapping_AS400.xml";
|
||||
IFile file2 = folder.getFile(withFilter? fileName2.toLowerCase() : fileName2);
|
||||
assertTrue(file2.exists());
|
||||
String content = "test modification";
|
||||
InputStream in = new ByteArrayInputStream(content.getBytes());
|
||||
file2.setContents(in, true, false, null);
|
||||
}
|
||||
|
||||
private void validateConsistence(String folder1, String folder2) throws IOException {
|
||||
File dir1 = new File(folder1);
|
||||
File dir2 = new File(folder2);
|
||||
File[] subFiles1 = withFilter ? dir1.listFiles(filter) : dir1.listFiles();
|
||||
File[] subFiles2 = withFilter ? dir2.listFiles(filter) : dir2.listFiles();
|
||||
assertTrue(subFiles1.length == subFiles2.length);
|
||||
for (File subFile1 : subFiles1) {
|
||||
boolean isFound = false;
|
||||
long file1CRC = FilesUtils.getChecksumAlder32(subFile1);
|
||||
String subFile1Name = withFilter ? service.getTargetName(subFile1) : subFile1.getName();
|
||||
for (File subFile2 : subFiles2) {
|
||||
if (subFile2.getName().equals(subFile1Name)) {
|
||||
isFound = true;
|
||||
long file2CRC = FilesUtils.getChecksumAlder32(subFile2);
|
||||
assertEquals(file1CRC, file2CRC);
|
||||
}
|
||||
}
|
||||
assertTrue(isFound);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -24,10 +24,23 @@ public class JSONObjectTest extends TestCase {
|
||||
}
|
||||
}
|
||||
|
||||
public class EvilBean {
|
||||
public int id;
|
||||
|
||||
public int getId() {
|
||||
//do something evil
|
||||
return this.id;
|
||||
}
|
||||
|
||||
public EvilBean(int id) {
|
||||
this.id = id;
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void test() throws JSONException {
|
||||
Bean bean = new Bean(1,"wangwei");
|
||||
JSONObject object = new JSONObject(bean);
|
||||
JSONObject object = new JSONObject(bean, Bean.class);
|
||||
|
||||
assertEquals(false, object.isNull("id"));
|
||||
assertEquals(1, object.get("id"));
|
||||
@@ -36,4 +49,15 @@ public class JSONObjectTest extends TestCase {
|
||||
assertEquals(false, object.isNull("Name"));
|
||||
assertEquals("wangwei", object.get("Name"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testScriptInject() {
|
||||
EvilBean evil = new EvilBean(1);
|
||||
try {
|
||||
new JSONObject(evil, Bean.class);
|
||||
fail();
|
||||
} catch(JSONException e) {
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user