From 77976f984dcfb3c0739b63095b271bea9ce3d287 Mon Sep 17 00:00:00 2001 From: Daniel Quathamer Date: Tue, 14 May 2024 08:31:44 +0200 Subject: [PATCH] =?UTF-8?q?Das=20ETL=20Modul=20ist=20mit=20HISinOne-BI=202?= =?UTF-8?q?023.12=20oder=20h=C3=B6her=20nicht=20kompatibel,=20wg.=20ge?= =?UTF-8?q?=C3=A4nderter=20Klassen=20mit=20gleichem=20Namen=20im=20Kernmod?= =?UTF-8?q?ul.=20#4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .classpath | 5 + build.xml | 4 +- src-modules/module/etl/bin/etl_dosql.x | 4 +- .../module/etl/bin/etl_sx_insert_mask.x | 2 +- .../module/etl/bin/etl_sx_select_mask.x | 2 +- .../module/etl/bin/etl_sx_unload_records.x | 2 +- .../module/etl/bin/etl_sx_upload_records.x | 2 +- src-modules/module/etl/conf/etl.xml | 2 +- .../create_load_etl_stylesheets.sql | 45 ++++++++ .../create_load_etl_themenbaum.sql | 25 +++++ .../schluesseltabellen/etl_step_fuellen.sql | 97 +++++++++++++----- .../etl/schluesseltabellen/etl_step_type.unl | 10 +- .../sx_stylesheets_fuellen.sql | 57 +++++++++- .../ActionHandler/EtlActionHandler.java | 4 +- .../EtlActionHandlerDoquery.java | 6 +- .../ActionHandler/EtlActionHandlerDosql.java | 11 +- .../ActionHandler/EtlActionHandlerI.java | 2 +- .../ActionHandler/EtlActionHandlerMsg.java | 2 +- .../EtlActionHandlerUnloadRecords.java | 4 +- .../EtlActionHandlerUploadRecords.java | 6 +- src/de/superx/{etl => elt}/EtlAction.java | 5 +- src/de/superx/{etl => elt}/EtlActionJob.java | 7 +- src/de/superx/{etl => elt}/EtlStep.java | 4 +- src/de/superx/{etl => elt}/EtlUtils.java | 14 ++- .../{etl => elt}/QueryResultSerializer.java | 6 +- src/de/superx/{etl => elt}/SqlExecutor.java | 4 +- src/de/superx/{etl => elt}/TableUploader.java | 10 +- src/de/superx/{etl => elt}/bin/Doquery.java | 4 +- src/de/superx/{etl => elt}/bin/Dosql.java | 8 +- .../{etl => elt}/bin/EtlJobExecutor.java | 10 +- .../{etl => elt}/bin/SxTransformer.java | 2 +- .../{etl => elt}/bin/UnloadRecords.java | 4 +- .../{etl => elt}/bin/UploadRecords.java | 6 +- .../superx/{etl => elt}/util/FileUtils.java | 2 +- src/de/superx/{etl => elt}/util/GetOpts.java | 2 +- .../{etl => elt}/util/GetOptsBackport.java | 2 +- src/de/superx/sxrest/JobExecutor.java | 2 +- src/de/superx/sxrest/LaunchUpgrade.java | 4 +- src/de/superx/sxrest/MaskXml.java | 32 ++++-- superx/WEB-INF/lib/superx-etl.jar | Bin 82054 -> 80564 bytes superx/edit/etl/etl_manager.jsp | 39 +++++-- superx/edit/etl/jobexecutor.jsp | 26 +++-- superx/edit/etl/saveMask.jsp | 58 +++++------ 43 files changed, 383 insertions(+), 160 deletions(-) create mode 100644 src-modules/module/etl/schluesseltabellen/create_load_etl_stylesheets.sql create mode 100644 src-modules/module/etl/schluesseltabellen/create_load_etl_themenbaum.sql rename src/de/superx/{etl => elt}/ActionHandler/EtlActionHandler.java (97%) rename src/de/superx/{etl => elt}/ActionHandler/EtlActionHandlerDoquery.java (91%) rename src/de/superx/{etl => elt}/ActionHandler/EtlActionHandlerDosql.java (85%) rename src/de/superx/{etl => elt}/ActionHandler/EtlActionHandlerI.java (96%) rename src/de/superx/{etl => elt}/ActionHandler/EtlActionHandlerMsg.java (95%) rename src/de/superx/{etl => elt}/ActionHandler/EtlActionHandlerUnloadRecords.java (94%) rename src/de/superx/{etl => elt}/ActionHandler/EtlActionHandlerUploadRecords.java (94%) rename src/de/superx/{etl => elt}/EtlAction.java (96%) rename src/de/superx/{etl => elt}/EtlActionJob.java (97%) rename src/de/superx/{etl => elt}/EtlStep.java (99%) rename src/de/superx/{etl => elt}/EtlUtils.java (93%) rename src/de/superx/{etl => elt}/QueryResultSerializer.java (98%) rename src/de/superx/{etl => elt}/SqlExecutor.java (99%) rename src/de/superx/{etl => elt}/TableUploader.java (99%) rename src/de/superx/{etl => elt}/bin/Doquery.java (98%) rename src/de/superx/{etl => elt}/bin/Dosql.java (95%) rename src/de/superx/{etl => elt}/bin/EtlJobExecutor.java (85%) rename src/de/superx/{etl => elt}/bin/SxTransformer.java (99%) rename src/de/superx/{etl => elt}/bin/UnloadRecords.java (99%) rename src/de/superx/{etl => elt}/bin/UploadRecords.java (95%) rename src/de/superx/{etl => elt}/util/FileUtils.java (99%) rename src/de/superx/{etl => elt}/util/GetOpts.java (99%) rename src/de/superx/{etl => elt}/util/GetOptsBackport.java (99%) diff --git a/.classpath b/.classpath index c2c8751..ee8d016 100644 --- a/.classpath +++ b/.classpath @@ -14,5 +14,10 @@ + + + + + diff --git a/build.xml b/build.xml index 0b2e8b6..55b8482 100644 --- a/build.xml +++ b/build.xml @@ -38,7 +38,7 @@ ant -DWEBAPP=$WEBAPP cleanBuildPath - + @@ -124,7 +124,7 @@ ant -DWEBAPP=$WEBAPP cleanBuildPath - + diff --git a/src-modules/module/etl/bin/etl_dosql.x b/src-modules/module/etl/bin/etl_dosql.x index 2d0d7fb..46753e4 100755 --- a/src-modules/module/etl/bin/etl_dosql.x +++ b/src-modules/module/etl/bin/etl_dosql.x @@ -55,7 +55,7 @@ then if [ "$LANG" != "" ] then LOCALE="-Duser.language=$LANG" fi - java $LOCALE -cp $CP $JAVA_OPTS de.superx.etl.bin.Dosql -logger:$LOGGER_PROPERTIES -dbproperties:$DB_PROPERTIES -sqlfile:"$filename" -outFormat:"txt" -delim:$DBDELIMITER -header:$header -outfile:$outfile -params:$params + java $LOCALE -cp $CP $JAVA_OPTS de.superx.elt.bin.Dosql -logger:$LOGGER_PROPERTIES -dbproperties:$DB_PROPERTIES -sqlfile:"$filename" -outFormat:"txt" -delim:$DBDELIMITER -header:$header -outfile:$outfile -params:$params else case $SX_CLIENT in @@ -65,7 +65,7 @@ jdbc) if [ "$LANG" != "" ] then LOCALE="-Duser.language=$LANG" fi - java $LOCALE -cp $CP $JAVA_OPTS de.superx.etl.bin.Dosql -logger:$LOGGER_PROPERTIES -dbproperties:$DB_PROPERTIES -sqlfile:"$filename" -outFormat:"txt" -delim:$DBDELIMITER -header:$header -outfile:$outfile -params:$params + java $LOCALE -cp $CP $JAVA_OPTS de.superx.elt.bin.Dosql -logger:$LOGGER_PROPERTIES -dbproperties:$DB_PROPERTIES -sqlfile:"$filename" -outFormat:"txt" -delim:$DBDELIMITER -header:$header -outfile:$outfile -params:$params ;; psql) diff --git a/src-modules/module/etl/bin/etl_sx_insert_mask.x b/src-modules/module/etl/bin/etl_sx_insert_mask.x index 247821b..e689130 100755 --- a/src-modules/module/etl/bin/etl_sx_insert_mask.x +++ b/src-modules/module/etl/bin/etl_sx_insert_mask.x @@ -59,7 +59,7 @@ SX_CLIENT=jdbc export SX_CLIENT CP=".:$JDBC_CLASSPATH" -CMD="java $JAVA_OPTS -cp $CP de.superx.etl.bin.EtlJobExecutor -dbproperties:$DB_PROPERTIES -job:sx_insert_mask -params:TID=$TID,PATH_TO_INPUTFILE=$infile" +CMD="java $JAVA_OPTS -cp $CP de.superx.elt.bin.EtlJobExecutor -dbproperties:$DB_PROPERTIES -job:sx_insert_mask -params:TID=$TID,PATH_TO_INPUTFILE=$infile" $CMD diff --git a/src-modules/module/etl/bin/etl_sx_select_mask.x b/src-modules/module/etl/bin/etl_sx_select_mask.x index 0712929..7a5d4c2 100755 --- a/src-modules/module/etl/bin/etl_sx_select_mask.x +++ b/src-modules/module/etl/bin/etl_sx_select_mask.x @@ -36,7 +36,7 @@ SX_CLIENT=jdbc export SX_CLIENT CP=".:$JDBC_CLASSPATH" -CMD="java $JAVA_OPTS -cp $CP de.superx.etl.bin.EtlJobExecutor -dbproperties:$DB_PROPERTIES -job:sx_select_mask -outfile:$outfile -params:TID=$TID" +CMD="java $JAVA_OPTS -cp $CP de.superx.elt.bin.EtlJobExecutor -dbproperties:$DB_PROPERTIES -job:sx_select_mask -outfile:$outfile -params:TID=$TID" echo $CMD diff --git a/src-modules/module/etl/bin/etl_sx_unload_records.x b/src-modules/module/etl/bin/etl_sx_unload_records.x index 645e5b8..7a06461 100755 --- a/src-modules/module/etl/bin/etl_sx_unload_records.x +++ b/src-modules/module/etl/bin/etl_sx_unload_records.x @@ -41,6 +41,6 @@ CP=".:$JDBC_CLASSPATH" echo "Unload $table to $filename" -java $LOCALE -cp "$CP" de.superx.etl.bin.Doquery $LOGGER_PROPERTIES $DB_PROPERTIES 'select * from '$table $outformat $DBDELIMITER $header $filename +java $LOCALE -cp "$CP" de.superx.elt.bin.Doquery $LOGGER_PROPERTIES $DB_PROPERTIES 'select * from '$table $outformat $DBDELIMITER $header $filename diff --git a/src-modules/module/etl/bin/etl_sx_upload_records.x b/src-modules/module/etl/bin/etl_sx_upload_records.x index 4372975..a72a7a0 100755 --- a/src-modules/module/etl/bin/etl_sx_upload_records.x +++ b/src-modules/module/etl/bin/etl_sx_upload_records.x @@ -40,7 +40,7 @@ fi echo "$tabelle wird aus der Datei $quelldatei gefüllt" CP=".:$JDBC_CLASSPATH" -CMD="java $JAVA_OPTS -cp $CP de.superx.etl.bin.UploadRecords -logger:$LOGGER_PROPERTIES -dbproperties:$DB_PROPERTIES -table:$tabelle -unl:$quelldatei -delim:$DBDELIMITER -header:$header -informat:$informat -encoding:$encoding" +CMD="java $JAVA_OPTS -cp $CP de.superx.elt.bin.UploadRecords -logger:$LOGGER_PROPERTIES -dbproperties:$DB_PROPERTIES -table:$tabelle -unl:$quelldatei -delim:$DBDELIMITER -header:$header -informat:$informat -encoding:$encoding" $CMD diff --git a/src-modules/module/etl/conf/etl.xml b/src-modules/module/etl/conf/etl.xml index 2d85cd1..75fd6e1 100644 --- a/src-modules/module/etl/conf/etl.xml +++ b/src-modules/module/etl/conf/etl.xml @@ -1,6 +1,6 @@ - diff --git a/src-modules/module/etl/schluesseltabellen/create_load_etl_stylesheets.sql b/src-modules/module/etl/schluesseltabellen/create_load_etl_stylesheets.sql new file mode 100644 index 0000000..5c20b31 --- /dev/null +++ b/src-modules/module/etl/schluesseltabellen/create_load_etl_stylesheets.sql @@ -0,0 +1,45 @@ +--Freemarker Template + +--used in etl-job sx_insert_mask +<#if SQLdialect='Postgres'> +drop table if exists tmp_etl_stylesheets; +drop table if exists tmp_etl_mask_style; +drop table if exists tmp_etl_stylesheet_field; + + + +create table tmp_etl_stylesheets( + tid integer , + filename character(255), + caption character(255), + description character(255), + relation character(10), + useragent character(255), + contenttype character(200), +is_generic SMALLINT default 0 , +toolbar_icon_filepath VARCHAR(255) , +usage_resultset_data CHAR(10) default 'T' , +stylesheet_type CHAR(10) default 'XSL' , +jr_datasource CHAR(10) +); + + +CREATE TABLE tmp_etl_mask_style ( +-- tid integer , + maskeninfo_id integer, + stylesheet_id integer, + ord smallint, + stylesheet_filename character(255) + +); + + +CREATE TABLE tmp_etl_stylesheet_field ( + tid integer , + stylesheet_id integer, + stylesheet_filename character(255), + tablename character(255), + fieldname character(255) +); + + diff --git a/src-modules/module/etl/schluesseltabellen/create_load_etl_themenbaum.sql b/src-modules/module/etl/schluesseltabellen/create_load_etl_themenbaum.sql new file mode 100644 index 0000000..c26d2b8 --- /dev/null +++ b/src-modules/module/etl/schluesseltabellen/create_load_etl_themenbaum.sql @@ -0,0 +1,25 @@ +--Freemarker Template + +--used in etl-job sx_insert_mask +<#if SQLdialect='Postgres'> +drop table if exists tmp_etl_themenbaum; + + + + + +CREATE TABLE tmp_etl_themenbaum ( +-- tid integer, + name varchar(255) NOT NULL, + maskeninfo_id integer, + parent integer, + parent_name varchar(255), + gueltig_seit date, + gueltig_bis date, + erlaeuterung char(240), + sort integer DEFAULT 0 NOT NULL, + css_class varchar(255) +); + + + diff --git a/src-modules/module/etl/schluesseltabellen/etl_step_fuellen.sql b/src-modules/module/etl/schluesseltabellen/etl_step_fuellen.sql index cf40c03..7ec701c 100644 --- a/src-modules/module/etl/schluesseltabellen/etl_step_fuellen.sql +++ b/src-modules/module/etl/schluesseltabellen/etl_step_fuellen.sql @@ -44,6 +44,8 @@ {"etl_job":"sx_select_mask", "uniquename":"unload_maske_system_bez", "name":"maske_system_bez entladen", "type":"UNLOAD", "parent":"unload_masken_stammdaten"}, {"etl_job":"sx_select_mask", "uniquename":"unload_themenbaum", "name":"themenbaum entladen", "type":"UNLOAD"}, {"etl_job":"sx_select_mask", "uniquename":"unload_sx_mask_style", "name":"sx_mask_style entladen", "type":"UNLOAD"}, + {"etl_job":"sx_select_mask", "uniquename":"unload_sx_stylesheets", "name":"sx_stylesheets entladen", "type":"UNLOAD"}, + {"etl_job":"sx_select_mask", "uniquename":"unload_stylesheet_field", "name":"stylesheet_field entladen", "type":"UNLOAD"}, {"etl_job":"sx_insert_mask", "uniquename":"delete_maskeninfo", "name":"Maskeninfo löschen", "type":"DOQUERY" }, {"etl_job":"sx_insert_mask", "uniquename":"upload_maskeninfo", "name":"Maskeninfo hochladen", "type":"LOAD" }, @@ -61,7 +63,17 @@ {"etl_job":"sx_insert_mask", "uniquename":"delete_maske_system_bez", "name":"maske_system_bez löschen", "type":"DOQUERY" }, {"etl_job":"sx_insert_mask", "uniquename":"upload_maske_system_bez", "name":"maske_system_bez hochladen", "type":"LOAD" }, + {"etl_job":"sx_insert_mask", "uniquename":"create_tmp_etl_themenbaum", "name":"Tabelle tmp_etl_themenbaum erzeugen", "type":"DOSQL" }, + {"etl_job":"sx_insert_mask", "uniquename":"create_tmp_etl_stylesheets", "name":"Tabelle tmp_etl_stylesheets erzeugen", "type":"DOSQL" }, + {"etl_job":"sx_insert_mask", "uniquename":"upload_tmp_etl_themenbaum", "name":"tmp_etl_themenbaum hochladen", "type":"LOAD" }, + {"etl_job":"sx_insert_mask", "uniquename":"upload_tmp_etl_stylesheets", "name":"tmp_etl_stylesheets hochladen", "type":"LOAD" }, + {"etl_job":"sx_insert_mask", "uniquename":"upload_tmp_etl_mask_style", "name":"tmp_etl_mask_style hochladen", "type":"LOAD" }, + {"etl_job":"sx_insert_mask", "uniquename":"upload_tmp_etl_stylesheet_field", "name":"tmp_etl_stylesheet_field hochladen", "type":"LOAD" }, + + {"etl_job":"sx_insert_mask", "uniquename":"themenbaum_fuellen", "name":"themenbaum_fuellen", "type":"DOSQL" }, + {"etl_job":"sx_insert_mask", "uniquename":"sx_stylesheets_fuellen", "name":"sx_stylesheets_fuellen", "type":"DOSQL" }, + {"etl_job":"kern_konstanten_update", "uniquename":"kern_konstanten_update", "name":"Kern Konstanten aktualisieren", "type":"DOSQL" }, {"etl_job":"sichten_unload", "uniquename":"unload_sichten_ges", "name":"Sichten entladen", "type":"MSG"}, @@ -84,6 +96,8 @@ {"etl_step":"unload_maske_system_bez","prop_name":"select_stmt", "prop_value":"select maskeninfo_id,systeminfo_id from maske_system_bez where maskeninfo_id=$TID order by 1,2" }, {"etl_step":"unload_themenbaum","prop_name":"select_stmt", "prop_value":"select name,maskeninfo_id,parent,(select name from themenbaum where tid=T.parent) as parent_name,gueltig_seit,gueltig_bis,erlaeuterung,sort,css_class from themenbaum T where maskeninfo_id=$TID order by 2,1" }, {"etl_step":"unload_sx_mask_style","prop_name":"select_stmt", "prop_value":"select maskeninfo_id,stylesheet_id,ord,(select filename from sx_stylesheets where tid=S.stylesheet_id) as stylesheet_filename from sx_mask_style S where maskeninfo_id=$TID order by 1,2,3" }, + {"etl_step":"unload_sx_stylesheets","prop_name":"select_stmt", "prop_value":"select S.tid,S.filename,S.caption,S.description,S.relation,S.useragent,S.contenttype,S.is_generic,S.toolbar_icon_filepath,S.usage_resultset_data,S.stylesheet_type,S.jr_datasource from sx_stylesheets S, sx_mask_style M where S.tid=M.stylesheet_id and M.maskeninfo_id=$TID order by 1,2,3" }, + {"etl_step":"unload_stylesheet_field","prop_name":"select_stmt", "prop_value":"select F.tid,F.stylesheet_id,S.filename as stylesheet_filename,F.tablename,F.fieldname FROM stylesheet_field F, sx_stylesheets S, sx_mask_style M where F.stylesheet_id=S.tid and S.tid=M.stylesheet_id and M.maskeninfo_id=$TID order by 1,2,3,4,5" }, {"etl_step":"delete_maskeninfo","prop_name":"select_stmt", "prop_value":"delete from maskeninfo where tid=$TID" }, {"etl_step":"upload_maskeninfo","prop_name":"target_table", "prop_value":"maskeninfo" }, @@ -114,6 +128,31 @@ {"etl_step":"upload_maske_system_bez","prop_name":"format", "prop_value":"xml" }, {"etl_step":"upload_maske_system_bez","prop_name":"search_path", "prop_value":"/etlAction/unload [@name=\"unload_maske_system_bez\"]/rs/row" }, {"etl_step":"upload_maske_system_bez","prop_name":"path_to_inputfile", "prop_value":"$PATH_TO_INPUTFILE" }, + {"etl_step":"create_tmp_etl_themenbaum","prop_name":"PATH_TO_INPUTFILE", "prop_value":"$SUPERX_DIR/db/module/etl/schluesseltabellen/create_load_etl_themenbaum.sql" }, + {"etl_step":"create_tmp_etl_stylesheets","prop_name":"PATH_TO_INPUTFILE", "prop_value":"$SUPERX_DIR/db/module/etl/schluesseltabellen/create_load_etl_stylesheets.sql" }, + + {"etl_step":"upload_tmp_etl_themenbaum","prop_name":"target_table", "prop_value":"tmp_etl_themenbaum" }, + {"etl_step":"upload_tmp_etl_themenbaum","prop_name":"format", "prop_value":"xml" }, + {"etl_step":"upload_tmp_etl_themenbaum","prop_name":"search_path", "prop_value":"/etlAction/unload [@name=\"unload_themenbaum\"]/rs/row" }, + {"etl_step":"upload_tmp_etl_themenbaum","prop_name":"path_to_inputfile", "prop_value":"$PATH_TO_INPUTFILE" }, + + {"etl_step":"upload_tmp_etl_stylesheets","prop_name":"target_table", "prop_value":"tmp_etl_stylesheets" }, + {"etl_step":"upload_tmp_etl_stylesheets","prop_name":"format", "prop_value":"xml" }, + {"etl_step":"upload_tmp_etl_stylesheets","prop_name":"search_path", "prop_value":"/etlAction/unload [@name=\"unload_sx_stylesheets\"]/rs/row" }, + {"etl_step":"upload_tmp_etl_stylesheets","prop_name":"path_to_inputfile", "prop_value":"$PATH_TO_INPUTFILE" }, + + {"etl_step":"upload_tmp_etl_mask_style","prop_name":"target_table", "prop_value":"tmp_etl_mask_style" }, + {"etl_step":"upload_tmp_etl_mask_style","prop_name":"format", "prop_value":"xml" }, + {"etl_step":"upload_tmp_etl_mask_style","prop_name":"search_path", "prop_value":"/etlAction/unload [@name=\"unload_sx_mask_style\"]/rs/row" }, + {"etl_step":"upload_tmp_etl_mask_style","prop_name":"path_to_inputfile", "prop_value":"$PATH_TO_INPUTFILE" }, + + {"etl_step":"upload_tmp_etl_stylesheet_field","prop_name":"target_table", "prop_value":"tmp_etl_stylesheet_field" }, + {"etl_step":"upload_tmp_etl_stylesheet_field","prop_name":"format", "prop_value":"xml" }, + {"etl_step":"upload_tmp_etl_stylesheet_field","prop_name":"search_path", "prop_value":"/etlAction/unload [@name=\"unload_stylesheet_field\"]/rs/row" }, + {"etl_step":"upload_tmp_etl_stylesheet_field","prop_name":"path_to_inputfile", "prop_value":"$PATH_TO_INPUTFILE" }, + + {"etl_step":"themenbaum_fuellen","prop_name":"PATH_TO_INPUTFILE", "prop_value":"$SUPERX_DIR/db/module/etl/schluesseltabellen/themenbaum_fuellen.sql" }, + {"etl_step":"sx_stylesheets_fuellen","prop_name":"PATH_TO_INPUTFILE", "prop_value":"$SUPERX_DIR/db/module/etl/schluesseltabellen/sx_stylesheets_fuellen.sql" }, {"etl_step":"kern_konstanten_update","prop_name":"path_to_inputfile", "prop_value":"$PATH_TO_INPUTFILE" }, @@ -131,8 +170,8 @@ {"testcase":"test_sx_select_mask","assertion":1, "sql":"select count(*) from etl_job where uniquename='sx_select_mask'" }, {"testcase":"test_sx_insert_mask","assertion":1, "sql":"select count(*) from etl_job where uniquename='sx_insert_mask'" }, {"testcase":"test_sx_insert_mask_params","assertion":3, "sql":"select count(*) from etl_job_param P, etl_job J where J.tid=P.etl_job_id and J.uniquename='sx_insert_mask'" }, - {"testcase":"test_sx_insert_mask_steps","assertion":10, "sql":"select count(*) from etl_step S, etl_step_relation R, etl_job J where J.tid=R.job_id and S.tid=R.step_id and J.uniquename='sx_insert_mask'" }, - {"testcase":"test_sx_select_mask_steps","assertion":8, "sql":"select count(*) from etl_step S, etl_step_relation R, etl_job J where J.tid=R.job_id and S.tid=R.step_id and J.uniquename='sx_select_mask'" } + {"testcase":"test_sx_insert_mask_steps","assertion":18, "sql":"select count(*) from etl_step S, etl_step_relation R, etl_job J where J.tid=R.job_id and S.tid=R.step_id and J.uniquename='sx_insert_mask'" }, + {"testcase":"test_sx_select_mask_steps","assertion":10, "sql":"select count(*) from etl_step S, etl_step_relation R, etl_job J where J.tid=R.job_id and S.tid=R.step_id and J.uniquename='sx_select_mask'" } ] /> @@ -198,6 +237,34 @@ custom_step SMALLINT default 1 ) ; +--jobs with custom_job=0 get deleted in HISinOne-BI +--therefore set to 2: +update etl_job set custom_job=2 +where custom_job=0 +and uniquename in ('sx_select_mask','sx_insert_mask', +'kern_konstanten_update', +'sichten_unload', +'sos_gewichtung_unload'); + + +update etl_step set custom_step=2 +where custom_step=0 +and tid in (select R.step_id from etl_step_relation R, etl_job J +where R.job_id=J.tid +and J.uniquename in ('sx_select_mask','sx_insert_mask', +'kern_konstanten_update', +'sichten_unload', +'sos_gewichtung_unload')); + +update etl_step_relation set custom_step=2 +where custom_step=0 +and job_id in (select J.tid +from etl_job J +where J.uniquename in ('sx_select_mask','sx_insert_mask', +'kern_konstanten_update', +'sichten_unload', +'sos_gewichtung_unload')); + <#foreach etl_job in etl_jobs> truncate table tmp_etl_job; @@ -216,7 +283,7 @@ insert into tmp_etl_job(uniquename,caption,systeminfo_id,logfile,already_exists, values ('${etl_job.uniquename}', '${etl_job.name}', ${etl_job.systeminfo_id}, -'${etl_job.logfile}',0,0); +'${etl_job.logfile}',0,2); <#if SQLdialect='Postgres'> --Postgres Dialekt: @@ -329,7 +396,7 @@ J.tid as etl_job_id, J.uniquename, '${etl_job.logfile}' as logfile, -0, +2, 0 from etl_job J where J.uniquename='${etl_job.uniquename}' @@ -453,7 +520,7 @@ FROM tmp_etl_step T ) delete from etl_step_relation where job_id in (select J.tid FROM tmp_etl_job J) -and custom_step=0 +and custom_step=2 ; @@ -500,7 +567,7 @@ select 0 as force_continue, 1 as step_active, sortnr, - 0 + 2 FROM tmp_etl_step ; @@ -546,28 +613,12 @@ where ${testfall.assertion}!=(${testfall.sql}) --Ende Testfälle -<#if SQLdialect='Informix'> ---nun xupdates: ---bei informix kann man TEXT Spalten nicht updaten, daher per jdbc updaten: ---damit DOSQL nicht den xupdater beim Start dieses Scriptes anwirft, ---wird das in eine temp. Datei ausgelagert. -! echo "" > "./tmp"$MANDANTID".sql" -<#foreach etl_step_property in etl_step_properties> - -! echo '${etl_step_property.prop_value}' >>"./tmp"$MANDANTID".sql" - - - -! echo "" >> "./tmp"$MANDANTID".sql" -! DOSQL "./tmp"$MANDANTID".sql" -<#else> ---Postgres: <#foreach etl_step_property in etl_step_properties> update etl_step_property set prop_value='${etl_step_property.prop_value}' where prop_name='${etl_step_property.prop_name}' and etl_step_id=(select S.tid from etl_step S where S.uniquename='${etl_step_property.etl_step}'); - + diff --git a/src-modules/module/etl/schluesseltabellen/etl_step_type.unl b/src-modules/module/etl/schluesseltabellen/etl_step_type.unl index 8c108c2..38ff924 100644 --- a/src-modules/module/etl/schluesseltabellen/etl_step_type.unl +++ b/src-modules/module/etl/schluesseltabellen/etl_step_type.unl @@ -1,5 +1,5 @@ -1^LOAD^Tabelle hochladen^de.superx.etl.ActionHandler.EtlActionHandlerUploadRecords^ -2^DOSQL^SQL-Script ausführen^de.superx.etl.ActionHandler.EtlActionHandlerDosql^ -3^DOQUERY^SQL-Query ausführen^de.superx.etl.ActionHandler.EtlActionHandlerDoquery^ -4^UNLOAD^SQL-Ergebnis entladen^de.superx.etl.ActionHandler.EtlActionHandlerUnloadRecords^ -5^MSG^Logausgabe^de.superx.etl.ActionHandler.EtlActionHandlerMsg^ +1^LOAD^Tabelle hochladen^de.superx.elt.ActionHandler.EtlActionHandlerUploadRecords^ +2^DOSQL^SQL-Script ausführen^de.superx.elt.ActionHandler.EtlActionHandlerDosql^ +3^DOQUERY^SQL-Query ausführen^de.superx.elt.ActionHandler.EtlActionHandlerDoquery^ +4^UNLOAD^SQL-Ergebnis entladen^de.superx.elt.ActionHandler.EtlActionHandlerUnloadRecords^ +5^MSG^Logausgabe^de.superx.elt.ActionHandler.EtlActionHandlerMsg^ diff --git a/src-modules/module/etl/schluesseltabellen/sx_stylesheets_fuellen.sql b/src-modules/module/etl/schluesseltabellen/sx_stylesheets_fuellen.sql index 2c92a37..fd0880c 100644 --- a/src-modules/module/etl/schluesseltabellen/sx_stylesheets_fuellen.sql +++ b/src-modules/module/etl/schluesseltabellen/sx_stylesheets_fuellen.sql @@ -7,18 +7,69 @@ update tmp_etl_stylesheets set tid=(select S.tid from sx_stylesheets S where S.filename=tmp_etl_stylesheets.filename); +--update metadata: +update sx_stylesheets set (filename, + caption, + description, + relation, + useragent, + contenttype, + is_generic, + toolbar_icon_filepath, + usage_resultset_data, + stylesheet_type, + jr_datasource) + =(select filename, + caption, + description, + relation, + useragent, + contenttype, + is_generic, + toolbar_icon_filepath, + usage_resultset_data, + stylesheet_type, + jr_datasource + from tmp_etl_stylesheets T + where T.tid=sx_stylesheets.tid) +where tid in (select tid from tmp_etl_stylesheets); + + + --new Stylesheet? -insert into sx_stylesheets(filename,caption,description,relation,contenttype) -select filename,caption,description,relation,contenttype +insert into sx_stylesheets(filename,caption,description,relation,contenttype, + is_generic, toolbar_icon_filepath, usage_resultset_data, stylesheet_type, jr_datasource) +select filename,caption,description,relation,contenttype, +is_generic, toolbar_icon_filepath, usage_resultset_data, stylesheet_type, jr_datasource from tmp_etl_stylesheets where tid is null; +--abwärtskompatibel: +update sx_stylesheets set stylesheet_type='XSL', +usage_resultset_data='T' +where relation='table' +and trim(filename) like '%.xsl'; + + +update sx_stylesheets set stylesheet_type='JRXML', +jr_datasource='RS', +usage_resultset_data='T' +where relation='table' +and trim(filename) like '%.jrxml' +; +update sx_stylesheets set stylesheet_type='JRXML', +jr_datasource='XML', +usage_resultset_data='T' +where relation='table' +and trim(filename) like '%xmlsource.jrxml' +; + + --lookup tid: update tmp_etl_stylesheets set tid=(select S.tid from sx_stylesheets S where S.filename=tmp_etl_stylesheets.filename); - delete from sx_mask_style where maskeninfo_id in (select maskeninfo_id from tmp_etl_mask_style); diff --git a/src/de/superx/etl/ActionHandler/EtlActionHandler.java b/src/de/superx/elt/ActionHandler/EtlActionHandler.java similarity index 97% rename from src/de/superx/etl/ActionHandler/EtlActionHandler.java rename to src/de/superx/elt/ActionHandler/EtlActionHandler.java index a0f1db8..7587ebe 100644 --- a/src/de/superx/etl/ActionHandler/EtlActionHandler.java +++ b/src/de/superx/elt/ActionHandler/EtlActionHandler.java @@ -5,7 +5,7 @@ * This package is licensed under the CampusSource License; * http://www.campussource.de/org/license/ */ -package de.superx.etl.ActionHandler; +package de.superx.elt.ActionHandler; import java.io.StringWriter; import java.sql.Connection; @@ -16,7 +16,7 @@ import java.util.Properties; import java.util.logging.Logger; import de.superx.bin.SxConnection; -import de.superx.etl.EtlStep; +import de.superx.elt.EtlStep; diff --git a/src/de/superx/etl/ActionHandler/EtlActionHandlerDoquery.java b/src/de/superx/elt/ActionHandler/EtlActionHandlerDoquery.java similarity index 91% rename from src/de/superx/etl/ActionHandler/EtlActionHandlerDoquery.java rename to src/de/superx/elt/ActionHandler/EtlActionHandlerDoquery.java index b05dba5..b3b71f0 100644 --- a/src/de/superx/etl/ActionHandler/EtlActionHandlerDoquery.java +++ b/src/de/superx/elt/ActionHandler/EtlActionHandlerDoquery.java @@ -5,7 +5,7 @@ * This package is licensed under the CampusSource License; * http://www.campussource.de/org/license/ */ -package de.superx.etl.ActionHandler; +package de.superx.elt.ActionHandler; import java.io.StringWriter; import java.sql.Connection; @@ -14,8 +14,8 @@ import java.util.Properties; import java.util.logging.Logger; import de.superx.bin.SxConnection; -import de.superx.etl.QueryResultSerializer; -import de.superx.etl.SqlExecutor; +import de.superx.elt.QueryResultSerializer; +import de.superx.elt.SqlExecutor; public class EtlActionHandlerDoquery extends EtlActionHandler implements EtlActionHandlerI { diff --git a/src/de/superx/etl/ActionHandler/EtlActionHandlerDosql.java b/src/de/superx/elt/ActionHandler/EtlActionHandlerDosql.java similarity index 85% rename from src/de/superx/etl/ActionHandler/EtlActionHandlerDosql.java rename to src/de/superx/elt/ActionHandler/EtlActionHandlerDosql.java index ad4c943..b30eb2d 100644 --- a/src/de/superx/etl/ActionHandler/EtlActionHandlerDosql.java +++ b/src/de/superx/elt/ActionHandler/EtlActionHandlerDosql.java @@ -5,7 +5,7 @@ * This package is licensed under the CampusSource License; * http://www.campussource.de/org/license/ */ -package de.superx.etl.ActionHandler; +package de.superx.elt.ActionHandler; import java.io.File; import java.io.StringWriter; @@ -15,8 +15,9 @@ import java.util.Properties; import java.util.logging.Logger; import de.superx.bin.SxConnection; -import de.superx.etl.QueryResultSerializer; -import de.superx.etl.SqlExecutor; +import de.superx.elt.EtlUtils; +import de.superx.elt.QueryResultSerializer; +import de.superx.elt.SqlExecutor; public class EtlActionHandlerDosql extends EtlActionHandler implements EtlActionHandlerI { @@ -31,7 +32,9 @@ public class EtlActionHandlerDosql extends EtlActionHandler implements EtlAction String log=""; long numberOfRows=0; this.getConnection(); - String filename=handlerSpecificProperties.getProperty("PATH_TO_INPUTFILE"); + Properties myProps=EtlUtils.replaceSUPERX_DIRandETL_PFAD(handlerSpecificProperties); + + String filename=myProps.getProperty("PATH_TO_INPUTFILE"); File sqlScriptFile = null; try { sqlScriptFile = new File(filename); diff --git a/src/de/superx/etl/ActionHandler/EtlActionHandlerI.java b/src/de/superx/elt/ActionHandler/EtlActionHandlerI.java similarity index 96% rename from src/de/superx/etl/ActionHandler/EtlActionHandlerI.java rename to src/de/superx/elt/ActionHandler/EtlActionHandlerI.java index 84bd0b0..bf1d674 100644 --- a/src/de/superx/etl/ActionHandler/EtlActionHandlerI.java +++ b/src/de/superx/elt/ActionHandler/EtlActionHandlerI.java @@ -5,7 +5,7 @@ * This package is licensed under the CampusSource License; * http://www.campussource.de/org/license/ */ -package de.superx.etl.ActionHandler; +package de.superx.elt.ActionHandler; import java.io.StringWriter; import java.sql.Connection; diff --git a/src/de/superx/etl/ActionHandler/EtlActionHandlerMsg.java b/src/de/superx/elt/ActionHandler/EtlActionHandlerMsg.java similarity index 95% rename from src/de/superx/etl/ActionHandler/EtlActionHandlerMsg.java rename to src/de/superx/elt/ActionHandler/EtlActionHandlerMsg.java index 07d9797..f60dd97 100644 --- a/src/de/superx/etl/ActionHandler/EtlActionHandlerMsg.java +++ b/src/de/superx/elt/ActionHandler/EtlActionHandlerMsg.java @@ -5,7 +5,7 @@ * This package is licensed under the CampusSource License; * http://www.campussource.de/org/license/ */ -package de.superx.etl.ActionHandler; +package de.superx.elt.ActionHandler; import java.io.StringWriter; import java.sql.Connection; diff --git a/src/de/superx/etl/ActionHandler/EtlActionHandlerUnloadRecords.java b/src/de/superx/elt/ActionHandler/EtlActionHandlerUnloadRecords.java similarity index 94% rename from src/de/superx/etl/ActionHandler/EtlActionHandlerUnloadRecords.java rename to src/de/superx/elt/ActionHandler/EtlActionHandlerUnloadRecords.java index 5999f1b..454bbb4 100644 --- a/src/de/superx/etl/ActionHandler/EtlActionHandlerUnloadRecords.java +++ b/src/de/superx/elt/ActionHandler/EtlActionHandlerUnloadRecords.java @@ -5,7 +5,7 @@ * This package is licensed under the CampusSource License; * http://www.campussource.de/org/license/ */ -package de.superx.etl.ActionHandler; +package de.superx.elt.ActionHandler; import java.io.StringWriter; import java.sql.Connection; @@ -14,7 +14,7 @@ import java.util.Properties; import java.util.logging.Logger; import de.superx.bin.SxConnection; -import de.superx.etl.QueryResultSerializer; +import de.superx.elt.QueryResultSerializer; public class EtlActionHandlerUnloadRecords extends EtlActionHandler implements EtlActionHandlerI { diff --git a/src/de/superx/etl/ActionHandler/EtlActionHandlerUploadRecords.java b/src/de/superx/elt/ActionHandler/EtlActionHandlerUploadRecords.java similarity index 94% rename from src/de/superx/etl/ActionHandler/EtlActionHandlerUploadRecords.java rename to src/de/superx/elt/ActionHandler/EtlActionHandlerUploadRecords.java index 3f67962..3e679e0 100644 --- a/src/de/superx/etl/ActionHandler/EtlActionHandlerUploadRecords.java +++ b/src/de/superx/elt/ActionHandler/EtlActionHandlerUploadRecords.java @@ -5,7 +5,7 @@ * This package is licensed under the CampusSource License; * http://www.campussource.de/org/license/ */ -package de.superx.etl.ActionHandler; +package de.superx.elt.ActionHandler; import java.io.StringWriter; import java.sql.Connection; @@ -14,8 +14,8 @@ import java.util.Properties; import java.util.logging.Logger; import de.superx.bin.SxConnection; -import de.superx.etl.QueryResultSerializer; -import de.superx.etl.TableUploader; +import de.superx.elt.QueryResultSerializer; +import de.superx.elt.TableUploader; public class EtlActionHandlerUploadRecords extends EtlActionHandler implements EtlActionHandlerI { diff --git a/src/de/superx/etl/EtlAction.java b/src/de/superx/elt/EtlAction.java similarity index 96% rename from src/de/superx/etl/EtlAction.java rename to src/de/superx/elt/EtlAction.java index 45188f3..804357e 100644 --- a/src/de/superx/etl/EtlAction.java +++ b/src/de/superx/elt/EtlAction.java @@ -5,7 +5,7 @@ * This package is licensed under the CampusSource License; * http://www.campussource.de/org/license/ */ -package de.superx.etl; +package de.superx.elt; import java.io.BufferedReader; import java.io.File; @@ -26,6 +26,7 @@ import javax.sql.DataSource; import de.superx.bin.SxConnection; import de.superx.common.Sichten; +import de.superx.etl.EtlUtils; public class EtlAction { protected Properties params; @@ -182,7 +183,7 @@ public class EtlAction { } public Connection getConnection(Connection myConnection) throws Exception { - String myDefaultPropFile=de.superx.etl.EtlUtils.WEBINFDIR+de.superx.etl.EtlUtils.PATHSEP+"db.properties"; + String myDefaultPropFile=de.superx.elt.EtlUtils.WEBINFDIR+de.superx.elt.EtlUtils.PATHSEP+"db.properties"; if(myConnection==null) { if(propfile==null) diff --git a/src/de/superx/etl/EtlActionJob.java b/src/de/superx/elt/EtlActionJob.java similarity index 97% rename from src/de/superx/etl/EtlActionJob.java rename to src/de/superx/elt/EtlActionJob.java index bba4e1d..d80b091 100644 --- a/src/de/superx/etl/EtlActionJob.java +++ b/src/de/superx/elt/EtlActionJob.java @@ -5,7 +5,7 @@ * This package is licensed under the CampusSource License; * http://www.campussource.de/org/license/ */ -package de.superx.etl; +package de.superx.elt; import java.io.IOException; import java.io.PrintStream; @@ -27,6 +27,7 @@ import de.superx.common.SuperX_el; import de.superx.common.SxResultRow; import de.superx.common.SxResultSet; import de.superx.common.SxSqlHelper; +import de.superx.etl.EtlUtils; import de.superx.servlet.SxPools; import de.superx.util.SqlStringUtils; import freemarker.template.TemplateBooleanModel; @@ -122,7 +123,7 @@ public class EtlActionJob extends EtlAction { super.addActionLog("Runtime Params: "+runtimeParamsArg); } if(runTimeParams!=null) - this.setParams(de.superx.etl.EtlUtils.mergeParamProperties(this.getParams(), runTimeParams)); + this.setParams(de.superx.elt.EtlUtils.mergeParamProperties(this.getParams(), runTimeParams)); super.addActionLog("Job "+jobCaption+ " initialized"); } public int execute(String outfile) throws SQLException, Exception @@ -219,7 +220,7 @@ public class EtlActionJob extends EtlAction { else { try { - de.superx.etl.EtlUtils.saveFileContentsWithEncoding(outfile, sw.toString(), null); + de.superx.elt.EtlUtils.saveFileContentsWithEncoding(outfile, sw.toString(), null); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); diff --git a/src/de/superx/etl/EtlStep.java b/src/de/superx/elt/EtlStep.java similarity index 99% rename from src/de/superx/etl/EtlStep.java rename to src/de/superx/elt/EtlStep.java index 6426be7..0b4bb5e 100644 --- a/src/de/superx/etl/EtlStep.java +++ b/src/de/superx/elt/EtlStep.java @@ -5,7 +5,7 @@ * This package is licensed under the CampusSource License; * http://www.campussource.de/org/license/ */ -package de.superx.etl; +package de.superx.elt; import java.io.InputStream; @@ -27,7 +27,6 @@ import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.jdbc.core.RowCallbackHandler; import org.springframework.jdbc.datasource.DriverManagerDataSource; -import de.superx.etl.ActionHandler.*; import de.memtext.rights.RightsKeyEntry; import de.memtext.util.GetOpts; import de.superx.bin.Doquery; @@ -36,6 +35,7 @@ import de.superx.common.SuperX_el; import de.superx.common.SxResultRow; import de.superx.common.SxResultSet; import de.superx.common.SxSqlHelper; +import de.superx.elt.ActionHandler.*; import de.superx.servlet.SxPools; import de.superx.util.SqlStringUtils; import freemarker.template.TemplateBooleanModel; diff --git a/src/de/superx/etl/EtlUtils.java b/src/de/superx/elt/EtlUtils.java similarity index 93% rename from src/de/superx/etl/EtlUtils.java rename to src/de/superx/elt/EtlUtils.java index d50706e..fee9be3 100644 --- a/src/de/superx/etl/EtlUtils.java +++ b/src/de/superx/elt/EtlUtils.java @@ -5,7 +5,7 @@ * This package is licensed under the CampusSource License; * http://www.campussource.de/org/license/ */ -package de.superx.etl; +package de.superx.elt; import java.io.BufferedReader; import java.io.BufferedWriter; @@ -53,7 +53,7 @@ public static void main(String args[]) { try { String tidInXmlFile=""; - Document mydomres =de.superx.etl.EtlUtils.buildDocumentFromXmlFile("/home/superx/devel_module/community/tomcat/temp/myTempFile6460222908896375059.xml"); + Document mydomres =de.superx.elt.EtlUtils.buildDocumentFromXmlFile("/home/superx/devel_module/community/tomcat/temp/myTempFile6460222908896375059.xml"); XPathFactory factory = new net.sf.saxon.xpath.XPathFactoryImpl(); XPath xPath = factory.newXPath(); @@ -91,6 +91,14 @@ public static Properties convertStringToProperty(String inp) throws IOException myProps.load(new StringReader(inp)); return myProps; } +public static Properties replaceSUPERX_DIRandETL_PFAD(Properties params) throws IOException +{ + Properties returnProperties=new Properties(); + Properties pathParams =convertStringToProperty("SUPERX_DIR="+SUPERX_DIR); + returnProperties=mergeParamProperties(params,pathParams); + return returnProperties; +} + public static Properties mergeParamProperties(Properties params, Properties runTimeParams) { @@ -310,7 +318,7 @@ public static String getFileContentsWithEncoding(String filePath, String encodin public static boolean isNodeValueInXml(String src, String searchPath, String expectedValue) throws ParserConfigurationException, SAXException, IOException, XPathExpressionException { boolean b=false; - Document mydomres =de.superx.etl.EtlUtils.parseXml(src); + Document mydomres =de.superx.elt.EtlUtils.parseXml(src); XPathFactory factory = new net.sf.saxon.xpath.XPathFactoryImpl(); XPath xPath = factory.newXPath(); diff --git a/src/de/superx/etl/QueryResultSerializer.java b/src/de/superx/elt/QueryResultSerializer.java similarity index 98% rename from src/de/superx/etl/QueryResultSerializer.java rename to src/de/superx/elt/QueryResultSerializer.java index 7d01626..d3f774e 100644 --- a/src/de/superx/etl/QueryResultSerializer.java +++ b/src/de/superx/elt/QueryResultSerializer.java @@ -5,7 +5,7 @@ * This package is licensed under the CampusSource License; * http://www.campussource.de/org/license/ */ -package de.superx.etl; +package de.superx.elt; import java.io.BufferedOutputStream; import java.io.FileNotFoundException; import java.io.FileWriter; @@ -34,8 +34,8 @@ import de.superx.bin.SxJdbcClient; import java.util.Iterator; import java.util.StringTokenizer; -import de.superx.etl.bin.SxTransformer; import de.superx.common.SxResultSet; +import de.superx.elt.bin.SxTransformer; import de.superx.servlet.ServletUtils; import de.superx.servlet.SxSQL_Server; import de.superx.util.SqlStringUtils; @@ -373,7 +373,7 @@ public class QueryResultSerializer { String headZs = ""; int colNumber = this.getColnames().length; for (int i = 0; i < colNumber; i++) { - headZs += ""+NEWLINE; + headZs += " "+NEWLINE; } headZs+=""; diff --git a/src/de/superx/etl/SqlExecutor.java b/src/de/superx/elt/SqlExecutor.java similarity index 99% rename from src/de/superx/etl/SqlExecutor.java rename to src/de/superx/elt/SqlExecutor.java index d5f40e0..439d804 100644 --- a/src/de/superx/etl/SqlExecutor.java +++ b/src/de/superx/elt/SqlExecutor.java @@ -5,7 +5,7 @@ * This package is licensed under the CampusSource License; * http://www.campussource.de/org/license/ */ -package de.superx.etl; +package de.superx.elt; import java.io.BufferedOutputStream; import java.io.BufferedReader; import java.io.File; @@ -43,9 +43,9 @@ import java.util.Iterator; import java.util.Properties; import java.util.StringTokenizer; -import de.superx.etl.bin.SxTransformer; import de.superx.bin.XUpdater; import de.superx.common.FieldContainer; +import de.superx.elt.bin.SxTransformer; import de.superx.servlet.ServletUtils; import de.superx.servlet.SuperXManager; import de.superx.servlet.SxPools; diff --git a/src/de/superx/etl/TableUploader.java b/src/de/superx/elt/TableUploader.java similarity index 99% rename from src/de/superx/etl/TableUploader.java rename to src/de/superx/elt/TableUploader.java index cc4d7f0..5d193ac 100644 --- a/src/de/superx/etl/TableUploader.java +++ b/src/de/superx/elt/TableUploader.java @@ -5,7 +5,7 @@ * This package is licensed under the CampusSource License; * http://www.campussource.de/org/license/ */ -package de.superx.etl; +package de.superx.elt; import java.io.BufferedReader; import java.io.BufferedWriter; @@ -37,7 +37,6 @@ import java.text.ParseException; import java.util.Iterator; import java.util.Properties; -import de.superx.etl.util.FileUtils; import de.superx.util.SqlStringUtils; import javax.xml.parsers.DocumentBuilder; @@ -59,6 +58,7 @@ import org.postgresql.copy.CopyManager; import de.superx.bin.SxConnection; import de.superx.bin.SxJdbcClient; import de.superx.bin.UploadRecords; +import de.superx.elt.util.FileUtils; import de.memtext.util.DateUtils; import de.memtext.util.GetOpts; import de.memtext.util.StringUtils; @@ -252,7 +252,7 @@ public class TableUploader { org.xml.sax.InputSource is; NodeList rowlist; - mydomres = de.superx.etl.EtlUtils.buildDocumentFromXmlFile(srcFile); + mydomres = de.superx.elt.EtlUtils.buildDocumentFromXmlFile(srcFile); if(xml_search_path==null) { @@ -375,7 +375,7 @@ public class TableUploader { String copySql = "COPY " + targetTable + " FROM STDIN WITH DELIMITER '" + delim + "' NULL '' ENCODING '"+ encoding+"'"; copySql += header ? " HEADER" : ""; - String srcFileContent=de.superx.etl.EtlUtils.getFileContentsWithEncoding(srcFile, encoding); + String srcFileContent=de.superx.elt.EtlUtils.getFileContentsWithEncoding(srcFile, encoding); String msg=""; try { //dbmd=uploadConnection.getMetaData(); @@ -399,7 +399,7 @@ public class TableUploader { { String srcFileIso=srcFile+"_iso.tmp"; String srcFileContentValidIso = FileUtils.convertToIso(srcFileContent,"postgres") ;//new String(srcFileContent.getBytes("ISO-8859-1")); - de.superx.etl.EtlUtils.saveFileContentsWithEncoding(srcFileIso, srcFileContentValidIso, "iso-8859-9"); + de.superx.elt.EtlUtils.saveFileContentsWithEncoding(srcFileIso, srcFileContentValidIso, "iso-8859-9"); FileInputStream fis = new FileInputStream(srcFileIso); in4 = new BufferedReader(new InputStreamReader(fis, "iso-8859-9")); diff --git a/src/de/superx/etl/bin/Doquery.java b/src/de/superx/elt/bin/Doquery.java similarity index 98% rename from src/de/superx/etl/bin/Doquery.java rename to src/de/superx/elt/bin/Doquery.java index ddd6596..a1d3e6d 100644 --- a/src/de/superx/etl/bin/Doquery.java +++ b/src/de/superx/elt/bin/Doquery.java @@ -5,7 +5,7 @@ * This package is licensed under the CampusSource License; * http://www.campussource.de/org/license/ */ -package de.superx.etl.bin; +package de.superx.elt.bin; import java.io.File; import java.io.FileInputStream; @@ -26,7 +26,7 @@ import java.util.StringTokenizer; import de.superx.util.SqlStringUtils; import de.superx.bin.SxConnection; import de.superx.common.SuperX_el; -import de.superx.etl.QueryResultSerializer; +import de.superx.elt.QueryResultSerializer; import de.superx.servlet.SxPools; import de.superx.servlet.SxSQL_Server; diff --git a/src/de/superx/etl/bin/Dosql.java b/src/de/superx/elt/bin/Dosql.java similarity index 95% rename from src/de/superx/etl/bin/Dosql.java rename to src/de/superx/elt/bin/Dosql.java index 3b09ca7..51720a1 100644 --- a/src/de/superx/etl/bin/Dosql.java +++ b/src/de/superx/elt/bin/Dosql.java @@ -5,7 +5,7 @@ * This package is licensed under the CampusSource License; * http://www.campussource.de/org/license/ */ -package de.superx.etl.bin; +package de.superx.elt.bin; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; @@ -24,11 +24,11 @@ import java.util.logging.LogManager; import java.util.logging.Logger; import de.memtext.util.ExceptionHandler; -import de.superx.etl.util.GetOpts; import de.memtext.util.PropUtils; import de.superx.bin.SxConnection; -import de.superx.etl.EtlUtils; -import de.superx.etl.SqlExecutor; +import de.superx.elt.EtlUtils; +import de.superx.elt.SqlExecutor; +import de.superx.elt.util.GetOpts; /** * @author Daniel Quathamer Projektgruppe SuperX diff --git a/src/de/superx/etl/bin/EtlJobExecutor.java b/src/de/superx/elt/bin/EtlJobExecutor.java similarity index 85% rename from src/de/superx/etl/bin/EtlJobExecutor.java rename to src/de/superx/elt/bin/EtlJobExecutor.java index 0b12bf8..796d4a8 100644 --- a/src/de/superx/etl/bin/EtlJobExecutor.java +++ b/src/de/superx/elt/bin/EtlJobExecutor.java @@ -5,13 +5,13 @@ * This package is licensed under the CampusSource License; * http://www.campussource.de/org/license/ */ -package de.superx.etl.bin; +package de.superx.elt.bin; import java.sql.Connection; -import de.superx.etl.util.GetOpts; -import de.superx.etl.EtlActionJob; -import de.superx.etl.EtlUtils; +import de.superx.elt.EtlActionJob; +import de.superx.elt.EtlUtils; +import de.superx.elt.util.GetOpts; public class EtlJobExecutor { @@ -20,7 +20,7 @@ public class EtlJobExecutor { } public static void main(String[] args) { - String usage="usage: java de.superx.bin.EtlJobExecutor -dbproperties:$DB_PROPERTIES -job:abc -params:TID=16000 (optional) -outfile:Ausgabedatei (optional)" ; + String usage="usage: java de.superx.elt.bin.EtlJobExecutor -dbproperties:$DB_PROPERTIES -job:abc -params:TID=16000 (optional) -outfile:Ausgabedatei (optional)" ; GetOpts.setOpts(args); String isdrin = GetOpts.isAllRequiredOptionsPresent("-dbproperties,-job"); diff --git a/src/de/superx/etl/bin/SxTransformer.java b/src/de/superx/elt/bin/SxTransformer.java similarity index 99% rename from src/de/superx/etl/bin/SxTransformer.java rename to src/de/superx/elt/bin/SxTransformer.java index 58529b3..54cacd1 100644 --- a/src/de/superx/etl/bin/SxTransformer.java +++ b/src/de/superx/elt/bin/SxTransformer.java @@ -5,7 +5,7 @@ * This package is licensed under the CampusSource License; * http://www.campussource.de/org/license/ */ -package de.superx.etl.bin; +package de.superx.elt.bin; import java.io.BufferedWriter; import java.io.File; diff --git a/src/de/superx/etl/bin/UnloadRecords.java b/src/de/superx/elt/bin/UnloadRecords.java similarity index 99% rename from src/de/superx/etl/bin/UnloadRecords.java rename to src/de/superx/elt/bin/UnloadRecords.java index a26b1d0..fe03097 100644 --- a/src/de/superx/etl/bin/UnloadRecords.java +++ b/src/de/superx/elt/bin/UnloadRecords.java @@ -5,7 +5,7 @@ * This package is licensed under the CampusSource License; * http://www.campussource.de/org/license/ */ -package de.superx.etl.bin; +package de.superx.elt.bin; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; @@ -25,7 +25,7 @@ import java.util.StringTokenizer; import de.superx.util.SqlStringUtils; import de.superx.bin.SxConnection; import de.superx.common.SuperX_el; -import de.superx.etl.QueryResultSerializer; +import de.superx.elt.QueryResultSerializer; import de.superx.servlet.SxPools; import de.superx.servlet.SxSQL_Server; diff --git a/src/de/superx/etl/bin/UploadRecords.java b/src/de/superx/elt/bin/UploadRecords.java similarity index 95% rename from src/de/superx/etl/bin/UploadRecords.java rename to src/de/superx/elt/bin/UploadRecords.java index 8570c2d..61eb385 100644 --- a/src/de/superx/etl/bin/UploadRecords.java +++ b/src/de/superx/elt/bin/UploadRecords.java @@ -5,9 +5,9 @@ * This package is licensed under the CampusSource License; * http://www.campussource.de/org/license/ */ -package de.superx.etl.bin; -import de.superx.etl.util.GetOpts; -import de.superx.etl.TableUploader; +package de.superx.elt.bin; +import de.superx.elt.TableUploader; +import de.superx.elt.util.GetOpts; /* * @author Daniel Quathamer Projektgruppe SuperX diff --git a/src/de/superx/etl/util/FileUtils.java b/src/de/superx/elt/util/FileUtils.java similarity index 99% rename from src/de/superx/etl/util/FileUtils.java rename to src/de/superx/elt/util/FileUtils.java index 0fd94b7..69cbfe1 100644 --- a/src/de/superx/etl/util/FileUtils.java +++ b/src/de/superx/elt/util/FileUtils.java @@ -1,4 +1,4 @@ -package de.superx.etl.util; +package de.superx.elt.util; import java.io.BufferedReader; import java.io.BufferedWriter; diff --git a/src/de/superx/etl/util/GetOpts.java b/src/de/superx/elt/util/GetOpts.java similarity index 99% rename from src/de/superx/etl/util/GetOpts.java rename to src/de/superx/elt/util/GetOpts.java index 1db8737..51bc0b4 100644 --- a/src/de/superx/etl/util/GetOpts.java +++ b/src/de/superx/elt/util/GetOpts.java @@ -1,4 +1,4 @@ -package de.superx.etl.util; +package de.superx.elt.util; import java.util.StringTokenizer; diff --git a/src/de/superx/etl/util/GetOptsBackport.java b/src/de/superx/elt/util/GetOptsBackport.java similarity index 99% rename from src/de/superx/etl/util/GetOptsBackport.java rename to src/de/superx/elt/util/GetOptsBackport.java index dea4d8e..4a68d15 100644 --- a/src/de/superx/etl/util/GetOptsBackport.java +++ b/src/de/superx/elt/util/GetOptsBackport.java @@ -1,4 +1,4 @@ -package de.superx.etl.util; +package de.superx.elt.util; /** * Class to analyze arguments passed to Java class diff --git a/src/de/superx/sxrest/JobExecutor.java b/src/de/superx/sxrest/JobExecutor.java index 3eb3b33..2b10008 100644 --- a/src/de/superx/sxrest/JobExecutor.java +++ b/src/de/superx/sxrest/JobExecutor.java @@ -13,7 +13,7 @@ import java.sql.SQLException; import javax.servlet.http.HttpServletRequest; import de.memtext.util.DateUtils; import de.superx.common.SxUser; -import de.superx.etl.EtlActionJob; +import de.superx.elt.EtlActionJob; import de.superx.servlet.SuperXManager; @Path("/execute") diff --git a/src/de/superx/sxrest/LaunchUpgrade.java b/src/de/superx/sxrest/LaunchUpgrade.java index b504b72..be3dd5d 100644 --- a/src/de/superx/sxrest/LaunchUpgrade.java +++ b/src/de/superx/sxrest/LaunchUpgrade.java @@ -15,8 +15,8 @@ import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Request; import de.memtext.util.DateUtils; import de.superx.common.SxUser; -import de.superx.etl.EtlActionJob; -import de.superx.etl.EtlUtils; +import de.superx.elt.EtlActionJob; +import de.superx.elt.EtlUtils; import de.superx.servlet.SuperXManager; import javax.servlet.http.HttpServletRequest; diff --git a/src/de/superx/sxrest/MaskXml.java b/src/de/superx/sxrest/MaskXml.java index edfe164..d8018e7 100644 --- a/src/de/superx/sxrest/MaskXml.java +++ b/src/de/superx/sxrest/MaskXml.java @@ -35,8 +35,8 @@ import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Request; import de.memtext.util.DateUtils; import de.superx.common.SxUser; -import de.superx.etl.EtlActionJob; -import de.superx.etl.EtlUtils; +import de.superx.elt.EtlActionJob; +import de.superx.elt.EtlUtils; import de.superx.servlet.SuperXManager; import java.io.BufferedWriter; @@ -55,12 +55,18 @@ public class MaskXml { @GET @Path("/get/{param}") - @Produces(MediaType.TEXT_PLAIN) + @Produces(MediaType.APPLICATION_XML) - public String printXml(@PathParam("param") String tid,@Context HttpServletRequest request) { + public Document printXml(@PathParam("param") String tid,@Context HttpServletRequest request) { String returntext=""; - SxUser user = (SxUser) request.getSession().getAttribute("user"); + returntext = getMaskXml(tid, request); + + return de.memtext.util.XMLUtils.buildDocumentFromString(returntext, false); + } + private String getMaskXml(String tid, HttpServletRequest request) { + String returntext; + SxUser user = (SxUser) request.getSession().getAttribute("user"); String mandantenid= (String) request.getSession().getAttribute("MandantenID"); if(mandantenid==null || mandantenid.equals("")) mandantenid="default"; @@ -94,9 +100,18 @@ public class MaskXml { returntext+=myJob.getLogoutput(); } } - - return returntext; + return returntext; + } + @GET + @Path("/download/{param}") + @Produces(MediaType.APPLICATION_XML) + public String createDownloadXml(@PathParam("param") String tid,@Context HttpServletRequest request) { + String returntext=""; + returntext = getMaskXml(tid, request); + return returntext; + //return de.memtext.util.XMLUtils.buildDocumentFromString(returntext, false); } + /* Aktuell noch nicht genutzt: */ @GET @Path("/saveget/{params}") @Produces(MediaType.TEXT_PLAIN) @@ -121,6 +136,7 @@ public class MaskXml { return returntext; } + /* Aktuell noch nicht genutzt: */ @POST @Path("/save") @Consumes("application/x-www-form-urlencoded") @@ -146,7 +162,7 @@ public class MaskXml { else { try { - if(de.superx.etl.EtlUtils.isNodeValueInXml(src,searchString,tid)) + if(de.superx.elt.EtlUtils.isNodeValueInXml(src,searchString,tid)) { String job="sx_insert_mask"; returntext="TID="+tid; diff --git a/superx/WEB-INF/lib/superx-etl.jar b/superx/WEB-INF/lib/superx-etl.jar index de0975e22d9799863e893548046c31ed9183d1ef..c9d26a9750d21d56243d2b29dd9b42f20b4a4a52 100644 GIT binary patch delta 49907 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 z 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 ETL Manager +