-------------------------------------------------------- -- DDL for Package Body PKG_REPOSITORY_ACTIONS -------------------------------------------------------- CREATE OR REPLACE EDITIONABLE PACKAGE BODY "ENVX_OPER"."PKG_REPOSITORY_ACTIONS" AS ---------------------------------------------------- --------------------- FUNCTIONS -------------------- ---------------------------------------------- FUNCTION f_get_branch ( p_json_parameters IN CLOB, po_message OUT VARCHAR2 ) RETURN CLOB IS v_rest_request_id VARCHAR2(500); v_id_repository NUMBER; -- Variables para realizar la llamada http v_url VARCHAR2(2000); v_http_method VARCHAR2(100); v_http_headers http_headers_tab; v_body CLOB; v_http_status_code NUMBER; v_response CLOB; v_response_code VARCHAR2(50); v_error_message VARCHAR2(400); v_count_reg NUMBER := 0; v_list_size VARCHAR2(100); v_page_number VARCHAR2(100); BEGIN -------------------------------------------------------- -- Se obtienen los valores de solicitud y repositorio -- v_rest_request_id := JSON_VALUE(p_json_parameters, '$.rest_request_id'); v_id_repository := JSON_VALUE(p_json_parameters, '$.repository_id'); v_list_size := JSON_VALUE(p_json_parameters, '$.list_size'); v_page_number := JSON_VALUE(p_json_parameters, '$.page_number'); -- Se obtienen los valores de solicitud y repositorio -- -------------------------------------------------------- -- Extraer URL de una tabla -- v_url := 'https://api.dev.envx.io/repo/v1/action/branch?restRequestId=' || v_rest_request_id || '&repositoryId=' || v_id_repository || '&groupType=default&pageNumber=' || v_page_number || '&listSize=' || v_list_size; v_http_method := 'GET'; ------------------------------------- -- Llamada REST a /action/branches -- pkg_sicd_commons.p_rest_call_apim( v_url, v_http_method, v_body, v_http_status_code, v_http_headers, v_response, v_response_code, v_error_message ); -- Llamada REST a /action/branches -- ------------------------------------- RETURN v_response; EXCEPTION WHEN OTHERS THEN po_message := 'Error: ' || sqlerrm; END; ---------------------------------------------- ---------------------------------------------- FUNCTION f_get_filesgroup ( p_json_parameters IN CLOB, po_message OUT VARCHAR2 ) RETURN CLOB AS v_json_aux json := JSON( p_json_parameters ); -- Variables para la lectura de json de entrada -- v_rest_request_id VARCHAR2(100); v_request_id NUMBER; v_repository_id NUMBER; v_branch_name VARCHAR2(50); v_type_group VARCHAR2(100); v_list_size VARCHAR2(100); v_page_number VARCHAR2(100); -- Variables para la lectura de json de entrada -- -- Variables para ejecutar p_rest_call -- v_url VARCHAR2(2000); v_http_method VARCHAR2(100); v_http_headers http_headers_tab; v_body CLOB; v_http_status_code NUMBER; v_response CLOB; v_response_code VARCHAR2(50); v_error_message VARCHAR2(400); -- Variables para ejecutar p_rest_call -- BEGIN --------------------------------------- -- Obtencion de variables de trabajo -- v_request_id := JSON_VALUE(v_json_aux, '$.request_id'); v_rest_request_id := JSON_VALUE(v_json_aux, '$.rest_request_id'); v_repository_id := JSON_VALUE(v_json_aux, '$.repository_id'); v_branch_name := JSON_VALUE(v_json_aux, '$.branch_name'); v_type_group := JSON_VALUE(v_json_aux, '$.type_group'); v_list_size := JSON_VALUE(v_json_aux, '$.list_size'); v_page_number := JSON_VALUE(v_json_aux, '$.page_number'); -- v_files_group_id := JSON_VALUE(v_json_aux, '$.filesGroupId'); -- Obtencion de variables de trabajo -- --------------------------------------- IF v_repository_id IS NOT NULL THEN -- Extraer URL de una tabla -- v_url := 'https://api.dev.envx.io/repo/v1/action/filesGroup?' || 'restRequestId=' || v_rest_request_id || '&repositoryId=' || v_repository_id || '&branchName=' || v_branch_name || '&groupType=' || v_type_group || '&listSize=' || v_list_size || '&pageNumber=' || v_page_number; -- || '&filesGroupId=' -- || v_files_group_id; v_http_method := 'GET'; ----------------------------------------------------- -- Se realiza la llamada REST a /action/filesGroup -- pkg_sicd_commons.p_rest_call_apim( v_url, v_http_method, v_body, v_http_status_code, v_http_headers, v_response, v_response_code, v_error_message ); -- Se realiza la llamada REST a /action/filesGroup -- ----------------------------------------------------- RETURN v_response; po_message := v_error_message; END IF; EXCEPTION WHEN OTHERS THEN po_message := 'Error: ' || sqlerrm; END; ---------------------------------------------- ---------------------------------------------- FUNCTION f_get_file ( p_json_parameters IN CLOB, po_message OUT VARCHAR2 ) RETURN CLOB AS v_json_aux CLOB; -- Variables para la lectura de parametros de entrada -- v_rest_request_id VARCHAR2(100); v_request_id NUMBER; v_repository_id NUMBER; v_branch_name VARCHAR2(50); v_type_group VARCHAR2(100); v_group_id VARCHAR2(100); v_list_size VARCHAR2(100); v_page_number VARCHAR2(100); v_http_headers http_headers_tab; -- Variables para la lectura de parametros de entrada -- -- Variables para ejecutar la llamada http -- v_url VARCHAR2(2000); v_http_method VARCHAR2(100); v_body CLOB; v_http_status_code NUMBER; v_response CLOB; v_response_code VARCHAR2(50); v_error_message VARCHAR2(400); -- Variables para ejecutar la llamada http -- BEGIN -------------------------------------------------------- -- Se obtienen los valores de solicitud y repositorio -- v_request_id := JSON_VALUE(p_json_parameters, '$.request_id'); v_rest_request_id := JSON_VALUE(p_json_parameters, '$.rest_request_id'); v_repository_id := JSON_VALUE(p_json_parameters, '$.repository_id'); v_branch_name := JSON_VALUE(p_json_parameters, '$.branch_name'); v_type_group := JSON_VALUE(p_json_parameters, '$.type_group'); v_group_id := JSON_VALUE(p_json_parameters, '$.group_id'); v_list_size := JSON_VALUE(p_json_parameters, '$.list_size'); v_page_number := JSON_VALUE(p_json_parameters, '$.page_number'); -- Se obtienen los valores de solicitud y repositorio -- -------------------------------------------------------- IF v_repository_id IS NOT NULL THEN -- Extraer URL de una tabla -- v_url := 'https://api.dev.envx.io/repo/v1/action/files?' || 'restRequestId=' || v_rest_request_id || '&repositoryId=' || v_repository_id || '&branchName=' || v_branch_name || '&groupType=' || v_type_group || '&filesGroupId=' || v_group_id || '&listSize=' || v_list_size || '&pageNumber=' || v_page_number; v_http_method := 'GET'; ------------------------------------------------ -- Se realiza la llamada REST a file -- pkg_sicd_commons.p_rest_call_apim( v_url, v_http_method, v_body, v_http_status_code, v_http_headers, v_response, v_response_code, v_error_message ); -- Se realiza la llamada REST a file -- ------------------------------------------------ RETURN v_response; po_message := 'Mostrando la pagina ' || v_page_number; END IF; EXCEPTION WHEN OTHERS THEN po_message := 'Error: ' || sqlerrm; END; ---------------------------------------------- ---------------------------------------------- FUNCTION f_filesgroup_query ( pi_filegroup_type IN VARCHAR2, pi_filesgroup_jsonc IN VARCHAR2 ) RETURN CLOB AS v_query CLOB; v_select VARCHAR2(4000); BEGIN SELECT UNIQUE 'SELECT ' || list_representation INTO v_select FROM repository_type_search t WHERE t.alias = pi_filegroup_type; v_query := v_select || ' FROM JSON_TABLE(json(:' || upper(pi_filesgroup_jsonc) || q'~), '$' COLUMNS ( pageNumber NUMBER PATH '$.pageNumber', totalPage NUMBER PATH '$.totalPage', filesGroup JSON PATH '$.filesGroup[*]', NESTED PATH '$.filesGroup[*]' COLUMNS( c_date VARCHAR2(100) PATH '$.date', author VARCHAR2(100) PATH '$.author', email VARCHAR2(100) PATH '$.email', groupId VARCHAR2(100) PATH '$.groupId', message VARCHAR2(100) PATH '$.message', total NUMBER PATH '$.stats.total', additions NUMBER PATH '$.stats.additions', deletions NUMBER PATH '$.stats.deletions' ) ) ) ORDER BY 1;~'; RETURN v_query; END; ---------------------------------------------- ---------------------------------------------- FUNCTION f_files_query ( pi_files_jsonc IN VARCHAR2 ) RETURN CLOB AS v_query CLOB; BEGIN v_query := q'~SELECT jt.files as file_name, APEX_UTIL.URL_ENCODE(jt.files) AS file_id FROM JSON_TABLE(nvl(:~' || pi_files_jsonc || q'~,'[ ]'), '$.files[*]' COLUMNS (files PATH '$.file') ) jt UNION SELECT file_name as file_name, APEX_UTIL.URL_ENCODE(file_name) AS file_id FROM json_table(:P4_SELECTED_OBJ,'$[*]' COLUMNS (file_name PATH '$.object_name' )) q ORDER BY 1;~'; RETURN v_query; END; ---------------------------------------------- ---------------------------------------------- FUNCTION f_branches_query ( pi_branches_jsonc IN VARCHAR2 ) RETURN CLOB AS v_query CLOB; v_select VARCHAR2(4000); BEGIN v_query := q'~SELECT branch_name, branch_name as id_branch FROM JSON_TABLE(JSON(:~' || pi_branches_jsonc || q'~), '$.branch[*]' COLUMNS ( branch_name VARCHAR2(4000) PATH '$.name' ));~'; RETURN v_query; END; ---------------------------------------------- ---------------------------------------------- PROCEDURE p_manage_object_form ( pi_selector IN VARCHAR2, pi_groups IN VARCHAR2, p_selected_list IN OUT CLOB, p_selected_obj IN OUT CLOB ) AS v_json_array json_array_t := json_array_t(); v_object VARCHAR2(4000); v_object_aux VARCHAR2(4000); v_array apex_application_global.vc_arr2; v_coincidence_flag NUMBER := 0; v_log_message CLOB; v_error VARCHAR2(500); BEGIN IF pi_selector IS NOT NULL THEN FOR i IN 1..regexp_count( pi_selector, ':' ) + 1 LOOP v_object := regexp_substr( pi_selector, '[^:]+', 1, i ); BEGIN SELECT object_json INTO v_object_aux FROM JSON_TABLE ( JSON( p_selected_obj ), '$[*]' COLUMNS object_name PATH '$.object_name', object_json JSON PATH '$' ) q WHERE q.object_name = utl_url.unescape(v_object); -- v_object_aux := UTL_URL.UNESCAPE(v_object_aux); EXCEPTION WHEN no_data_found THEN v_object_aux := '{"object_id":"' || pi_groups || '","object_name":"' || utl_url.unescape(v_object) || '","object_order":"' || i || '"}'; WHEN too_many_rows THEN v_error := sqlerrm; INSERT INTO internal_test VALUES ( systimestamp, p_selected_obj, v_error, pi_selector ); COMMIT; END; v_json_array.append( JSON( v_object_aux ) ); END LOOP; p_selected_list := pi_selector; p_selected_obj := v_json_array.to_clob(); END IF; END; ---------------------------------------------- PROCEDURE p_save_object_form( pi_selected_obj IN CLOB, pi_json_parameter IN CLOB, po_message OUT VARCHAR2 ) AS v_groups VARCHAR2(400); v_selected_list CLOB; v_selector CLOB; -- 'test1.txt:test2.txt:test3.txt:test4.txt' v_id_request NUMBER := 0; v_id_pattern NUMBER := 0; v_id_req_hgroup VARCHAR2(400); v_selected_obj CLOB; BEGIN v_selector := JSON_VALUE(pi_json_parameter, '$.selector'); v_groups := JSON_VALUE(pi_json_parameter, '$.groups'); v_selected_list := JSON_VALUE(pi_json_parameter, '$.selected_list'); v_id_request := JSON_VALUE(pi_json_parameter, '$.id_request'); v_id_pattern := JSON_VALUE(pi_json_parameter, '$.id_pattern'); v_id_req_hgroup := JSON_VALUE(pi_json_parameter, '$.id_req_hgroup'); v_selected_obj := pi_selected_obj; DELETE deployment_req_object WHERE id_req_hgroup = v_id_req_hgroup; COMMIT; IF v_selector IS NOT NULL THEN INSERT INTO deployment_req_object ( id_dep_req_object, id_request, id_pattern, id_req_hgroup, object_order, id_object_repo, id_reqdet_instance, object_dep_status, object_version, object_name, object_source_path )SELECT s_deployment_req_obj_id.NEXTVAL, v_id_request, v_id_pattern, v_id_req_hgroup, ROWNUM as object_order, object_id, NULL, NULL, NULL, UTL_URL.UNESCAPE(REGEXP_SUBSTR(object_name, '[^/]+$', 1, 1)) as object_name, UTL_URL.UNESCAPE(REGEXP_SUBSTR(object_name, '.*\/')) as object_path FROM JSON_TABLE( JSON( pi_selected_obj ), '$[*]' COLUMNS ( object_name VARCHAR2 ( 300 ) PATH '$.object_name', object_id VARCHAR2 ( 300 ) PATH '$.object_id' ) ); COMMIT; END IF; EXCEPTION WHEN OTHERS THEN po_message := 'Error: ' || sqlerrm; END; ---------------------------------------------- END pkg_repository_actions; /