DBA Data[Home] [Help]

PACKAGE BODY: APPS.CZ_UIOA_PVT

Source


1 PACKAGE BODY CZ_UIOA_PVT AS
2 /*	$Header: czuioab.pls 120.78.12010000.3 2009/03/02 13:53:56 jonatara ship $		*/
3 
4   G_GEN_VERSION                 CONSTANT VARCHAR2(25)  :='11.5.20';
5   G_GEN_HEADER                  CONSTANT VARCHAR2(100) :='$Header: czuioab.pls 120.78.12010000.3 2009/03/02 13:53:56 jonatara ship $';
6 
7   G_DEFAULT_MASTER_TEMPLATE_ID  CONSTANT INTEGER   := 10;
8 
9   G_PAGE_STATUS_CONTENT_TYPE    CONSTANT INTEGER   := 187;
10 
11   G_TEMPLATE_USE_COPY           CONSTANT INTEGER   := 1;
12   G_TEMPLATE_USE_LOCAL_COPY     CONSTANT INTEGER   := 2;
13   G_TEMPLATE_USE_BY_REFERENCE   CONSTANT INTEGER   := 3;
14 
15   G_DEFAULT_PRICE_DISPLAY       CONSTANT INTEGER   := 3;
16   G_DEFAULT_PRICE_UPDATE        CONSTANT INTEGER   := 1;
17 
18   G_ONE_COL_CONTROL_LAYOUT      CONSTANT INTEGER   := 0;
19   G_TWO_COL_CONTROL_LAYOUT      CONSTANT INTEGER   := 1;
20   G_THREE_COL_CONTROL_LAYOUT    CONSTANT INTEGER   := 2;
21 
22   G_PRODUCT_TYPE                CONSTANT INTEGER   := CZ_TYPES.PS_NODE_TYPE_PRODUCT;
23   G_COMPONENT_TYPE              CONSTANT INTEGER   := CZ_TYPES.PS_NODE_TYPE_COMPONENT;
24   G_REFERENCE_TYPE              CONSTANT INTEGER   := CZ_TYPES.PS_NODE_TYPE_REFERENCE;
25   G_CONNECTOR_TYPE              CONSTANT INTEGER   := CZ_TYPES.PS_NODE_TYPE_CONNECTOR;
26   G_BOM_MODEL_TYPE              CONSTANT INTEGER   := CZ_TYPES.PS_NODE_TYPE_BOM_MODEL;
27   G_FEATURE_TYPE                CONSTANT INTEGER   := CZ_TYPES.PS_NODE_TYPE_FEATURE;
28   G_OPTION_TYPE                 CONSTANT INTEGER   := CZ_TYPES.PS_NODE_TYPE_OPTION;
29   G_BOM_OPTION_CLASS_TYPE       CONSTANT INTEGER   := CZ_TYPES.PS_NODE_TYPE_BOM_OPTION_CLASS;
30   G_BOM_STANDART_ITEM_TYPE      CONSTANT INTEGER   := CZ_TYPES.PS_NODE_TYPE_BOM_STANDART_ITEM;
31 
32   G_UNDEFINED_DATA_TYPE         CONSTANT INTEGER   := CZ_TYPES.DATA_TYPE_NODE;
33 
34   G_DEFAULT_CAPTION_RULE_ID     CONSTANT INTEGER   := 800;
35   G_CAPTION_RULE_TOKENNAME      VARCHAR2(255);
36 
37   G_CX_BUTTON_ACTION_TYPE       CONSTANT INTEGER   := 23;
38 
39   G_OPTIONAL_INST_TYPE          CONSTANT INTEGER   := 1;
40   G_MANDATORY_INST_TYPE         CONSTANT INTEGER   := 2;
41   G_CONNECTOR_INST_TYPE         CONSTANT INTEGER   := 3;
42   G_MINMAX_INST_TYPE            CONSTANT INTEGER   := 4;
43 
44   G_SINGLE_PAGE                 CONSTANT INTEGER   := 0;
45   G_PAGE_FLOW                   CONSTANT INTEGER   := 1;
46   G_SINGLE_LEVEL_MENU           CONSTANT INTEGER   := 2;
47   G_MULTI_LEVEL_MENU            CONSTANT INTEGER   := 3;
48   G_MODEL_TREE_MENU             CONSTANT INTEGER   := 4;
49   G_SUBTABS                     CONSTANT INTEGER   := 5;
50 
51   G_SINGLE_PG_TYPE              CONSTANT NUMBER    := 0;
52   G_SUBSECTIONS_PG_TYPE         CONSTANT NUMBER    := 1;
53   G_NEW_PAGES_PG_TYPE           CONSTANT NUMBER    := 2;
54   G_DRILLDOWN_PAGES_PG_TYPE     CONSTANT NUMBER    := 3;
55 
56   G_UI_PAGE_NODE_TYPE           CONSTANT NUMBER    := 520;
57   G_UI_REGION_NODE_TYPE         CONSTANT NUMBER    := 521;
58   G_UI_REGULAR_NODE_TYPE        CONSTANT NUMBER    := 522;
59   G_UI_DRILLDOWN_NODE_TYPE      CONSTANT NUMBER    := 523;
60   G_UI_NONBOMADDINST_NODE_TYPE  CONSTANT NUMBER    := 524;
61   G_UI_BOMADDINST_NODE_TYPE     CONSTANT NUMBER    := 525;
62   G_UI_DELINST_NODE_TYPE        CONSTANT NUMBER    := 526;
63   G_UI_MINMAXREF_NODE_TYPE      CONSTANT NUMBER    := 527;
64   G_UI_CX_BUTTON_NODE_TYPE      CONSTANT NUMBER    := 528;
65   G_UI_PAGEDRILLDOWN_NODE_TYPE  CONSTANT NUMBER    := 529;
66   G_UMINMAX_CONNECTOR_TYPEID    CONSTANT NUMBER    := 541;
67 
68   G_UNON_COUNT_FEATURE_TYPEID   CONSTANT INTEGER   := 537;
69   G_UCOUNT_FEATURE_TYPEID       CONSTANT INTEGER   := 540;
70   G_UCOUNT_FEATURE01_TYPEID     CONSTANT INTEGER   := 539;
71   G_UMINMAX_FEATURE_TYPEID      CONSTANT INTEGER   := 538;
72 
73   G_ACTION_GO_TO_PAGE           CONSTANT INTEGER   := 1;
74   G_ACTION_CONFIGURE_SUBCOMP    CONSTANT INTEGER   := 9;
75 
76   G_CZ_EXTENTSIONS_RULE_TYPE    CONSTANT NUMBER    := 300;
77   G_EXPR_SYS_ARGUMENT           CONSTANT NUMBER    := 217;
78   G_EVENT_ON_COMMAND_SIGID      CONSTANT NUMBER    := 2203;
79   G_GENERATE_OUTPUT_EVENT       CONSTANT NUMBER    := 31;
80   G_RAISE_COMMAND_EVENT         CONSTANT NUMBER    := 32;
81 
82   G_NEW_UI_STATUS               CONSTANT VARCHAR2(255) := 'NEW';
83   G_REFRESH_UI_STATUS           CONSTANT VARCHAR2(255) := 'REFRESH';
84   G_RUNNING_STATUS              CONSTANT VARCHAR2(255) := 'RUNNING';
85   G_ERROR_STATUS                CONSTANT VARCHAR2(255) := 'ERROR';
86   G_PROCESSED_UI_STATUS         CONSTANT VARCHAR2(255) := 'PROCESSED';
87 
88   G_CX_VALID                    CONSTANT VARCHAR2(1) :='V';
89   G_CX_INVALID                  CONSTANT VARCHAR2(1) :='I';
90   G_CX_MUST_BE_DELETED          CONSTANT VARCHAR2(1) :='D';
91 
92   G_GLOBAL_TEMPLATES_UI_DEF_ID  CONSTANT INTEGER   := 0;
93 
94   G_NO_FLAG                     CONSTANT VARCHAR2(1)   := '0';
95   G_YES_FLAG                    CONSTANT VARCHAR2(1)   := '1';
96 
97   G_MARK_TO_ADD                 CONSTANT VARCHAR2(1)   := '2';
98   G_MARK_TO_DELETE              CONSTANT VARCHAR2(1)   := '3';
99   G_MARK_TO_REFRESH             CONSTANT VARCHAR2(1)   := '4';
100   G_MARK_DO_NOT_REFRESH         CONSTANT VARCHAR2(1)   := '5';
101   G_MARK_TO_DEASSOCIATE         CONSTANT VARCHAR2(1)   := '6';
102   G_LIMBO_FLAG                  CONSTANT VARCHAR2(1)   := '7';
103   G_MARK_TO_MOVE                CONSTANT VARCHAR2(1)   := '8';
104 
105   G_CREATE_ONLY_UI_STRUCTURE    CONSTANT VARCHAR2(1)   := '1';
106   G_CREATE_ONLY_UI_XML          CONSTANT VARCHAR2(1)   := '2';
107 
108   G_CONTAINER_TEMPLATE_ID       INTEGER                := 1;
109 
110   G_NSTD_CONTAINER_TEMPLATE_ID  CONSTANT INTEGER       := 620;
111 
112   G_2COLS_CONTAINER_TEMPLATE_ID CONSTANT INTEGER       := 660;
113   G_3COLS_CONTAINER_TEMPLATE_ID CONSTANT INTEGER      := 661;
114 
115   G_DRILLDOWN_BUTTON_TEMPLATE_ID  CONSTANT INTEGER     := 230;
116   G_DRILLDOWN_IMAGE_TEMPLATE_ID   CONSTANT INTEGER     := 231;
117   G_DRILLDOWN_LABEL_TEMPLATE_ID   CONSTANT INTEGER     := 232;
118 
119   G_DELETE_PAGE                   CONSTANT INTEGER     := 1;
120   G_DELETE_ELEMENTS               CONSTANT INTEGER     := 2;
121   G_REFRESH_PAGE                  CONSTANT INTEGER     := 3;
122   G_NEW_PAGE                      CONSTANT INTEGER     := 4;
123 
124   G_LABEL_PAIR_LAYOUT_STYLE       CONSTANT INTEGER     := 1;
125   G_WRAPPED_LAYOUT_STYLE          CONSTANT INTEGER     := 2;
126   G_TABLE_LAYOUT_STYLE            CONSTANT INTEGER     := 3;
127   G_OTHER_LAYOUT_STYLE            CONSTANT INTEGER     := 9;
128 
129   G_DELETE_MODE                   CONSTANT VARCHAR2(1) := '0';
130   G_COPY_MODE                     CONSTANT VARCHAR2(1) := '0';
131 
132   G_UMPERS                        CONSTANT VARCHAR2(1) := fnd_global.local_chr(38);
133 
134   g_DRILLDOWN_TEMPLATE_ID         INTEGER              := 230;
135   g_DRILLDOWN_ELEM_SIGNATURE_ID   INTEGER;
136   g_DRILLDOWN_B_SIGNATURE_ID      INTEGER;
137 
138   g_suppress_refresh_flag         VARCHAR2(1)          := '0';
139 
140   G_USER_ATTRIBUTE1_NAME        CONSTANT VARCHAR2(255) := 'user:attribute1';
141   G_USER_ATTRIBUTE2_NAME        CONSTANT VARCHAR2(255) := 'user:attribute2';
142   G_USER_ATTRIBUTE3_NAME        CONSTANT VARCHAR2(255) := 'user:attribute3';
143   G_USER_ATTRIBUTE4_NAME        CONSTANT VARCHAR2(255) := 'user:attribute4';
144   G_USER_ATTRIBUTE5_NAME        CONSTANT VARCHAR2(255) := 'user:attribute5';
145   G_USER_ATTRIBUTE10_NAME       CONSTANT VARCHAR2(255) := 'user:attribute10';
146 
147   G_UI_CONTENTS_TAG             CONSTANT VARCHAR2(255) := 'ui:contents';
148   G_ID_ATTRIBUTE                CONSTANT VARCHAR2(255) := 'id';
149 
150   G_HEADER_TAG                  CONSTANT VARCHAR2(255) := 'oa:header';
151   G_NESTED_TAG                  CONSTANT VARCHAR2(255) := 'user:nested';
152   G_ROW_LAYOUT_TAG              CONSTANT VARCHAR2(255) := 'oa:rowLayout';
153   G_CONTENT_CONTAINER_TAG       CONSTANT VARCHAR2(255) := 'oa:contentContainer';
154   G_STACK_LAYOUT_TAG            CONSTANT VARCHAR2(255) := 'oa:stackLayout';
155   G_TABLE_TAG                   CONSTANT VARCHAR2(255) := 'oa:table';
156   G_SUBMIT_BUTTON_TAG           CONSTANT VARCHAR2(255) := 'oa:submitButton';
157   G_MSG_CHECKBOX_TAG            CONSTANT VARCHAR2(255) := 'oa:messageCheckbox';
158   G_MSG_RADIO_BUTTON_TAG        CONSTANT VARCHAR2(255) := 'oa:messageRadioButton';
159   G_MSG_STYLED_TEXT_TAG         CONSTANT VARCHAR2(255) := 'oa:messageStyledText';
160   G_MSG_TEXT_INPUT_TAG          CONSTANT VARCHAR2(255) := 'oa:messageTextInput';
161   G_MSG_CHOICE_TAG              CONSTANT VARCHAR2(255) := 'oa:messageChoice';
162   G_TABLE_LAYOUT_TAG            CONSTANT VARCHAR2(255) := 'oa:tableLayout';
163   G_CELL_FORMAT_TAG             CONSTANT VARCHAR2(255) := 'oa:cellFormat';
164   G_FLOW_LAYOUT_TAG             CONSTANT VARCHAR2(255) := 'oa:flowLayout';
165   G_DBL_COL_LAYOUT_TAG          CONSTANT VARCHAR2(255) := 'oa:doubleColumnLayout';
166   G_SUB_TAB_LAYOUT_TAG          CONSTANT VARCHAR2(255) := 'oa:subTabLayout';
167   G_TEXT_TAG                    CONSTANT VARCHAR2(255) :=  'oa:staticStyledText';
168   G_BUTTON_TAG                  CONSTANT VARCHAR2(255) :=  'oa:button';
169   G_IMAGE_TAG                   CONSTANT VARCHAR2(255) :=  'oa:image';
170   G_SPACER_TAG                  CONSTANT VARCHAR2(255) :=  'oa:spacer';
171   G_TEMPLATE_INCLUDE_TAG        CONSTANT VARCHAR2(255) :=  'oa:templateInclude';
172   G_RAW_TEXT_TAG                CONSTANT VARCHAR2(255) :=  'oa:rawText';
173   G_SWITCHER_TAG                CONSTANT VARCHAR2(255) :=  'oa:switcher';
174 
175   G_INLINE_COPY_TMPL            CONSTANT VARCHAR2(255) :=  'TEMPLATE';
176   G_INLINE_COPY_UIPAGE          CONSTANT VARCHAR2(255) :=  'PAGE';
177 
178   G_ROW_LAYOUT                    CONSTANT NUMBER := 6001;
179   G_CELL_FORMAT                   CONSTANT NUMBER := 6002;
180   G_FLOW_LAYOUT                   CONSTANT NUMBER := 6003;
181   G_STACK_LAYOUT                  CONSTANT NUMBER := 6004;
182   G_BULLETED_LIST                 CONSTANT NUMBER := 6005;
183   G_TABLE_LAYOUT                  CONSTANT NUMBER := 6006;
184   G_HEADER_REGION                 CONSTANT NUMBER := 6007;
185   G_SWITCHER_REGION               CONSTANT NUMBER := 6008;
186   G_CASE_REGION                   CONSTANT NUMBER := 6009;
187   G_CONTENT_CONTAINER             CONSTANT NUMBER := 6010;
188   G_UI_TEMPLATE_REFERENCE         CONSTANT NUMBER := 6011;
189   G_SUMMARY_TABLE                 CONSTANT NUMBER := 6012;
190   G_ITEM_SELECTION_TABLE          CONSTANT NUMBER := 6013;
191   G_INSTANCE_MANAGEMENT_TABLE     CONSTANT NUMBER := 6014;
192   G_INSTANCE_MANAGEMENT_CONTROL   CONSTANT NUMBER := 6015;
193   G_CONNECTION_NAVIGATOR          CONSTANT NUMBER := 6016;
194   G_CONNECTION_TARGETS_TABLE      CONSTANT NUMBER := 6017;
195   G_STYLED_TEXT                   CONSTANT NUMBER := 6018;
196   G_IMAGE                         CONSTANT NUMBER := 6019;
197   G_BUTTON                        CONSTANT NUMBER := 6020;
198   G_SPACER                        CONSTANT NUMBER := 6021;
199   G_TEXT_INPUT                    CONSTANT NUMBER := 6022;
200   G_DROPDOWN_LIST                 CONSTANT NUMBER := 6023;
201   G_CHECK_BOX                     CONSTANT NUMBER := 6024;
202   G_RADIO_BUTTON                  CONSTANT NUMBER := 6025;
203   G_SELECTION_STATUS_INDICATOR    CONSTANT NUMBER := 6026;
204   G_RAW_TEXT                      CONSTANT NUMBER := 6027;
205   G_NODE_LIST_LAYOUT_REGION       CONSTANT NUMBER := 6028;
206   G_NAVIGATION_BAR                CONSTANT NUMBER := 6030;
207   G_LINK                          CONSTANT NUMBER := 6031;
208   G_BUTTON_BAR                    CONSTANT NUMBER := 6032;
209   G_RADIO_BUTTON_GROUP            CONSTANT NUMBER := 6033;
210   G_SCRIPT                        CONSTANT NUMBER := 6034;
211   G_SEPARATOR                     CONSTANT NUMBER := 6035;
212   G_SERVLET_INCLUDE               CONSTANT NUMBER := 6036;
213   G_SUBTAB_LAYOUT                 CONSTANT NUMBER := 6040;
214   G_TIP                           CONSTANT NUMBER := 6041;
215   G_TRAIN                         CONSTANT NUMBER := 6042;
216   G_PAGE                          CONSTANT NUMBER := 6044;
217   G_HIDESHOW_REGION               CONSTANT NUMBER := 6045;
218   G_INSTANTIATION_CHECKBOX        CONSTANT NUMBER := 6047;
219   G_ENHANCED_CHECKBOX             CONSTANT NUMBER := 6048;
220   G_ENHANCED_RADIO_BUTTON         CONSTANT NUMBER := 6049;
221   G_STATIC_STYLED_TEXT            CONSTANT NUMBER := 6050;
222   G_FORMATTED_TEXT                CONSTANT NUMBER := 6051;
223   G_EMPTY                         CONSTANT NUMBER := 6052;
224   G_NODE_LIST_ROW_LAYOUT          CONSTANT NUMBER := 6053;
225   G_NODE_LIST_FLOW_LAYOUT         CONSTANT NUMBER := 6055;
226   G_PAGE_INCLUDE_REGION           CONSTANT NUMBER := 6068;
227   G_NODE_LIST_STACK_LAYOUT        CONSTANT NUMBER := 6057;
228   G_NODE_LIST_BULLETED_LIST       CONSTANT NUMBER := 6059;
229   G_NODE_LIST_TABLE_LAYOUT        CONSTANT NUMBER := 6061;
230   G_FORMATTED_TEXT                CONSTANT NUMBER := 6067;
231   G_PAGE_INCL_REGION_SIGNATURE    CONSTANT NUMBER := 6073;
232 
233   G_ADDED_FLAG                    CONSTANT VARCHAR2(1)   := '0';
234   G_REMOVED_FLAG                  CONSTANT VARCHAR2(1)   := '1';
235   G_EXISTS_FLAG                   CONSTANT VARCHAR2(1)   := '3';
236 
237   G_TABLELAYOUT_TEMPLATE        VARCHAR2(255) := '/oracle/apps/cz/runtime/oa/webui/templates/regions/TableLayoutRegion';
238   G_ANCHOR_TEMPLATE             VARCHAR2(255) := '/oracle/apps/cz/runtime/oa/webui/templates/regions/Anchor';
239   G_LINK_TEMPLATE               VARCHAR2(255) := '/oracle/apps/cz/runtime/oa/webui/templates/Link';
240 
241   g_PAGE_STATUS_TEMPLATE_ID      NUMBER;
242 
243   G_DEFAULT_START_URL            VARCHAR2(255) := 'czContainer.jsp';
244   G_DEFAULT_PAGE_LAYOUT          VARCHAR2(255) := '/oracle/apps/cz/runtime/oa/webui/pages/CZMainPage';
245 
246   G_DRILLDOWN_TEMPLATE_NAME      VARCHAR2(255);
247 
248   G_MSGTEMP_RQDMSG_OVRCTRDIC     NUMBER := 600;
249   G_MSGTEMP_RQDMSG_NOVRCTRDIC    NUMBER := 601;
250   G_MSGTEMP_RQDMSG_INVLDINP      NUMBER := 603;
251   G_MSGTEMP_RQDMSG_FATERR        NUMBER := 613;
252 
253   G_MSGTEMP_OPTMSG_VLDNOTIF      NUMBER := 620;
254   G_MSGTEMP_OPTMSG_CNFRMSAVFIN   NUMBER := 606;
255   G_MSGTEMP_OPTMSG_CNFRMCANCEL   NUMBER := 608;
256   G_MSGTEMP_OPTMSG_CNFRMDELINST  NUMBER := 610;
257   G_MSGTEMP_OPTMSG_CNFRMLDINST   NUMBER := 628;
258   G_MSGTEMP_OPTMSG_CNFRMEDINST   NUMBER := 616;
259   G_MSGTEMP_OPTMSG_QRYDELINST    NUMBER := 630;
260 
261   G_UTILTEMP_BB_BASICTXN         NUMBER := 175;
262   G_UTILTEMP_BB_NSTXN            NUMBER := 24;
263   G_UTILTEMP_BB_2PGNVG           NUMBER := 177;
264   G_UTILTEMP_BB_NPGNVG           NUMBER := 178;
265 
266   G_UTILTEMP_PAGLAY_PGSTA        NUMBER := 187;
267   G_UTILTEMP_BB_PRVWPG           NUMBER := 186;
268   G_UTILTEMP_UPT_CFGPRV          NUMBER := 651;
269   G_UTILTEMP_UPT_CXNCHO          NUMBER := 545;
270 
271   TYPE number_tbl_type           IS TABLE OF NUMBER INDEX BY BINARY_INTEGER;
272   TYPE number_tbl_type_idx_vc2   IS TABLE OF NUMBER INDEX BY VARCHAR2(15);
273   TYPE varchar_tbl_type          IS TABLE OF VARCHAR2(255) INDEX BY BINARY_INTEGER;
274   TYPE ui_page_elements_tbl_type IS TABLE OF CZ_UI_PAGE_ELEMENTS%ROWTYPE INDEX BY VARCHAR2(15);--kdande; Bug 6875560; 12-Mar-2008
275 
276   -- fix for bug 6837809 : skudryav 28-Mar-2008
277   TYPE ui_page_el_int_tbl_type IS TABLE OF CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE INDEX BY BINARY_INTEGER;
278 
279   TYPE ui_def_nodes_tbl_type     IS TABLE OF CZ_UI_DEFS%ROWTYPE INDEX BY BINARY_INTEGER;
280   TYPE ui_page_sets_tbl_type     IS TABLE OF CZ_UI_PAGE_SETS%ROWTYPE INDEX BY BINARY_INTEGER;
281   TYPE ui_pages_tbl_type         IS TABLE OF CZ_UI_PAGES%ROWTYPE INDEX BY BINARY_INTEGER;
282   TYPE ui_page_refs_tbl_type     IS TABLE OF CZ_UI_PAGE_REFS%ROWTYPE INDEX BY BINARY_INTEGER;
283   TYPE xml_dom_elements_tbl_type IS TABLE OF xmldom.DOMNode INDEX BY BINARY_INTEGER;
284 
285   TYPE varchar2_tbl_type         IS TABLE OF VARCHAR2(255) INDEX BY VARCHAR2(255);
286 
287   TYPE xml_dom_nodes_tbl_type    IS TABLE OF xmldom.DOMNode INDEX BY VARCHAR2(255);
288   g_page_elements_tbl            xml_dom_nodes_tbl_type;
289 
290 
291   TYPE nested_number_tbl_type  IS TABLE OF number_tbl_type INDEX BY BINARY_INTEGER;
292 
293   g_jrad_trans_list          jdr_utils.translationlist := jdr_utils.translationlist();
294   g_ref_expls_tbl            number_tbl_type_idx_vc2;
295   g_ui_def_nodes_tbl         ui_def_nodes_tbl_type;
296   g_ui_page_elements_tbl     ui_page_elements_tbl_type;
297   g_ui_pages_counter_tbl     number_tbl_type;
298   g_ui_pages_tbl             ui_pages_tbl_type;
299   g_model_nodes_tbl          model_nodes_tbl_type;
300   g_ui_page_refs_tbl         ui_page_refs_tbl_type;
301   g_nbr_elements_on_page_tbl number_tbl_type;
302   g_ps_node_persist_id_tbl   number_tbl_type_idx_vc2;
303   g_ui_action_ids_tbl        number_tbl_type;
304   g_ui_refs_tbl              number_tbl_type_idx_vc2;
305   g_ui_page_sets_tbl         ui_page_sets_tbl_type;
306   g_template_jrad_name_tbl   varchar_tbl_type;
307   g_template_id_tbl          number_tbl_type;
308   g_template_ui_def_id_tbl   number_tbl_type;
309   g_root_persist_id_tbl      number_tbl_type_idx_vc2;
310   g_moved_content_tbl        number_tbl_type;
311   g_cx_names_tbl             number_tbl_type;
312   g_ref_cx_paths_tbl         varchar_tbl_type;
313   g_last_seq_elem_tbl        number_tbl_type;
314   g_handled_attr_id_tbl      varchar_tbl_type;
315   g_local_ui_context         ui_def_nodes_tbl_type;
316   g_check_boundaries_tbl     varchar_tbl_type;
317   g_locked_templates_id_tbl  number_tbl_type;
318   g_dom_elements_tbl         xml_dom_elements_tbl_type;
319   g_elements_to_move         nested_number_tbl_type;
320   g_tgt_pg_to_src_pg_map     nested_number_tbl_type; -- used for moving nodes
321 
322   g_dom_elements_to_move     xml_dom_elements_tbl_type;
323 
324   g_connector_counter      NUMBER;
325   g_bomm_counter           NUMBER;
326   g_mandatory_comp_counter NUMBER;
327   g_mandatory_ref_counter  NUMBER;
328   g_minmax_ref_counter     NUMBER;
329   g_optional_ref_counter   NUMBER;
330   g_of_feature_counter     NUMBER;
331   g_if_feature_counter     NUMBER;
332   g_df_feature_counter     NUMBER;
333   g_bf_feature_counter     NUMBER;
334   g_tf_feature_counter     NUMBER;
335   g_tot_feature_counter    NUMBER;
336   g_rsc_feature_counter    NUMBER;
337   g_itot_feature_counter   NUMBER;
338   g_irsc_feature_counter   NUMBER;
339   g_opt_counter            NUMBER;
340 
341   g_status              VARCHAR2(255);
342   g_industry            VARCHAR2(255);
343   g_ret                 BOOLEAN;
344 
345   g_currentUINode       NUMBER;
346   g_currUISeqVal        NUMBER;
347   g_currentPageRef      NUMBER;
348   g_currPageRefSeqVal   NUMBER;
349   g_currentPage         NUMBER;
350   g_currPageSeqVal      NUMBER;
351   g_currentPageSet      NUMBER;
352   g_currPageSetSeqVal   NUMBER;
353   g_currentUIAction     NUMBER;
354   g_currUIActionSeqVal  NUMBER;
355   g_currentIntlText     NUMBER;
356   g_currIntlTextSeqVal  NUMBER;
357 
358   g_IntlTextINCREMENT   NUMBER := 20;
359   g_UINodeINCREMENT     NUMBER := 20;
360   g_PageRefINCREMENT    NUMBER := 20;
361   g_PageINCREMENT       NUMBER := 20;
362   g_PageSetINCREMENT    NUMBER := 20;
363   g_UIActionINCREMENT   NUMBER := 20;
364 
365   g_Elements_Per_Column  NUMBER;
366   g_Num_Elements_On_Page NUMBER;
367 
368   g_Use_Cache           BOOLEAN := FALSE;
369   g_REFRESH_MODEL_PATH  BOOLEAN := TRUE;
370 
371   g_UI_Context          CZ_UI_DEFS%ROWTYPE;
372 
373   g_using_new_UI_refresh BOOLEAN;
374 
375   g_ELEMENT_COUNTER     NUMBER;
376 
377   -------------- JDR DOC BUILDER/XML Parsing part -----------------
378 
379   g_DOC     xmldom.DOMDocument;
380   g_JRADDOC jdr_docbuilder.Document;
381   g_PARSER  xmlparser.parser;
382   g_Null_Xml_Node xmldom.DOMNode;
383 
384   g_MSG_COUNT         NUMBER := 0;
385   g_MSG_DATA          VARCHAR2(32000);
386   g_RETURN_STATUS     VARCHAR2(10);
387   g_WRONG_PS_NODE_ID  NUMBER;
388 
389   MAX_CHUNK_SIZE CONSTANT INTEGER := 32000;
390 
391   WRONG_UI_TEMPLATE       EXCEPTION;
392   WRONG_UI_TO_REFRESH     EXCEPTION;
393   PAGE_CANNOT_BE_SPLIT    EXCEPTION;
394   WRONG_EXT_PS_TYPE       EXCEPTION;
395   UNREACH_UI_NODE         EXCEPTION;
396   FAILED_TO_LOCK_MODEL    EXCEPTION;
397   FAILED_TO_LOCK_TEMPLATE EXCEPTION;
398 
399   TYPE char_tbl_type IS TABLE OF VARCHAR2(255);
400   g_toplevel_attr_tbl char_tbl_type := char_tbl_type('version',
401                                                      'xml:lang',
402                                                      'file-version',
403                                                      'xmlns:oa',
404                                                      'xmlns:ui',
405                                                      'xmlns:jrad',
406                                                      'xmlns:user',
407                                                      'FILE-version',
408                                                      'file-version',
409                                                      'xmlns:user',
410                                                      'xmlns:USER',
411                                                      'xmlns');
412 
413   g_condition_attr_tbl char_tbl_type := char_tbl_type('displayCondnId',
414                                                      'enabledCondnId',
415                                                      'colDisplayCondnId',
416                                                      'liDisplayCondnId',
417                                                      'rowDisplayCondnId',
418                                                      'rowEnabledCondnId',
419                                                      'switcherCondnId');
420 
421  g_caption_attr_tbl char_tbl_type := char_tbl_type('captionIntlTextId',
422                                                   'rolloverIntlTextId',
423                                                   'cellIntlTextId',
424                                                   'urlIntlTextId',
425                                                   'tableSummaryIntlTextId',
426                                                   'imageSourceIntlTextId',
427                                                   'addInstBtnIntlTextId');
428 
429   g_view_prefix_tbl char_tbl_type := char_tbl_type('COMP_',
430                                                    'SIM_',
431                                                    'CS_',
432                                                    'OF_',
433                                                    'IF_',
434                                                    'DF_',
435                                                    'BF_',
436                                                    'TF_',
437                                                    'TOT_',
438                                                    'RSC_',
439                                                    'ITOT_',
440                                                    'IRSC_',
441                                                    'REF_',
442                                                    'CON_',
443                                                    'BOMM_',
444                                                    'OPT_' );
445 
446   TYPE attribute_record_type IS RECORD(
447     NAME  jdr_attributes.att_name%TYPE,
448     VALUE jdr_attributes.att_value%TYPE);
449 
450   TYPE attributes_tbl_type IS TABLE OF attribute_record_type INDEX BY BINARY_INTEGER;
451 
452   -------------------------------------------------------------------
453 
454   --
455   -- section for a different DEBUG procedures
456   --
457   PROCEDURE DEBUG(p_str IN VARCHAR2) IS
458   BEGIN
459     --DBMS_OUTPUT.PUT_LINE(p_str);
460     NULL;
461   END DEBUG;
462 
463   PROCEDURE DEBUG(p_var_name IN VARCHAR2, p_var_value IN VARCHAR2) IS
464   BEGIN
465     DEBUG(p_var_name || ' = ' || p_var_value);
466   END DEBUG;
467 
468   PROCEDURE DEBUG(p_var_name IN VARCHAR2, p_var_value IN NUMBER) IS
469   BEGIN
470     DEBUG(p_var_name || ' = ' || TO_CHAR(p_var_value));
471   END DEBUG;
472 
473   PROCEDURE DEBUG(p_var_name IN VARCHAR2, p_var_value IN DATE) IS
474   BEGIN
475     DEBUG(p_var_name || ' = ' ||
476           TO_CHAR(p_var_value, 'DD-MM-YYYY HH24:MI:SS'));
477   END DEBUG;
478 
479   PROCEDURE dump_Error_Stack(p_prefix IN VARCHAR2) IS
480     l_msg_count              NUMBER;
481     l_msg_data               VARCHAR2(4000);
482     l_msg_index number;
483   BEGIN
484    DEBUG('------------ Start of '||p_prefix||' ----------------');
485    l_msg_index := 1;
486    l_msg_count := fnd_msg_pub.COUNT_MSG();
487    DEBUG(p_prefix||' '||TO_CHAR(l_msg_count)||' error messages .');
488    WHILE l_msg_count > 0 LOOP
489       l_msg_data := fnd_msg_pub.GET(l_msg_index,fnd_api.g_false);
490       DEBUG(p_prefix||l_msg_data);
491       l_msg_index := l_msg_index + 1;
492       l_msg_count := l_msg_count - 1;
493    END LOOP;
494    DEBUG('------------ End  of '||p_prefix||' ----------------');
495   END dump_Error_Stack;
496 
497   PROCEDURE lock_Model(p_model_id            IN NUMBER,
498                        p_locked_entities_tbl OUT NOCOPY cz_security_pvt.number_type_tbl) IS
499     PRAGMA AUTONOMOUS_TRANSACTION;
500     l_lock_status     VARCHAR2(255);
501     l_msg_count       NUMBER;
502     l_msg_data        VARCHAR2(4000);
503   BEGIN
504 
505     cz_security_pvt.lock_model(1.0,p_model_id,FND_API.G_TRUE,FND_API.G_FALSE,
506                                p_locked_entities_tbl,
507                                l_lock_status,l_msg_count,l_msg_data);
508     COMMIT;
509     IF (l_lock_status <> FND_API.G_RET_STS_SUCCESS) THEN
510        RAISE FAILED_TO_LOCK_MODEL;
511     END IF;
512   END lock_Model;
513 
514   PROCEDURE unlock_Model(p_locked_entities_tbl IN cz_security_pvt.number_type_tbl) IS
515     PRAGMA AUTONOMOUS_TRANSACTION;
516     l_lock_status     VARCHAR2(255);
517     l_msg_count       NUMBER;
518     l_msg_data        VARCHAR2(4000);
519   BEGIN
520     cz_security_pvt.unlock_model(p_api_version      => 1.0,
521                                  p_models_to_unlock => p_locked_entities_tbl,
522                                  p_commit_flag      => FND_API.G_FALSE,
523                                  p_init_msg_list    => FND_API.G_FALSE,
524                                  x_return_status    => l_lock_status,
525                                  x_msg_count        => l_msg_count,
526                                  x_msg_data         => l_msg_data);
527     COMMIT;
528   END unlock_Model;
529 
530   FUNCTION is_Used_By_Reference(p_detailed_type_id IN NUMBER,
531                                 p_ctrl_template_id IN NUMBER)
532     RETURN BOOLEAN IS
533   BEGIN
534 
535     IF ((p_detailed_type_id IN
536         (CZ_TYPES.UMANDATORY_COMPONENT_TYPEID
537         ,CZ_TYPES.UOPTIONAL_COMPONENT_TYPEID
538         ,CZ_TYPES.UMINMAX_COMPONENT_TYPEID
539         ,CZ_TYPES.UNON_COUNT_FEATURE_TYPEID
540         ,CZ_TYPES.UCOUNT_FEATURE_TYPEID
541         ,CZ_TYPES.UCOUNT_FEATURE01_TYPEID
542         ,CZ_TYPES.UMINMAX_FEATURE_TYPEID
543         ,CZ_TYPES.UINTEGER_FEATURE_TYPEID
544         ,CZ_TYPES.UDECIMAL_FEATURE_TYPEID
545         ,CZ_TYPES.UBOOLEAN_FEATURE_TYPEID
546         ,CZ_TYPES.UTEXT_FEATURE_TYPEID
547         ,CZ_TYPES.UTOTAL_TYPEID
548         ,CZ_TYPES.URESOURCE_TYPEID
549         ,CZ_TYPES.UCONNECTOR_TYPEID,CZ_TYPES.UMINMAX_CONNECTOR)
550          AND g_UI_Context.CTRLTEMPLUSE_NONBOM=G_TEMPLATE_USE_BY_REFERENCE)
551        OR
552        (p_detailed_type_id IN
553         (CZ_TYPES.UMANDATORY_REF_TYPEID
554         ,CZ_TYPES.UOPTIONAL_BOM_REF_TYPEID
555         ,CZ_TYPES.UMINMAX_BOM_REF_TYPEID
556         ,CZ_TYPES.UBOM_NSTBOM_NQMTX_TYPEID
557         ,CZ_TYPES.UBOM_NSTBOM_NQNMTX_TYPEID
558         ,CZ_TYPES.UBOM_NSTBOM_QNMTX_TYPEID
559         ,CZ_TYPES.UBOM_NSTBOM_QMTX_TYPEID
560         ,CZ_TYPES.UBOM_STIO_NQMTX_TYPEID
561         ,CZ_TYPES.UBOM_STIO_NQNMTX_TYPEID
562         ,CZ_TYPES.UBOM_STIO_QNMTX_TYPEID
563         ,CZ_TYPES.UBOM_STIO_QMTX_TYPEID)
564         AND g_UI_Context.CTRLTEMPLUSE_BOM=G_TEMPLATE_USE_BY_REFERENCE)) AND
565        p_ctrl_template_id NOT IN(G_DRILLDOWN_IMAGE_TEMPLATE_ID,G_DRILLDOWN_LABEL_TEMPLATE_ID,
566          G_DRILLDOWN_BUTTON_TEMPLATE_ID) THEN
567       RETURN TRUE;
568     END IF;
569 
570     RETURN FALSE;
571 
572   END is_Used_By_Reference;
573 
574   PROCEDURE lock_UI_Template(p_template_id           IN NUMBER,
575                              p_template_ui_def_id    IN NUMBER DEFAULT NULL,
576                              px_needs_to_be_unlocked OUT NOCOPY BOOLEAN) IS
577    PRAGMA AUTONOMOUS_TRANSACTION;
578 
579     l_templates_to_lock_tbl  cz_security_pvt.number_type_tbl;
580     l_locked_templates_tbl   cz_security_pvt.number_type_tbl;
581     l_seeded_flag            CZ_UI_TEMPLATES.seeded_flag%TYPE;
582     l_lock_status            VARCHAR2(255);
583     l_msg_count              NUMBER;
584     l_msg_data               VARCHAR2(4000);
585 
586   BEGIN
587     IF p_template_ui_def_id=G_GLOBAL_TEMPLATES_UI_DEF_ID OR
588        p_template_ui_def_id IS NULL THEN
589       SELECT seeded_flag INTO l_seeded_flag FROM CZ_UI_TEMPLATES
590        WHERE template_id=p_template_id AND ui_def_id=G_GLOBAL_TEMPLATES_UI_DEF_ID;
591       IF l_seeded_flag=G_YES_FLAG THEN
592         RETURN;
593       END IF;
594       l_templates_to_lock_tbl(1) := p_template_id;
595       cz_security_pvt.lock_template(p_api_version       => 1.0,
596                                          p_templates_to_lock => l_templates_to_lock_tbl,
597                                          p_commit_flag       => FND_API.G_FALSE,
598                                          p_init_msg_list     => FND_API.G_FALSE,
599                                          x_locked_templates  => l_locked_templates_tbl,
600                                          x_return_status     => l_lock_status,
601                                          x_msg_count         => l_msg_count,
602                                          x_msg_data          => l_msg_data);
603       COMMIT;
604 
605       IF (l_lock_status <> FND_API.G_RET_STS_SUCCESS) THEN
606          RAISE FAILED_TO_LOCK_TEMPLATE;
607       END IF;
608       IF l_locked_templates_tbl.COUNT>0 THEN
609         px_needs_to_be_unlocked := TRUE;
610       ELSE
611         px_needs_to_be_unlocked := FALSE;
612       END IF;
613     END IF;
614   END lock_UI_Template;
615 
616   PROCEDURE unlock_UI_Template(p_template_id          IN NUMBER,
617                                p_template_ui_def_id   IN NUMBER DEFAULT NULL,
618                                p_needs_to_be_unlocked IN BOOLEAN) IS
619     PRAGMA AUTONOMOUS_TRANSACTION;
620     l_templates_to_unlock_tbl    cz_security_pvt.number_type_tbl;
621     l_lock_status                VARCHAR2(255);
622     l_msg_count                  NUMBER;
623     l_msg_data                   VARCHAR2(4000);
624   BEGIN
625     IF (p_template_ui_def_id=G_GLOBAL_TEMPLATES_UI_DEF_ID OR
626        p_template_ui_def_id IS NULL) AND p_needs_to_be_unlocked THEN
627       l_templates_to_unlock_tbl(1) := p_template_id;
628       cz_security_pvt.unlock_template(p_api_version            => 1.0,
629                                            p_templates_to_unlock    => l_templates_to_unlock_tbl,
630                                            p_commit_flag            => FND_API.G_FALSE,
631                                            p_init_msg_list          => FND_API.G_FALSE,
632                                            x_return_status          => l_lock_status,
633                                            x_msg_count              => l_msg_count,
634                                            x_msg_data               => l_msg_data);
635       COMMIT;
636     END IF;
637   END unlock_UI_Template;
638 
639   --
640   -- lock all global UI templates for a given model_id and ui_def_id
641   -- array x_templates_id_tbl will contain locked UI templates
642   --
643   PROCEDURE lock_UI_Templates(p_model_id          IN NUMBER,
644                               p_ui_def_id         IN NUMBER) IS
645     l_needs_to_be_unlocked     BOOLEAN;
646 
647   l_lock_status            VARCHAR2(255);
648     l_msg_count              NUMBER;
649     l_msg_data               VARCHAR2(4000);
650     l_msg_index number;
651   BEGIN
652     FOR i IN(SELECT DISTINCT template_id, detailed_type_id
653                FROM CZ_UITEMPLS_FOR_PSNODES_V
654               WHERE devl_project_id=p_model_id AND
655                     ui_def_id=p_ui_def_id AND
656                     template_ui_def_id=G_GLOBAL_TEMPLATES_UI_DEF_ID AND
657                     deleted_flag = G_NO_FLAG)
658     LOOP
659       IF is_Used_By_Reference(i.detailed_type_id, i.template_id)=FALSE AND
660          NOT(g_locked_templates_id_tbl.EXISTS(i.template_id)) THEN
661 
662         BEGIN
663           --
664           -- lock current UI Template
665           --
666           lock_UI_Template( i.template_id, G_GLOBAL_TEMPLATES_UI_DEF_ID, l_needs_to_be_unlocked);
667           --
668           -- collect only those UI templates
669           -- which really have been locked
670           --
671           IF l_needs_to_be_unlocked THEN
672             g_locked_templates_id_tbl(i.template_id) := i.template_id;
673           END IF;
674         EXCEPTION
675           WHEN FAILED_TO_LOCK_TEMPLATE THEN
676             DEBUG('Failed to lock UI Template with template_id=', i.template_id);
677             g_MSG_COUNT := fnd_msg_pub.COUNT_MSG();
678         END;
679 
680       END IF;
681 
682     END LOOP;
683 
684   END lock_UI_Templates;
685 
686   --
687   -- unlock global UI templates specified by array x_templates_id_tbl
688   --
689   PROCEDURE unlock_UI_Templates IS
690     l_index NUMBER;
691   BEGIN
692 
693     IF  g_locked_templates_id_tbl.Count>0 THEN
694 
695       l_index :=  g_locked_templates_id_tbl.First;
696 
697       LOOP
698         IF l_index IS NULL THEN
699           EXIT;
700         END IF;
701 
702         DEBUG('UI Template to unlock : ',g_locked_templates_id_tbl(l_index));
703         --
704         -- unlock current UI Template
705         --
706         unlock_UI_Template( g_locked_templates_id_tbl(l_index), G_GLOBAL_TEMPLATES_UI_DEF_ID, TRUE);
707         l_index := g_locked_templates_id_tbl.NEXT(l_index);
708       END LOOP;
709 
710     END IF;
711 
712   END unlock_UI_Templates;
713 
714   --
715   -- initialize sequences to use in UI Generation/UI Refresh
716   --
717   PROCEDURE Initialize_Sequences IS
718   BEGIN
719 
720     SELECT CZ_UI_PAGE_ELEMENTS_S.nextval INTO g_currentUINode FROM dual;
721     g_currUISeqVal := g_currentUINode;
722 
723     SELECT CZ_UI_PAGE_REFS_S.nextval INTO g_currentPageRef FROM dual;
724     g_currPageRefSeqVal := g_currentPageRef;
725 
726     SELECT CZ_UI_PAGES_S.nextval INTO g_currentPage FROM dual;
727     g_currPageSeqVal := g_currentPage;
728 
729     SELECT CZ_UI_PAGE_SETS_S.nextval INTO g_currentPageSet FROM dual;
730     g_currPageSetSeqVal := g_currentPageSet;
731 
732     SELECT CZ_UI_ACTIONS_S.nextval INTO g_currentUIAction FROM dual;
733     g_currUIActionSeqVal := g_currentUIAction;
734 
735   END Initialize_Sequences;
736 
737   --
738   -- initialize FND variables/packages
739   --
740   PROCEDURE Initialize(x_return_status OUT NOCOPY VARCHAR2,
741                        x_msg_count     OUT NOCOPY NUMBER,
742                        x_msg_data      OUT NOCOPY VARCHAR2) IS
743   BEGIN
744     g_MSG_COUNT := 0 ;
745     fnd_msg_pub.initialize;
746     x_return_status := FND_API.G_RET_STS_SUCCESS;
747     x_msg_count     := 0;
748     x_msg_data      := NULL;
749     Initialize_Sequences();
750     g_ui_def_nodes_tbl.DELETE;
751     g_ui_pages_counter_tbl.DELETE;
752     g_root_persist_id_tbl.DELETE;
753     g_local_ui_context.DELETE;
754     g_check_boundaries_tbl.DELETE;
755     g_locked_templates_id_tbl.DELETE;
756     g_elements_to_move.DELETE;
757     g_dom_elements_to_move.DELETE;
758     g_tgt_pg_to_src_pg_map.DELETE;
759   END Initialize;
760 
761   --
762   -- add FND error message
763   --
764   PROCEDURE add_Error_Message(p_message_name IN VARCHAR2,
765                               p_fatal_error  IN BOOLEAN) IS
766 
767   BEGIN
768     FND_MESSAGE.SET_NAME('CZ', p_message_name);
769     IF p_fatal_error THEN
770       FND_MSG_PUB.ADD;
771     ELSE
772       fnd_msg_pub.add_detail(p_message_type => FND_MSG_PUB.G_WARNING_MSG);
773     END IF;
774     FND_MSG_PUB.count_and_get(p_count => g_MSG_COUNT,
775                               p_data  => g_MSG_DATA);
776     IF p_fatal_error OR g_RETURN_STATUS=FND_API.G_RET_STS_ERROR THEN
777       g_RETURN_STATUS := FND_API.G_RET_STS_ERROR;
778     ELSE
779       g_RETURN_STATUS := FND_API.G_RET_STS_SUCCESS;
780     END IF;
781 
782   END add_Error_Message;
783 
784   PROCEDURE add_Error_Message(p_message_name IN VARCHAR2,
785                               p_token_name   IN VARCHAR2,
786                               p_token_value  IN VARCHAR2,
787                               p_fatal_error  IN BOOLEAN) IS
788 
789   BEGIN
790     FND_MESSAGE.SET_NAME('CZ', p_message_name);
791     IF p_token_name IS NOT NULL THEN
792       FND_MESSAGE.SET_TOKEN(p_token_name, p_token_value);
793     END IF;
794     IF p_fatal_error THEN
795       FND_MSG_PUB.ADD;
796     ELSE
797       fnd_msg_pub.add_detail(p_message_type => FND_MSG_PUB.G_WARNING_MSG);
798     END IF;
799     FND_MSG_PUB.count_and_get(p_count => g_MSG_COUNT,
800                               p_data  => g_MSG_DATA);
801     IF p_fatal_error OR g_RETURN_STATUS=FND_API.G_RET_STS_ERROR THEN
802       g_RETURN_STATUS := FND_API.G_RET_STS_ERROR;
803     ELSE
804       g_RETURN_STATUS := FND_API.G_RET_STS_SUCCESS;
805     END IF;
806   END add_Error_Message;
807 
808   PROCEDURE add_Error_Message(p_message_name IN VARCHAR2,
809                               p_token_name1   IN VARCHAR2,
810                               p_token_value1  IN VARCHAR2,
811                               p_token_name2   IN VARCHAR2,
812                               p_token_value2  IN VARCHAR,
813                               p_fatal_error   IN BOOLEAN) IS
814 
815   BEGIN
816     FND_MESSAGE.SET_NAME('CZ', p_message_name);
817     IF p_token_name1 IS NOT NULL THEN
818       FND_MESSAGE.SET_TOKEN(p_token_name1, p_token_value1);
819     END IF;
820 
821     IF p_token_name2 IS NOT NULL THEN
822       FND_MESSAGE.SET_TOKEN(p_token_name2, p_token_value2);
823     END IF;
824 
825     IF p_fatal_error THEN
826       FND_MSG_PUB.ADD;
827     ELSE
828       fnd_msg_pub.add_detail(p_message_type => FND_MSG_PUB.G_WARNING_MSG);
829     END IF;
830 
831     FND_MSG_PUB.count_and_get(p_count => g_MSG_COUNT,
832                               p_data  => g_MSG_DATA);
833     IF p_fatal_error OR g_RETURN_STATUS=FND_API.G_RET_STS_ERROR THEN
834       g_RETURN_STATUS := FND_API.G_RET_STS_ERROR;
835     ELSE
836       g_RETURN_STATUS := FND_API.G_RET_STS_SUCCESS;
837     END IF;
838   END add_Error_Message;
839 
840   PROCEDURE add_Error_Message(p_message_name IN VARCHAR2,
841                               p_token_name1   IN VARCHAR2,
842                               p_token_value1  IN VARCHAR2,
843                               p_token_name2   IN VARCHAR2,
844                               p_token_value2  IN VARCHAR,
845                               p_token_name3   IN VARCHAR2,
846                               p_token_value3  IN VARCHAR,
847                               p_fatal_error   IN BOOLEAN) IS
848 
849   BEGIN
850     FND_MESSAGE.SET_NAME('CZ', p_message_name);
851     IF p_token_name1 IS NOT NULL THEN
852       FND_MESSAGE.SET_TOKEN(p_token_name1, p_token_value1);
853     END IF;
854 
855     IF p_token_name2 IS NOT NULL THEN
856       FND_MESSAGE.SET_TOKEN(p_token_name2, p_token_value2);
857     END IF;
858 
859     IF p_token_name3 IS NOT NULL THEN
860       FND_MESSAGE.SET_TOKEN(p_token_name3, p_token_value3);
861     END IF;
862 
863     IF p_fatal_error THEN
864       FND_MSG_PUB.ADD;
865     ELSE
866       fnd_msg_pub.add_detail(p_message_type => FND_MSG_PUB.G_WARNING_MSG);
867     END IF;
868 
869     FND_MSG_PUB.count_and_get(p_count => g_MSG_COUNT,
870                               p_data  => g_MSG_DATA);
871     IF p_fatal_error OR g_RETURN_STATUS=FND_API.G_RET_STS_ERROR THEN
872       g_RETURN_STATUS := FND_API.G_RET_STS_ERROR;
873     ELSE
874       g_RETURN_STATUS := FND_API.G_RET_STS_SUCCESS;
875     END IF;
876   END add_Error_Message;
877 
878   PROCEDURE add_Error_Message(p_message_name IN VARCHAR2,
879                               p_token_name1   IN VARCHAR2,
880                               p_token_value1  IN VARCHAR2,
881                               p_token_name2   IN VARCHAR2,
882                               p_token_value2  IN VARCHAR,
883                               p_token_name3   IN VARCHAR2,
884                               p_token_value3  IN VARCHAR,
885                               p_token_name4   IN VARCHAR2,
886                               p_token_value4  IN VARCHAR,
887                               p_token_name5   IN VARCHAR2,
888                               p_token_value5  IN VARCHAR,
889                               p_fatal_error   IN BOOLEAN) IS
890 
891   BEGIN
892     FND_MESSAGE.SET_NAME('CZ', p_message_name);
893     IF p_token_name1 IS NOT NULL THEN
894       FND_MESSAGE.SET_TOKEN(p_token_name1, p_token_value1);
895     END IF;
896 
897     IF p_token_name2 IS NOT NULL THEN
898       FND_MESSAGE.SET_TOKEN(p_token_name2, p_token_value2);
899     END IF;
900 
901     IF p_token_name3 IS NOT NULL THEN
902       FND_MESSAGE.SET_TOKEN(p_token_name3, p_token_value3);
903     END IF;
904 
905     IF p_token_name4 IS NOT NULL THEN
906       FND_MESSAGE.SET_TOKEN(p_token_name4, p_token_value4);
907     END IF;
908 
909     IF p_token_name5 IS NOT NULL THEN
910       FND_MESSAGE.SET_TOKEN(p_token_name5, p_token_value5);
911     END IF;
912 
913     IF p_fatal_error THEN
914       FND_MSG_PUB.ADD;
915     ELSE
916       fnd_msg_pub.add_detail(p_message_type => FND_MSG_PUB.G_WARNING_MSG);
917     END IF;
918 
919     FND_MSG_PUB.count_and_get(p_count => g_MSG_COUNT,
920                               p_data  => g_MSG_DATA);
921     IF p_fatal_error OR g_RETURN_STATUS=FND_API.G_RET_STS_ERROR THEN
922       g_RETURN_STATUS := FND_API.G_RET_STS_ERROR;
923     ELSE
924       g_RETURN_STATUS := FND_API.G_RET_STS_SUCCESS;
925     END IF;
926   END add_Error_Message;
927 
928   --
929   -- return increment of sequence p_sequence_name which
930   -- is under schema p_sequence_owner
931   --
932   FUNCTION get_Seq_Inc(p_sequence_name  IN VARCHAR2,
933                        p_sequence_owner IN VARCHAR2) RETURN NUMBER IS
934     l_seq_increment NUMBER;
935   BEGIN
936     SELECT increment_by INTO l_seq_increment
937     FROM all_sequences
938     WHERE sequence_owner=p_sequence_owner AND
939           sequence_name=p_sequence_name;
940     RETURN l_seq_increment;
941   END get_Seq_Inc;
942 
943   --
944   -- open XML parser
945   --
946   PROCEDURE Open_Parser IS
947   BEGIN
948     --
949     -- create a new XML parser ( global )
950     --
951     g_PARSER := xmlparser.newParser;
952   END Open_Parser;
953 
954   --
955   -- close XML parser
956   --
957   PROCEDURE Close_Parser IS
958   BEGIN
959     --
960     -- close XML parser ( global )
961     --
962     xmlparser.freeParser(g_PARSER);
963   EXCEPTION
964     WHEN OTHERS THEN
965       IF SQLCODE='-20103' THEN
966         NULL;
967       ELSE
968         DEBUG('Close_Parser() : XML Parser can not be closed : '||SQLERRM);
969         RAISE;
970       END IF;
971   END Close_Parser;
972 
973   FUNCTION cloneNode(p_source_xml_node xmldom.DOMNode, p_target_subtree_xml_node xmldom.DOMNode) RETURN xmldom.DOMNode IS
974 
975     l_xmldoc  xmldom.DOMDocument;
976 
977   BEGIN
978 
979     l_xmldoc := xmldom.getOwnerDocument(p_target_subtree_xml_node);
980 
981     BEGIN
982 
983       CZ_UIOA_PVT.g_temp_xmldoc := l_xmldoc;
984       CZ_UIOA_PVT.g_temp_source_xml_node := p_source_xml_node;
985 
986       EXECUTE IMMEDIATE
987       'BEGIN ' ||
988       '  CZ_UIOA_PVT.g_temp_xml_node := XMLDOM.importNode(CZ_UIOA_PVT.g_temp_xmldoc, CZ_UIOA_PVT.g_temp_source_xml_node, TRUE); ' ||
989       'END;';
990 
991       RETURN CZ_UIOA_PVT.g_temp_xml_node;
992 
993     EXCEPTION
994       WHEN OTHERS THEN
995         IF SQLCODE=-6550 THEN -- there is no function importNode() in XMLDOM
996           RETURN xmldom.cloneNode(p_source_xml_node, TRUE);
997         ELSE
998           RAISE;
999         END IF;
1000     END;
1001 
1002   END cloneNode;
1003 
1004   --
1005   -- generate NEW ID FROM a given sequence
1006   --  Parameters : p_sequence_name - name of DB sequence
1007   --  Return     : next id from sequence
1008   --
1009   FUNCTION allocateId(p_sequence_name IN VARCHAR2) RETURN NUMBER IS
1010     l_id NUMBER;
1011   BEGIN
1012     IF p_sequence_name='CZ_UI_PAGE_ELEMENTS_S' THEN
1013       IF g_currentUINode<g_currUISeqVal+g_UINodeINCREMENT-1 THEN
1014         g_currentUINode := g_currentUINode+1;
1015       ELSE
1016         SELECT CZ_UI_PAGE_ELEMENTS_S.nextval INTO g_currUISeqVal FROM dual;
1017         g_currentUINode := g_currUISeqVal;
1018       END IF;
1019       RETURN g_currentUINode;
1020     ELSIF p_sequence_name='CZ_UI_PAGE_REFS_S' THEN
1021       IF g_currentPageRef<g_currPageRefSeqVal+g_PageRefINCREMENT-1 THEN
1022         g_currentPageRef := g_currentPageRef+1;
1023       ELSE
1024         SELECT CZ_UI_PAGE_REFS_S.nextval INTO g_currPageRefSeqVal FROM dual;
1025         g_currentPageRef := g_currPageRefSeqVal;
1026       END IF;
1027       RETURN g_currentPageRef;
1028     ELSIF p_sequence_name='CZ_UI_PAGES_S' THEN
1029       IF g_currentPage<g_currPageSeqVal+g_PageINCREMENT-1 THEN
1030         g_currentPage := g_currentPage+1;
1031       ELSE
1032         SELECT CZ_UI_PAGES_S.nextval INTO g_currPageSeqVal FROM dual;
1033         g_currentPage := g_currPageSeqVal;
1034       END IF;
1035       RETURN g_currentPage;
1036     ELSIF p_sequence_name='CZ_UI_PAGE_SETS_S' THEN
1037       IF g_currentPageSet<g_currPageSetSeqVal+g_PageSetINCREMENT-1 THEN
1038         g_currentPageSet := g_currentPageSet+1;
1039       ELSE
1040         SELECT CZ_UI_PAGE_SETS_S.nextval INTO g_currPageSetSeqVal FROM dual;
1041         g_currentPageSet := g_currPageSetSeqVal;
1042       END IF;
1043       RETURN g_currentPageSet;
1044     ELSIF p_sequence_name='CZ_UI_ACTIONS_S' THEN
1045       IF g_currentUIAction<g_currUIActionSeqVal+g_UIActionINCREMENT-1 THEN
1046         g_currentUIAction := g_currentUIAction+1;
1047       ELSE
1048         SELECT CZ_UI_ACTIONS_S.nextval INTO g_currUIActionSeqVal FROM dual;
1049         g_currentUIAction := g_currUIActionSeqVal;
1050       END IF;
1051       RETURN g_currentUIAction;
1052     ELSIF p_sequence_name='CZ_INTL_TEXTS_S' THEN
1053       IF g_currentIntlText<g_currIntlTextSeqVal+g_IntlTextINCREMENT-1 THEN
1054         g_currentIntlText := g_currentIntlText+1;
1055       ELSE
1056         SELECT CZ_INTL_TEXTS_S.nextval INTO g_currIntlTextSeqVal FROM dual;
1057         g_currentIntlText := g_currIntlTextSeqVal;
1058       END IF;
1059       RETURN g_currentIntlText;
1060     ELSE
1061       EXECUTE IMMEDIATE 'SELECT ' || p_sequence_name || '.NEXTVAL FROM dual' INTO l_id;
1062       RETURN l_id;
1063     END IF;
1064 
1065   EXCEPTION
1066     WHEN OTHERS THEN
1067       IF SQLCODE='-2289' THEN
1068         DEBUG('allocateId() : sequence '||p_sequence_name||' does not exist.');
1069       ELSE
1070         DEBUG('Sequence '||p_sequence_name||' can not be handled.');
1071       END IF;
1072       RAISE;
1073   END allocateId;
1074 
1075   PROCEDURE set_Local_UI_Context(p_ui_def_id IN NUMBER) IS
1076   BEGIN
1077     IF NOT(g_local_ui_context.EXISTS(p_ui_def_id)) THEN
1078       SELECT * INTO g_local_ui_context(p_ui_def_id) FROM CZ_UI_DEFS
1079       WHERE ui_def_id=p_ui_def_id;
1080     END IF;
1081   END set_Local_UI_Context;
1082 
1083   FUNCTION get_Local_UI_Context(p_ui_def_id IN NUMBER) RETURN CZ_UI_DEFS%ROWTYPE IS
1084   BEGIN
1085     IF NOT(g_local_ui_context.EXISTS(p_ui_def_id)) THEN
1086       SELECT * INTO g_local_ui_context(p_ui_def_id)
1087         FROM CZ_UI_DEFS
1088        WHERE ui_def_id=p_ui_def_id;
1089     END IF;
1090     RETURN g_local_ui_context(p_ui_def_id);
1091   END get_Local_UI_Context;
1092 
1093   --
1094   -- return new element_id
1095   --
1096   FUNCTION get_Element_Id RETURN VARCHAR2 IS
1097   BEGIN
1098     RETURN TO_CHAR(allocateId('CZ_UI_PAGE_ELEMENTS_S'));
1099   END get_Element_Id;
1100 
1101   --
1102   -- mark UI page as deleted
1103   --
1104   PROCEDURE mark_UI_Page_As_Refreshed(p_page_id   IN NUMBER,
1105                                       p_ui_def_id IN NUMBER) IS
1106   BEGIN
1107     UPDATE CZ_UI_PAGES
1108        SET deleted_flag = DECODE(deleted_flag,G_MARK_TO_ADD,
1109            G_MARK_TO_ADD,G_MARK_TO_REFRESH),
1110            page_rev_nbr=page_rev_nbr+1
1111      WHERE page_id=p_page_id AND
1112            ui_def_id=p_ui_def_id AND
1113            deleted_flag IN(G_NO_FLAG, G_MARK_TO_ADD,G_MARK_TO_REFRESH);
1114   END mark_UI_Page_As_Refreshed;
1115 
1116   --
1117   -- mark UI page as deleted
1118   --
1119   PROCEDURE mark_UI_Page_As_Deleted(p_page_id   IN NUMBER,
1120                                     p_ui_def_id IN NUMBER) IS
1121   BEGIN
1122     UPDATE CZ_UI_PAGES
1123        SET deleted_flag = G_MARK_TO_DELETE
1124      WHERE page_id=p_page_id AND
1125            ui_def_id=p_ui_def_id;
1126   END mark_UI_Page_As_Deleted;
1127 
1128   --
1129   -- mark UI as UI with errors
1130   --
1131   PROCEDURE mark_UI(p_ui_def_id IN NUMBER,
1132                     p_ui_status IN VARCHAR2) IS
1133   BEGIN
1134     UPDATE CZ_UI_DEFS
1135        SET ui_status=p_ui_status
1136      WHERE ui_def_id=p_ui_def_id;
1137   END  mark_UI;
1138 
1139   --
1140   -- refresh UI node marks
1141   --
1142   PROCEDURE refresh_UI_Node_Marks(p_page_id IN NUMBER,
1143                                   p_hmode   IN NUMBER) IS
1144   BEGIN
1145 
1146     IF p_hmode = G_DELETE_PAGE THEN
1147 
1148       UPDATE CZ_UI_PAGES
1149          SET page_rev_nbr = page_rev_nbr + 1,
1150              deleted_flag = G_YES_FLAG
1151        WHERE page_id = p_page_id AND
1152              ui_def_id = g_UI_Context.ui_def_id;
1153       --
1154       -- mark elements as already deleted
1155       --
1156       UPDATE CZ_UI_PAGE_ELEMENTS
1157          SET deleted_flag=G_YES_FLAG
1158        WHERE ui_def_id= g_UI_Context.ui_def_id AND
1159              page_id=p_page_id;
1160 
1161     ELSIF p_hmode = G_DELETE_ELEMENTS THEN
1162       --
1163       -- mark elements as already deleted
1164       --
1165       UPDATE CZ_UI_PAGE_ELEMENTS
1166          SET deleted_flag=G_YES_FLAG
1167        WHERE ui_def_id= g_UI_Context.ui_def_id AND
1168              page_id=p_page_id AND
1169              deleted_flag IN(G_MARK_TO_DELETE);
1170 
1171       IF SQL%ROWCOUNT>0 THEN
1172         --
1173         -- update revision of deleted UI page
1174         --
1175         UPDATE CZ_UI_PAGES
1176            SET page_rev_nbr = page_rev_nbr + 1
1177          WHERE page_id = p_page_id AND
1178                ui_def_id =  g_UI_Context.ui_def_id;
1179       END IF;
1180 
1181     ELSIF p_hmode = G_REFRESH_PAGE THEN
1182 
1183       --
1184       -- update page status and page_rev_nbr
1185       --  page_rev_nbr=1 because this is first creation
1186       --
1187       UPDATE CZ_UI_PAGES
1188          SET page_rev_nbr = page_rev_nbr+1,
1189              deleted_flag = G_NO_FLAG
1190        WHERE page_id = p_page_id AND ui_def_id = g_UI_Context.ui_def_id AND
1191              deleted_flag IN(G_MARK_TO_ADD,G_MARK_TO_REFRESH);
1192 
1193       UPDATE CZ_UI_PAGE_ELEMENTS
1194          SET deleted_flag = G_NO_FLAG
1195        WHERE ui_def_id = g_UI_Context.ui_def_id AND
1196              page_id = p_page_id AND
1197              deleted_flag NOT IN(G_NO_FLAG,G_YES_FLAG,G_LIMBO_FLAG);
1198 
1199     ELSIF p_hmode = G_NEW_PAGE THEN
1200 
1201       UPDATE CZ_UI_PAGES
1202          SET page_rev_nbr = 1,
1203              deleted_flag = G_NO_FLAG
1204        WHERE page_id = p_page_id AND ui_def_id =  g_UI_Context.ui_def_id AND
1205              deleted_flag IN(G_MARK_TO_ADD,G_MARK_TO_REFRESH);
1206 
1207       UPDATE CZ_UI_PAGE_ELEMENTS
1208          SET deleted_flag = G_NO_FLAG
1209        WHERE ui_def_id =  g_UI_Context.ui_def_id AND
1210              page_id = p_page_id AND
1211              deleted_flag NOT IN(G_NO_FLAG,G_YES_FLAG,G_LIMBO_FLAG);
1212     ELSE
1213       NULL;
1214       /*
1215       UPDATE CZ_UI_PAGES
1216          SET deleted_flag = G_NO_FLAG
1217        WHERE page_id = p_page_id AND ui_def_id =  g_UI_Context.ui_def_id AND
1218              deleted_flag NOT IN(G_YES_FLAG,G_LIMBO_FLAG,G_MARK_TO_DELETE);
1219 
1220       UPDATE CZ_UI_PAGE_ELEMENTS
1221          SET deleted_flag = G_NO_FLAG
1222        WHERE ui_def_id =  g_UI_Context.ui_def_id AND
1223              page_id = p_page_id AND
1224              deleted_flag NOT IN(G_YES_FLAG,G_LIMBO_FLAG,G_MARK_TO_DELETE);
1225       */
1226     END IF;
1227 
1228   END refresh_UI_Node_Marks;
1229 
1230 
1231   --
1232   -- get and save Transalations for a given JRAD document
1233   --
1234   PROCEDURE translate_JRAD_Doc(p_jrad_doc_name IN VARCHAR2) IS
1235   BEGIN
1236     jdr_docbuilder.refresh;
1237 
1238     g_jrad_trans_list := jdr_utils.getTranslations(p_jrad_doc_name);
1239 
1240     IF g_jrad_trans_list IS NOT NULL THEN
1241       jdr_utils.saveTranslations(p_jrad_doc_name,g_jrad_trans_list);
1242     END IF;
1243   END translate_JRAD_Doc;
1244 
1245   --
1246   -- returns viewname given the prefix
1247   --
1248   FUNCTION get_next_view_name(p_view_name_prefix IN VARCHAR) RETURN VARCHAR2 IS
1249 
1250   BEGIN
1251 
1252     IF p_view_name_prefix='COMP' THEN
1253       g_mandatory_comp_counter := g_mandatory_comp_counter+1;
1254       RETURN p_view_name_prefix || '_' || g_mandatory_comp_counter;
1255     ELSIF p_view_name_prefix='SIM' THEN
1256       g_optional_ref_counter := g_optional_ref_counter+1;
1257       RETURN p_view_name_prefix || '_' || g_optional_ref_counter;
1258     ELSIF p_view_name_prefix='CS' THEN
1259       g_minmax_ref_counter := g_minmax_ref_counter+1;
1260       RETURN p_view_name_prefix || '_' || g_minmax_ref_counter;
1261     ELSIF p_view_name_prefix='OF' THEN
1262       g_of_feature_counter := g_of_feature_counter+1;
1263       RETURN p_view_name_prefix || '_' || g_of_feature_counter;
1264     ELSIF p_view_name_prefix='IF' THEN
1265       g_if_feature_counter := g_if_feature_counter+1;
1266       RETURN p_view_name_prefix || '_' || g_if_feature_counter;
1267     ELSIF p_view_name_prefix='DF' THEN
1268       g_df_feature_counter := g_df_feature_counter+1;
1269       RETURN p_view_name_prefix || '_' || g_df_feature_counter;
1270     ELSIF p_view_name_prefix='BF' THEN
1271       g_bf_feature_counter := g_bf_feature_counter+1;
1272       RETURN p_view_name_prefix || '_' || g_bf_feature_counter;
1273     ELSIF p_view_name_prefix='TF' THEN
1274       g_tf_feature_counter := g_tf_feature_counter+1;
1275       RETURN p_view_name_prefix || '_' || g_tf_feature_counter;
1276     ELSIF p_view_name_prefix='TOT' THEN
1277       g_tot_feature_counter := g_tot_feature_counter+1;
1278       RETURN p_view_name_prefix || '_' || g_tot_feature_counter;
1279     ELSIF p_view_name_prefix='RSC' THEN
1280       g_rsc_feature_counter := g_rsc_feature_counter+1;
1281       RETURN p_view_name_prefix || '_' || g_rsc_feature_counter;
1282     ELSIF p_view_name_prefix='ITOT' THEN
1283       g_itot_feature_counter := g_itot_feature_counter+1;
1284       RETURN p_view_name_prefix || '_' || g_itot_feature_counter;
1285     ELSIF p_view_name_prefix='IRSC' THEN
1286       g_irsc_feature_counter := g_irsc_feature_counter+1;
1287       RETURN p_view_name_prefix || '_' || g_irsc_feature_counter;
1288     ELSIF p_view_name_prefix='REF' THEN
1289       g_mandatory_ref_counter := g_mandatory_ref_counter+1;
1290       RETURN p_view_name_prefix || '_' || g_mandatory_ref_counter;
1291     ELSIF p_view_name_prefix='CON' THEN
1292       g_connector_counter := g_connector_counter+1;
1293       RETURN p_view_name_prefix || '_' || g_connector_counter;
1294     ELSIF p_view_name_prefix='BOMM' THEN
1295       g_bomm_counter := g_bomm_counter+1;
1296       RETURN p_view_name_prefix || '_' || g_bomm_counter;
1297     ELSIF p_view_name_prefix='OPT' THEN
1298       g_opt_counter := g_opt_counter+1;
1299       RETURN p_view_name_prefix || '_' || g_opt_counter;
1300     END IF;
1301   END get_next_view_name;
1302 
1303   --
1304   -- return name of node type
1305   --
1306   FUNCTION get_View_Name(p_ui_node IN CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE,
1307                          x_has_children OUT NOCOPY VARCHAR2) RETURN VARCHAR2 IS
1308     l_view_name VARCHAR2(255);
1309   BEGIN
1310     x_has_children := G_NO_FLAG;
1311 
1312     IF p_ui_node.detailed_type_id IN (CZ_TYPES.UMANDATORY_COMPONENT_TYPEID) THEN
1313 
1314       g_mandatory_comp_counter := g_mandatory_comp_counter + 1;
1315       l_view_name              := 'COMP_' ||
1316                                   TO_CHAR(g_mandatory_comp_counter);
1317       x_has_children           := G_YES_FLAG;
1318 
1319     ELSIF p_ui_node.detailed_type_id IN (CZ_TYPES.UOPTIONAL_COMPONENT_TYPEID) THEN
1320 
1321       g_optional_ref_counter := g_optional_ref_counter + 1;
1322       l_view_name            := 'SIM_' || TO_CHAR(g_optional_ref_counter);
1323       -- x_has_children         := G_YES_FLAG; -- Shantaram's requitement 08/04/2004
1324 
1325     ELSIF p_ui_node.detailed_type_id IN (CZ_TYPES.UMINMAX_COMPONENT_TYPEID) THEN
1326 
1327       g_minmax_ref_counter := g_minmax_ref_counter + 1;
1328       l_view_name          := 'CS_' || TO_CHAR(g_minmax_ref_counter);
1329       x_has_children       := G_YES_FLAG;
1330 
1331     ELSIF p_ui_node.detailed_type_id IN
1332           (CZ_TYPES.UNON_COUNT_FEATURE_TYPEID, CZ_TYPES.UCOUNT_FEATURE_TYPEID,
1333            CZ_TYPES.UCOUNT_FEATURE01_TYPEID, CZ_TYPES.UMINMAX_FEATURE_TYPEID) THEN
1334 
1335       g_of_feature_counter := g_of_feature_counter + 1;
1336       l_view_name          := 'OF_' || TO_CHAR(g_of_feature_counter);
1337       x_has_children       := G_YES_FLAG;
1338 
1339     ELSIF p_ui_node.detailed_type_id IN (CZ_TYPES.UINTEGER_FEATURE_TYPEID) THEN
1340 
1341       g_if_feature_counter := g_if_feature_counter + 1;
1342       l_view_name          := 'IF_' || TO_CHAR(g_if_feature_counter);
1343 
1344     ELSIF p_ui_node.detailed_type_id IN (CZ_TYPES.UDECIMAL_FEATURE_TYPEID) THEN
1345 
1346       g_df_feature_counter := g_df_feature_counter + 1;
1347       l_view_name          := 'DF_' || TO_CHAR(g_df_feature_counter);
1348 
1349     ELSIF p_ui_node.detailed_type_id IN (CZ_TYPES.UBOOLEAN_FEATURE_TYPEID) THEN
1350 
1351       g_bf_feature_counter := g_bf_feature_counter + 1;
1352       l_view_name          := 'BF_' || TO_CHAR(g_bf_feature_counter);
1353 
1354     ELSIF p_ui_node.detailed_type_id IN (CZ_TYPES.UTEXT_FEATURE_TYPEID) THEN
1355 
1356       g_tf_feature_counter := g_tf_feature_counter + 1;
1357       l_view_name          := 'TF_' || TO_CHAR(g_tf_feature_counter);
1358 
1359     ELSIF p_ui_node.detailed_type_id IN (CZ_TYPES.UTOTAL_TYPEID) AND p_ui_node.ps_node_type=CZ_TYPES.PS_NODE_TYPE_TOTAL THEN
1360 
1361       g_tot_feature_counter := g_tot_feature_counter + 1;
1362       l_view_name           := 'TOT_' || TO_CHAR(g_tot_feature_counter);
1363 
1364     ELSIF p_ui_node.detailed_type_id IN (CZ_TYPES.URESOURCE_TYPEID) AND p_ui_node.ps_node_type=CZ_TYPES.PS_NODE_TYPE_RESOURCE THEN
1365 
1366       g_rsc_feature_counter := g_rsc_feature_counter + 1;
1367       l_view_name           := 'RSC_' || TO_CHAR(g_rsc_feature_counter);
1368 
1369     ELSIF p_ui_node.detailed_type_id IN (CZ_TYPES.UTOTAL_TYPEID) AND p_ui_node.ps_node_type=CZ_TYPES.PS_NODE_TYPE_INT_TOTAL THEN
1370 
1371       g_itot_feature_counter := g_itot_feature_counter + 1;
1372       l_view_name           := 'ITOT_' || TO_CHAR(g_itot_feature_counter);
1373 
1374     ELSIF p_ui_node.detailed_type_id IN (CZ_TYPES.URESOURCE_TYPEID) AND p_ui_node.ps_node_type=CZ_TYPES.PS_NODE_TYPE_INT_RESOURCE THEN
1375 
1376       g_irsc_feature_counter := g_irsc_feature_counter + 1;
1377       l_view_name           := 'IRSC_' || TO_CHAR(g_irsc_feature_counter);
1378 
1379     ELSIF p_ui_node.detailed_type_id IN (CZ_TYPES.UMANDATORY_REF_TYPEID) THEN
1380 
1381       g_mandatory_ref_counter := g_mandatory_ref_counter + 1;
1382       l_view_name             := 'REF_' || TO_CHAR(g_mandatory_ref_counter);
1383 
1384     ELSIF p_ui_node.detailed_type_id IN (CZ_TYPES.UOPTIONAL_BOM_REF_TYPEID) THEN
1385 
1386       g_optional_ref_counter := g_optional_ref_counter + 1;
1387       l_view_name            := 'SIM_' || TO_CHAR(g_optional_ref_counter);
1388       --x_has_children         := G_YES_FLAG; -- Shantaram's requitement 09/01/2004
1389     ELSIF p_ui_node.detailed_type_id IN (CZ_TYPES.UMINMAX_BOM_REF_TYPEID) THEN
1390 
1391       g_minmax_ref_counter := g_minmax_ref_counter + 1;
1392       l_view_name          := 'CS_' || TO_CHAR(g_minmax_ref_counter);
1393       x_has_children       := G_YES_FLAG;
1394     ELSIF p_ui_node.detailed_type_id IN (CZ_TYPES.UCONNECTOR_TYPEID) THEN
1395 
1396       g_connector_counter := g_connector_counter + 1;
1397       l_view_name         := 'CON_' || TO_CHAR(g_connector_counter);
1398 
1399     ELSIF p_ui_node.detailed_type_id IN (CZ_TYPES.UMINMAX_CONNECTOR) THEN
1400 
1401       g_connector_counter := g_connector_counter + 1;
1402       l_view_name         := 'CON_' || TO_CHAR(g_connector_counter);
1403       x_has_children      := G_YES_FLAG;
1404     ELSIF p_ui_node.detailed_type_id IN
1405          (CZ_TYPES.UBOM_NSTBOM_NQMTX_TYPEID
1406          ,CZ_TYPES.UBOM_NSTBOM_NQNMTX_TYPEID
1407          ,CZ_TYPES.UBOM_NSTBOM_QNMTX_TYPEID
1408          ,CZ_TYPES.UBOM_NSTBOM_QMTX_TYPEID
1409          ,CZ_TYPES.UBOM_STIO_NQMTX_TYPEID
1410          ,CZ_TYPES.UBOM_STIO_NQNMTX_TYPEID
1411          ,CZ_TYPES.UBOM_STIO_QNMTX_TYPEID
1412          ,CZ_TYPES.UBOM_STIO_QMTX_TYPEID) THEN
1413 
1414       g_bomm_counter := g_bomm_counter + 1;
1415       l_view_name    := 'BOMM_' || TO_CHAR(g_bomm_counter);
1416       x_has_children := G_YES_FLAG;
1417 
1418     ELSIF p_ui_node.detailed_type_id=CZ_TYPES.UBOM_STANDART_ITEM_TYPEID THEN
1419       g_bomm_counter := g_bomm_counter + 1;
1420       l_view_name    := 'BOMM_' || TO_CHAR(g_bomm_counter);
1421 
1422     ELSIF p_ui_node.detailed_type_id=CZ_TYPES.UOPTION_TYPEID THEN
1423       g_opt_counter := g_opt_counter + 1;
1424       l_view_name    := 'OPT_' || TO_CHAR(g_opt_counter);
1425 
1426     ELSE
1427       NULL;
1428     END IF;
1429 
1430     RETURN l_view_name;
1431   END get_View_Name;
1432 
1433   --
1434   -- return COUNT ( of UI pages of a given UI) + 1
1435   --
1436   FUNCTION get_Page_Counter RETURN NUMBER IS
1437     l_page_counter NUMBER;
1438   BEGIN
1439     --
1440     -- if it is cached then get it from cache
1441     --
1442     SELECT COUNT(page_id)
1443       INTO l_page_counter
1444       FROM CZ_UI_PAGES
1445      WHERE ui_def_id = g_UI_Context.ui_def_id;
1446 
1447     RETURN l_page_counter;
1448 
1449   END get_Page_Counter;
1450 
1451   --
1452   -- construct JRAD Page/Region name based on ui_def_id and page_id
1453   --   Parameters : p_page_id - identifies UI page ( -> CZ_UI_PAGES.page_id )
1454   --   Return     : JRAD Page/Region name
1455   --
1456   FUNCTION generate_JRAD_Page_Name(p_page_counter IN NUMBER)
1457     RETURN VARCHAR2 IS
1458 
1459     l_jrad_doc  CZ_UI_PAGES.jrad_doc%TYPE;
1460     l_counter   NUMBER;
1461 
1462   BEGIN
1463 
1464     --
1465     -- generate Page Name based on l_master_template_node.ui_def_id ( global variable - scope is "current UI" )
1466     -- and g_PAGE_COUNTER ( global variable - scope is "current UI" )
1467     --
1468     l_jrad_doc := '/oracle/apps/cz/runtime/oa/webui/regions/ui' ||
1469       TO_CHAR(g_UI_Context.ui_def_id) || '/Page_' ||TO_CHAR(g_UI_Context.ui_def_id)||'_'||
1470       TO_CHAR(p_page_counter);
1471 
1472     SELECT COUNT(*) INTO l_counter FROM CZ_UI_PAGES
1473     WHERE ui_def_id=g_UI_Context.ui_def_id AND jrad_doc=l_jrad_doc;
1474 
1475     IF l_counter>0 THEN
1476       l_counter:=l_counter+1;
1477       l_jrad_doc := l_jrad_doc||'_'||TO_CHAR(l_counter);
1478 
1479       LOOP
1480         SELECT COUNT(*) INTO l_counter FROM CZ_UI_PAGES
1481         WHERE ui_def_id=g_UI_Context.ui_def_id AND jrad_doc=l_jrad_doc;
1482         IF l_counter=0 THEN
1483           EXIT;
1484         ELSE
1485           l_counter:=l_counter+1;
1486           l_jrad_doc := l_jrad_doc||'_'||TO_CHAR(l_counter);
1487         END IF;
1488       END LOOP;
1489     END IF;
1490 
1491     RETURN l_jrad_doc;
1492   END generate_JRAD_Page_Name;
1493 
1494   --
1495   -- get short JRAD name
1496   --
1497   FUNCTION get_Short_JRAD_Name(p_full_jrad_name IN VARCHAR2)
1498     RETURN VARCHAR2 IS
1499     l_str VARCHAR2(4000);
1500     l_num NUMBER;
1501   BEGIN
1502     l_str := p_full_jrad_name;
1503 
1504     LOOP
1505       l_num := INSTR(l_str,'/');
1506       IF l_num > 0 THEN
1507          l_str := SUBSTR(l_str,l_num+1);
1508          IF l_str IS NULL THEN
1509            EXIT;
1510          END IF;
1511       ELSE
1512          EXIT;
1513       END IF;
1514     END LOOP;
1515     RETURN l_str;
1516   END get_Short_JRAD_Name;
1517 
1518   --
1519   -- return CZ_UI_DEFS data of Master Template Settings
1520   --
1521   FUNCTION get_UI_Def_Node(p_ui_def_id IN NUMBER) RETURN CZ_UI_DEFS%ROWTYPE IS
1522   BEGIN
1523     --
1524     -- if cache contains given ui_def_id then get it from cache
1525     --
1526     IF NOT(g_ui_def_nodes_tbl.EXISTS(p_ui_def_id)) THEN
1527       SELECT * INTO g_ui_def_nodes_tbl(p_ui_def_id)
1528         FROM CZ_UI_DEFS
1529        WHERE ui_def_id = p_ui_def_id;
1530     END IF;
1531     RETURN g_ui_def_nodes_tbl(p_ui_def_id);
1532   END get_UI_Def_Node;
1533 
1534   --
1535   -- return data for model node with ps_node_id = p_ps_node_id
1536   -- ( private )
1537   -- Parameters :
1538   --   p_ps_node_id - identifies node in Model tree
1539   --
1540   FUNCTION get_Model_Node(p_ps_node_id IN NUMBER)
1541     RETURN CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE IS
1542   BEGIN
1543     -- if cache is populated then get it from cache
1544     IF NOT(g_model_nodes_tbl.EXISTS(p_ps_node_id)) THEN
1545       SELECT DISTINCT *
1546         INTO g_model_nodes_tbl(p_ps_node_id)
1547         FROM CZ_UITEMPLS_FOR_PSNODES_V
1548        WHERE ps_node_id = p_ps_node_id AND
1549              ui_def_id=g_UI_Context.from_master_template_id AND
1550              deleted_flag = G_NO_FLAG;
1551 
1552 ---Bug6406709
1553       IF g_model_nodes_tbl(p_ps_node_id).ui_omit = G_YES_FLAG AND g_UI_Context.show_all_nodes_flag = G_YES_FLAG THEN
1554           g_model_nodes_tbl(p_ps_node_id).ui_omit := G_NO_FLAG;
1555       END IF;
1556 
1557        g_ps_node_persist_id_tbl(g_model_nodes_tbl(p_ps_node_id).persistent_node_id) := p_ps_node_id;
1558     END IF;
1559     RETURN g_model_nodes_tbl(p_ps_node_id);
1560   END get_Model_Node;
1561 
1562   --
1563   -- get persistent_node_id of root node
1564   --
1565   FUNCTION get_Root_Persistent_Node_Id
1566     RETURN NUMBER IS
1567   BEGIN
1568     -- if cache is populated then get it from cache
1569     IF NOT(g_root_persist_id_tbl.EXISTS(g_UI_Context.devl_project_id)) THEN
1570       IF g_model_nodes_tbl.EXISTS(g_UI_Context.devl_project_id) THEN
1571         g_root_persist_id_tbl(g_UI_Context.devl_project_id) := g_model_nodes_tbl(g_UI_Context.devl_project_id).persistent_node_id;
1572       ELSE
1573         SELECT persistent_node_id
1574           INTO g_root_persist_id_tbl(g_UI_Context.devl_project_id)
1575           FROM CZ_PS_NODES
1576          WHERE devl_project_id=g_UI_Context.devl_project_id AND
1577                parent_id IS NULL AND
1578                deleted_flag=G_NO_FLAG;
1579       END IF;
1580     END IF;
1581     RETURN g_root_persist_id_tbl(g_UI_Context.devl_project_id);
1582   END get_Root_Persistent_Node_Id;
1583 
1584   --
1585   -- return data for model node with a given persistent node id
1586   -- ( private )
1587   -- Parameters :
1588   --   p_persistent_node_id - persistent id of model node
1589   --   p_model_id           - identifies model
1590   --   p_ui_def_id          - identifies UI Master Template Setting
1591   --
1592   FUNCTION get_Model_Node_By_Persist_Id(p_persistent_node_id IN NUMBER,
1593                                         p_model_id           IN NUMBER)
1594     RETURN CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE IS
1595     l_node       CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE;
1596     l_ps_node_id NUMBER;
1597   BEGIN
1598     -- if cache is populated then get it from cache
1599     SELECT DISTINCT *
1600       INTO l_node
1601       FROM CZ_UITEMPLS_FOR_PSNODES_V
1602      WHERE devl_project_id = p_model_id AND
1603            persistent_node_id = p_persistent_node_id AND
1604            ui_def_id=g_UI_Context.from_master_template_id AND
1605            deleted_flag = G_NO_FLAG;
1606 
1607 ---Bug6406709
1608       IF l_node.ui_omit = G_YES_FLAG AND  g_UI_Context.show_all_nodes_flag = G_YES_FLAG THEN
1609           l_node.ui_omit := G_NO_FLAG;
1610       END IF;
1611 
1612      RETURN l_node;
1613   EXCEPTION
1614     WHEN OTHERS THEN
1615       RETURN l_node;
1616   END get_Model_Node_By_Persist_Id;
1617 
1618   --
1619   -- return data for model node with ps_node_id = p_ps_node_id
1620   -- ( private )
1621   --
1622   PROCEDURE  get_Child_Nodes(p_ps_node_id       IN  NUMBER,
1623                              p_show_all_nodes   IN  VARCHAR2 DEFAULT NULL,
1624                              x_seq_nodes_tbl    OUT NOCOPY ui_page_el_int_tbl_type, -- fix for bug 6837809 : skudryav 28-Mar-2008
1625                              x_child_nodes_tbl  OUT NOCOPY model_nodes_tbl_type,
1626                              x_non_deleted_child_nodes_tbl  OUT NOCOPY model_nodes_tbl_type,
1627                              p_include_deleted_nodes IN VARCHAR2 DEFAULT G_NO_FLAG) IS
1628 
1629     l_current_model_node   CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE;
1630     l_ps_node_id           NUMBER;
1631 
1632   BEGIN
1633 
1634     IF g_Use_Cache AND g_model_nodes_tbl.EXISTS(p_ps_node_id) THEN
1635       l_ps_node_id := g_model_nodes_tbl.First;
1636       LOOP
1637         IF l_ps_node_id IS NULL THEN
1638            EXIT;
1639         END IF;
1640         l_current_model_node := g_model_nodes_tbl(l_ps_node_id);
1641         IF l_current_model_node.parent_id=p_ps_node_id  THEN
1642           IF (l_current_model_node.ui_omit=G_NO_FLAG OR p_show_all_nodes = G_YES_FLAG) THEN
1643             x_child_nodes_tbl(l_current_model_node.persistent_node_id) := l_current_model_node;
1644             x_seq_nodes_tbl(x_seq_nodes_tbl.COUNT+1) := l_current_model_node;
1645           END IF;
1646           IF l_current_model_node.deleted_flag = G_NO_FLAG THEN
1647             x_non_deleted_child_nodes_tbl(x_non_deleted_child_nodes_tbl.COUNT+1) := l_current_model_node;
1648           END IF;
1649         END IF;
1650 
1651         l_ps_node_id := g_model_nodes_tbl.NEXT(l_ps_node_id);
1652       END LOOP;
1653 
1654     ELSE  -- cache is not used
1655 
1656       FOR i IN (SELECT DISTINCT *
1657                   FROM CZ_UITEMPLS_FOR_PSNODES_V
1658                  WHERE ui_def_id=g_UI_Context.from_master_template_id AND
1659                        parent_id = p_ps_node_id AND
1660                        (ui_omit = G_NO_FLAG OR p_show_all_nodes = G_YES_FLAG) AND
1661                        (p_include_deleted_nodes = G_YES_FLAG OR deleted_flag = G_NO_FLAG)
1662                  ORDER BY tree_seq)
1663       LOOP
1664         IF i.deleted_flag = G_NO_FLAG AND i.detailed_type_id=G_UNDEFINED_DATA_TYPE THEN
1665            g_WRONG_PS_NODE_ID := i.ps_node_id;
1666            DEBUG('get_Child_Nodes() error message : node with ps_node_id='||TO_CHAR(i.ps_node_id)||
1667                  ' has undefined detailed type.');
1668            RAISE WRONG_EXT_PS_TYPE;
1669         END IF;
1670 
1671 ---Bug6406709
1672         IF i.ui_omit = G_YES_FLAG AND p_show_all_nodes = G_YES_FLAG THEN
1673             i.ui_omit := G_NO_FLAG;
1674         END IF;
1675 
1676         x_child_nodes_tbl(i.persistent_node_id) := i;
1677         x_seq_nodes_tbl(x_seq_nodes_tbl.COUNT+1) := i;
1678 
1679         IF i.deleted_flag = G_NO_FLAG THEN
1680           x_non_deleted_child_nodes_tbl(x_non_deleted_child_nodes_tbl.COUNT+1) := i;
1681         END IF;
1682       END LOOP;
1683     END IF;
1684   END get_Child_Nodes;
1685 
1686   --
1687   -- return expl data for model node with ps_node_id = p_ps_node_id
1688   -- ( private )
1689   --
1690   FUNCTION get_Expl_Id(p_model_id     IN NUMBER,
1691                        p_ps_node_id   IN NUMBER,
1692                        p_component_id IN NUMBER,
1693                        p_ps_node_type IN NUMBER) RETURN NUMBER IS
1694 
1695     l_model_ref_expl_id CZ_MODEL_REF_EXPLS.model_ref_expl_id%TYPE;
1696 
1697   BEGIN
1698 
1699     IF p_ps_node_id IS NOT NULL AND (p_component_id IS NULL OR p_component_id=0) THEN
1700       DEBUG('Wrong data in CZ_PS_NODES. Node with ps_node_id='||TO_CHAR(p_ps_node_id)||
1701       ' has invalid component_id='||TO_CHAR(p_component_id));
1702       RETURN 0;
1703     END IF;
1704 
1705     --
1706     -- if cache is populated then get it from cache
1707     --
1708     IF g_ref_expls_tbl.EXISTS(p_ps_node_id) THEN
1709       l_model_ref_expl_id := g_ref_expls_tbl(p_ps_node_id);
1710     ELSE
1711 
1712       IF p_ps_node_type NOT IN(G_REFERENCE_TYPE,G_CONNECTOR_TYPE) AND g_ref_expls_tbl.EXISTS(p_component_id) THEN
1713         l_model_ref_expl_id := g_ref_expls_tbl(p_component_id);
1714         g_ref_expls_tbl(p_ps_node_id) := l_model_ref_expl_id;
1715       ELSE
1716         IF p_ps_node_type IN (G_REFERENCE_TYPE, G_CONNECTOR_TYPE) THEN
1717           SELECT MIN(model_ref_expl_id)
1718             INTO l_model_ref_expl_id
1719             FROM CZ_MODEL_REF_EXPLS a
1720            WHERE model_id = p_model_id AND
1721                  referring_node_id = p_ps_node_id AND
1722                  deleted_flag = G_NO_FLAG;
1723         ELSE
1724           SELECT MIN(model_ref_expl_id)
1725             INTO l_model_ref_expl_id
1726             FROM CZ_MODEL_REF_EXPLS
1727            WHERE model_id = p_model_id AND
1728                  component_id = p_component_id AND
1729                  referring_node_id IS NULL AND
1730                  deleted_flag = G_NO_FLAG;
1731         END IF;
1732       END IF;
1733 
1734     END IF;
1735 
1736     RETURN l_model_ref_expl_id;
1737 
1738   EXCEPTION
1739     WHEN OTHERS THEN
1740       DEBUG('get_Expl_Id() node with ps_node_id='||TO_CHAR(p_ps_node_id)||
1741       ' can not be handled : '||SQLERRM);
1742       RETURN 0;
1743   END get_Expl_Id;
1744 
1745   --
1746   -- return UI page node
1747   --
1748   FUNCTION get_UI_Page_Node(p_page_id IN NUMBER)
1749     RETURN CZ_UI_PAGES%ROWTYPE IS
1750       l_page_node CZ_UI_PAGES%ROWTYPE;
1751   BEGIN
1752     SELECT * INTO l_page_node
1753       FROM CZ_UI_PAGES
1754      WHERE page_id=p_page_id AND
1755            ui_def_id=g_UI_Context.ui_def_id;
1756     RETURN l_page_node;
1757   END get_UI_Page_Node;
1758 
1759   --
1760   -- return UI element with element_id = p_element_id
1761   --
1762   FUNCTION get_UI_Element(p_element_id IN VARCHAR2,
1763                           p_page_id    IN NUMBER)
1764     RETURN CZ_UI_PAGE_ELEMENTS%ROWTYPE IS
1765     l_ui_node         CZ_UI_PAGE_ELEMENTS%ROWTYPE;
1766   BEGIN
1767     SELECT *
1768       INTO l_ui_node
1769       FROM CZ_UI_PAGE_ELEMENTS
1770      WHERE ui_def_id = g_UI_Context.ui_def_id AND
1771            page_id=p_page_id AND
1772            element_id = p_element_id;
1773     RETURN l_ui_node;
1774   END get_UI_Element;
1775 
1776   --
1777   -- return UI element with element_id = p_element_id
1778   --
1779   FUNCTION get_Page_Set(p_page_set_id IN NUMBER)
1780     RETURN CZ_UI_PAGE_SETS%ROWTYPE IS
1781     l_page_set_node CZ_UI_PAGE_SETS%ROWTYPE;
1782   BEGIN
1783     SELECT *
1784       INTO l_page_set_node
1785       FROM CZ_UI_PAGE_SETS
1786      WHERE page_set_id = p_page_set_id AND
1787            ui_def_id=g_UI_Context.ui_def_id;
1788     RETURN l_page_set_node;
1789   END get_Page_Set;
1790 
1791   FUNCTION get_UI_Node_Name(p_page_id       IN NUMBER,
1792                             p_template_id   IN NUMBER,
1793                             p_template_name IN VARCHAR2 DEFAULT NULL) RETURN VARCHAR2 IS
1794 
1795     l_counter      NUMBER;
1796     l_ui_node_name CZ_UI_PAGE_ELEMENTS.name%TYPE;
1797 
1798   BEGIN
1799 
1800     SELECT COUNT(element_id)+1 INTO l_counter FROM CZ_UI_PAGE_ELEMENTS
1801     WHERE ui_def_id=g_UI_Context.ui_def_id AND
1802           page_id=p_page_id AND
1803           ctrl_template_id=p_template_id AND
1804           deleted_flag NOT IN(G_YES_FLAG,G_LIMBO_FLAG,G_MARK_TO_DELETE);
1805 
1806     IF p_template_name IS NULL THEN
1807       BEGIN
1808         SELECT template_name||' - '||TO_CHAR(l_counter)
1809           INTO l_ui_node_name
1810           FROM CZ_UI_TEMPLATES
1811           WHERE template_id=p_template_id AND
1812                 ui_def_id=g_UI_Context.ui_def_id;
1813       EXCEPTION
1814         WHEN NO_DATA_FOUND THEN
1815           SELECT template_name||' - '||TO_CHAR(l_counter)
1816             INTO l_ui_node_name
1817             FROM CZ_UI_TEMPLATES
1818            WHERE template_id=p_template_id AND
1819                 ui_def_id=G_GLOBAL_TEMPLATES_UI_DEF_ID;
1820       END;
1821     ELSE
1822       l_ui_node_name := p_template_name||' - '||TO_CHAR(l_counter);
1823     END IF;
1824 
1825     RETURN l_ui_node_name;
1826   END get_UI_Node_Name;
1827 
1828   --
1829   -- return full JRAD name of UI template
1830   --
1831   FUNCTION get_JRAD_Name(p_template_id        IN NUMBER,
1832                          p_template_ui_def_id IN NUMBER DEFAULT NULL)
1833     RETURN VARCHAR2 IS
1834 
1835   BEGIN
1836     --
1837     -- if it is in cache get it from cache
1838     --
1839     IF g_template_jrad_name_tbl.EXISTS(p_template_id)
1840        AND p_template_ui_def_id IS NOT NULL THEN
1841        RETURN  g_template_jrad_name_tbl(p_template_id);
1842     ELSE
1843       IF p_template_ui_def_id IS NOT NULL THEN
1844         SELECT jrad_doc INTO g_template_jrad_name_tbl(p_template_id)
1845           FROM CZ_UI_TEMPLATES
1846          WHERE template_id=p_template_id AND
1847                ui_def_id=p_template_ui_def_id;
1848       ELSE
1849         BEGIN
1850           SELECT jrad_doc INTO g_template_jrad_name_tbl(p_template_id)
1851             FROM CZ_UI_TEMPLATES
1852            WHERE  template_id=p_template_id AND
1853                   ui_def_id=g_UI_Context.ui_def_id;
1854         EXCEPTION
1855           WHEN OTHERS THEN
1856             SELECT jrad_doc INTO g_template_jrad_name_tbl(p_template_id)
1857               FROM CZ_UI_TEMPLATES
1858              WHERE template_id=p_template_id AND
1859                    ui_def_id=G_GLOBAL_TEMPLATES_UI_DEF_ID;
1860         END;
1861       END IF;
1862     END IF;
1863     RETURN g_template_jrad_name_tbl(p_template_id);
1864   END get_JRAD_Name;
1865 
1866   --
1867   -- get UI Action Id associated with a given ui node
1868   --
1869   FUNCTION get_UI_Action_Id(p_ui_node IN CZ_UI_PAGE_ELEMENTS%ROWTYPE)
1870     RETURN NUMBER IS
1871    l_ui_action_id   CZ_UI_ACTIONS.ui_action_id%TYPE;
1872   BEGIN
1873     SELECT ui_action_id
1874       INTO l_ui_action_id
1875       FROM CZ_UI_ACTIONS
1876      WHERE ui_def_id = p_ui_node.ui_def_id AND
1877            source_page_id=p_ui_node.page_id AND
1878            element_id = p_ui_node.element_id AND
1879            deleted_flag=G_NO_FLAG;
1880     RETURN l_ui_action_id;
1881   END get_UI_Action_Id;
1882 
1883   --
1884   -- copy CZ_INTL_TEXTS record
1885   --
1886   FUNCTION copy_Intl_Text(p_intl_text_id     IN NUMBER,
1887                           p_target_ui_def_id IN NUMBER,
1888                           p_page_id          IN NUMBER,
1889                           p_element_id       IN NUMBER) RETURN NUMBER IS
1890 
1891     l_ui_intl_text_id NUMBER;
1892     l_model_id        NUMBER;
1893     l_seeded_flag     VARCHAR2(1);
1894 
1895   BEGIN
1896 
1897     IF p_intl_text_id IS NULL OR p_intl_text_id=0 THEN
1898       RETURN p_intl_text_id;
1899     ELSE
1900       SELECT seeded_flag INTO l_seeded_flag FROM CZ_INTL_TEXTS
1901       WHERE intl_text_id=p_intl_text_id;
1902     END IF;
1903 
1904     IF l_seeded_flag='0' OR l_seeded_flag IS NULL THEN
1905      IF p_target_ui_def_id IS NOT NULL AND p_target_ui_def_id<>0 THEN
1906        SELECT NVL(devl_project_id,0) INTO l_model_id FROM CZ_UI_DEFS
1907        WHERE ui_def_id=p_target_ui_def_id;
1908      END IF;
1909      l_ui_intl_text_id := allocateId('CZ_INTL_TEXTS_S');
1910 
1911       INSERT INTO CZ_INTL_TEXTS
1912            (INTL_TEXT_ID,
1913             TEXT_STR,
1914             DELETED_FLAG,
1915             SEEDED_FLAG,
1916             UI_DEF_ID,
1917             MODEL_ID,
1918             UI_PAGE_ID,
1919             UI_PAGE_ELEMENT_ID
1920             )
1921       SELECT
1922            l_ui_intl_text_id,
1923            text_str,
1924            G_NO_FLAG,
1925            G_NO_FLAG,
1926            p_target_ui_def_id,
1927            l_model_id,
1928            p_page_id,
1929            p_element_id
1930       FROM CZ_INTL_TEXTS
1931       WHERE intl_text_id=p_intl_text_id;
1932       RETURN l_ui_intl_text_id;
1933     ELSE
1934       RETURN p_intl_text_id;
1935     END IF;
1936   END copy_Intl_Text;
1937 
1938   --
1939   -- refresh UI Images in UI based on data from Master Template
1940   --
1941   PROCEDURE refresh_UI_Images(p_ui_def_id IN NUMBER, p_master_template_id IN NUMBER) IS
1942   BEGIN
1943 
1944     INSERT INTO CZ_UI_IMAGES
1945       (UI_DEF_ID
1946        ,MASTER_TEMPLATE_FLAG
1947        ,IMAGE_USAGE_CODE
1948        ,IMAGE_FILE
1949        ,DELETED_FLAG
1950        ,SEEDED_FLAG
1951        ,ENTITY_CODE,
1952        LAST_UPDATE_LOGIN)
1953     SELECT
1954        p_ui_def_id
1955        ,G_NO_FLAG
1956        ,IMAGE_USAGE_CODE
1957        ,IMAGE_FILE
1958        ,DELETED_FLAG
1959        ,G_NO_FLAG
1960        ,ENTITY_CODE
1961        ,-UID
1962      FROM CZ_UI_IMAGES a
1963      WHERE ui_def_id=p_master_template_id
1964            AND deleted_flag=G_NO_FLAG AND
1965            NOT EXISTS(SELECT NULL FROM CZ_UI_IMAGES
1966                       WHERE ui_def_id=p_ui_def_id AND
1967                             IMAGE_USAGE_CODE=a.IMAGE_USAGE_CODE AND
1968                             ENTITY_CODE=a.ENTITY_CODE AND deleted_flag=G_NO_FLAG);
1969     /*
1970     UPDATE CZ_UI_IMAGES a
1971        SET IMAGE_FILE=(SELECT IMAGE_FILE FROM CZ_UI_IMAGES
1972                        WHERE  ui_def_id=p_master_template_id AND
1973                             IMAGE_USAGE_CODE=a.IMAGE_USAGE_CODE AND
1974                             ENTITY_CODE=a.ENTITY_CODE AND deleted_flag=G_NO_FLAG )
1975     WHERE ui_def_id=p_ui_def_id AND deleted_flag=G_NO_FLAG;
1976     */
1977   END refresh_UI_Images;
1978 
1979   PROCEDURE refresh_Cont_Templs
1980   (p_content_type       IN NUMBER,
1981    p_master_template_id IN NUMBER,
1982    p_ui_def_id          IN NUMBER,
1983    p_create_cont_entry  IN BOOLEAN) IS
1984 
1985     l_template_ui_def_id NUMBER;
1986 
1987   BEGIN
1988 
1989     IF p_create_cont_entry THEN
1990       l_template_ui_def_id := g_UI_Context.ui_def_id;
1991     ELSE
1992       l_template_ui_def_id := G_GLOBAL_TEMPLATES_UI_DEF_ID;
1993     END IF;
1994     FOR h IN(SELECT * FROM CZ_UI_CONT_TYPE_TEMPLS
1995              WHERE ui_def_id = p_master_template_id AND
1996                    content_type=p_content_type AND
1997                    deleted_flag=G_NO_FLAG)
1998     LOOP
1999       BEGIN
2000         INSERT INTO CZ_UI_CONT_TYPE_TEMPLS
2001                 (ui_def_id,
2002                  content_type,
2003                  template_id,
2004                  master_template_flag,
2005                  seeded_flag,
2006                  template_ui_def_id,
2007                  deleted_flag)
2008         VALUES(
2009                  p_ui_def_id,
2010                  h.content_type,
2011                  h.template_id,
2012                  G_NO_FLAG,
2013                  G_NO_FLAG,
2014                  l_template_ui_def_id,
2015                  G_NO_FLAG);
2016         --
2017         -- populate cache of UI Templates
2018         --
2019         g_template_id_tbl(h.content_type) := h.template_id;
2020         g_template_ui_def_id_tbl(h.content_type) := l_template_ui_def_id;
2021 
2022       EXCEPTION
2023         WHEN OTHERS THEN
2024           DEBUG(SQLERRM);
2025       END;
2026     END LOOP;
2027   END refresh_Cont_Templs;
2028 
2029   PROCEDURE save_Template_As_Local
2030   (p_template_id IN NUMBER,
2031    p_ui_def_id   IN NUMBER) IS
2032 
2033     l_xmldoc                 xmldom.DOMDocument;
2034     l_jrad_doc               VARCHAR2(4000);
2035     l_template_jrad_doc      CZ_UI_TEMPLATES.jrad_doc%TYPE;
2036 
2037   BEGIN
2038 
2039     l_template_jrad_doc := get_JRAD_Name(p_template_id, G_GLOBAL_TEMPLATES_UI_DEF_ID);
2040 
2041     l_jrad_doc := '/oracle/apps/cz/runtime/oa/webui/regions/ui' ||
2042                   TO_CHAR(p_ui_def_id) || '/' ||
2043                   get_Short_JRAD_Name(l_template_jrad_doc);
2044     BEGIN
2045 
2046       --
2047       -- create UI Template in JRAD repository
2048       --
2049       l_xmldoc := parse_JRAD_Document(p_doc_full_name => l_template_jrad_doc);
2050 
2051       IF xmldom.isNull(l_xmldoc) THEN
2052          add_Error_Message(p_message_name => 'CZ_WRONG_UI_TEMPLATE',
2053                            p_token_name   => 'UI_TEMPLATE',
2054                            p_token_value  => l_template_jrad_doc,
2055                            p_fatal_error  => TRUE);
2056          RAISE WRONG_UI_TEMPLATE;
2057       END IF;
2058 
2059       Save_Document(p_xml_doc   => l_xmldoc,
2060                     p_doc_name  => l_jrad_doc);
2061 
2062     EXCEPTION
2063       WHEN OTHERS THEN
2064          add_Error_Message(p_message_name => 'CZ_WRONG_UI_TEMPLATE',
2065                            p_token_name   => 'UI_TEMPLATE',
2066                            p_token_value  => l_template_jrad_doc,
2067                            p_fatal_error  => TRUE);
2068          RAISE WRONG_UI_TEMPLATE;
2069     END;
2070 
2071     BEGIN
2072       INSERT INTO CZ_UI_TEMPLATES
2073       (TEMPLATE_ID,
2074        UI_DEF_ID,
2075        TEMPLATE_NAME,
2076        TEMPLATE_TYPE,
2077        TEMPLATE_DESC,
2078        PARENT_CONTAINER_TYPE,
2079        JRAD_DOC,
2080        BUTTON_BAR_TEMPLATE_ID,
2081        MESSAGE_TYPE,
2082        MAIN_MESSAGE_ID,
2083        TITLE_ID,
2084        SEEDED_FLAG,
2085        LAYOUT_UI_STYLE,
2086        ROOT_REGION_TYPE,
2087        ROOT_ELEMENT_SIGNATURE_ID,
2088        BUTTON_BAR_TEMPL_UIDEF_ID,
2089        TEMPLATE_USAGE,
2090        AMN_USAGE,
2091        DELETED_FLAG)
2092        SELECT
2093         template_id,
2094         g_UI_Context.ui_def_id,
2095         TEMPLATE_NAME,
2096         TEMPLATE_TYPE,
2097         TEMPLATE_DESC,
2098         PARENT_CONTAINER_TYPE,
2099         l_jrad_doc,
2100         BUTTON_BAR_TEMPLATE_ID,
2101         MESSAGE_TYPE,
2102         MAIN_MESSAGE_ID,
2103         TITLE_ID,
2104         G_NO_FLAG,
2105         LAYOUT_UI_STYLE,
2106         ROOT_REGION_TYPE,
2107         ROOT_ELEMENT_SIGNATURE_ID,
2108         BUTTON_BAR_TEMPL_UIDEF_ID,
2109         TEMPLATE_USAGE,
2110         AMN_USAGE,
2111         G_NO_FLAG
2112        FROM CZ_UI_TEMPLATES
2113        WHERE template_id=p_template_id AND ui_def_id=G_GLOBAL_TEMPLATES_UI_DEF_ID;
2114 
2115       g_template_jrad_name_tbl(p_template_id) := l_jrad_doc;
2116 
2117     EXCEPTION
2118       WHEN OTHERS THEN
2119         DEBUG('save_Template_As_Local() : '||SQLERRM);
2120     END;
2121 
2122   END save_Template_As_Local;
2123 
2124   --
2125   -- check : should new Content type record be added ?
2126   --
2127   FUNCTION must_Add_Content_Type_Record(p_content_type   IN NUMBER,
2128                                         p_it_is_in_model IN BOOLEAN) RETURN BOOLEAN IS
2129 
2130   BEGIN
2131 
2132     IF  p_content_type IN(CZ_TYPES.UMANDATORY_COMPONENT_TYPEID,
2133                             CZ_TYPES.UOPTIONAL_COMPONENT_TYPEID,
2134                             CZ_TYPES.UMINMAX_COMPONENT_TYPEID,
2135                             CZ_TYPES.UNON_COUNT_FEATURE_TYPEID,
2136                             CZ_TYPES.UCOUNT_FEATURE_TYPEID,
2137                             CZ_TYPES.UCOUNT_FEATURE01_TYPEID,
2138                             CZ_TYPES.UMINMAX_FEATURE_TYPEID,
2139                             CZ_TYPES.UINTEGER_FEATURE_TYPEID,
2140                             CZ_TYPES.UDECIMAL_FEATURE_TYPEID,
2141                             CZ_TYPES.UBOOLEAN_FEATURE_TYPEID,
2142                             CZ_TYPES.UTEXT_FEATURE_TYPEID,
2143                             CZ_TYPES.UTOTAL_TYPEID,
2144                             CZ_TYPES.URESOURCE_TYPEID,
2145                             CZ_TYPES.UMANDATORY_REF_TYPEID,
2146                             CZ_TYPES.UCONNECTOR_TYPEID) THEN
2147 
2148           IF g_UI_Context.CTRLTEMPLUSE_NONBOM = G_TEMPLATE_USE_LOCAL_COPY
2149              AND p_it_is_in_model THEN
2150 
2151               RETURN TRUE;
2152 
2153           ELSE
2154 
2155              RETURN FALSE;
2156 
2157           END IF;
2158 
2159 
2160       ELSIF p_content_type IN(CZ_TYPES.UOPTIONAL_BOM_REF_TYPEID
2161                                 ,CZ_TYPES.UMINMAX_BOM_REF_TYPEID
2162                                 ,CZ_TYPES.UBOM_NSTBOM_NQMTX_TYPEID
2163                                 ,CZ_TYPES.UBOM_NSTBOM_NQNMTX_TYPEID
2164                                 ,CZ_TYPES.UBOM_NSTBOM_QNMTX_TYPEID
2165                                 ,CZ_TYPES.UBOM_NSTBOM_QMTX_TYPEID
2166                                 ,CZ_TYPES.UBOM_STIO_NQMTX_TYPEID
2167                                 ,CZ_TYPES.UBOM_STIO_NQNMTX_TYPEID
2168                                 ,CZ_TYPES.UBOM_STIO_QNMTX_TYPEID
2169                                 ,CZ_TYPES.UBOM_STIO_QMTX_TYPEID) THEN
2170 
2171           IF g_UI_Context.CTRLTEMPLUSE_BOM = G_TEMPLATE_USE_LOCAL_COPY
2172               AND p_it_is_in_model THEN
2173 
2174            RETURN TRUE;
2175 
2176           ELSE
2177 
2178            RETURN  FALSE;
2179 
2180           END IF;
2181 
2182       ELSIF (g_UI_Context.CTRLTEMPLUSE_REQDMSG = G_TEMPLATE_USE_LOCAL_COPY AND
2183               p_content_type IN(G_MSGTEMP_RQDMSG_OVRCTRDIC
2184                                 ,G_MSGTEMP_RQDMSG_NOVRCTRDIC
2185                                 ,G_MSGTEMP_RQDMSG_INVLDINP
2186                                 ,G_MSGTEMP_RQDMSG_FATERR)) OR
2187              (g_UI_Context.CTRLTEMPLUSE_OPTMSG = G_TEMPLATE_USE_LOCAL_COPY AND
2188               p_content_type IN(G_MSGTEMP_OPTMSG_VLDNOTIF
2189                                 ,G_MSGTEMP_OPTMSG_CNFRMSAVFIN
2190                                 ,G_MSGTEMP_OPTMSG_CNFRMCANCEL
2191                                 ,G_MSGTEMP_OPTMSG_CNFRMDELINST
2192                                 ,G_MSGTEMP_OPTMSG_CNFRMLDINST
2193                                 ,G_MSGTEMP_OPTMSG_CNFRMEDINST
2194                                 ,G_MSGTEMP_OPTMSG_QRYDELINST)) OR
2195              (g_UI_Context.CTRLTEMPLUSE_COMMON = G_TEMPLATE_USE_LOCAL_COPY AND
2196               p_content_type IN(G_UTILTEMP_BB_NSTXN
2197                                 ,G_UTILTEMP_BB_BASICTXN
2198                                 ,G_UTILTEMP_BB_2PGNVG
2199                                 ,G_UTILTEMP_BB_NPGNVG))  OR
2200              (g_UI_Context.CTRLTEMPLATEUSE_UTILITYPAGE = G_TEMPLATE_USE_LOCAL_COPY AND
2201               p_content_type IN(G_UTILTEMP_PAGLAY_PGSTA
2202                                 ,G_UTILTEMP_BB_PRVWPG
2203                                 ,G_UTILTEMP_UPT_CFGPRV
2204                                 ,G_UTILTEMP_UPT_CXNCHO))  THEN
2205 
2206         RETURN  TRUE;
2207 
2208       END IF;
2209 
2210     RETURN FALSE;
2211 
2212   END  must_Add_Content_Type_Record;
2213 
2214   --
2215   -- create local UI templates
2216   --
2217   PROCEDURE create_Local_UI_Templates IS
2218 
2219     l_handled_templates_tbl  number_tbl_type;
2220     l_detailed_type_id_tbl   number_tbl_type;
2221     l_template_rec           CZ_UI_TEMPLATES%ROWTYPE;
2222     l_jrad_doc               VARCHAR2(4000);
2223     l_template_ui_def_id     NUMBER := G_GLOBAL_TEMPLATES_UI_DEF_ID;
2224     l_create_cont_entry      BOOLEAN := FALSE;
2225 
2226   BEGIN
2227 
2228     IF g_UI_Context.CTRLTEMPLUSE_BOM = G_TEMPLATE_USE_LOCAL_COPY OR
2229        g_UI_Context.CTRLTEMPLUSE_NONBOM = G_TEMPLATE_USE_LOCAL_COPY OR
2230        g_UI_Context.CTRLTEMPLUSE_OPTMSG = G_TEMPLATE_USE_LOCAL_COPY OR
2231        g_UI_Context.CTRLTEMPLUSE_COMMON = G_TEMPLATE_USE_LOCAL_COPY OR
2232        g_UI_Context.CTRLTEMPLUSE_REQDMSG = G_TEMPLATE_USE_LOCAL_COPY THEN
2233 
2234        --
2235        -- open XML parser
2236        --
2237        Open_Parser;
2238     END IF;
2239 
2240     --
2241     -- refresh UI Images in UI based on data from Master Template
2242     --
2243 
2244     refresh_UI_Images(p_ui_def_id          => g_UI_Context.ui_def_id,
2245                       p_master_template_id => g_UI_Context.from_master_template_id);
2246 
2247     IF g_UI_Context.CTRLTEMPLUSE_BOM = G_TEMPLATE_USE_LOCAL_COPY OR
2248        g_UI_Context.CTRLTEMPLUSE_NONBOM = G_TEMPLATE_USE_LOCAL_COPY THEN
2249 
2250       FOR m IN(SELECT DISTINCT detailed_type_id
2251                FROM CZ_UITEMPLS_FOR_PSNODES_V
2252                WHERE devl_project_id=g_UI_Context.devl_project_id AND
2253                      ui_def_id=g_UI_Context.from_master_template_id AND
2254                      deleted_flag=G_NO_FLAG AND ui_omit=G_NO_FLAG)
2255       LOOP
2256         l_detailed_type_id_tbl(m.detailed_type_id) := m.detailed_type_id;
2257       END LOOP;
2258 
2259     END IF;
2260 
2261     FOR k IN(SELECT * FROM CZ_UI_CONT_TYPE_TEMPLS
2262              WHERE ui_def_id = g_UI_Context.from_master_template_id AND
2263                    deleted_flag = G_NO_FLAG)
2264     LOOP
2265 
2266       IF k.content_type = G_PAGE_STATUS_CONTENT_TYPE THEN
2267          g_PAGE_STATUS_TEMPLATE_ID := k.template_id;
2268       END IF;
2269 
2270       l_create_cont_entry := must_Add_Content_Type_Record(k.content_type,
2271                                                           l_detailed_type_id_tbl.EXISTS(k.content_type));
2272 
2273       IF l_create_cont_entry THEN
2274 
2275         save_Template_As_Local(p_template_id => k.template_id,
2276                                p_ui_def_id   => g_UI_Context.ui_def_id);
2277 
2278         refresh_Cont_Templs(p_content_type       => k.content_type,
2279                             p_master_template_id => g_UI_Context.from_master_template_id,
2280                             p_ui_def_id          => g_UI_Context.ui_def_id,
2281                             p_create_cont_entry  => TRUE);
2282 
2283        ELSE
2284          IF NOT(l_detailed_type_id_tbl.EXISTS(k.content_type)) THEN
2285             refresh_Cont_Templs(p_content_type       => k.content_type,
2286                                 p_master_template_id => g_UI_Context.from_master_template_id,
2287                                 p_ui_def_id          => g_UI_Context.ui_def_id,
2288                                 p_create_cont_entry  => FALSE);
2289          END IF;
2290 
2291        END IF;
2292 
2293     END LOOP;
2294 
2295     SELECT template_id INTO g_DRILLDOWN_TEMPLATE_ID
2296       FROM CZ_UI_CONT_TYPE_TEMPLS
2297      WHERE ui_def_id=g_UI_Context.from_master_template_id AND
2298            content_type=2151 AND deleted_flag=G_NO_FLAG;
2299 
2300     -- close XML parser
2301     Close_Parser;
2302 
2303     -- reopen XML parser
2304     Open_Parser;
2305 
2306   END create_Local_UI_Templates;
2307 
2308   --
2309   -- return page_ref node of nearest page
2310   --
2311   FUNCTION get_UI_Page_Ref_Node(p_ui_node  IN CZ_UI_PAGE_ELEMENTS%ROWTYPE)
2312     RETURN CZ_UI_PAGE_REFS%ROWTYPE IS
2313 
2314     l_page_ref_node     CZ_UI_PAGE_REFS%ROWTYPE;
2315 
2316   BEGIN
2317 
2318     IF p_ui_node.page_id IS NULL THEN
2319       RETURN l_page_ref_node;
2320     END IF;
2321 
2322     SELECT *
2323       INTO l_page_ref_node
2324       FROM CZ_UI_PAGE_REFS a
2325      WHERE ui_def_id = p_ui_node.ui_def_id AND
2326            (target_page_id,page_set_id) IN
2327            (SELECT page_id,NVL(page_set_id,a.page_set_id) FROM CZ_UI_PAGES
2328             WHERE page_id=p_ui_node.page_id AND ui_def_id=p_ui_node.ui_def_id AND
2329             deleted_flag NOT IN(G_YES_FLAG)) AND
2330            deleted_flag = G_NO_FLAG;
2331 
2332     RETURN l_page_ref_node;
2333 
2334   END get_UI_Page_Ref_Node;
2335 
2336   --
2337   -- the function returns a Model Path
2338   -- for a given persistent_node_id
2339   --
2340   FUNCTION  get_Page_Path(p_ps_node_id  IN NUMBER,
2341                           p_page_set_id IN NUMBER DEFAULT NULL) RETURN VARCHAR2 IS
2342 
2343     l_model_path              VARCHAR2(32000);
2344     l_persistent_node_id      NUMBER;
2345     l_parent_id               NUMBER;
2346     l_ps_node                 CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE;
2347     l_page_set_node           CZ_UI_PAGE_SETS%ROWTYPE;
2348     l_seq_nbr                 NUMBER;
2349     l_node_depth              NUMBER;
2350 
2351   BEGIN
2352 
2353     IF p_page_set_id IS NOT NULL THEN
2354 
2355       l_page_set_node := get_Page_Set(p_page_set_id);
2356 
2357       IF l_page_set_node.persistent_node_id IS NOT NULL THEN
2358         l_persistent_node_id := l_page_set_node.persistent_node_id;
2359       ELSE
2360         BEGIN
2361          SELECT MIN(node_depth) INTO l_node_depth FROM CZ_UI_PAGE_REFS
2362          WHERE ui_def_id=g_UI_Context.ui_def_id AND page_set_id=p_page_set_id
2363                 AND deleted_flag=G_NO_FLAG;
2364 
2365          SELECT MIN(SEQ_NBR) INTO l_seq_nbr FROM CZ_UI_PAGE_REFS
2366          WHERE ui_def_id=g_UI_Context.ui_def_id AND page_set_id=p_page_set_id
2367                 AND node_depth=l_node_depth AND deleted_flag=G_NO_FLAG;
2368 
2369          SELECT DISTINCT target_persistent_node_id INTO l_persistent_node_id
2370          FROM CZ_UI_PAGE_REFS
2371          WHERE ui_def_id=g_UI_Context.ui_def_id AND page_set_id=p_page_set_id
2372                AND seq_nbr=l_seq_nbr AND
2373                target_persistent_node_id NOT IN
2374               (SELECT  ref_persistent_node_id FROM CZ_UI_REFS WHERE
2375                 ui_def_id=g_UI_Context.ui_def_id AND deleted_flag=G_NO_FLAG) AND
2376                rownum<2;
2377         EXCEPTION
2378           WHEN OTHERS THEN
2379             RETURN '.';
2380         END;
2381       END IF;
2382 
2383      l_ps_node := get_Model_Node_By_Persist_Id(l_persistent_node_id, g_UI_Context.devl_project_id);
2384 
2385     END IF;
2386 
2387     SELECT parent_id INTO l_parent_id FROM CZ_PS_NODES
2388     WHERE ps_node_id=p_ps_node_id;
2389 
2390     IF l_parent_id IS NULL THEN
2391        RETURN '.';
2392     END IF;
2393 
2394     IF p_page_set_id IS NULL THEN
2395       FOR i IN(SELECT persistent_node_id, parent_id FROM CZ_PS_NODES
2396                START WITH ps_node_id=p_ps_node_id AND deleted_flag=G_NO_FLAG
2397                CONNECT BY PRIOR parent_id=ps_node_id AND
2398                PRIOR deleted_flag=G_NO_FLAG AND deleted_flag=G_NO_FLAG)
2399       LOOP
2400         IF l_model_path IS NULL THEN
2401           l_model_path:=TO_CHAR(i.persistent_node_id);
2402         ELSIF i.parent_id IS NOT NULL THEN
2403           l_model_path:=TO_CHAR(i.persistent_node_id)||'.'||l_model_path;
2404         ELSE
2405           NULL;
2406         END IF;
2407       END LOOP;
2408 
2409       RETURN  l_model_path;
2410 
2411     ELSE
2412 
2413       FOR i IN(SELECT ps_node_id,persistent_node_id, parent_id FROM CZ_PS_NODES
2414                START WITH ps_node_id=p_ps_node_id AND deleted_flag=G_NO_FLAG
2415                CONNECT BY PRIOR parent_id=ps_node_id AND
2416                PRIOR deleted_flag=G_NO_FLAG AND deleted_flag=G_NO_FLAG)
2417       LOOP
2418         IF i.ps_node_id = l_ps_node.ps_node_id THEN
2419           EXIT;
2420         END IF;
2421         IF l_model_path IS NULL THEN
2422           l_model_path:=TO_CHAR(i.persistent_node_id);
2423         ELSIF i.parent_id IS NOT NULL THEN
2424           l_model_path:=TO_CHAR(i.persistent_node_id)||'.'||l_model_path;
2425         ELSE
2426           NULL;
2427         END IF;
2428       END LOOP;
2429 
2430       IF l_model_path IS NULL THEN
2431         l_model_path := '.';
2432       END IF;
2433 
2434       RETURN  l_model_path;
2435 
2436 
2437     END IF;
2438   END get_Page_Path;
2439 
2440   --
2441   -- the function retrurns a Model Path
2442   -- for a given persistent_node_id
2443   --
2444   FUNCTION get_Model_Path(p_ui_node IN CZ_UI_PAGE_ELEMENTS%ROWTYPE)
2445     RETURN VARCHAR2 IS
2446 
2447     l_page_path VARCHAR2(32000) := '';
2448     l_parent_ui_node CZ_UI_PAGE_ELEMENTS%ROWTYPE;
2449 
2450     PROCEDURE construct_Path(p_current_ui_node IN CZ_UI_PAGE_ELEMENTS%ROWTYPE) IS
2451       l_ui_node CZ_UI_PAGE_ELEMENTS%ROWTYPE;
2452     BEGIN
2453 
2454       IF p_current_ui_node.pagebase_persistent_node_id <>
2455          p_current_ui_node.persistent_node_id THEN
2456 
2457         l_ui_node := get_UI_Element(p_element_id => p_current_ui_node.parent_element_id,
2458                                     p_page_id    => p_current_ui_node.page_id);
2459 
2460         IF l_ui_node.pagebase_persistent_node_id = l_ui_node.persistent_node_id OR
2461            l_ui_node.parent_element_id IS NULL THEN
2462           RETURN;
2463         ELSE
2464           IF l_ui_node.persistent_node_id IS NOT NULL AND
2465              p_current_ui_node.persistent_node_id <> l_ui_node.persistent_node_id THEN
2466 
2467             l_page_path := TO_CHAR(l_ui_node.persistent_node_id) || '.' ||
2468                            l_page_path;
2469           END IF;
2470           construct_Path(l_ui_node);
2471         END IF;
2472       ELSE
2473         RETURN;
2474       END IF;
2475     END construct_Path;
2476 
2477   BEGIN
2478 
2479     IF p_ui_node.persistent_node_id=0 THEN
2480       RETURN '*';
2481     END IF;
2482 
2483     IF p_ui_node.parent_element_id IS NULL  THEN
2484       RETURN '.';
2485     ELSE
2486 
2487       BEGIN
2488         l_parent_ui_node := get_UI_Element(p_ui_node.parent_element_id, p_ui_node.page_id);
2489 
2490       EXCEPTION
2491         WHEN NO_DATA_FOUND THEN
2492            RETURN '.';
2493       END;
2494 
2495       IF l_parent_ui_node.parent_element_id IS NULL AND
2496          l_parent_ui_node.persistent_node_id=p_ui_node.persistent_node_id THEN
2497         RETURN '.';
2498       END IF;
2499 
2500       l_page_path := TO_CHAR(p_ui_node.persistent_node_id);
2501 
2502       construct_Path(p_ui_node);
2503     END IF;
2504     RETURN l_page_path;
2505   END get_Model_Path;
2506 
2507   --
2508   -- return COUNT ( of UI page sets of a given UI) + 1
2509   --
2510   FUNCTION get_Page_Set_Counter RETURN NUMBER IS
2511     l_page_counter NUMBER;
2512   BEGIN
2513     SELECT COUNT(*)
2514       INTO l_page_counter
2515       FROM CZ_UI_PAGE_SETS
2516      WHERE ui_def_id = g_UI_Context.ui_def_id AND
2517            deleted_flag=G_NO_FLAG;
2518     RETURN l_page_counter;
2519   END get_Page_Set_Counter;
2520 
2521   --
2522   -- return COUNT ( of UI pages of a given UI) + 1
2523   --
2524   FUNCTION get_Last_Seq_Nbr(p_parent_element_id IN VARCHAR2) RETURN NUMBER IS
2525     l_seq_nbr        NUMBER;
2526     l_num_element_id NUMBER;
2527     l_parent_seq_nbr NUMBER;
2528   BEGIN
2529     SELECT NVL(MAX(seq_nbr),0)
2530       INTO l_seq_nbr
2531       FROM CZ_UI_PAGE_ELEMENTS
2532      WHERE ui_def_id=g_UI_Context.ui_def_id AND
2533            parent_element_id=p_parent_element_id AND
2534            deleted_flag NOT IN(G_YES_FLAG,G_MARK_TO_DELETE);
2535     RETURN l_seq_nbr;
2536   END get_Last_Seq_Nbr;
2537 
2538   --
2539   -- return COUNT ( of UI pages of a given UI) + 1
2540   --
2541   FUNCTION get_Last_Split_Page_Nbr(p_page_id IN NUMBER) RETURN NUMBER IS
2542     l_split_seq_nbr        NUMBER;
2543   BEGIN
2544     SELECT NVL(MAX(split_seq_nbr),0)
2545       INTO l_split_seq_nbr
2546       FROM CZ_UI_PAGES
2547      WHERE ui_def_id=g_UI_Context.ui_def_id AND
2548            persistent_node_id IN
2549           (SELECT persistent_node_id FROM CZ_UI_PAGES
2550             WHERE ui_def_id=g_UI_Context.ui_def_id AND page_id=p_page_id);
2551     RETURN l_split_seq_nbr;
2552   END get_Last_Split_Page_Nbr;
2553 
2554   --
2555   -- return COUNT ( of UI pages of a given UI) + 1
2556   --
2557   FUNCTION get_Num_Elements_On_Page(p_page_node IN CZ_UI_PAGE_ELEMENTS%ROWTYPE)
2558     RETURN NUMBER IS
2559     l_counter   NUMBER;
2560   BEGIN
2561     SELECT COUNT(element_id)
2562       INTO l_counter
2563       FROM CZ_UI_PAGE_ELEMENTS
2564      WHERE ui_def_id=p_page_node.ui_def_id AND
2565            page_id=p_page_node.page_id AND ctrl_template_id IS NOT NULL AND
2566            deleted_flag NOT IN(G_YES_FLAG,G_MARK_TO_DELETE);
2567     RETURN l_counter;
2568   END get_Num_Elements_On_Page;
2569 
2570   --
2571   -- create new Page Set
2572   --
2573   PROCEDURE create_Page_Set
2574   (
2575   p_ui_def_id          IN NUMBER,
2576   p_page_set_type      IN NUMBER,
2577   p_persistent_node_id IN NUMBER,
2578   p_model_ref_expl_id  IN NUMBER,
2579   x_page_set_id        OUT NOCOPY NUMBER
2580   ) IS
2581 
2582     l_ui_page_set_node        CZ_UI_PAGE_SETS%ROWTYPE;
2583     l_page_set_name           CZ_UI_PAGE_SETS.name%TYPE;
2584     l_root_persistent_node_id NUMBER;
2585     l_page_set_counter        NUMBER;
2586 
2587   BEGIN
2588 
2589     IF p_page_set_type IN(G_SINGLE_LEVEL_MENU,G_MULTI_LEVEL_MENU,
2590                           G_MODEL_TREE_MENU,G_PAGE_FLOW,G_SUBTABS) THEN
2591 
2592       SELECT COUNT(page_set_id)+1 INTO l_page_set_counter FROM CZ_UI_PAGE_SETS
2593       WHERE ui_def_id=p_ui_def_id AND page_set_type=p_page_set_type AND
2594             deleted_flag=G_NO_FLAG;
2595       IF p_page_set_type IN(G_PAGE_FLOW) THEN
2596         l_page_set_name := 'Page Flow - '|| TO_CHAR(l_page_set_counter);
2597       ELSIF p_page_set_type IN(G_SUBTABS) THEN
2598         l_page_set_name := 'Subtabs - '|| TO_CHAR(l_page_set_counter);
2599       ELSE
2600         l_page_set_name := 'Menu - '|| TO_CHAR(l_page_set_counter);
2601       END IF;
2602     ELSE
2603       l_page_set_counter := get_Page_Set_Counter() + 1;
2604       l_page_set_name := 'Page Set - ' || TO_CHAR(l_page_set_counter);
2605     END IF;
2606 
2607     x_page_set_id := allocateId('CZ_UI_PAGE_SETS_S');
2608 
2609     INSERT INTO CZ_UI_PAGE_SETS
2610         (ui_def_id,
2611          page_set_id,
2612          page_set_type,
2613          NAME,
2614          suppress_refresh_flag,
2615          train_jrad_doc,
2616          persistent_node_id,
2617          pagebase_expl_node_id,
2618          deleted_flag)
2619     VALUES
2620         (p_ui_def_id,
2621          x_page_set_id,
2622          p_page_set_type,
2623          l_page_set_name,
2624          g_suppress_refresh_flag,
2625          NULL,
2626          p_persistent_node_id,
2627          p_model_ref_expl_id,
2628          G_NO_FLAG);
2629 
2630     l_ui_page_set_node.ui_def_id     := p_ui_def_id;
2631     l_ui_page_set_node.page_set_id   := x_page_set_id;
2632     l_ui_page_set_node.page_set_type := p_page_set_type;
2633     l_ui_page_set_node.name          := l_page_set_name;
2634     l_ui_page_set_node.suppress_refresh_flag := g_suppress_refresh_flag;
2635     l_ui_page_set_node.train_jrad_doc:= NULL;
2636     l_ui_page_set_node.persistent_node_id    := p_persistent_node_id;
2637     l_ui_page_set_node.pagebase_expl_node_id := p_model_ref_expl_id;
2638     l_ui_page_set_node.deleted_flag  := G_NO_FLAG;
2639 
2640     g_ui_page_sets_tbl(x_page_set_id) := l_ui_page_set_node;
2641 
2642   END create_Page_Set;
2643 
2644   --
2645   -- check : is it UI Page
2646   --
2647   FUNCTION is_UI_Page(p_node      IN CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE,
2648                       x_drilldown OUT NOCOPY BOOLEAN) RETURN BOOLEAN IS
2649 
2650     l_root_persistent_node_id   NUMBER;
2651   BEGIN
2652 
2653     l_root_persistent_node_id := get_Root_Persistent_Node_Id();
2654 
2655     x_drilldown := FALSE;
2656 
2657     ------- Single Page --------
2658 
2659 
2660     -- If the navigation style is Single_Page, and pagination style is "Subsections"
2661     -- or "Single Page", then create new page for all non virtual P/C/M/OC.
2662     -- All other UI nodes will not have their own page
2663 
2664     IF g_UI_Context.PRIMARY_NAVIGATION=G_SINGLE_PAGE AND
2665        (
2666        (g_UI_Context.PAGIN_NONINST IN(G_SUBSECTIONS_PG_TYPE,G_SINGLE_PG_TYPE) AND
2667        p_node.ps_node_type IN (G_PRODUCT_TYPE, G_COMPONENT_TYPE))
2668        OR
2669        (g_UI_Context.PAGIN_BOMOC IN(G_SUBSECTIONS_PG_TYPE,G_SINGLE_PG_TYPE) AND
2670        p_node.ps_node_type IN (G_BOM_MODEL_TYPE, G_BOM_OPTION_CLASS_TYPE))
2671        )
2672         THEN
2673 
2674       IF p_node.parent_id IS NULL OR p_node.virtual_flag = G_NO_FLAG THEN
2675         RETURN TRUE;
2676       END IF;
2677 
2678       RETURN FALSE;
2679     END IF;
2680 
2681 
2682     -- If the navigation style is "Single Page" and pagination type is "New Pages"
2683     -- then create new Pages for all P/C/M/OC but the immediate children of the root.
2684     -- The immediate children of the root will be created on the page for the root
2685     -- as subsections
2686 
2687     IF g_UI_Context.PRIMARY_NAVIGATION=G_SINGLE_PAGE AND
2688        (
2689        (g_UI_Context.PAGIN_NONINST = G_NEW_PAGES_PG_TYPE AND
2690        p_node.ps_node_type IN (G_PRODUCT_TYPE, G_COMPONENT_TYPE))
2691        OR
2692        (g_UI_Context.PAGIN_BOMOC = G_NEW_PAGES_PG_TYPE AND
2693        p_node.ps_node_type IN (G_BOM_MODEL_TYPE, G_BOM_OPTION_CLASS_TYPE))
2694        ) THEN
2695 
2696       IF p_node.parent_id IS NULL OR p_node.virtual_flag = G_NO_FLAG THEN
2697         RETURN TRUE;
2698       END IF;
2699 
2700       -- If this is child of the root, add it to the root page
2701 
2702       IF p_node.parent_persistent_node_id=l_root_persistent_node_id THEN
2703         RETURN FALSE;
2704       ELSE
2705         x_drilldown := TRUE;
2706         RETURN TRUE;
2707       END IF;
2708 
2709       RETURN FALSE;
2710     END IF;
2711 
2712     -- If the navigation style is "Single Page" and pagination is "Drilldown Pages",
2713     -- then create new page for all non virtual nodes and virtual nodes which are not
2714     -- immediate child of the root. Immediate children of the root will have their
2715     -- UI Nodes on the page for the root
2716 
2717     IF g_UI_Context.PRIMARY_NAVIGATION=G_SINGLE_PAGE AND
2718        (
2719        (g_UI_Context.PAGIN_NONINST = G_DRILLDOWN_PAGES_PG_TYPE AND
2720        p_node.ps_node_type IN (G_PRODUCT_TYPE, G_COMPONENT_TYPE))
2721        OR
2722        (g_UI_Context.PAGIN_BOMOC = G_DRILLDOWN_PAGES_PG_TYPE AND
2723        p_node.ps_node_type IN (G_BOM_MODEL_TYPE, G_BOM_OPTION_CLASS_TYPE))
2724        ) THEN
2725 
2726       IF p_node.parent_id IS NULL OR p_node.virtual_flag = G_NO_FLAG THEN
2727         RETURN TRUE;
2728       END IF;
2729 
2730       IF p_node.parent_persistent_node_id=l_root_persistent_node_id THEN
2731         RETURN FALSE;
2732       ELSE
2733         x_drilldown := TRUE;
2734         RETURN TRUE;
2735       END IF;
2736 
2737       RETURN FALSE;
2738 
2739     END IF;
2740 
2741     ----- Page Flow -------
2742 
2743     -- If the primary navigation is "Page Flow" and pagination is "Single Page",
2744     -- then create new page for root, non virtual nodes and direct children (P/C/M/OC)
2745     -- of the root. All under nodes will be created as subsections
2746 
2747     IF g_UI_Context.PRIMARY_NAVIGATION=G_PAGE_FLOW AND
2748        (
2749        (g_UI_Context.PAGIN_NONINST IN(G_SINGLE_PG_TYPE,G_SUBSECTIONS_PG_TYPE) AND
2750        p_node.ps_node_type IN (G_PRODUCT_TYPE, G_COMPONENT_TYPE))
2751        OR
2752        (g_UI_Context.PAGIN_BOMOC IN(G_SINGLE_PG_TYPE,G_SUBSECTIONS_PG_TYPE) AND
2753        p_node.ps_node_type IN (G_BOM_MODEL_TYPE, G_BOM_OPTION_CLASS_TYPE))
2754        ) THEN
2755 
2756       IF p_node.parent_id IS NULL OR p_node.virtual_flag = G_NO_FLAG OR
2757          p_node.parent_persistent_node_id=l_root_persistent_node_id THEN
2758         RETURN TRUE;
2759       END IF;
2760 
2761       RETURN FALSE;
2762     END IF;
2763 
2764     -- If the primary navigation is "Page Flow" and pagination is "New Pages", then
2765     -- create create new pages for all P/C/M/OC
2766 
2767     IF g_UI_Context.PRIMARY_NAVIGATION=G_PAGE_FLOW AND
2768        (
2769        (g_UI_Context.PAGIN_NONINST = G_NEW_PAGES_PG_TYPE AND
2770        p_node.ps_node_type IN (G_PRODUCT_TYPE, G_COMPONENT_TYPE))
2771        OR
2772        (g_UI_Context.PAGIN_BOMOC = G_NEW_PAGES_PG_TYPE AND
2773        p_node.ps_node_type IN (G_BOM_MODEL_TYPE, G_BOM_OPTION_CLASS_TYPE))
2774        ) THEN
2775 
2776       IF p_node.parent_id IS NULL OR p_node.virtual_flag = G_NO_FLAG THEN
2777         RETURN TRUE;
2778       END IF;
2779 
2780       RETURN TRUE;
2781     END IF;
2782 
2783     -- If the primary navigation is "Page Flow" and pagination is "Drilldown Pages", then
2784     -- create create new pages for all (P/C/M/OC)
2785     -- Further, drilldowns will be created for virtual P/C/M/OC that are not direct children
2786     -- of the root
2787 
2788     IF g_UI_Context.PRIMARY_NAVIGATION=G_PAGE_FLOW AND
2789        (
2790        (g_UI_Context.PAGIN_NONINST = G_DRILLDOWN_PAGES_PG_TYPE AND
2791        p_node.ps_node_type IN (G_PRODUCT_TYPE, G_COMPONENT_TYPE))
2792        OR
2793        (g_UI_Context.PAGIN_BOMOC = G_DRILLDOWN_PAGES_PG_TYPE AND
2794        p_node.ps_node_type IN (G_BOM_MODEL_TYPE, G_BOM_OPTION_CLASS_TYPE))
2795        ) THEN
2796 
2797       IF p_node.parent_id IS NULL OR p_node.virtual_flag = G_NO_FLAG OR
2798          p_node.parent_persistent_node_id=l_root_persistent_node_id THEN
2799         RETURN TRUE;
2800       END IF;
2801 
2802       IF p_node.parent_persistent_node_id<>l_root_persistent_node_id THEN
2803         x_drilldown := TRUE;
2804       END IF;
2805 
2806       RETURN TRUE;
2807     END IF;
2808 
2809     ----- Menu -----
2810 
2811     -- If the navigation style is Side Nav or Tree and pagination type is "Single Page" or
2812     -- "Subsections" then create new pages for root and its direct children.
2813     -- For all other P/C/M/OC, if the node is non virtual then create a new Page with a
2814     -- Drilldown to it. For all other nodes no new page
2815 
2816     IF g_UI_Context.PRIMARY_NAVIGATION IN(G_SINGLE_LEVEL_MENU,G_MULTI_LEVEL_MENU,G_MODEL_TREE_MENU) AND
2817        (
2818        (g_UI_Context.PAGIN_NONINST IN(G_SINGLE_PG_TYPE,G_SUBSECTIONS_PG_TYPE) AND
2819        p_node.ps_node_type IN (G_PRODUCT_TYPE, G_COMPONENT_TYPE))
2820        OR
2821        (g_UI_Context.PAGIN_BOMOC IN(G_SINGLE_PG_TYPE,G_SUBSECTIONS_PG_TYPE) AND
2822        p_node.ps_node_type IN (G_BOM_MODEL_TYPE, G_BOM_OPTION_CLASS_TYPE))
2823        ) THEN
2824 
2825       IF p_node.parent_id IS NULL OR
2826         p_node.parent_persistent_node_id=l_root_persistent_node_id  THEN
2827         RETURN TRUE;
2828       END IF;
2829 
2830       IF p_node.virtual_flag = G_NO_FLAG THEN
2831         x_drilldown := TRUE;
2832         RETURN TRUE;
2833       END IF;
2834 
2835       RETURN FALSE;
2836     END IF;
2837 
2838     -- If the navigation style is "Side Menu" or "Tree", and pagination style is "New Pages"
2839     -- then create new pages for all P/C/M/OC
2840 
2841     IF g_UI_Context.PRIMARY_NAVIGATION IN(G_SINGLE_LEVEL_MENU,G_MULTI_LEVEL_MENU,G_MODEL_TREE_MENU) AND
2842        (
2843        (g_UI_Context.PAGIN_NONINST = G_NEW_PAGES_PG_TYPE AND
2844        p_node.ps_node_type IN (G_PRODUCT_TYPE, G_COMPONENT_TYPE))
2845        OR
2846        (g_UI_Context.PAGIN_BOMOC = G_NEW_PAGES_PG_TYPE AND
2847        p_node.ps_node_type IN (G_BOM_MODEL_TYPE, G_BOM_OPTION_CLASS_TYPE))
2848        ) THEN
2849 
2850       IF p_node.parent_id IS NULL OR p_node.virtual_flag = G_NO_FLAG THEN
2851         RETURN TRUE;
2852       END IF;
2853 
2854       RETURN TRUE;
2855     END IF;
2856 
2857     -- If the navigation style is "Side Menu" or "Tree", and pagination is "Drilldown Pages", then
2858     -- create new new pages for all P/C/M/OC. Further all page for all nodes that are not
2859     -- direct children of the root, will have a Drilldown
2860 
2861     IF g_UI_Context.PRIMARY_NAVIGATION IN(G_SINGLE_LEVEL_MENU,G_MULTI_LEVEL_MENU,G_MODEL_TREE_MENU) AND
2862        (
2863        (g_UI_Context.PAGIN_NONINST = G_DRILLDOWN_PAGES_PG_TYPE AND
2864        p_node.ps_node_type IN (G_PRODUCT_TYPE, G_COMPONENT_TYPE))
2865        OR
2866        (g_UI_Context.PAGIN_BOMOC = G_DRILLDOWN_PAGES_PG_TYPE AND
2867        p_node.ps_node_type IN (G_BOM_MODEL_TYPE, G_BOM_OPTION_CLASS_TYPE))
2868        ) THEN
2869 
2870       IF p_node.parent_id IS NULL OR
2871         p_node.parent_persistent_node_id=l_root_persistent_node_id THEN
2872         RETURN TRUE;
2873       END IF;
2874 
2875       IF p_node.virtual_flag = G_NO_FLAG THEN
2876         x_drilldown := TRUE;
2877         RETURN TRUE;
2878       END IF;
2879 
2880       x_drilldown := TRUE;
2881       RETURN TRUE;
2882     END IF;
2883 
2884     ---- Subtabs -------
2885 
2886     -- If the navigation style is "Subtabs" and pagination is "Single Page" or
2887     -- "Subsections," then create new pages for the root, non virtual nodes and
2888     -- direct P/C/M/OC children of the root.
2889 
2890     IF g_UI_Context.PRIMARY_NAVIGATION = G_SUBTABS AND
2891        (
2892        (g_UI_Context.PAGIN_NONINST IN(G_SINGLE_PG_TYPE,G_SUBSECTIONS_PG_TYPE) AND
2893        p_node.ps_node_type IN (G_PRODUCT_TYPE, G_COMPONENT_TYPE))
2894        OR
2895        (g_UI_Context.PAGIN_BOMOC IN(G_SINGLE_PG_TYPE,G_SUBSECTIONS_PG_TYPE) AND
2896        p_node.ps_node_type IN (G_BOM_MODEL_TYPE, G_BOM_OPTION_CLASS_TYPE))
2897        ) THEN
2898 
2899       IF p_node.parent_id IS NULL OR p_node.virtual_flag = G_NO_FLAG OR
2900          p_node.parent_persistent_node_id = l_root_persistent_node_id THEN
2901         RETURN TRUE;
2902       END IF;
2903 
2904       RETURN FALSE;
2905     END IF;
2906 
2907     -- If navigation style is "Subtabs" and pagination is "New Pages," then create
2908     -- new pages for all P/C/M/OC
2909 
2910     IF g_UI_Context.PRIMARY_NAVIGATION = G_SUBTABS AND
2911        (
2912        (g_UI_Context.PAGIN_NONINST = G_NEW_PAGES_PG_TYPE AND
2913        p_node.ps_node_type IN (G_PRODUCT_TYPE, G_COMPONENT_TYPE))
2914        OR
2915        (g_UI_Context.PAGIN_BOMOC = G_NEW_PAGES_PG_TYPE AND
2916        p_node.ps_node_type IN (G_BOM_MODEL_TYPE, G_BOM_OPTION_CLASS_TYPE))
2917        ) THEN
2918 
2919       IF p_node.parent_id IS NULL OR p_node.virtual_flag = G_NO_FLAG THEN
2920         RETURN TRUE;
2921       END IF;
2922 
2923       RETURN TRUE;
2924 
2925     END IF;
2926 
2927     -- If the navigation style is "Subtabs" and pagination is "Drilldown Pages,"
2928     -- then create new pages for all P/C/M/OC. Node not directly under the root will
2929     -- also have a drilldown
2930 
2931     IF g_UI_Context.PRIMARY_NAVIGATION = G_SUBTABS AND
2932        (
2933        (g_UI_Context.PAGIN_NONINST = G_DRILLDOWN_PAGES_PG_TYPE AND
2934        p_node.ps_node_type IN (G_PRODUCT_TYPE, G_COMPONENT_TYPE))
2935        OR
2936        (g_UI_Context.PAGIN_BOMOC = G_DRILLDOWN_PAGES_PG_TYPE AND
2937        p_node.ps_node_type IN (G_BOM_MODEL_TYPE, G_BOM_OPTION_CLASS_TYPE))
2938        ) THEN
2939 
2940       IF p_node.parent_id IS NULL OR p_node.virtual_flag = G_NO_FLAG OR
2941         p_node.parent_persistent_node_id=l_root_persistent_node_id THEN
2942         RETURN TRUE;
2943       END IF;
2944 
2945       IF p_node.parent_persistent_node_id<>l_root_persistent_node_id THEN
2946         x_drilldown := TRUE;
2947       END IF;
2948 
2949       RETURN TRUE;
2950     END IF;
2951 
2952     -- If none of the above satisfy, then create new pages for all P/C/M/OC
2953 
2954     IF p_node.ps_node_type IN (G_PRODUCT_TYPE, G_COMPONENT_TYPE,
2955                               G_BOM_MODEL_TYPE, G_BOM_OPTION_CLASS_TYPE) THEN
2956       RETURN TRUE;
2957     ELSE
2958       RETURN FALSE;
2959     END IF;
2960   END is_UI_Page;
2961 
2962   --
2963   -- check - is it UI Reference or no
2964   --
2965   FUNCTION is_UI_Reference(p_ui_node IN CZ_UI_PAGE_ELEMENTS%ROWTYPE)
2966     RETURN BOOLEAN IS
2967     l_ui_ref_exists VARCHAR2(1);
2968   BEGIN
2969     SELECT 'x' INTO l_ui_ref_exists
2970       FROM  CZ_UI_REFS
2971      WHERE ui_def_id=p_ui_node.ui_def_id AND
2972            ref_persistent_node_id=p_ui_node.persistent_node_id AND
2973            deleted_flag=G_NO_FLAG AND rownum<2;
2974      RETURN TRUE;
2975   EXCEPTION
2976     WHEN NO_DATA_FOUND THEN
2977       RETURN FALSE;
2978   END is_UI_Reference;
2979 
2980   --
2981   -- remove Instance Management Controls from CZ_UI_PAGE_ELEMENTS
2982   --
2983   PROCEDURE remove_Instance_Controls(p_ui_node IN CZ_UI_PAGE_ELEMENTS%ROWTYPE) IS
2984 
2985     l_changed_pages_tbl number_tbl_type;
2986     l_suppress_refresh_flag CZ_UI_PAGE_ELEMENTS.suppress_refresh_flag%TYPE;
2987     l_mark_flag             CZ_UI_PAGE_ELEMENTS.deleted_flag%TYPE;
2988 
2989   BEGIN
2990 
2991      FOR i IN(SELECT page_id,element_id,parent_element_id,suppress_refresh_flag
2992                 FROM CZ_UI_PAGE_ELEMENTS
2993                WHERE ui_def_id=p_ui_node.ui_def_id AND
2994                      persistent_node_id=p_ui_node.persistent_node_id AND
2995                      element_type IN(G_UI_NONBOMADDINST_NODE_TYPE,G_UI_BOMADDINST_NODE_TYPE) AND
2996                      deleted_flag NOT IN(G_YES_FLAG,G_MARK_TO_DELETE, G_LIMBO_FLAG))
2997     LOOP
2998       IF i.suppress_refresh_flag=G_YES_FLAG THEN
2999           UPDATE CZ_UI_PAGE_ELEMENTS
3000              SET deleted_flag=G_MARK_TO_DEASSOCIATE,
3001                  persistent_node_id=0
3002            WHERE ui_def_id=p_ui_node.ui_def_id AND
3003                 page_id=i.page_id AND
3004                 element_id=i.element_id;
3005       ELSE
3006         SELECT suppress_refresh_flag INTO l_suppress_refresh_flag FROM CZ_UI_PAGE_ELEMENTS
3007         WHERE ui_def_id=p_ui_node.ui_def_id AND page_id=i.page_id AND
3008               element_id=i.parent_element_id;
3009         IF l_suppress_refresh_flag=G_YES_FLAG THEN
3010           UPDATE CZ_UI_PAGE_ELEMENTS
3011              SET deleted_flag=G_MARK_TO_DEASSOCIATE,
3012                  persistent_node_id=0
3013            WHERE ui_def_id=p_ui_node.ui_def_id AND
3014                 page_id=i.page_id AND
3015                 element_id=i.element_id;
3016         ELSE
3017           UPDATE CZ_UI_PAGE_ELEMENTS
3018              SET deleted_flag=G_MARK_TO_DELETE
3019            WHERE ui_def_id=p_ui_node.ui_def_id AND
3020                  page_id=i.page_id AND
3021                  element_id=i.element_id;
3022         END IF;
3023       END IF;
3024 
3025       mark_UI_Page_As_Refreshed(i.page_id, p_ui_node.ui_def_id);
3026 
3027     END LOOP;
3028 
3029   END remove_Instance_Controls;
3030 
3031   --
3032   -- merge two Page Flows - parent and child Page Flows into one Page Flow
3033   -- p_ui_node is a first node of child Page Flow
3034   --
3035   PROCEDURE merge_Page_Flows(p_ui_node IN CZ_UI_PAGE_ELEMENTS%ROWTYPE) IS
3036     TYPE number_tbl_type       IS TABLE OF NUMBER INDEX BY BINARY_INTEGER;
3037     l_changed_target_ids_tbl   number_tbl_type;
3038     l_ui_page_ref_node         CZ_UI_PAGE_REFS%ROWTYPE;
3039     l_target_path              CZ_UI_PAGE_REFS.target_path%TYPE;
3040     l_model_node               CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE;
3041     l_child_page_set_id        NUMBER;
3042     l_child_page_ref_id        NUMBER;
3043     l_parent_page_set_id       NUMBER;
3044     l_parent_page_ref_id       NUMBER;
3045     l_page_ref_type            NUMBER;
3046 
3047   BEGIN
3048     --
3049     -- get Page set id of UI node p_ui_node
3050     --
3051     BEGIN
3052       l_ui_page_ref_node := get_UI_Page_Ref_Node(p_ui_node);
3053       l_child_page_set_id := l_ui_page_ref_node.page_set_id;
3054       l_child_page_ref_id := l_ui_page_ref_node.page_ref_id;
3055     EXCEPTION
3056       WHEN NO_DATA_FOUND THEN
3057         RETURN;
3058     END;
3059 
3060     --
3061     -- get Page set id and page_ref_id of parent Page Flow
3062     --
3063     SELECT MIN(page_ref_id)
3064       INTO l_parent_page_ref_id
3065       FROM CZ_UI_PAGE_REFS
3066      WHERE ui_def_id=p_ui_node.ui_def_id AND
3067            target_persistent_node_id=p_ui_node.parent_persistent_node_id AND
3068            deleted_flag=G_NO_FLAG;
3069 
3070     SELECT page_set_id,page_ref_type
3071       INTO l_parent_page_set_id,l_page_ref_type FROM CZ_UI_PAGE_REFS
3072     WHERE ui_def_id=p_ui_node.ui_def_id AND page_ref_id=l_parent_page_ref_id;
3073 
3074     --
3075     -- attach child Page Flow to the parent Page Flow
3076     --
3077     UPDATE CZ_UI_PAGE_REFS
3078        SET parent_page_ref_id = l_parent_page_ref_id
3079      WHERE ui_def_id=p_ui_node.ui_def_id AND
3080            page_ref_id=l_child_page_ref_id;
3081 
3082     UPDATE CZ_UI_PAGE_REFS
3083        SET page_set_id = l_parent_page_set_id
3084      WHERE ui_def_id=p_ui_node.ui_def_id AND
3085            target_page_id IN
3086            (SELECT target_page_id FROM CZ_UI_PAGE_REFS
3087             START WITH ui_def_id=p_ui_node.ui_def_id AND
3088                        page_ref_id=l_child_page_ref_id
3089             CONNECT BY PRIOR page_ref_id=parent_page_ref_id AND
3090                     ui_def_id=p_ui_node.ui_def_id AND
3091                     page_set_id=l_child_page_set_id AND
3092                     PRIOR page_set_id=l_child_page_set_id AND
3093                     PRIOR ui_def_id=p_ui_node.ui_def_id AND
3094                     deleted_flag=G_NO_FLAG AND PRIOR deleted_flag=G_NO_FLAG)
3095      RETURNING target_persistent_node_id BULK COLLECT INTO l_changed_target_ids_tbl;
3096 
3097      IF l_changed_target_ids_tbl.COUNT>0 THEN
3098        FOR x IN l_changed_target_ids_tbl.First..l_changed_target_ids_tbl.Last
3099        LOOP
3100          UPDATE CZ_UI_PAGES
3101             SET page_set_id=l_parent_page_set_id
3102           WHERE persistent_node_id=l_changed_target_ids_tbl(x) AND
3103                 ui_def_id=p_ui_node.ui_def_id;
3104 
3105      --    IF  l_page_ref_type IN(G_PAGE_FLOW,G_SUBTABS)  THEN
3106            l_model_node := get_Model_Node_By_Persist_Id(l_changed_target_ids_tbl(x), g_UI_Context.devl_project_id);
3107            l_target_path := get_Page_Path(l_model_node.ps_node_id, l_parent_page_set_id);
3108            UPDATE CZ_UI_PAGE_REFS
3109               SET target_path=l_target_path
3110             WHERE ui_def_id=p_ui_node.ui_def_id AND
3111                   page_set_id=l_parent_page_set_id AND
3112                   target_persistent_node_id=l_changed_target_ids_tbl(x) AND
3113                   target_path<>l_target_path;
3114       --   END IF;
3115 
3116        END LOOP;
3117      END IF;
3118 
3119   END merge_Page_Flows;
3120 
3121   --
3122   -- split one Page Flow into two Page Flows - parent and child
3123   --
3124   PROCEDURE split_Page_Flow(p_ui_node IN CZ_UI_PAGE_ELEMENTS%ROWTYPE) IS
3125     TYPE number_tbl_type       IS TABLE OF NUMBER INDEX BY BINARY_INTEGER;
3126     l_changed_target_ids_tbl   number_tbl_type;
3127     l_target_page_ids_tbl      number_tbl_type;
3128     l_ui_page_ref_node         CZ_UI_PAGE_REFS%ROWTYPE;
3129     l_target_path              CZ_UI_PAGE_REFS.target_path%TYPE;
3130     l_model_node               CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE;
3131     l_page_set_type            NUMBER;
3132     l_initial_page_set_id      NUMBER;
3133     l_initial_page_ref_id      NUMBER;
3134     l_page_set_id              NUMBER;
3135 
3136   BEGIN
3137 
3138     --
3139     -- get Page set id of UI node p_ui_node
3140     --
3141     BEGIN
3142      l_ui_page_ref_node := get_UI_Page_Ref_Node(p_ui_node);
3143      l_initial_page_set_id := l_ui_page_ref_node.page_set_id;
3144      l_initial_page_ref_id := l_ui_page_ref_node.page_ref_id;
3145     EXCEPTION
3146       WHEN NO_DATA_FOUND THEN
3147         RETURN;
3148     END;
3149 
3150     /*
3151     IF l_ui_page_ref_node.page_ref_type=G_SUBTABS THEN
3152       l_page_set_type := G_SUBTABS;
3153     ELSE
3154       l_page_set_type := G_PAGE_FLOW;
3155     END IF;
3156     */
3157 
3158     IF l_page_set_type IS NULL THEN
3159       l_page_set_type := g_UI_Context.PRIMARY_NAVIGATION;
3160     END IF;
3161 
3162     create_Page_Set(p_ui_def_id          => p_ui_node.ui_def_id,
3163                     p_page_set_type      => l_page_set_type,
3164                     p_persistent_node_id => p_ui_node.persistent_node_id,
3165                     p_model_ref_expl_id  => p_ui_node.model_ref_expl_id,
3166                     x_page_set_id        => l_page_set_id);
3167 
3168     UPDATE CZ_UI_PAGE_REFS
3169        SET target_path='.',
3170            parent_page_ref_id=NULL,
3171            node_depth=1,
3172            seq_nbr=1
3173      WHERE ui_def_id=p_ui_node.ui_def_id AND
3174            page_ref_id=l_initial_page_ref_id;
3175 
3176     UPDATE CZ_UI_PAGE_REFS
3177        SET page_set_id = l_page_set_id
3178      WHERE ui_def_id=p_ui_node.ui_def_id AND
3179            target_persistent_node_id IN
3180                 (SELECT target_persistent_node_id FROM CZ_UI_PAGE_REFS
3181                  START WITH ui_def_id=p_ui_node.ui_def_id AND
3182                             page_ref_id=l_initial_page_ref_id
3183                  CONNECT BY PRIOR page_ref_id=parent_page_ref_id AND
3184                     ui_def_id=p_ui_node.ui_def_id AND
3185                     page_set_id=l_initial_page_set_id AND
3186                     PRIOR page_set_id=l_initial_page_set_id AND
3187                     PRIOR ui_def_id=p_ui_node.ui_def_id AND
3188                     deleted_flag=G_NO_FLAG AND PRIOR deleted_flag=G_NO_FLAG)
3189      RETURNING target_page_id,target_persistent_node_id
3190      BULK COLLECT INTO l_target_page_ids_tbl,l_changed_target_ids_tbl;
3191 
3192      IF l_changed_target_ids_tbl.COUNT>0 THEN
3193        FOR j in l_changed_target_ids_tbl.First..l_changed_target_ids_tbl.Last
3194        LOOP
3195          UPDATE CZ_UI_PAGES
3196             SET page_set_id=l_page_set_id
3197           WHERE page_id=l_target_page_ids_tbl(j) AND
3198                 ui_def_id=p_ui_node.ui_def_id;
3199 
3200            l_model_node := get_Model_Node_By_Persist_Id(l_changed_target_ids_tbl(j), g_UI_Context.devl_project_id);
3201            l_target_path := get_Page_Path(l_model_node.ps_node_id, l_page_set_id);
3202 
3203            UPDATE CZ_UI_PAGE_REFS
3204               SET target_path=l_target_path
3205             WHERE ui_def_id=p_ui_node.ui_def_id AND
3206                   page_set_id=l_page_set_id AND
3207                   target_persistent_node_id=l_changed_target_ids_tbl(j) AND
3208                   target_path<>l_target_path;
3209 
3210        END LOOP;
3211      END IF;
3212 
3213   END split_Page_Flow;
3214 
3215   --
3216   -- check - is CX valid or no ?
3217   --
3218   FUNCTION get_CX_Button_Status(p_ui_node IN CZ_UI_PAGE_ELEMENTS%ROWTYPE)
3219     RETURN VARCHAR2 IS
3220 
3221     l_model_node         CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE;
3222     l_ui_cx_command_name CZ_EXPRESSION_NODES.data_value%TYPE;
3223     l_undeleted_exist    BOOLEAN;
3224 
3225   BEGIN
3226 
3227     l_model_node := get_Model_Node_By_Persist_Id(p_ui_node.persistent_node_id, g_UI_Context.devl_project_id);
3228 
3229     BEGIN
3230       SELECT cx_command_name
3231         INTO l_ui_cx_command_name
3232         FROM CZ_UI_ACTIONS
3233        WHERE ui_def_id=p_ui_node.ui_def_id AND
3234              element_id=p_ui_node.element_id AND
3235              cx_command_name IS NOT NULL  AND-- fix for bug 3923033
3236              deleted_flag=G_NO_FLAG;
3237     EXCEPTION
3238       WHEN NO_DATA_FOUND THEN
3239         RETURN G_CX_VALID;
3240     END;
3241 
3242     l_undeleted_exist := FALSE;
3243     FOR i IN(SELECT a.deleted_flag, a.invalid_flag, a.disabled_flag ,
3244                      a.INSTANTIATION_SCOPE, b.data_value, a.name
3245              FROM CZ_RULES a, CZ_EXPRESSION_NODES b
3246              WHERE a.devl_project_id=l_model_node.devl_project_id AND
3247                    a.component_id=l_model_node.ps_node_id AND
3248                    a.rule_type=G_CZ_EXTENTSIONS_RULE_TYPE AND
3249                    a.deleted_flag=G_NO_FLAG AND
3250                    b.rule_id=a.rule_id AND
3251                    b.deleted_flag=G_NO_FLAG AND
3252                    b.argument_signature_id=G_EVENT_ON_COMMAND_SIGID AND
3253                    data_value=l_ui_cx_command_name)
3254     LOOP
3255 
3256       IF i.deleted_flag=G_NO_FLAG THEN
3257          l_undeleted_exist := TRUE;
3258       END IF;
3259 
3260       IF i.invalid_flag=G_NO_FLAG AND i.disabled_flag=G_NO_FLAG AND
3261          i.deleted_flag=G_NO_FLAG THEN
3262         RETURN G_CX_VALID;
3263       END IF;
3264     END LOOP;
3265 
3266     IF l_model_node.ps_node_type=G_REFERENCE_TYPE THEN
3267 
3268       FOR i IN(SELECT a.name, a.deleted_flag, a.invalid_flag, a.disabled_flag,
3269                       a.INSTANTIATION_SCOPE, b.data_value
3270              FROM CZ_RULES a, CZ_EXPRESSION_NODES b
3271              WHERE a.devl_project_id=l_model_node.devl_project_id AND
3272                    a.component_id IN
3273                (SELECT ps_node_id FROM CZ_PS_NODES
3274                 WHERE devl_project_id IN
3275                 (SELECT DISTINCT component_id FROM CZ_MODEL_REF_EXPLS
3276                 START WITH model_id=l_model_node.devl_project_id AND
3277                            referring_node_id=l_model_node.ps_node_id
3278                 CONNECT BY PRIOR model_ref_expl_id=parent_expl_node_id AND
3279                          deleted_flag='0' AND PRIOR deleted_flag='0') AND
3280                 deleted_flag='0') AND
3281                    a.rule_type=G_CZ_EXTENTSIONS_RULE_TYPE AND
3282                    b.rule_id=a.rule_id AND
3283                    b.deleted_flag=G_NO_FLAG AND
3284                    b.argument_signature_id=G_EVENT_ON_COMMAND_SIGID AND
3285                    data_value IS NOT NULL)
3286       LOOP
3287 
3288         IF l_model_node.instantiable_flag NOT IN(G_MANDATORY_INST_TYPE) AND
3289            i.INSTANTIATION_SCOPE=1 AND i.disabled_flag=G_NO_FLAG THEN
3290 
3291           add_Error_Message(p_message_name => 'CZ_CX_IS_IN_WRONG_SCOPE',
3292                             p_token_name1  => 'EVENT_NAME',
3293                             p_token_value1 => i.data_value,
3294                             p_token_name2  => 'RULE_NAME',
3295                             p_token_value2 => i.name,
3296                             p_fatal_error  => FALSE);
3297 
3298 
3299           RETURN G_CX_INVALID;
3300         END IF;
3301 
3302         IF i.deleted_flag=G_NO_FLAG THEN
3303            l_undeleted_exist := TRUE;
3304         END IF;
3305 
3306         IF i.invalid_flag=G_NO_FLAG AND i.disabled_flag=G_NO_FLAG AND
3307            i.deleted_flag=G_NO_FLAG THEN
3308           RETURN G_CX_VALID;
3309         END IF;
3310       END LOOP;
3311 
3312     END IF;
3313 
3314     IF l_undeleted_exist=FALSE THEN
3315       RETURN G_CX_MUST_BE_DELETED;
3316     ELSE
3317       RETURN G_CX_INVALID;
3318     END IF;
3319   END get_CX_Button_Status;
3320 
3321   --
3322   -- refresh expl ids in UI tables
3323   --
3324   PROCEDURE sync_Expl_Ids(p_node    IN CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE,
3325                           p_ui_node IN CZ_UI_PAGE_ELEMENTS%ROWTYPE,
3326                           p_expl_id IN NUMBER) IS
3327 
3328   BEGIN
3329 
3330 
3331     IF p_expl_id <> p_ui_node.model_ref_expl_id THEN
3332       UPDATE CZ_UI_PAGE_ELEMENTS
3333          SET model_ref_expl_id=p_expl_id
3334        WHERE ui_def_id=p_ui_node.ui_def_id AND
3335              page_id=p_ui_node.page_id AND
3336              element_id=p_ui_node.element_id;
3337 
3338       IF p_ui_node.parent_element_id IS NULL THEN
3339         UPDATE CZ_UI_PAGES
3340            SET pagebase_expl_node_id=p_expl_id
3341          WHERE page_id=p_ui_node.page_id AND
3342                ui_def_id=p_ui_node.ui_def_id;
3343          IF SQL%ROWCOUNT>0 THEN
3344            UPDATE CZ_UI_PAGE_SETS
3345               SET pagebase_expl_node_id=p_expl_id
3346             WHERE ui_def_id=g_UI_Context.ui_def_id
3347                   AND persistent_node_id=p_ui_node.persistent_node_id
3348                   AND deleted_flag=G_NO_FLAG;
3349          END IF;
3350       END IF;
3351 
3352       UPDATE CZ_UI_PAGE_REFS
3353          SET target_expl_node_id=p_expl_id
3354        WHERE ui_def_id=p_ui_node.ui_def_id AND
3355              target_persistent_node_id=p_node.persistent_node_id;
3356 
3357     END IF;
3358   END sync_Expl_Ids;
3359 
3360   --
3361   -- refresh expl ids in UI tables
3362   --
3363   PROCEDURE sync_Expl_Ids(p_node    IN CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE,
3364                           p_ui_node IN CZ_UI_PAGE_ELEMENTS%ROWTYPE) IS
3365     l_model_ref_expl_id NUMBER;
3366   BEGIN
3367     l_model_ref_expl_id := get_Expl_Id(p_model_id     => p_node.devl_project_id,
3368                                        p_ps_node_id   => p_node.ps_node_id,
3369                                        p_component_id => p_node.component_id,
3370                                        p_ps_node_type => p_node.ps_node_type);
3371     sync_Expl_Ids(p_node, p_ui_node, l_model_ref_expl_id);
3372   END;
3373 
3374 
3375 
3376   --
3377   -- replace Template Id of UI node p_ui_node
3378   --
3379   PROCEDURE replace_Template_Id(p_ui_node          IN CZ_UI_PAGE_ELEMENTS%ROWTYPE,
3380                                 p_model_node       IN CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE) IS
3381 
3382     l_element_signature_id NUMBER;
3383     l_counter              NUMBER;
3384 
3385   BEGIN
3386 
3387     SELECT COUNT(*)+1 INTO l_counter FROM CZ_UI_PAGE_ELEMENTS
3388     WHERE ui_def_id=p_ui_node.ui_def_id AND
3389            page_id=p_ui_node.page_id AND
3390            element_signature_id=p_model_node.root_element_signature_id AND
3391            deleted_flag NOT IN(G_YES_FLAG,G_MARK_TO_DELETE, G_LIMBO_FLAG);
3392 
3393     UPDATE CZ_UI_PAGE_ELEMENTS
3394        SET ctrl_template_id=p_model_node.template_id,
3395            element_signature_id=p_model_node.root_element_signature_id,
3396            deleted_flag=DECODE(deleted_flag,G_MARK_TO_ADD,G_MARK_TO_ADD,G_MARK_TO_REFRESH),
3397            name=p_model_node.template_name||' - '||l_counter
3398      WHERE ui_def_id=p_ui_node.ui_def_id AND
3399            page_id=p_ui_node.page_id AND
3400            element_id=p_ui_node.element_id;
3401 
3402     mark_UI_Page_As_Refreshed(p_ui_node.page_id, p_ui_node.ui_def_id);
3403 
3404   END replace_Template_Id;
3405 
3406   --
3407   -- remove common attributes in case when we attach template
3408   -- starting with DOM node p_node
3409   --   Parameters : p_node - identifies DOM node of subtree's root
3410   --
3411   PROCEDURE remove_TopLevel_Attributes(p_node xmldom.DOMNode) IS
3412     l_root_elem xmldom.DOMElement;
3413   BEGIN
3414     l_root_elem := xmldom.makeElement(p_node);
3415     FOR i IN g_toplevel_attr_tbl.FIRST .. g_toplevel_attr_tbl.LAST
3416     LOOP
3417       BEGIN
3418         xmldom.removeAttribute(l_root_elem, g_toplevel_attr_tbl(i));
3419       EXCEPTION
3420         WHEN OTHERS THEN
3421           NULL;
3422       END;
3423     END LOOP;
3424   END remove_TopLevel_Attributes;
3425 
3426   --
3427   -- remove non user attributes from a given XML node
3428   --
3429   PROCEDURE remove_Non_User_Attributes(p_node xmldom.DOMNode) IS
3430 
3431     l_root_elem    xmldom.DOMElement;
3432     l_node_map_tbl xmldom.DOMNamedNodeMap;
3433     l_node_attr    xmldom.DOMNode;
3434     l_attr_name    VARCHAR2(32000);
3435     l_length       NUMBER;
3436 
3437   BEGIN
3438 
3439     l_root_elem := xmldom.makeElement(p_node);
3440 
3441     l_node_map_tbl := xmldom.getAttributes(p_node);
3442     IF (xmldom.isNull(l_node_map_tbl) = FALSE) THEN
3443       l_length := xmldom.getLength(l_node_map_tbl);
3444       --
3445       -- loop through attributes
3446       --
3447       FOR i IN 0 .. l_length - 1
3448       LOOP
3449         l_node_attr := xmldom.item(l_node_map_tbl, i);
3450 
3451         IF NOT(xmldom.isNull(l_node_attr)) THEN
3452           l_attr_name := xmldom.getNodeName(l_node_attr);
3453           IF (lower(l_attr_name) not like ('user:attribute%') AND
3454              lower(l_attr_name) <> G_ID_ATTRIBUTE) OR
3455              lower(l_attr_name)=G_USER_ATTRIBUTE10_NAME  THEN
3456              xmldom.removeAttribute(l_root_elem, l_attr_name);
3457           END IF;
3458         END IF;
3459       END LOOP;
3460     END IF;
3461 
3462   EXCEPTION
3463     WHEN OTHERS THEN
3464       DEBUG('remove_Non_User_Attributes() : '||SQLERRM);
3465   END remove_Non_User_Attributes;
3466 
3467   --
3468   -- clear the cache
3469   --
3470   PROCEDURE flash_Cache IS
3471   BEGIN
3472     g_model_nodes_tbl.DELETE;
3473     g_ui_page_elements_tbl.DELETE;
3474     g_ps_node_persist_id_tbl.DELETE;
3475     g_ui_pages_tbl.DELETE;
3476     g_ui_page_refs_tbl.DELETE;
3477     g_ui_refs_tbl.DELETE;
3478     g_ui_page_sets_tbl.DELETE;
3479     g_ref_expls_tbl.DELETE;
3480     g_ui_action_ids_tbl.DELETE;
3481   END flash_Cache;
3482 
3483   --
3484   -- cache Mode nodes and UI data
3485   --
3486   PROCEDURE populate_Cache IS
3487 
3488   BEGIN
3489 
3490     flash_Cache;
3491 
3492     FOR i IN (SELECT DISTINCT *
3493                 FROM CZ_UITEMPLS_FOR_PSNODES_V
3494                 WHERE ui_def_id=g_UI_Context.from_master_template_id AND
3495                       devl_project_id = g_UI_Context.devl_project_id)
3496     LOOP
3497       g_model_nodes_tbl(i.ps_node_id) := i;
3498       g_ps_node_persist_id_tbl(i.persistent_node_id) := i.ps_node_id;
3499     END LOOP;
3500 
3501     FOR i IN(SELECT model_ref_expl_id,referring_node_id,component_id
3502                FROM CZ_MODEL_REF_EXPLS
3503               WHERE model_id=g_UI_Context.devl_project_id AND
3504                     deleted_flag=G_NO_FLAG)
3505     LOOP
3506       IF i.referring_node_id IS NOT NULL THEN
3507         g_ref_expls_tbl(i.referring_node_id) := i.model_ref_expl_id;
3508       ELSE
3509         g_ref_expls_tbl(i.component_id) := i.model_ref_expl_id;
3510       END IF;
3511     END LOOP;
3512 
3513     FOR i IN (SELECT *
3514                 FROM CZ_UI_PAGES
3515                WHERE ui_def_id = g_UI_Context.ui_def_id AND
3516                      deleted_flag = G_NO_FLAG)
3517     LOOP
3518       g_ui_pages_tbl(i.page_id) := i;
3519 
3520       IF NOT(g_ui_pages_counter_tbl.EXISTS(g_UI_Context.ui_def_id)) THEN
3521         g_ui_pages_counter_tbl(g_UI_Context.ui_def_id) := 1;
3522       ELSE
3523         g_ui_pages_counter_tbl(g_UI_Context.ui_def_id) := g_ui_pages_counter_tbl(g_UI_Context.ui_def_id) + 1;
3524       END IF;
3525     END LOOP;
3526 
3527     FOR i IN (SELECT *
3528                 FROM CZ_UI_PAGE_ELEMENTS
3529                WHERE ui_def_id = g_UI_Context.ui_def_id AND
3530                      deleted_flag = G_NO_FLAG)
3531     LOOP
3532       BEGIN
3533         g_ui_page_elements_tbl(TO_NUMBER(i.element_id)) := i;
3534       EXCEPTION
3535         WHEN OTHERS THEN
3536           --
3537           -- if element_id is not a number it will not be cached
3538           --
3539           NULL;
3540       END;
3541     END LOOP;
3542 
3543     FOR i IN (SELECT *
3544                 FROM CZ_UI_PAGE_REFS
3545                WHERE ui_def_id = g_UI_Context.ui_def_id AND
3546                      deleted_flag = G_NO_FLAG)
3547     LOOP
3548       g_ui_page_refs_tbl(i.page_ref_id) := i;
3549     END LOOP;
3550 
3551     FOR i IN (SELECT *
3552                 FROM CZ_UI_PAGE_SETS
3553                WHERE ui_def_id = g_UI_Context.ui_def_id AND
3554                      deleted_flag = G_NO_FLAG)
3555     LOOP
3556       g_ui_page_sets_tbl(i.page_set_id) := i;
3557     END LOOP;
3558 
3559     FOR i IN (SELECT ref_persistent_node_id
3560                 FROM CZ_UI_REFS
3561                WHERE ui_def_id = g_UI_Context.ui_def_id AND
3562                      deleted_flag = G_NO_FLAG)
3563     LOOP
3564       g_ui_refs_tbl(i.ref_persistent_node_id) := i.ref_persistent_node_id;
3565     END LOOP;
3566 
3567     FOR i IN (SELECT element_id, ui_action_id
3568                 FROM CZ_UI_ACTIONS
3569                WHERE ui_def_id = g_UI_Context.ui_def_id AND
3570                      deleted_flag = G_NO_FLAG)
3571     LOOP
3572       BEGIN
3573         g_ui_action_ids_tbl(TO_NUMBER(i.element_id)) := i.ui_action_id;
3574       EXCEPTION
3575         WHEN OTHERS THEN
3576           NULL;
3577       END;
3578     END LOOP;
3579 
3580   END populate_Cache;
3581 
3582   ---------------------------------------------------------------------
3583   -------------------------XML Parsing Part ---------------------------
3584   ---------------------------------------------------------------------
3585 
3586   --
3587   -- returns value of a given attribute
3588   -- Parameters :
3589   --   p_node  - DOM node
3590   --   p_attr_name - attribute name
3591   -- Return : attribute value as VARCHAR2 string
3592   --
3593   FUNCTION get_Attribute_Value(p_node      IN xmldom.DOMNode,
3594                                p_attr_name IN VARCHAR2) RETURN VARCHAR2 IS
3595 
3596     l_node_map_tbl xmldom.DOMNamedNodeMap;
3597     l_node_attr    xmldom.DOMNode;
3598     l_attr_value   VARCHAR2(32000);
3599     l_length       NUMBER;
3600 
3601   BEGIN
3602     IF xmldom.IsNull(p_node) THEN
3603       RETURN NULL;
3604     END IF;
3605     l_node_map_tbl := xmldom.getAttributes(p_node);
3606 
3607     IF (xmldom.isNull(l_node_map_tbl) = FALSE) THEN
3608       l_length := xmldom.getLength(l_node_map_tbl);
3609       --
3610       -- loop through attributes
3611       --
3612       FOR i IN 0 .. l_length - 1
3613       LOOP
3614         l_node_attr := xmldom.item(l_node_map_tbl, i);
3615         IF xmldom.getNodeName(l_node_attr) = p_attr_name THEN
3616           l_attr_value := xmldom.getNodeValue(l_node_attr);
3617           EXIT;
3618         END IF;
3619       END LOOP;
3620     END IF;
3621     RETURN l_attr_value;
3622   END get_Attribute_Value;
3623 
3624   FUNCTION attribute_Value(p_node      IN xmldom.DOMNode,
3625                                 p_attr_name IN VARCHAR2) RETURN VARCHAR2 IS
3626 
3627     l_node_map_tbl xmldom.DOMNamedNodeMap;
3628     l_node_attr    xmldom.DOMNode;
3629     l_attr_value   VARCHAR2(32000);
3630     l_length       NUMBER;
3631 
3632   BEGIN
3633     l_node_map_tbl := xmldom.getAttributes(p_node);
3634     IF (xmldom.isNull(l_node_map_tbl) = FALSE) THEN
3635       l_length := xmldom.getLength(l_node_map_tbl);
3636       --
3637       -- loop through attributes
3638       --
3639       FOR i IN 0 .. l_length - 1
3640       LOOP
3641         l_node_attr := xmldom.item(l_node_map_tbl, i);
3642         IF xmldom.getNodeName(l_node_attr) = p_attr_name THEN
3643           l_attr_value := xmldom.getNodeValue(l_node_attr);
3644           IF l_attr_value IS NULL THEN
3645             RETURN NULL;
3646           ELSE
3647             RETURN l_attr_value;
3648           END IF;
3649         END IF;
3650       END LOOP;
3651     END IF;
3652     RETURN '*';
3653   END attribute_Value;
3654 
3655   --
3656   -- return value of specified user atribute
3657   --
3658   FUNCTION get_User_Attribute(p_user_attribute_value IN VARCHAR2,
3659                               p_cz_attribute_name    IN VARCHAR2)
3660     RETURN VARCHAR2 IS
3661 
3662     l_ind1    NUMBER;
3663     l_ind2    NUMBER;
3664     l_substr  VARCHAR2(32000);
3665 
3666   BEGIN
3667 
3668     l_ind1 := INSTR(p_user_attribute_value,p_cz_attribute_name);
3669 
3670     IF l_ind1 > 0 THEN
3671       l_substr := SUBSTR(p_user_attribute_value,l_ind1+LENGTH(p_cz_attribute_name)+LENGTH('='));
3672       l_ind2 := INSTR(l_substr, '|');
3673       IF l_ind2 > 0 THEN
3674         RETURN SUBSTR(l_substr,1,l_ind2-1);
3675       ELSE
3676         RETURN l_substr;
3677       END IF;
3678     ELSE
3679       RETURN NULL;
3680     END IF;
3681   END get_User_Attribute;
3682 
3683   --
3684   -- find DOM node by persistent_node_id
3685   --
3686   FUNCTION find_XML_Node_By_Attribute(p_subtree_doc        xmldom.DOMDocument,
3687                                       p_attribute_name     IN VARCHAR2,
3688                                       p_attribute_value    IN VARCHAR2,
3689                                       p_in_user_attributes IN VARCHAR2 DEFAULT NULL)
3690     RETURN xmldom.DOMNode IS
3691 
3692     l_node            xmldom.DOMNode;
3693     l_nodeslist       xmldom.DOMNodeList;
3694     l_empty_xml_node  xmldom.DOMNode;
3695     l_length          NUMBER;
3696     l_attribute_value VARCHAR2(32000);
3697 
3698   BEGIN
3699 
3700     IF p_attribute_name=G_ID_ATTRIBUTE AND g_page_elements_tbl.EXISTS(p_attribute_value) THEN
3701       RETURN g_page_elements_tbl(p_attribute_value);
3702     END IF;
3703 
3704     --
3705     -- here we don't need to know about hierachy of nodes
3706     -- so we just need to get list of all nodes of XML subtree
3707     --
3708     l_nodeslist := xmldom.getElementsByTagName(p_subtree_doc, '*');
3709     l_length    := xmldom.getLength(l_nodeslist);
3710 
3711     l_node := xmldom.makeNode(xmldom.getDocumentElement(p_subtree_doc));
3712 
3713     l_attribute_value := get_Attribute_Value(l_node, p_attribute_name);
3714 
3715     IF p_in_user_attributes=G_YES_FLAG THEN
3716       l_attribute_value := get_Attribute_Value(l_node, G_USER_ATTRIBUTE4_NAME);
3717       l_attribute_value :=  get_User_Attribute(l_attribute_value, p_attribute_name);
3718     ELSE
3719       l_attribute_value := get_Attribute_Value(l_node, p_attribute_name);
3720     END IF;
3721 
3722     IF l_attribute_value = p_attribute_value THEN
3723       RETURN l_node;
3724     END IF;
3725 
3726     --
3727     -- scan subtree and substitute macros "%" to real values
3728     --
3729     FOR i IN 0 .. l_length - 1
3730     LOOP
3731       l_node            := xmldom.item(l_nodeslist, i);
3732 
3733       IF p_in_user_attributes=G_YES_FLAG THEN
3734         l_attribute_value := get_Attribute_Value(l_node, G_USER_ATTRIBUTE4_NAME);
3735         l_attribute_value :=  get_User_Attribute(l_attribute_value, p_attribute_name);
3736       ELSE
3737         l_attribute_value := get_Attribute_Value(l_node, p_attribute_name);
3738       END IF;
3739 
3740       IF l_attribute_value = p_attribute_value THEN
3741         RETURN l_node;
3742       END IF;
3743     END LOOP;
3744     RETURN l_empty_xml_node;
3745 
3746   END find_XML_Node_By_Attribute;
3747 
3748   --
3749   -- return DOM node of top level tag <ui:contents>
3750   -- if node does not contain p_tag node then return the node itself ( p_node )
3751   -- Parameters :
3752   --  p_node - DOM node
3753   -- Return : top level DOM node with XML tag = p_tag
3754   --
3755   FUNCTION getUIContents(p_node xmldom.DOMNode,
3756                          p_return_empty_node VARCHAR2 DEFAULT NULL) RETURN xmldom.DOMNode IS
3757     l_child_nodes_tbl xmldom.DOMNodeList;
3758     l_child_xml_node  xmldom.DOMNode;
3759     l_empty_xml_node  xmldom.DOMNode;
3760     l_length          NUMBER;
3761   BEGIN
3762     l_child_nodes_tbl := xmldom.getChildNodes(p_node);
3763     l_length          := xmldom.getLength(l_child_nodes_tbl);
3764     FOR k IN 0 .. l_length - 1
3765     LOOP
3766       --
3767       -- get next child DOM node
3768       --
3769       l_child_xml_node := xmldom.item(l_child_nodes_tbl, k);
3770 
3771       IF UPPER(xmldom.getNodeName(l_child_xml_node)) =
3772          UPPER(G_UI_CONTENTS_TAG) THEN
3773         RETURN l_child_xml_node;
3774       END IF;
3775     END LOOP;
3776 
3777     IF p_return_empty_node IS NULL OR p_return_empty_node=G_NO_FLAG THEN
3778       RETURN p_node;
3779     ELSE
3780       RETURN l_empty_xml_node;
3781     END IF;
3782   END getUIContents;
3783 
3784   FUNCTION findChildXMLTag(p_node    xmldom.DOMNode,
3785                            p_xml_tag VARCHAR2) RETURN xmldom.DOMNode IS
3786     l_child_nodes_tbl xmldom.DOMNodeList;
3787     l_child_xml_node  xmldom.DOMNode;
3788     l_empty_xml_node  xmldom.DOMNode;
3789     l_length          NUMBER;
3790   BEGIN
3791     l_child_nodes_tbl := xmldom.getChildNodes(p_node);
3792     l_length          := xmldom.getLength(l_child_nodes_tbl);
3793     FOR k IN 0 .. l_length - 1
3794     LOOP
3795       --
3796       -- get next child DOM node
3797       --
3798       l_child_xml_node := xmldom.item(l_child_nodes_tbl, k);
3799 
3800       IF UPPER(xmldom.getNodeName(l_child_xml_node)) =
3801          UPPER(p_xml_tag) THEN
3802         RETURN l_child_xml_node;
3803       END IF;
3804     END LOOP;
3805 
3806     RETURN l_empty_xml_node;
3807 
3808   END findChildXMLTag;
3809 
3810   --
3811   -- return DOM node of top level tag <ui:contents>
3812   -- if node does not contain p_tag node then return the node itself ( p_node )
3813   -- Parameters :
3814   --  p_node - DOM node
3815   -- Return : top level DOM node with XML tag = p_tag
3816   --
3817   FUNCTION get_Col_UIContents(p_node       xmldom.DOMNode,
3818                               p_col_number NUMBER) RETURN xmldom.DOMNode IS
3819     l_child_nodes_tbl    xmldom.DOMNodeList;
3820     l_child_xml_node     xmldom.DOMNode;
3821     l_first_ui_contents  xmldom.DOMNode;
3822     l_second_ui_contents xmldom.DOMNode;
3823     l_rowlayout          xmldom.DOMNode;
3824     l_length             NUMBER;
3825     l_counter            NUMBER;
3826     l_id_attribute       VARCHAR2(255);
3827   BEGIN
3828 
3829     l_first_ui_contents := getUIContents(p_node);
3830 
3831     l_child_nodes_tbl := xmldom.getChildNodes(l_first_ui_contents);
3832     l_length          := xmldom.getLength(l_child_nodes_tbl);
3833     FOR k IN 0 .. l_length - 1
3834     LOOP
3835       --
3836       -- get next child DOM node
3837       --
3838       l_child_xml_node := xmldom.item(l_child_nodes_tbl, k);
3839 
3840       IF UPPER(xmldom.getNodeName(l_child_xml_node)) =
3841          UPPER('oa:rowLayout') THEN
3842 
3843     l_id_attribute := get_Attribute_Value(l_child_xml_node,
3844                                             G_ID_ATTRIBUTE);
3845 
3846         EXIT;
3847       END IF;
3848     END LOOP;
3849 
3850     l_second_ui_contents := getUIContents(l_child_xml_node);
3851 
3852     l_counter:= 0;
3853 
3854     l_child_nodes_tbl := xmldom.getChildNodes(l_second_ui_contents);
3855     l_length          := xmldom.getLength(l_child_nodes_tbl);
3856     FOR k IN 0 .. l_length - 1
3857     LOOP
3858       --
3859       -- get next child DOM node
3860       --
3861       l_child_xml_node := xmldom.item(l_child_nodes_tbl, k);
3862 
3863       IF UPPER(xmldom.getNodeName(l_child_xml_node)) =
3864          UPPER('oa:cellFormat') THEN
3865         l_counter := l_counter + 1;
3866         IF l_counter=p_col_number THEN
3867 
3868     l_id_attribute := get_Attribute_Value(l_child_xml_node,
3869                                             G_ID_ATTRIBUTE);
3870 
3871           RETURN getUIContents(l_child_xml_node);
3872         END IF;
3873 
3874       END IF;
3875     END LOOP;
3876 
3877     RETURN p_node;
3878 
3879   END get_Col_UIContents;
3880 
3881   --
3882   -- find DOM node by persistent_node_id
3883   --
3884   FUNCTION find_Table_Of_XML_Node(p_parent_xml_node xmldom.DOMNode,
3885                                   p_element_id      IN VARCHAR2)
3886     RETURN xmldom.DOMNode IS
3887 
3888     l_child_xml_node        xmldom.DOMNode;
3889     l_table_child_xml_node  xmldom.DOMNode;
3890     l_empty_xml_node        xmldom.DOMNode;
3891     l_uicont_xml_node       xmldom.DOMNode;
3892     l_ui_contents_xml_node  xmldom.DOMNode;
3893     l_child_nodes_tbl       xmldom.DOMNodeList;
3894     l_table_child_nodes_tbl xmldom.DOMNodeList;
3895     l_length                NUMBER;
3896     l_table_child_length    NUMBER;
3897 
3898   BEGIN
3899 
3900     IF xmldom.getNodeName(p_parent_xml_node) IN('oa:header','oa:stackLayout',
3901                                                 'oa:flowLayout','oa:tableLayout') THEN
3902 
3903       l_ui_contents_xml_node := getUIContents(p_parent_xml_node);
3904     ELSE
3905       l_ui_contents_xml_node := p_parent_xml_node;
3906     END IF;
3907 
3908     --
3909     -- get child nodes of DOM node : p_node
3910     --
3911     l_child_nodes_tbl := xmldom.getChildNodes(l_ui_contents_xml_node);
3912 
3913     --
3914     -- we need to get length of array of child nodes
3915     -- to go through the array in loop
3916     --
3917     l_length := xmldom.getLength(l_child_nodes_tbl);
3918 
3919     FOR k IN 0 .. l_length - 1
3920     LOOP
3921       --
3922       -- get next child DOM node
3923       --
3924       l_child_xml_node := xmldom.item(l_child_nodes_tbl, k);
3925 
3926       IF (get_Attribute_Value(l_child_xml_node, G_USER_ATTRIBUTE5_NAME) = 'TABLELAYOUT_FOR_UI_GEN') THEN
3927 
3928         BEGIN
3929           l_uicont_xml_node := getUIContents(l_child_xml_node);
3930 
3931           l_table_child_nodes_tbl := xmldom.getChildNodes(l_uicont_xml_node);
3932           l_table_child_length := xmldom.getLength(l_table_child_nodes_tbl);
3933 
3934           FOR m IN 0 .. l_table_child_length - 1
3935           LOOP
3936              l_table_child_xml_node := xmldom.item(l_table_child_nodes_tbl, m);
3937 
3938              IF get_Attribute_Value(l_table_child_xml_node, G_ID_ATTRIBUTE) = p_element_id THEN
3939                 RETURN l_uicont_xml_node;
3940              END IF;
3941           END LOOP;
3942         END;
3943       END IF;
3944     END LOOP;
3945     RETURN l_empty_xml_node;
3946   EXCEPTION
3947     WHEN OTHERS THEN
3948       DEBUG('find_Table_Of_XML_Node() : '||SQLERRM);
3949       RETURN l_empty_xml_node;
3950   END find_Table_Of_XML_Node;
3951 
3952   --
3953   -- find a given xml tag up on the tree
3954   --
3955   FUNCTION find_Element_Id_Of_XMLTag(p_xml_node xmldom.DOMNode,
3956                                      p_tag_name VARCHAR2 ) RETURN VARCHAR2 IS
3957     l_node       xmldom.DOMNode;
3958     l_hgrid_node xmldom.DOMNode;
3959     PROCEDURE find_hgrid(p_node xmldom.DOMNode) IS
3960     BEGIN
3961       IF xmldom.isNull(p_node) THEN
3962         RETURN;
3963       END IF;
3964       l_node := xmldom.getParentNode(p_node);
3965       IF lower(xmldom.getNodeName(l_node))=lower(p_tag_name) THEN
3966         l_hgrid_node := l_node;
3967       ELSE
3968         find_hgrid(l_node);
3969       END IF;
3970     END find_hgrid;
3971   BEGIN
3972     find_hgrid(p_xml_node);
3973     RETURN get_Attribute_Value(l_hgrid_node,
3974                                G_ID_ATTRIBUTE);
3975   EXCEPTION
3976     WHEN OTHERS THEN
3977       DEBUG('find_Element_Id_Of_XMLTag() : '||SQLERRM);
3978       RETURN NULL;
3979   END find_Element_Id_Of_XMLTag;
3980 
3981 
3982   FUNCTION find_AMN_Element_Above(p_xml_node xmldom.DOMNode) RETURN VARCHAR2 IS
3983 
3984     l_element_id CZ_UI_PAGE_ELEMENTS.element_id%TYPE;
3985 
3986     PROCEDURE AMN_Element_Above(p_node xmldom.DOMNode) IS
3987 
3988       l_node             xmldom.DOMNode;
3989       l_next_node        xmldom.DOMNode;
3990       l_user_attribute1  VARCHAR2(32000);
3991 
3992     BEGIN
3993 
3994       l_node := xmldom.getParentNode(p_node);
3995 
3996       IF xmldom.isNull(l_node) THEN
3997         l_element_id := get_Attribute_Value(p_node, G_ID_ATTRIBUTE);
3998         RETURN;
3999       END IF;
4000 
4001       l_user_attribute1 := get_Attribute_Value(l_node, G_USER_ATTRIBUTE1_NAME);
4002 
4003       IF NOT(l_user_attribute1='model_path=%modelPath' OR l_user_attribute1 IS NULL) THEN
4004 
4005          l_element_id := get_Attribute_Value(l_node, G_ID_ATTRIBUTE);
4006          RETURN;
4007 
4008       ELSE
4009 
4010          l_next_node := xmldom.getParentNode(l_node);
4011 
4012          IF xmldom.isNull(l_next_node) THEN
4013            l_element_id := get_Attribute_Value(l_node, G_ID_ATTRIBUTE);
4014            RETURN;
4015          ELSE
4016            AMN_Element_Above(l_node);
4017          END IF;
4018 
4019       END IF;
4020 
4021     END AMN_Element_Above;
4022 
4023   BEGIN
4024 
4025     AMN_Element_Above(p_xml_node);
4026 
4027     RETURN l_element_id;
4028 
4029   END find_AMN_Element_Above;
4030 
4031 
4032   --
4033   -- parse or export/parse JRAD document
4034   -- Parameters :
4035   --   p_doc_full_name - full JRAD name of the document
4036   --
4037   FUNCTION parse_JRAD_Document(p_doc_full_name IN VARCHAR2)
4038     RETURN xmldom.DOMDocument IS
4039 
4040     l_buffer         VARCHAR2(32000);
4041     l_lob_loc        CLOB;
4042     l_amount         BINARY_INTEGER;
4043     l_position       INTEGER := 1;
4044     l_xmldoc         xmldom.DOMDocument;
4045     l_exportfinished BOOLEAN;
4046 
4047   BEGIN
4048 
4049     DBMS_LOB.CREATETEMPORARY(l_lob_loc, TRUE);
4050     DBMS_LOB.OPEN(l_lob_loc, DBMS_LOB.LOB_READWRITE);
4051 
4052     l_buffer := jdr_utils.ExportDocument(p_document       => p_doc_full_name,
4053                                          p_exportfinished => l_exportfinished);
4054 
4055     IF l_buffer IS NULL THEN
4056       RETURN l_xmldoc;
4057     END IF;
4058 
4059     l_amount := LENGTH(l_buffer);
4060 
4061     DBMS_LOB.WRITE(l_lob_loc, l_amount, l_position, l_buffer);
4062     l_position := l_position + l_amount;
4063 
4064     IF l_exportfinished=FALSE THEN
4065     LOOP
4066       l_buffer := jdr_utils.ExportDocument(p_document       => NULL,
4067                                            p_exportfinished => l_exportfinished);
4068 
4069       IF l_buffer IS NULL THEN
4070         EXIT;
4071       END IF;
4072 
4073       l_amount := LENGTH(l_buffer);
4074 
4075       DBMS_LOB.WRITE(l_lob_loc, l_amount, l_position, l_buffer);
4076       l_position := l_position + l_amount;
4077 
4078       IF l_buffer IS NULL OR l_exportfinished THEN
4079         EXIT;
4080       END IF;
4081     END LOOP;
4082 
4083     END IF;
4084 
4085     xmlparser.parseCLOB(g_PARSER, l_lob_loc);
4086 
4087     l_xmldoc := xmlparser.getDocument(g_PARSER);
4088 
4089     DBMS_LOB.CLOSE(l_lob_loc);
4090     DBMS_LOB.FREETEMPORARY(l_lob_loc);
4091 
4092     RETURN l_xmldoc;
4093 
4094   EXCEPTION
4095     WHEN OTHERS THEN
4096       add_Error_Message(p_message_name => 'CZ_WRONG_UI_TEMPLATE',
4097                         p_token_name   => 'UI_TEMPLATE',
4098                         p_token_value  => p_doc_full_name,
4099                         p_fatal_error  => TRUE);
4100       RAISE WRONG_UI_TEMPLATE;
4101   END parse_JRAD_Document;
4102 
4103   --
4104   -- set CZ Attributes for a given DOM node
4105   -- Parameters : p_dom_element     - DOM Element which identifies DOM node
4106   --              p_attribute_name  - attribute name
4107   --              p_attribute_value - attribute value
4108   --
4109   PROCEDURE set_Attribute(p_dom_element     xmldom.DOMElement,
4110                           p_attribute_name  IN VARCHAR2,
4111                           p_attribute_value IN VARCHAR2) IS
4112 
4113   BEGIN
4114     xmldom.setAttribute(p_dom_element, p_attribute_name, p_attribute_value);
4115   END set_Attribute;
4116 
4117   --
4118   -- set CZ Attributes for a given DOM node
4119   -- Parameters : p_dom_element     - DOM Element which identifies DOM node
4120   --              p_attribute_name  - attribute name
4121   --              p_attribute_value - attribute value
4122   --
4123   PROCEDURE set_Attribute(p_dom_node        xmldom.DOMNode,
4124                           p_attribute_name  IN VARCHAR2,
4125                           p_attribute_value IN VARCHAR2) IS
4126 
4127   BEGIN
4128     xmldom.setAttribute(xmldom.makeElement(p_dom_node), p_attribute_name, p_attribute_value);
4129   END set_Attribute;
4130 
4131   --
4132   -- set internal CZ attributes within "user:attribute1"
4133   --
4134   PROCEDURE set_User_Attribute(p_cz_attribute_name    IN VARCHAR2,
4135                                p_cz_attribute_value   IN VARCHAR2,
4136                                px_xml_attribute_value IN OUT NOCOPY VARCHAR2) IS
4137 
4138     l_str            VARCHAR2(4000);
4139     l_sub_str        VARCHAR2(4000);
4140     l_next_equal_ind NUMBER;
4141     l_next_ind       NUMBER;
4142     l_ind            NUMBER;
4143 
4144   BEGIN
4145 
4146     --
4147     -- get string of CZ user attributes
4148     --
4149     l_str := px_xml_attribute_value;
4150     l_ind := INSTR(l_str, p_cz_attribute_name);
4151 
4152     IF l_ind > 0 THEN
4153 
4154       l_sub_str  := SUBSTR(l_str, l_ind);
4155       l_next_ind := INSTR(l_sub_str, '|');
4156 
4157       l_next_equal_ind := INSTR(l_sub_str, '=');
4158 
4159       IF l_next_equal_ind > 1 THEN
4160 
4161         IF l_next_ind > 0 THEN
4162           px_xml_attribute_value := SUBSTR(l_str, 1,  l_ind + l_next_equal_ind - 1) ||
4163                                     p_cz_attribute_value || SUBSTR(l_sub_str, l_next_ind);
4164         ELSE
4165           px_xml_attribute_value := SUBSTR(l_str, 1,l_ind + l_next_equal_ind - 1) || p_cz_attribute_value;
4166         END IF;
4167 
4168       END IF;
4169     ELSE
4170       NULL;
4171     END IF;
4172 
4173   END set_User_Attribute;
4174 
4175   --
4176   -- this procedure adds CZ_UI_PAGE_ELEMENTS records
4177   -- which correspond to first level UI template references
4178   --
4179   PROCEDURE add_Extends_Refs(p_xml_node        xmldom.DOMNode,
4180                              p_ui_node         IN CZ_UI_PAGE_ELEMENTS%ROWTYPE) IS
4181 
4182     l_seq_nbr                      NUMBER;
4183     l_template_id                  NUMBER;
4184     l_template_name                CZ_UI_TEMPLATES.template_name%TYPE;
4185     l_id_attribute_value           CZ_UI_PAGE_ELEMENTS.element_id%TYPE;
4186     l_element_id                   CZ_UI_PAGE_ELEMENTS.element_id%TYPE;
4187     l_extend_attr_value            VARCHAR2(4000);
4188 
4189   BEGIN
4190 
4191     l_extend_attr_value  := get_Attribute_Value(p_xml_node, 'extends');
4192 
4193     IF l_extend_attr_value IS NULL THEN
4194       RETURN;
4195     END IF;
4196 
4197     l_id_attribute_value := get_Attribute_Value(p_xml_node, G_ID_ATTRIBUTE);
4198 
4199     IF l_id_attribute_value IS NULL THEN
4200       RETURN;
4201     END IF;
4202 
4203     SELECT template_id,template_name INTO l_template_id,l_template_name FROM CZ_UI_TEMPLATES
4204      WHERE ui_def_id=p_ui_node.ctrl_template_ui_def_id AND
4205            jrad_doc=l_extend_attr_value AND deleted_flag=G_NO_FLAG;
4206 
4207     SELECT NVL(max(seq_nbr),0)+1 INTO l_seq_nbr FROM CZ_UI_PAGE_ELEMENTS
4208      WHERE ui_def_id=p_ui_node.ui_def_id AND
4209            page_id=p_ui_node.page_id AND
4210            parent_element_id=p_ui_node.element_id AND
4211            deleted_flag NOT IN(G_LIMBO_FLAG,G_MARK_TO_DELETE,G_YES_FLAG);
4212 
4213     l_element_id := get_element_Id();
4214 
4215     INSERT INTO CZ_UI_PAGE_ELEMENTS
4216       (
4217       UI_DEF_ID
4218       ,PAGE_ID
4219       ,PERSISTENT_NODE_ID
4220       ,ELEMENT_ID
4221       ,PARENT_PERSISTENT_NODE_ID
4222       ,REGION_PERSISTENT_NODE_ID
4223       ,PAGEBASE_PERSISTENT_NODE_ID
4224       ,CTRL_TEMPLATE_ID
4225       ,BASE_PAGE_FLAG
4226       ,INSTANTIABLE_FLAG
4227       ,SEQ_NBR
4228       ,DELETED_FLAG
4229       ,CTRL_TEMPLATE_UI_DEF_ID
4230       ,MODEL_REF_EXPL_ID
4231       ,SUPPRESS_REFRESH_FLAG
4232       ,PARENT_ELEMENT_ID
4233       ,ELEMENT_TYPE
4234       ,NAME
4235       ,ELEMENT_SIGNATURE_ID
4236       ,TARGET_PAGE_UI_DEF_ID
4237       ,TARGET_PAGE_ID
4238       )
4239     VALUES
4240       (
4241       p_ui_node.ui_def_id
4242       ,p_ui_node.page_id
4243       ,NULL
4244       ,l_element_id
4245       ,p_ui_node.parent_persistent_node_id
4246       ,p_ui_node.region_persistent_node_id
4247       ,p_ui_node.pagebase_persistent_node_id
4248       ,l_template_id
4249       ,'0'
4250       ,'0'
4251       ,l_seq_nbr
4252       ,G_NO_FLAG
4253       ,p_ui_node.ctrl_template_ui_def_id
4254       ,NULL
4255       ,'0'
4256       ,p_ui_node.element_id
4257       ,NULL
4258       ,l_template_name
4259       ,6011
4260       ,NULL
4261       ,NULL
4262       );
4263 
4264      set_Attribute(p_xml_node, G_ID_ATTRIBUTE, l_element_id);
4265 
4266   END add_Extends_Refs;
4267 
4268   FUNCTION find_Parent_UI_Element
4269    (p_xml_node   xmldom.DOMNode,
4270     p_ui_def_id  IN NUMBER,
4271     p_ui_page_id IN NUMBER) RETURN CZ_UI_PAGE_ELEMENTS%ROWTYPE IS
4272 
4273        l_ui_element CZ_UI_PAGE_ELEMENTS%ROWTYPE;
4274 
4275        PROCEDURE get_Parent_XML(p_check_xml_node xmldom.DOMNode) IS
4276 
4277          l_parent_xml_node xmldom.DOMNode;
4278          l_id_attr_value   VARCHAR2(32000);
4279 
4280        BEGIN
4281 
4282          l_id_attr_value := get_Attribute_Value(p_check_xml_node, G_ID_ATTRIBUTE);
4283 
4284          IF l_id_attr_value IS NOT NULL THEN
4285 
4286            BEGIN
4287              SELECT * INTO l_ui_element FROM CZ_UI_PAGE_ELEMENTS
4288               WHERE ui_def_id=p_ui_def_id AND page_id=p_ui_page_id AND
4289                     element_id=l_id_attr_value;
4290              RETURN;
4291            EXCEPTION
4292              WHEN NO_DATA_FOUND THEN
4293                NULL;
4294            END;
4295 
4296          END IF;
4297 
4298          l_parent_xml_node := xmldom.getParentNode(p_check_xml_node);
4299 
4300 
4301          IF NOT(xmldom.isNull(l_parent_xml_node)) THEN
4302 
4303            l_id_attr_value := get_Attribute_Value(l_parent_xml_node , G_ID_ATTRIBUTE);
4304 
4305 
4306            IF l_id_attr_value IS NOT NULL THEN
4307 
4308            BEGIN
4309              SELECT * INTO l_ui_element FROM CZ_UI_PAGE_ELEMENTS
4310               WHERE ui_def_id=p_ui_def_id AND page_id=p_ui_page_id AND
4311                     element_id=l_id_attr_value;
4312              RETURN;
4313            EXCEPTION
4314              WHEN NO_DATA_FOUND THEN
4315                get_Parent_XML(l_parent_xml_node);
4316            END;
4317 
4318           ELSE
4319                get_Parent_XML(l_parent_xml_node);
4320            END IF;
4321 
4322          ELSE
4323            RETURN;
4324          END IF;
4325 
4326        END get_Parent_XML;
4327 
4328 
4329   BEGIN
4330 
4331     get_Parent_XML(p_xml_node);
4332 
4333     RETURN l_ui_element;
4334 
4335   END find_Parent_UI_Element;
4336 
4337   --
4338   -- replace prefixes which are used by runtime caching
4339   --
4340   FUNCTION replace_Prefix(p_str IN VARCHAR2, p_inline_copy_mode IN VARCHAR2) RETURN VARCHAR2 IS
4341   BEGIN
4342     IF p_inline_copy_mode=G_INLINE_COPY_TMPL THEN
4343       RETURN REPLACE(p_str,'_czt','_czc');
4344     ELSIF p_inline_copy_mode=G_INLINE_COPY_UIPAGE THEN
4345       RETURN REPLACE(REPLACE(p_str,'_czt','_czn'), '_czc','_czn');
4346     ELSE
4347       RETURN p_str;
4348     END IF;
4349   END replace_Prefix;
4350 
4351   --
4352   -- handle special cases ( like "switcher case", "ancestor node" )
4353   --
4354   PROCEDURE handle_Special_XMLCases
4355   (p_xml_node         xmldom.DOMNode,
4356    p_old_xml_node_id  VARCHAR2,
4357    p_new_xml_node_id  VARCHAR2,
4358    p_jrad_doc         VARCHAR2,
4359    px_xml_switcher_id IN OUT NOCOPY VARCHAR2,
4360    p_inline_copy_mode IN VARCHAR2) IS
4361 
4362     l_curr_parent_xml_node  xmldom.DOMNode;
4363     l_ancestor_node_id      VARCHAR2(255);
4364     l_xml_node_name         VARCHAR2(255);
4365     l_parent_xml_node_name  VARCHAR2(255);
4366     l_hgrid_element_id      VARCHAR2(255);
4367     l_switcher_xml_id       VARCHAR2(255);
4368     l_switcher_casename     VARCHAR2(255);
4369     l_uicase_name           VARCHAR2(255);
4370     l_user_attribute3_value VARCHAR2(4000);
4371     l_user_attribute4_value VARCHAR2(4000);
4372 
4373   BEGIN
4374 
4375     l_curr_parent_xml_node := xmldom.getParentNode(p_xml_node);
4376 
4377     l_xml_node_name := xmldom.getNodeName(p_xml_node);
4378     l_parent_xml_node_name := xmldom.getNodeName(l_curr_parent_xml_node);
4379 
4380     l_ancestor_node_id := get_Attribute_Value(p_xml_node,
4381                                           'ancestorNode');
4382 
4383     IF p_old_xml_node_id IS NOT NULL THEN
4384       set_Attribute(p_xml_node, G_ID_ATTRIBUTE, replace_Prefix(p_new_xml_node_id, p_inline_copy_mode));
4385     END IF;
4386 
4387     IF l_ancestor_node_id IS NOT NULL THEN
4388 
4389       l_hgrid_element_id := find_Element_Id_Of_XMLTag(p_xml_node, 'oa:tree');
4390 
4391       IF NOT(xmldom.IsNull(p_xml_node)) THEN
4392 
4393         l_ancestor_node_id := p_jrad_doc||'.'||l_hgrid_element_id;
4394         set_Attribute(p_xml_node,
4395                       'ancestorNode',
4396                       l_ancestor_node_id);
4397 
4398       END IF; -- end of IF NOT(xmldom.IsNull(p_xml_node))
4399 
4400     END IF;  -- end of IF l_ancestor_node IS NOT NULL
4401 
4402     --
4403     -- set value of user attribute "switcherDefaultCaseName" to new jrad id of <oa:switcher>
4404     --
4405     IF l_xml_node_name='oa:switcher' THEN
4406 
4407       px_xml_switcher_id := p_old_xml_node_id;
4408 
4409       l_user_attribute3_value := get_Attribute_Value(p_xml_node, G_USER_ATTRIBUTE3_NAME);
4410       l_switcher_casename := get_User_Attribute(l_user_attribute3_value, 'switcherDefaultCaseName');
4411 
4412       IF l_switcher_casename IS NOT NULL THEN
4413         l_switcher_casename := replace_Prefix(REPLACE(l_switcher_casename, px_xml_switcher_id, p_new_xml_node_id), p_inline_copy_mode);
4414 
4415         set_User_Attribute(p_cz_attribute_name    => 'switcherDefaultCaseName',
4416                            p_cz_attribute_value   => l_switcher_casename,
4417                            px_xml_attribute_value => l_user_attribute3_value);
4418 
4419         set_Attribute(p_xml_node,
4420                       G_USER_ATTRIBUTE3_NAME,
4421                       l_user_attribute3_value);
4422 
4423       END IF;
4424 
4425       set_Attribute(p_xml_node,
4426                     G_ID_ATTRIBUTE,
4427                      replace_Prefix(p_new_xml_node_id, p_inline_copy_mode));
4428 
4429     END IF;  -- end of IF l_xml_node_name='oa:switcher'
4430 
4431     --
4432     -- set value of attribute "name" of <ui:case> to id of parent <oa:switcher>
4433     --
4434     IF l_xml_node_name='ui:case' THEN
4435       IF l_parent_xml_node_name='oa:switcher' THEN
4436 
4437         l_switcher_xml_id := get_Attribute_Value(l_curr_parent_xml_node, G_ID_ATTRIBUTE);
4438         l_uicase_name     := get_Attribute_Value(p_xml_node, 'name');
4439 
4440         set_Attribute(p_xml_node,
4441                       'name',
4442                       replace_Prefix(REPLACE(l_uicase_name, px_xml_switcher_id, l_switcher_xml_id), p_inline_copy_mode));
4443 
4444       END IF;  -- end of IF l_parent_xml_node_name='oa:switcher'
4445 
4446       l_user_attribute4_value := get_Attribute_Value(p_xml_node,
4447                                                      G_USER_ATTRIBUTE4_NAME);
4448 
4449       IF l_user_attribute4_value IS NOT NULL THEN
4450         set_User_Attribute(p_cz_attribute_name    => 'caseId',
4451                            p_cz_attribute_value   => get_Element_Id(),
4452                            px_xml_attribute_value => l_user_attribute4_value);
4453 
4454         set_Attribute(p_xml_node,G_USER_ATTRIBUTE4_NAME,l_user_attribute4_value);
4455       END IF;  -- end of IF l_user_attribute4 IS NOT NULL
4456 
4457     END IF;  -- end of IF l_xml_node_name='ui:case'
4458 
4459     --
4460     -- if current tag is <oa:stackLayout>
4461     -- then replace old id with new one
4462     IF (l_xml_node_name='oa:stackLayout' AND l_parent_xml_node_name='ui:case')  THEN
4463 
4464       set_Attribute(p_xml_node,
4465                     G_ID_ATTRIBUTE,
4466                     replace_Prefix(get_Attribute_Value(l_curr_parent_xml_node, 'name'), p_inline_copy_mode));
4467 
4468     END IF;  -- end of IF (l_xml_node_name='oa:stackLayout' ...
4469 
4470   END handle_Special_XMLCases;
4471 
4472   --
4473   -- refresh Template Ref Counts
4474   --
4475   PROCEDURE refresh_Templ_Ref_Counts
4476  (p_template_xml_doc   xmldom.DOMDocument,
4477   p_template_ui_def_id NUMBER,
4478   p_template_id        NUMBER) IS
4479 
4480     l_xml_node                xmldom.DOMNode;
4481     l_child_nodes_tbl         xmldom.DOMNodeList;
4482     l_extends_attribute       VARCHAR2(2000);
4483     l_ref_tmpls_tbl           number_tbl_type;
4484     l_ref_tmpl_seeded_flag    varchar_tbl_type;
4485     l_ref_template_id         NUMBER;
4486     l_seeded_flag             CZ_UI_REF_TEMPLATES.ref_templ_seeded_flag%TYPE;
4487     l_template_id             CZ_UI_REF_TEMPLATES.template_id%TYPE;
4488     l_length                  NUMBER;
4489 
4490   BEGIN
4491 
4492     l_child_nodes_tbl := xmldom.getElementsByTagName(p_template_xml_doc, '*');
4493     l_length := xmldom.getLength(l_child_nodes_tbl);
4494 
4495     IF (l_length > 0) THEN
4496       FOR k IN 0..l_length-1
4497       LOOP
4498         l_xml_node := xmldom.item(l_child_nodes_tbl, k);
4499         l_extends_attribute := get_Attribute_Value(l_xml_node, 'extends');
4500 
4501         IF l_extends_attribute IS NOT NULL THEN
4502 
4503 
4504           BEGIN
4505             SELECT template_id, seeded_flag
4506               INTO l_ref_template_id, l_seeded_flag
4507               FROM CZ_UI_TEMPLATES
4508              WHERE ui_def_id=p_template_ui_def_id AND
4509                    jrad_doc=l_extends_attribute AND
4510                    deleted_flag=G_NO_FLAG;
4511 
4512             IF l_ref_tmpls_tbl.EXISTS(l_ref_template_id) THEN
4513               l_ref_tmpls_tbl(l_ref_template_id) := l_ref_tmpls_tbl(l_ref_template_id) + 1;
4514             ELSE
4515               l_ref_tmpls_tbl(l_ref_template_id) := 1;
4516             END IF;
4517             l_ref_tmpl_seeded_flag(l_ref_template_id) := l_seeded_flag;
4518          EXCEPTION
4519            WHEN NO_DATA_FOUND THEN
4520              NULL;
4521          END;
4522 
4523         END IF;
4524 
4525       END LOOP;
4526     END IF;
4527 
4528     FOR k IN(SELECT ref_template_id FROM CZ_UI_REF_TEMPLATES
4529               WHERE template_id=p_template_id AND
4530                     template_ui_def_id=p_template_ui_def_id AND
4531                     deleted_flag=G_NO_FLAG)
4532     LOOP
4533       IF NOT(l_ref_tmpls_tbl.EXISTS(k.ref_template_id)) THEN
4534         DELETE FROM CZ_UI_REF_TEMPLATES
4535          WHERE template_id=p_template_id AND
4536                template_ui_def_id=p_template_ui_def_id AND
4537                ref_template_id=k.ref_template_id;
4538       END IF;
4539     END LOOP;
4540 
4541     l_template_id := l_ref_tmpls_tbl.FIRST;
4542     LOOP
4543       IF l_template_id IS NULL THEN
4544         EXIT;
4545       END IF;
4546 
4547       UPDATE CZ_UI_REF_TEMPLATES
4548          SET ref_count = l_ref_tmpls_tbl(l_template_id)
4549        WHERE template_id=p_template_id AND
4550              template_ui_def_id=p_template_ui_def_id AND
4551              ref_template_id=l_template_id AND
4552              deleted_flag=G_NO_FLAG;
4553 
4554       IF SQL%ROWCOUNT=0 THEN
4555           INSERT INTO CZ_UI_REF_TEMPLATES
4556           (
4557           TEMPLATE_ID
4558           ,REF_TEMPLATE_ID
4559           ,DELETED_FLAG
4560           ,TEMPLATE_UI_DEF_ID
4561           ,REF_TEMPLATE_UI_DEF_ID
4562           ,SEEDED_FLAG
4563           ,REF_TEMPL_SEEDED_FLAG
4564           ,REF_COUNT
4565           )
4566           VALUES
4567           (
4568            p_template_id
4569           ,l_template_id
4570           ,G_NO_FLAG
4571           ,p_template_ui_def_id
4572           ,p_template_ui_def_id
4573           ,G_NO_FLAG
4574           ,l_ref_tmpl_seeded_flag(l_template_id)
4575           ,l_ref_tmpls_tbl(l_template_id)
4576           );
4577       END IF;
4578 
4579       l_template_id := l_ref_tmpls_tbl.NEXT(l_template_id);
4580     END LOOP;
4581 
4582   END refresh_Templ_Ref_Counts;
4583 
4584 
4585   --
4586   -- initialize nodeView counters
4587   --
4588   PROCEDURE init_Page_View_Counters IS
4589 
4590     l_view_counter NUMBER;
4591 
4592   BEGIN
4593 
4594     g_bomm_counter           := 1;
4595     g_mandatory_comp_counter := 1;
4596 
4597     g_connector_counter      := 0;
4598     g_mandatory_ref_counter  := 0;
4599     g_minmax_ref_counter     := 0;
4600     g_optional_ref_counter   := 0;
4601     g_of_feature_counter     := 0;
4602     g_if_feature_counter     := 0;
4603     g_df_feature_counter     := 0;
4604     g_bf_feature_counter     := 0;
4605     g_tf_feature_counter     := 0;
4606     g_tot_feature_counter    := 0;
4607     g_rsc_feature_counter    := 0;
4608     g_itot_feature_counter    := 0;
4609     g_irsc_feature_counter    := 0;
4610     g_opt_counter            := 0;
4611 
4612   END init_Page_View_Counters;
4613 
4614 
4615   PROCEDURE init_Page_View_Counters(p_subtree_doc  xmldom.DOMDocument) IS
4616 
4617     l_node            xmldom.DOMNode;
4618     l_nodeslist       xmldom.DOMNodeList;
4619     l_empty_xml_node  xmldom.DOMNode;
4620     l_length          NUMBER;
4621     l_attribute_value VARCHAR2(32000);
4622     l_node_view       VARCHAR2(255);
4623   l_id_attr_value   VARCHAR2(255);
4624 
4625     PROCEDURE set_View_Counter(p_node_view IN VARCHAR2) IS
4626       l_node_view_index NUMBER;
4627       l_underscore_pos  NUMBER;
4628       l_prefix          VARCHAR2(255);
4629     BEGIN
4630 
4631       IF p_node_view IS NOT NULL THEN
4632 
4633         l_underscore_pos := INSTR(p_node_view, '_');
4634         IF (l_underscore_pos > 1) THEN
4635           l_prefix := SUBSTR(p_node_view,1,l_underscore_pos);
4636         ELSE
4637           RETURN;
4638         END IF;
4639 
4640         FOR i IN g_view_prefix_tbl.First..g_view_prefix_tbl.Last
4641         LOOP
4642 
4643           IF l_prefix=g_view_prefix_tbl(i) THEN
4644 
4645             l_node_view_index := TO_NUMBER(SUBSTR(p_node_view, l_underscore_pos+1));
4646 
4647             IF g_view_prefix_tbl(i)='COMP_' THEN
4648               IF l_node_view_index > g_mandatory_comp_counter THEN
4649                 g_mandatory_comp_counter := l_node_view_index;
4650               END IF;
4651 
4652             ELSIF g_view_prefix_tbl(i)='SIM_' THEN
4653               IF l_node_view_index > g_optional_ref_counter THEN
4654                 g_optional_ref_counter := l_node_view_index;
4655               END IF;
4656 
4657             ELSIF g_view_prefix_tbl(i)='CS_' THEN
4658               IF l_node_view_index > g_minmax_ref_counter THEN
4659                 g_minmax_ref_counter := l_node_view_index;
4660               END IF;
4661 
4662             ELSIF g_view_prefix_tbl(i)='OF_' THEN
4663               IF l_node_view_index > g_of_feature_counter THEN
4664                 g_of_feature_counter := l_node_view_index;
4665               END IF;
4666 
4667             ELSIF g_view_prefix_tbl(i)='IF_' THEN
4668               IF l_node_view_index > g_if_feature_counter THEN
4669                 g_if_feature_counter := l_node_view_index;
4670               END IF;
4671 
4672             ELSIF g_view_prefix_tbl(i)='DF_' THEN
4673               IF l_node_view_index > g_df_feature_counter THEN
4674                 g_df_feature_counter := l_node_view_index;
4675               END IF;
4676 
4677             ELSIF g_view_prefix_tbl(i)='BF_' THEN
4678               IF l_node_view_index > g_bf_feature_counter THEN
4679                 g_bf_feature_counter := l_node_view_index;
4680               END IF;
4681 
4682             ELSIF g_view_prefix_tbl(i)='TF_' THEN
4683               IF l_node_view_index > g_tf_feature_counter THEN
4684                 g_tf_feature_counter := l_node_view_index;
4685               END IF;
4686 
4687             ELSIF g_view_prefix_tbl(i)='TOT_' THEN
4688               IF l_node_view_index > g_tot_feature_counter THEN
4689                 g_tot_feature_counter := l_node_view_index;
4690               END IF;
4691 
4692             ELSIF g_view_prefix_tbl(i)='RSC_' THEN
4693               IF l_node_view_index > g_rsc_feature_counter THEN
4694                 g_rsc_feature_counter := l_node_view_index;
4695               END IF;
4696 
4697             ELSIF g_view_prefix_tbl(i)='ITOT_' THEN
4698               IF l_node_view_index > g_itot_feature_counter THEN
4699                 g_itot_feature_counter := l_node_view_index;
4700               END IF;
4701 
4702             ELSIF g_view_prefix_tbl(i)='IRSC_' THEN
4703               IF l_node_view_index > g_irsc_feature_counter THEN
4704                 g_irsc_feature_counter := l_node_view_index;
4705               END IF;
4706 
4707 
4708             ELSIF g_view_prefix_tbl(i)='REF_' THEN
4709               IF l_node_view_index > g_mandatory_ref_counter THEN
4710                 g_mandatory_ref_counter := l_node_view_index;
4711               END IF;
4712 
4713             ELSIF g_view_prefix_tbl(i)='CON_' THEN
4714               IF l_node_view_index > g_connector_counter THEN
4715                 g_connector_counter := l_node_view_index;
4716               END IF;
4717 
4718             ELSIF g_view_prefix_tbl(i)='BOMM_' THEN
4719               IF l_node_view_index > g_bomm_counter THEN
4720                 g_bomm_counter := l_node_view_index;
4721               END IF;
4722 
4723             ELSIF g_view_prefix_tbl(i)='OPT_' THEN
4724               IF l_node_view_index > g_opt_counter THEN
4725                 g_opt_counter := l_node_view_index;
4726               END IF;
4727 
4728             END IF;
4729           END IF;
4730         END LOOP;
4731 
4732       END IF;
4733 
4734     END set_View_Counter;
4735 
4736   BEGIN
4737 
4738     g_bomm_counter           := 0;
4739     g_mandatory_comp_counter := 0;
4740 
4741     g_connector_counter      := 0;
4742     g_mandatory_ref_counter  := 0;
4743     g_minmax_ref_counter     := 0;
4744     g_optional_ref_counter   := 0;
4745     g_of_feature_counter     := 0;
4746     g_if_feature_counter     := 0;
4747     g_df_feature_counter     := 0;
4748     g_bf_feature_counter     := 0;
4749     g_tf_feature_counter     := 0;
4750     g_tot_feature_counter    := 0;
4751     g_rsc_feature_counter    := 0;
4752     g_itot_feature_counter    := 0;
4753     g_irsc_feature_counter    := 0;
4754     g_opt_counter            := 0;
4755 
4756     l_nodeslist := xmldom.getElementsByTagName(p_subtree_doc, '*');
4757     l_length    := xmldom.getLength(l_nodeslist);
4758 
4759     l_node := xmldom.makeNode(xmldom.getDocumentElement(p_subtree_doc));
4760 
4761     l_attribute_value := get_Attribute_Value(l_node, G_USER_ATTRIBUTE3_NAME);
4762     l_node_view :=  get_User_Attribute(l_attribute_value, 'nodeView');
4763 
4764     set_View_Counter(l_node_view);
4765 
4766     FOR i IN 0 .. l_length - 1
4767     LOOP
4768       l_node            := xmldom.item(l_nodeslist, i);
4769       l_attribute_value := get_Attribute_Value(l_node, G_USER_ATTRIBUTE3_NAME);
4770       l_node_view       :=  get_User_Attribute(l_attribute_value, 'nodeView');
4771       set_View_Counter(l_node_view);
4772 
4773       l_id_attr_value := get_Attribute_Value(l_node, G_ID_ATTRIBUTE);
4774       IF l_id_attr_value IS NOT NULL THEN
4775         BEGIN
4776           g_dom_elements_tbl(TO_NUMBER(l_id_attr_value)) := l_node;
4777         EXCEPTION
4778           WHEN OTHERS THEN
4779             --
4780             -- if element_id is not a number it will not be cached
4781             --
4782           NULL;
4783         END;
4784       END IF;
4785     END LOOP;
4786 
4787   END init_Page_View_Counters;
4788 
4789   PROCEDURE resolve_view_names(p_xml_node        IN xmldom.DOMNode,
4790                                p_ui_page_id      IN NUMBER,
4791                                p_counter         IN OUT NOCOPY NUMBER,
4792                                p_element_ids_table IN OUT NOCOPY varchar2_tbl_type) IS
4793 
4794       l_view_name             VARCHAR2(255);
4795       l_children_view_name    VARCHAR2(255);
4796 
4797       l_user_attribute        VARCHAR2(32000);
4798       l_user_attribute_value  VARCHAR2(32000);
4799       l_ind                   NUMBER;
4800       l_child_nodes_tbl       xmldom.DOMNodeList;
4801       l_length                NUMBER;
4802       l_child_xml_node        xmldom.DOMNode;
4803       l_element_id            VARCHAR2(255);
4804 
4805     BEGIN
4806 
4807 
4808       IF p_counter = -1 THEN
4809         SELECT COUNT(element_id) INTO p_counter
4810         FROM CZ_UI_PAGE_ELEMENTS
4811         WHERE ui_def_id=g_UI_Context.ui_def_id
4812         AND page_id=p_ui_page_id AND
4813         deleted_flag NOT IN(G_YES_FLAG,G_MARK_TO_DELETE);
4814       END IF;
4815 
4816       l_element_id := get_Attribute_Value(p_xml_node, G_ID_ATTRIBUTE);
4817       IF l_element_id IS NOT NULL THEN
4818         p_element_ids_table(l_element_id) := l_element_id;
4819       END IF;
4820 
4821       l_user_attribute_value := get_Attribute_Value(p_xml_node, G_USER_ATTRIBUTE3_NAME);
4822       IF l_user_attribute_value IS NOT NULL THEN
4823 
4824         l_view_name := get_User_Attribute(l_user_attribute_value ,'nodeView');
4825 
4826         IF l_view_name <> '%nodeView' AND l_view_name IS NOT NULL THEN
4827           l_ind := INSTR(l_view_name, '_');
4828           l_view_name := SUBSTR(l_view_name,1,l_ind-1);
4829           l_view_name := get_next_view_name(l_view_name);
4830 
4831           set_User_Attribute(p_cz_attribute_name    => 'nodeView',
4832                              p_cz_attribute_value   => l_view_name,
4833                              px_xml_attribute_value => l_user_attribute_value);
4834 
4835           l_children_view_name := get_User_Attribute(l_user_attribute_value ,'nodeChildrenView');
4836 
4837           IF l_children_view_name <> '%nodeChildrenView' AND l_children_view_name IS NOT NULL THEN
4838 
4839             l_children_view_name := l_view_name || '_children';
4840             DEBUG('asp: New children view name = ' || l_children_view_name);
4841 
4842             set_User_Attribute(p_cz_attribute_name    => 'nodeChildrenView',
4843                                p_cz_attribute_value   => l_children_view_name,
4844                                px_xml_attribute_value => l_user_attribute_value);
4845           END IF;
4846 
4847           set_Attribute(p_xml_node,
4848                        G_USER_ATTRIBUTE3_NAME,
4849                        l_user_attribute_value);
4850         END IF;
4851       END IF;
4852 
4853       l_child_nodes_tbl := xmldom.getChildNodes(p_xml_node);
4854       l_length          := xmldom.getLength(l_child_nodes_tbl);
4855 
4856       FOR k IN 0 .. l_length - 1
4857       LOOP
4858         --
4859         -- get next child DOM node
4860         --
4861         l_child_xml_node := xmldom.item(l_child_nodes_tbl, k);
4862 
4863         resolve_view_names(p_xml_node          => l_child_xml_node,
4864                            p_ui_page_id        => p_ui_page_id,
4865                            p_counter           => p_counter,
4866                            p_element_ids_table => p_element_ids_table);
4867 
4868       END LOOP;
4869 
4870 
4871   END resolve_view_names;
4872 
4873 
4874   --
4875   -- set Attributes for Template
4876   --
4877   PROCEDURE set_Template_Attributes(p_xml_root_node        xmldom.DOMNode,
4878                                     p_ui_node              CZ_UI_PAGE_ELEMENTS%ROWTYPE,
4879                                     p_element_signature_id NUMBER DEFAULT NULL) IS
4880 
4881     l_xml_root_element_node xmldom.DOMElement := xmldom.makeElement(p_xml_root_node);
4882     l_node                  CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE;
4883     l_ui_action_id          NUMBER;
4884     l_drilldown_text_id     NUMBER;
4885 
4886     l_view_name             VARCHAR2(255);
4887     l_picklist_view_name    VARCHAR2(255);
4888     l_has_children          VARCHAR2(1);
4889 
4890     l_model_path            VARCHAR2(32000);
4891     l_user_attribute        VARCHAR2(32000);
4892 
4893   BEGIN
4894 
4895     --
4896     -- get Model node by persistent_node_id and project_id
4897     --
4898     l_node := get_Model_Node_By_Persist_Id(p_ui_node.persistent_node_id,
4899                                            g_UI_Context.devl_project_id);
4900 
4901     --
4902     -- get a corresponding view name by detailed_type_id and
4903     -- also get variable has_children
4904     --
4905     IF  p_ui_node.parent_element_id IS NULL THEN
4906       IF l_node.ps_node_type IN(258,259) THEN
4907         l_view_name := 'COMP_1';
4908       ELSE
4909         l_view_name := 'BOMM_1';
4910         l_picklist_view_name := l_view_name || '_children';
4911       END IF;
4912     ELSE
4913       l_view_name := get_View_Name(l_node, l_has_children);
4914     END IF;
4915 
4916     --
4917     -- UI Page or CX associated with an
4918     -- instantiable component must have nodeView='COMP_...'
4919     --
4920     IF p_ui_node.element_type=G_UI_CX_BUTTON_NODE_TYPE OR
4921        p_ui_node.parent_element_id IS NULL THEN
4922         l_view_name := REPLACE(l_view_name,'CS_','COMP_');
4923     END IF;
4924 
4925     IF l_has_children = G_YES_FLAG THEN
4926       l_picklist_view_name := l_view_name || '_children';
4927     END IF;
4928 
4929     IF g_ref_cx_paths_tbl.EXISTS(TO_NUMBER(p_ui_node.element_id)) THEN
4930       l_model_path := g_ref_cx_paths_tbl(TO_NUMBER(p_ui_node.element_id));
4931     ELSE
4932       l_model_path := get_Model_Path(p_ui_node);
4933     END IF;
4934 
4935     --
4936     -- set JRAD id of element
4937     --
4938     set_Attribute(l_xml_root_element_node,
4939                   G_ID_ATTRIBUTE,
4940                   p_ui_node.element_id);
4941 
4942     --
4943     -- attribute1 is always used only for model_path
4944     --
4945     set_Attribute(l_xml_root_element_node,
4946                   G_USER_ATTRIBUTE1_NAME,
4947                   'model_path='||l_model_path);
4948 
4949     IF l_model_path='*' THEN
4950       set_Attribute(l_xml_root_element_node,
4951                     G_USER_ATTRIBUTE2_NAME,
4952                     '0');
4953     ELSE
4954       --
4955       -- set attribute2 to persistent_node_id :
4956       -- THIS ATTRIBUTE MUST BE SET ONLY BY UI GENERATION / UI REFRESH
4957       --
4958       set_Attribute(l_xml_root_element_node,
4959                     G_USER_ATTRIBUTE2_NAME,
4960                     TO_CHAR(p_ui_node.persistent_node_id));
4961     END IF;
4962 
4963     --
4964     -- get value of "user:attribute3"
4965     --
4966     l_user_attribute := get_Attribute_Value(p_xml_root_node,
4967                                             G_USER_ATTRIBUTE3_NAME);
4968 
4969     IF l_user_attribute IS NOT NULL THEN
4970 
4971       IF l_view_name IS NOT NULL THEN
4972         set_User_Attribute(p_cz_attribute_name    => 'nodeView',
4973                            p_cz_attribute_value   => l_view_name,
4974                            px_xml_attribute_value => l_user_attribute);
4975       END IF;
4976       IF l_picklist_view_name IS NOT NULL THEN
4977         set_User_Attribute(p_cz_attribute_name    => 'nodeChildrenView',
4978                            p_cz_attribute_value   => l_picklist_view_name,
4979                            px_xml_attribute_value => l_user_attribute);
4980       END IF;
4981 
4982       IF INSTR(l_user_attribute, 'actionId=')>0 THEN
4983         BEGIN
4984           l_ui_action_id := get_UI_Action_Id(p_ui_node);
4985         EXCEPTION
4986           WHEN OTHERS THEN
4987             NULL;
4988         END;
4989 
4990         IF l_ui_action_id IS NOT NULL THEN
4991           set_User_Attribute(p_cz_attribute_name    => 'actionId',
4992                              p_cz_attribute_value   => TO_CHAR(l_ui_action_id),
4993                              px_xml_attribute_value => l_user_attribute);
4994         END IF;
4995 
4996       END IF;
4997       /* commented out according to request from 8/12/2004
4998       set_User_Attribute(p_cz_attribute_name    => 'blockSize',
4999                           p_cz_attribute_value   => TO_CHAR(g_UI_Context.ROWS_PER_TABLE),
5000                          px_xml_attribute_value => l_user_attribute);
5001       */
5002     END IF; -- end of setting  G_USER_ATTRIBUTE3_NAME
5003 
5004     IF p_ui_node.element_type IN(G_UI_PAGEDRILLDOWN_NODE_TYPE,G_UI_DRILLDOWN_NODE_TYPE) THEN
5005       IF  g_UI_Context.DRILLDOWN_CONTROL_TEXT_ID IS NOT NULL THEN
5006 
5007         l_drilldown_text_id := copy_Intl_Text(g_UI_Context.DRILLDOWN_CONTROL_TEXT_ID,
5008                                               g_UI_Context.ui_def_id,
5009                                               p_ui_node.page_id, p_ui_node.element_id);
5010 
5011         set_User_Attribute(p_cz_attribute_name    => 'captionIntlTextId',
5012                            p_cz_attribute_value   => TO_CHAR(l_drilldown_text_id),
5013                            px_xml_attribute_value => l_user_attribute);
5014 
5015         set_User_Attribute(p_cz_attribute_name    => 'rolloverIntlTextId',
5016                            p_cz_attribute_value   => TO_CHAR(l_drilldown_text_id),
5017                            px_xml_attribute_value => l_user_attribute);
5018 
5019       END IF;
5020       --
5021       -- set "source" for image associated with a drilldown
5022       --
5023       IF g_UI_Context.DRILLDOWN_IMAGE_URL IS NOT NULL THEN
5024         set_Attribute(l_xml_root_element_node,
5025                       'source',
5026                       g_UI_Context.DRILLDOWN_IMAGE_URL);
5027       END IF;
5028     ELSIF p_ui_node.element_type=G_UI_CX_BUTTON_NODE_TYPE THEN
5029       set_User_Attribute(p_cz_attribute_name    => 'captionIntlTextId',
5030                          p_cz_attribute_value   => TO_CHAR(g_cx_names_tbl(TO_NUMBER(p_ui_node.element_id))),
5031                          px_xml_attribute_value => l_user_attribute);
5032 
5033         set_User_Attribute(p_cz_attribute_name    => 'rolloverIntlTextId',
5034                            p_cz_attribute_value   => TO_CHAR(g_cx_names_tbl(TO_NUMBER(p_ui_node.element_id))),
5035                            px_xml_attribute_value => l_user_attribute);
5036 
5037     END IF;
5038 
5039     set_Attribute(l_xml_root_element_node,G_USER_ATTRIBUTE3_NAME,l_user_attribute);
5040 
5041     --
5042     -- get value of "user:attribute4" which is used by Oracle Configurator Developer
5043     --
5044     l_user_attribute := get_Attribute_Value(p_xml_root_node,
5045                                             G_USER_ATTRIBUTE4_NAME);
5046     IF l_user_attribute IS NOT NULL THEN
5047 
5048       set_User_Attribute(p_cz_attribute_name    => 'name',
5049                          p_cz_attribute_value   => p_ui_node.name,
5050                          px_xml_attribute_value => l_user_attribute);
5051 
5052       IF p_element_signature_id IS NOT NULL THEN
5053          set_User_Attribute(p_cz_attribute_name    => 'elementType',
5054                             p_cz_attribute_value   => TO_CHAR(p_element_signature_id),
5055                             px_xml_attribute_value => l_user_attribute);
5056       ELSE
5057          set_User_Attribute(p_cz_attribute_name    => 'elementType',
5058                             p_cz_attribute_value   => TO_CHAR(p_ui_node.element_signature_id),
5059                             px_xml_attribute_value => l_user_attribute);
5060       END IF;
5061 
5062     END IF;
5063 
5064     set_Attribute(l_xml_root_element_node,
5065                   G_USER_ATTRIBUTE4_NAME,
5066                   l_user_attribute);
5067 
5068     set_Attribute(l_xml_root_element_node,
5069                   G_USER_ATTRIBUTE5_NAME,
5070                   'GENERATED_BY_UI_GEN');
5071 
5072   END set_Template_Attributes;
5073 
5074   FUNCTION get_Element_XML_Path(p_xml_doc xmldom.DOMDocument,p_element_id VARCHAR2)  RETURN VARCHAR2 IS
5075 
5076     l_xml_node     xmldom.DOMNode;
5077     l_element_path VARCHAR2(32000);
5078 
5079     PROCEDURE construct_XML_Path(p_xml_node xmldom.DOMNode) IS
5080 
5081       l_parent_node            xmldom.DOMNode;
5082       l_element_id             CZ_UI_PAGE_ELEMENTS.element_id%TYPE;
5083       l_user_attribute4_value  VARCHAR2(32000);
5084       l_node_name              VARCHAR2(32000);
5085 
5086     BEGIN
5087 
5088       IF xmldom.isNull(p_xml_node) THEN
5089         RETURN;
5090       END IF;
5091       l_parent_node := xmldom.getParentNode(p_xml_node);
5092       l_element_id := get_Attribute_Value(p_xml_node, G_ID_ATTRIBUTE);
5093 
5094       IF l_element_id IS NOT NULL AND xmldom.getNodeName(l_parent_node)<>'#document'THEN
5095 
5096         l_user_attribute4_value := get_Attribute_Value(p_xml_node, G_USER_ATTRIBUTE4_NAME);
5097         IF l_user_attribute4_value IS NOT NULL THEN
5098           l_node_name := get_User_Attribute(l_user_attribute4_value ,'name');
5099 
5100           IF l_element_path IS NOT NULL THEN
5101             l_element_path := l_node_name||'.'||l_element_path;
5102           ELSE
5103             l_element_path := l_node_name;
5104           END IF;
5105 
5106         END IF;
5107       END IF;
5108 
5109         IF  NOT(xmldom.IsNull(p_xml_node)) THEN
5110           IF NOT(xmldom.IsNull(l_parent_node)) THEN
5111             construct_XML_Path(l_parent_node);
5112           END IF;
5113         END IF;
5114 
5115     END construct_XML_Path;
5116 
5117   BEGIN
5118 
5119     l_xml_node := find_XML_Node_By_Attribute(p_xml_doc, G_ID_ATTRIBUTE, p_element_id);
5120 
5121     IF NOT(xmldom.IsNull(l_xml_node)) THEN
5122       construct_XML_Path(l_xml_node);
5123     ELSE
5124       RETURN NULL;
5125     END IF;
5126 
5127     RETURN l_element_path;
5128 
5129   END get_Element_XML_Path;
5130 
5131   FUNCTION get_Element_XML_Path(p_xml_node xmldom.DOMNode)  RETURN VARCHAR2 IS
5132 
5133     l_element_path VARCHAR2(32000);
5134 
5135     PROCEDURE construct_XML_Path(p_xml_node xmldom.DOMNode) IS
5136 
5137       l_parent_node            xmldom.DOMNode;
5138       l_element_id             CZ_UI_PAGE_ELEMENTS.element_id%TYPE;
5139       l_user_attribute4_value  VARCHAR2(32000);
5140       l_node_name              VARCHAR2(32000);
5141 
5142     BEGIN
5143 
5144       IF xmldom.isNull(p_xml_node) THEN
5145         RETURN;
5146       END IF;
5147       l_parent_node := xmldom.getParentNode(p_xml_node);
5148       l_element_id := get_Attribute_Value(p_xml_node, G_ID_ATTRIBUTE);
5149 
5150       IF l_element_id IS NOT NULL AND xmldom.getNodeName(l_parent_node)<>'#document'THEN
5151 
5152         l_user_attribute4_value := get_Attribute_Value(p_xml_node, G_USER_ATTRIBUTE4_NAME);
5153         IF l_user_attribute4_value IS NOT NULL THEN
5154           l_node_name := get_User_Attribute(l_user_attribute4_value ,'name');
5155 
5156           IF l_element_path IS NOT NULL THEN
5157             l_element_path := l_node_name||'.'||l_element_path;
5158           ELSE
5159             l_element_path := l_node_name;
5160           END IF;
5161 
5162         END IF;
5163       END IF;
5164 
5165         IF  NOT(xmldom.IsNull(p_xml_node)) THEN
5166           IF NOT(xmldom.IsNull(l_parent_node)) THEN
5167             construct_XML_Path(l_parent_node);
5168           END IF;
5169         END IF;
5170 
5171     END construct_XML_Path;
5172 
5173   BEGIN
5174 
5175     IF NOT(xmldom.IsNull(p_xml_node)) THEN
5176       construct_XML_Path(p_xml_node);
5177     ELSE
5178       RETURN NULL;
5179     END IF;
5180 
5181     RETURN l_element_path;
5182   EXCEPTION
5183     WHEN OTHERS THEN
5184       DEBUG(SQLERRM);
5185       RETURN NULL;
5186   END get_Element_XML_Path;
5187 
5188   --
5189   -- return path for a given UI element
5190   --
5191   FUNCTION get_Element_XML_Path(p_ui_def_id  IN NUMBER,
5192                                 p_page_id    IN NUMBER,
5193                                 p_element_id IN VARCHAR2,
5194                                 p_is_parser_open IN VARCHAR2 DEFAULT NULL) RETURN VARCHAR2 IS
5195 
5196     l_xmldoc        xmldom.DOMDocument;
5197     l_page_jrad_doc CZ_UI_PAGES.jrad_doc%TYPE;
5198     l_ui_name       CZ_UI_DEFS.name%TYPE;
5199     l_page_name     CZ_UI_PAGES.name%TYPE;
5200     l_element_path  VARCHAR2(32000);
5201 
5202   BEGIN
5203 
5204     IF p_is_parser_open IS NULL OR p_is_parser_open='0' THEN
5205       Open_Parser();
5206     END IF;
5207 
5208     SELECT jrad_doc,name INTO l_page_jrad_doc,l_page_name FROM CZ_UI_PAGES
5209     WHERE ui_def_id=p_ui_def_id AND page_id=p_page_id;
5210 
5211     --
5212     -- create UI Template in JRAD repository
5213     --
5214     l_xmldoc := parse_JRAD_Document(p_doc_full_name => l_page_jrad_doc);
5215 
5216     IF xmldom.isNull(l_xmldoc) THEN
5217       -- UI page is already deleted
5218       RETURN NULL;
5219     END IF;
5220 
5221     l_element_path := get_Element_XML_Path(l_xmldoc,p_element_id);
5222 
5223     IF p_is_parser_open IS NULL OR p_is_parser_open='0' THEN
5224       Close_Parser();
5225     END IF;
5226 
5227     SELECT name INTO l_ui_name FROM CZ_UI_DEFS
5228     WHERE ui_def_id=p_ui_def_id;
5229 
5230     IF l_element_path IS NULL OR l_element_path='.' THEN
5231       l_element_path := l_ui_name||'.'||'Pages'||'.'||l_page_name;
5232     ELSE
5233       l_element_path := l_ui_name||'.'||'Pages'||'.'||l_page_name||'.'||l_element_path;
5234     END IF;
5235 
5236     RETURN l_element_path;
5237 
5238   END get_Element_XML_Path;
5239 
5240 
5241   PROCEDURE copy_UI_Rule
5242   (
5243   p_rule_id       IN NUMBER,
5244   x_rule_id       OUT NOCOPY NUMBER,
5245   p_ui_def_id     IN NUMBER,
5246   p_ui_page_id    IN NUMBER,
5247   p_ui_element_id IN VARCHAR2,
5248   p_source_ui_def_id IN NUMBER,
5249   p_xml_node      IN xmldom.DOMNode DEFAULT g_Null_Xml_Node
5250   ) IS
5251 
5252     l_return_status        VARCHAR2(255);
5253     l_msg_count            NUMBER;
5254     l_msg_data             VARCHAR2(4000);
5255     l_run_id               NUMBER;
5256     l_element_path         VARCHAR2(4000);
5257     l_source_ui_def_id     NUMBER;
5258     l_failure_flag         NUMBER;
5259     l_cp_rule_run_id       NUMBER;
5260     l_copied_rule          BOOLEAN;
5261 
5262   BEGIN
5263     IF p_rule_id IS NOT NULL THEN
5264 
5265       IF p_source_ui_def_id IS NULL THEN
5266         l_source_ui_def_id := 0;
5267       ELSE
5268         l_source_ui_def_id := p_source_ui_def_id;
5269       END IF;
5270       FOR k IN(SELECT rule_id,rule_type,seeded_flag,devl_project_id FROM CZ_RULES
5271                WHERE persistent_rule_id = p_rule_id AND DECODE(NVL(ui_def_id,0),0,l_source_ui_def_id,ui_def_id)=l_source_ui_def_id
5272                      AND deleted_flag=G_NO_FLAG)
5273       LOOP
5274         l_run_id := 0; l_cp_rule_run_id := 0;
5275         l_copied_rule := FALSE;
5276 
5277         IF NVL(k.seeded_flag,G_NO_FLAG)=G_NO_FLAG THEN
5278           CZ_DEVELOPER_UTILS_PVT.copy_Rule
5279           (p_rule_id                  => k.rule_id,
5280            p_init_msg_list            => FND_API.G_FALSE,
5281            p_ui_def_id                => p_ui_def_id,
5282            p_ui_page_id               => p_ui_page_id,
5283            p_ui_page_element_id       => p_ui_element_id,
5284            x_out_new_rule_id          => x_rule_id,
5285            x_run_id                   => l_cp_rule_run_id,
5286            x_return_status            => l_return_status,
5287            x_msg_count                => l_msg_count,
5288            x_msg_data                 => l_msg_data);
5289 
5290            l_copied_rule := TRUE;
5291         ELSE
5292            x_rule_id := k.rule_id;
5293         END IF;
5294 
5295         l_failure_flag := 0;
5296         IF l_cp_rule_run_id > 0 THEN
5297           SELECT COUNT(*) INTO l_failure_flag FROM CZ_DB_LOGS WHERE run_id=l_cp_rule_run_id;
5298         END IF;
5299 
5300         IF l_failure_flag=0 AND NVL(k.devl_project_id,0) NOT IN(0,1) AND l_copied_rule THEN
5301           CZ_DEVELOPER_UTILS_PVT.verify_special_rule(p_rule_id => x_rule_id,
5302                                                      p_name    => NULL,
5303                                                      x_run_id  => l_run_id);
5304         END IF;
5305 
5306         IF l_run_id > 0 THEN
5307           IF NOT(xmldom.IsNull(p_xml_node)) THEN
5308             l_element_path := get_Element_XML_Path(p_xml_node   => p_xml_node);
5309           ELSE -- UI rule on UI page level
5310             SELECT name INTO l_element_path FROM CZ_UI_PAGES
5311             WHERE page_id=p_ui_page_id AND ui_def_id=p_ui_def_id;
5312           END IF;
5313 
5314           IF k.rule_type=33 THEN
5315                add_Error_Message(p_message_name => 'CZ_DISP_COND_DEL_ND_ERROR',
5316                                  p_token_name   => 'UIELEMENTPATH',
5317                                  p_token_value  => l_element_path,
5318                                  p_fatal_error  => TRUE);
5319           ELSIF k.rule_type=34 THEN
5320               add_Error_Message(p_message_name => 'CZ_ENABLED_CONDITION_ERROR',
5321                                 p_token_name   => 'UIELEMENTPATH',
5322                                 p_token_value  => l_element_path,
5323                                 p_fatal_error  => TRUE);
5324           ELSE
5325               NULL;
5326           END IF;
5327 
5328         END IF;
5329       END LOOP;
5330     ELSE
5331       x_rule_id := NULL;
5332     END IF;
5333   END copy_UI_Rule;
5334 
5335   FUNCTION get_Runtime_Relative_Path
5336   (
5337   p_model_id                     NUMBER,
5338   p_persistent_node_id           NUMBER,
5339   p_page_id                      NUMBER,
5340   p_ui_node_expl_id              NUMBER DEFAULT NULL
5341   ) RETURN VARCHAR2 IS
5342 
5343     l_model_path         VARCHAR2(32000);
5344     l_pagebase_expl_id   NUMBER;
5345     l_expl_id            NUMBER;
5346     l_expl_node_id       NUMBER;
5347     l_ps_node_id         NUMBER;
5348     l_ps_node_type       NUMBER;
5349     l_component_id       NUMBER;
5350     l_model_ref_expl_id  NUMBER;
5351     l_pagebase_persistent_node_id NUMBER;
5352 
5353   BEGIN
5354 
5355     SELECT persistent_node_id,pagebase_expl_node_id
5356       INTO l_pagebase_persistent_node_id, l_pagebase_expl_id
5357       FROM CZ_UI_PAGES
5358      WHERE ui_def_id=g_UI_Context.ui_def_id AND page_id=p_page_id;
5359 
5360     BEGIN
5361       --
5362       -- does the current node with persistent_node_id=p_persistent_node_id
5363       -- belongs to model with devl_project_id=p_model_id ?
5364       --
5365       SELECT ps_node_id,ps_node_type,component_id
5366         INTO l_ps_node_id, l_ps_node_type, l_component_id  FROM CZ_PS_NODES
5367        WHERE devl_project_id=p_model_id AND
5368              persistent_node_id=p_persistent_node_id;
5369 
5370     EXCEPTION
5371       WHEN NO_DATA_FOUND THEN
5372          --
5373          -- the current node with persistent_node_id=p_persistent_node_id
5374          -- does not belong to model with devl_project_id=p_model_id
5375          -- and belongs to some referenced model
5376          --
5377          NULL;
5378     END;
5379 
5380     --
5381     -- AMN of UI node belongs to current model
5382     --
5383     IF l_ps_node_id IS NOT NULL THEN
5384       l_expl_id := get_Expl_Id(p_model_id      => p_model_id,
5385                                p_ps_node_id    => l_ps_node_id,
5386                                p_component_id  => l_component_id,
5387                                p_ps_node_type  => l_ps_node_type);
5388 
5389       l_model_path := CZ_DEVELOPER_UTILS_PVT.runtime_relative_path(p_base_expl_id => l_pagebase_expl_id,
5390                                                                    p_base_pers_id => l_pagebase_persistent_node_id,
5391                                                                    p_node_expl_id => l_expl_id,
5392                                                                    p_node_pers_id => p_persistent_node_id);
5393       IF l_model_path IS NULL THEN
5394         l_model_path := '.';
5395       END IF;
5396 
5397       RETURN l_model_path;
5398     END IF;
5399 
5400     -- validation of expl_id
5401     SELECT model_ref_expl_id INTO l_model_ref_expl_id
5402       FROM CZ_MODEL_REF_EXPLS
5403      WHERE model_ref_expl_id=p_ui_node_expl_id;
5404 
5405     --
5406     -- AMN of UI node belongs to referenced model
5407     --
5408 
5409     FOR i IN(SELECT model_ref_expl_id,parent_expl_node_id,ps_node_type,
5410                     component_id,referring_node_id
5411                FROM CZ_MODEL_REF_EXPLS
5412               START WITH model_ref_expl_id=p_ui_node_expl_id
5413               CONNECT BY PRIOR parent_expl_node_id=model_ref_expl_id AND
5414                                deleted_flag='0')
5415     LOOP
5416       -- go up until the nearest reference
5417       IF (i.ps_node_type IN(G_REFERENCE_TYPE,G_CONNECTOR_TYPE) OR i.parent_expl_node_id IS NULL) THEN
5418 
5419         -- get ps node data for AMN of UI node
5420         SELECT ps_node_id,ps_node_type,component_id
5421           INTO l_ps_node_id, l_ps_node_type,l_component_id
5422           FROM CZ_PS_NODES
5423          WHERE devl_project_id=i.component_id AND
5424                persistent_node_id=p_persistent_node_id AND
5425                deleted_flag=G_NO_FLAG;
5426 
5427         IF NOT(l_ps_node_type IN(G_REFERENCE_TYPE,G_CONNECTOR_TYPE) AND p_ui_node_expl_id<>i.model_ref_expl_id) THEN
5428 
5429           SELECT model_ref_expl_id INTO l_expl_id FROM
5430             (SELECT model_ref_expl_id,referring_node_id,component_id FROM CZ_MODEL_REF_EXPLS
5431               START WITH model_ref_expl_id=i.model_ref_expl_id
5432             CONNECT BY PRIOR model_ref_expl_id=parent_expl_node_id AND deleted_flag='0') a
5433           WHERE (l_ps_node_type IN(G_REFERENCE_TYPE,G_CONNECTOR_TYPE) AND a.referring_node_id=l_ps_node_id) OR
5434                 (l_ps_node_type NOT IN(G_REFERENCE_TYPE,G_CONNECTOR_TYPE) AND a.component_id=l_component_id);
5435 
5436 
5437           l_model_path := CZ_DEVELOPER_UTILS_PVT.runtime_relative_path(p_base_expl_id => l_pagebase_expl_id,
5438                                                                        p_base_pers_id => l_pagebase_persistent_node_id,
5439                                                                        p_node_expl_id => l_expl_id,
5440                                                                        p_node_pers_id => p_persistent_node_id);
5441 
5442           IF l_model_path IS NULL THEN
5443             l_model_path := '.';
5444           END IF;
5445 
5446           RETURN l_model_path;
5447         END IF;
5448 
5449       END IF;
5450     END LOOP;
5451 
5452   END get_Runtime_Relative_Path;
5453 
5454   PROCEDURE handle_User_Attributes
5455   (px_user_attribute_value IN OUT NOCOPY VARCHAR2,
5456    p_source_ui_def_id      IN NUMBER,
5457    p_source_ui_page_id     IN NUMBER,
5458    p_target_ui_def_id      IN NUMBER,
5459    p_target_ui_page_id     IN NUMBER,
5460    p_new_element_id        IN VARCHAR2,
5461    p_source_template_id    IN NUMBER DEFAULT NULL,
5462    p_target_template_id    IN NUMBER DEFAULT NULL,
5463    p_xml_node              IN xmldom.DOMNode DEFAULT g_Null_Xml_Node) IS
5464 
5465     l_cached_elems_tbl        number_tbl_type;
5466     l_cached_source_elems_tbl number_tbl_type;
5467     l_counter                 NUMBER := 0;
5468 
5469     l_id                   NUMBER;
5470     l_new_action_id        NUMBER;
5471     l_new_rule_id          NUMBER;
5472     l_new_intl_text_id     NUMBER;
5473     l_ui_def_node          CZ_UI_DEFS%ROWTYPE;
5474     l_prev_ui_context      CZ_UI_DEFS%ROWTYPE;
5475     l_new_target_node_path CZ_UI_ACTIONS.target_node_path%TYPE;
5476 
5477   BEGIN
5478 
5479     IF px_user_attribute_value IS NULL THEN
5480       RETURN;
5481     END IF;
5482 
5483 
5484     l_ui_def_node := get_Local_UI_Context(p_target_ui_def_id);
5485     l_prev_ui_context := g_UI_Context;
5486     g_UI_Context := l_ui_def_node;
5487 
5488     BEGIN
5489       l_id := TO_NUMBER(get_User_Attribute(px_user_attribute_value,'actionId'));
5490     EXCEPTION
5491       WHEN OTHERS THEN
5492         l_id := NULL;
5493     END;
5494 
5495     IF l_id IS NOT NULL THEN
5496 
5497       FOR i IN(SELECT * FROM CZ_UI_ACTIONS
5498                 WHERE ui_def_id=p_source_ui_def_id AND
5499                 ui_action_id=l_id AND
5500                 NVL(source_page_id,0)=NVL(p_source_ui_page_id,0)
5501                 AND seeded_flag=G_NO_FLAG)
5502       LOOP
5503 
5504           l_new_action_id := allocateId('CZ_UI_ACTIONS_S');
5505 
5506           IF i.target_persistent_node_id IS NOT NULL THEN
5507             l_new_target_node_path := get_Runtime_Relative_Path(p_model_id             => l_ui_def_node.devl_project_id,
5508                                                                 p_persistent_node_id   => i.target_persistent_node_id,
5509                                                                 p_page_id              => p_target_ui_page_id);
5510           ELSE
5511             l_new_target_node_path := NULL;
5512           END IF;
5513 
5514           INSERT INTO CZ_UI_ACTIONS
5515           (
5516           UI_ACTION_ID
5517           ,UI_DEF_ID
5518           ,SOURCE_PAGE_ID
5519           ,CONTEXT_COMPONENT_ID
5520           ,ELEMENT_ID
5521           ,RENDER_CONDITION_ID
5522           ,UI_ACTION_TYPE
5523           ,TARGET_UI_DEF_ID
5524           ,TARGET_PERSISTENT_NODE_ID
5525           ,TARGET_NODE_PATH
5526           ,TARGET_PAGE_SET_ID
5527           ,TARGET_PAGE_ID
5528           ,TARGET_URL
5529           ,FRAME_NAME
5530           ,TARGET_ANCHOR
5531           ,DELETED_FLAG
5532           ,SEEDED_FLAG
5533           ,CX_COMMAND_NAME
5534           ,WINDOW_PARAMETERS
5535           ,TARGET_WINDOW_TYPE
5536           ,TARGET_WINDOW_NAME
5537           ,TARGET_EXPL_NODE_ID
5538           ,URL_PROPERTY_ID
5539           ,PROC_PAGE_TEMPL_UI_DEF_ID
5540           ,PAGE_TITLE_TEXT_ID
5541           ,MAIN_MESSAGE_TEXT_ID
5542           ,PROCESSING_CAPTION_TEXT_ID
5543           ,PROCESSING_PAGE_TEMPL_ID
5544           )
5545           VALUES(
5546           l_new_action_id
5547           ,p_target_ui_def_id
5548           ,p_target_ui_page_id
5549           ,i.CONTEXT_COMPONENT_ID
5550           ,p_new_element_id
5551           ,i.RENDER_CONDITION_ID
5552           ,i.UI_ACTION_TYPE
5553           ,i.TARGET_UI_DEF_ID
5554           ,i.TARGET_PERSISTENT_NODE_ID
5555           ,l_new_target_node_path
5556           ,i.TARGET_PAGE_SET_ID
5557           ,i.TARGET_PAGE_ID
5558           ,i.TARGET_URL
5559           ,i.FRAME_NAME
5560           ,i.TARGET_ANCHOR
5561           ,i.DELETED_FLAG
5562           ,'0'
5563           ,i.CX_COMMAND_NAME
5564           ,i.WINDOW_PARAMETERS
5565           ,i.TARGET_WINDOW_TYPE
5566           ,i.TARGET_WINDOW_NAME
5567           ,i.TARGET_EXPL_NODE_ID
5568           ,i.URL_PROPERTY_ID
5569           ,i.PROC_PAGE_TEMPL_UI_DEF_ID
5570           ,i.PAGE_TITLE_TEXT_ID
5571           ,i.MAIN_MESSAGE_TEXT_ID
5572           ,i.PROCESSING_CAPTION_TEXT_ID
5573           ,i.PROCESSING_PAGE_TEMPL_ID
5574           );
5575 
5576           set_User_Attribute(p_cz_attribute_name    => 'actionId',
5577                              p_cz_attribute_value   => TO_CHAR(l_new_action_id),
5578                              px_xml_attribute_value => px_user_attribute_value);
5579 
5580           IF p_source_template_id IS NOT NULL THEN
5581             l_counter := l_counter + 1;
5582             l_cached_elems_tbl(l_counter) := l_new_action_id;
5583             l_cached_source_elems_tbl(l_counter) := l_id;
5584           END IF;
5585 
5586           END LOOP;
5587 
5588           -- set global UI context to its value before this procedure call
5589           g_UI_Context := l_prev_ui_context;
5590         END IF;
5591 
5592         FOR i IN g_condition_attr_tbl.First..g_condition_attr_tbl.Last
5593         LOOP
5594           BEGIN
5595             l_id := TO_NUMBER(get_User_Attribute(px_user_attribute_value,g_condition_attr_tbl(i)));
5596           EXCEPTION
5597             WHEN OTHERS THEN
5598               l_id := NULL;
5599           END;
5600           IF l_id IS NOT NULL THEN
5601 
5602             copy_UI_Rule(l_id, l_new_rule_id,
5603                          p_target_ui_def_id,p_target_ui_page_id,p_new_element_id,p_source_ui_def_id,
5604                          p_xml_node);
5605 
5606             IF p_source_template_id IS NOT NULL THEN
5607               l_counter := l_counter + 1;
5608               l_cached_elems_tbl(l_counter) := l_new_rule_id;
5609               l_cached_source_elems_tbl(l_counter) := l_id;
5610             END IF;
5611 
5612             set_User_Attribute(p_cz_attribute_name    => g_condition_attr_tbl(i),
5613                                p_cz_attribute_value   => TO_CHAR(l_new_rule_id),
5614                                px_xml_attribute_value => px_user_attribute_value);
5615 
5616           END IF;
5617         END LOOP;
5618 
5619         FOR i IN g_caption_attr_tbl.First..g_caption_attr_tbl.Last
5620         LOOP
5621           BEGIN
5622             l_id := TO_NUMBER(get_User_Attribute(px_user_attribute_value,g_caption_attr_tbl(i)));
5623           EXCEPTION
5624             WHEN OTHERS THEN
5625               l_id := NULL;
5626           END;
5627 
5628           IF l_id IS NOT NULL THEN
5629 
5630               l_new_intl_text_id := NULL;
5631 
5632               FOR k IN(SELECT * FROM CZ_LOCALIZED_TEXTS
5633                        WHERE intl_text_id=l_id AND seeded_flag=G_NO_FLAG
5634                               AND deleted_flag=G_NO_FLAG)
5635               LOOP
5636                 IF l_new_intl_text_id IS NULL THEN
5637                   l_new_intl_text_id := allocateId('CZ_INTL_TEXTS_S');
5638                 END IF;
5639                 INSERT INTO CZ_LOCALIZED_TEXTS
5640                 (
5641                 LOCALE_ID
5642                 ,LOCALIZED_STR
5643                 ,INTL_TEXT_ID
5644                 ,DELETED_FLAG
5645                 ,EFF_FROM
5646                 ,EFF_TO
5647                 ,SECURITY_MASK
5648                 ,EFF_MASK
5649                 ,CHECKOUT_USER
5650                 ,ORIG_SYS_REF
5651                 ,LANGUAGE
5652                 ,SOURCE_LANG
5653                 ,UI_DEF_ID
5654                 ,MODEL_ID
5655                 ,SEEDED_FLAG
5656                 ,UI_PAGE_ID
5657                 ,UI_PAGE_ELEMENT_ID
5658                 )
5659                 VALUES(
5660                 k.LOCALE_ID
5661                 ,k.LOCALIZED_STR
5662                 ,l_new_intl_text_id
5663                 ,k.DELETED_FLAG
5664                 ,k.EFF_FROM
5665                 ,k.EFF_TO
5666                 ,k.SECURITY_MASK
5667                 ,k.EFF_MASK
5668                 ,k.CHECKOUT_USER
5669                 ,k.ORIG_SYS_REF
5670                 ,k.LANGUAGE
5671                 ,k.SOURCE_LANG
5672                 ,p_target_ui_def_id
5673                 ,l_ui_def_node.devl_project_id
5674                 ,'0'
5675                 ,p_target_ui_page_id
5676                 ,p_new_element_id
5677                 );
5678               END LOOP;
5679 
5680               IF l_new_intl_text_id IS NOT NULL THEN
5681                 set_User_Attribute(p_cz_attribute_name    => g_caption_attr_tbl(i),
5682                                    p_cz_attribute_value   => TO_CHAR(l_new_intl_text_id),
5683                                    px_xml_attribute_value => px_user_attribute_value);
5684 
5685                 IF p_source_template_id IS NOT NULL THEN
5686                   l_counter := l_counter + 1;
5687                   l_cached_elems_tbl(l_counter) := l_new_intl_text_id;
5688                   l_cached_source_elems_tbl(l_counter) := l_id;
5689                 END IF;
5690               END IF;
5691            ELSE -- l_id is NULL
5692 
5693             BEGIN
5694               l_id := g_cx_names_tbl(TO_NUMBER(p_new_element_id));
5695             EXCEPTION
5696               WHEN OTHERS THEN
5697                 NULL;
5698             END;
5699 
5700             IF l_id IS NOT NULL THEN
5701                  set_User_Attribute(p_cz_attribute_name    => g_caption_attr_tbl(i),
5702                                     p_cz_attribute_value   => TO_CHAR(l_id),
5703                                     px_xml_attribute_value => px_user_attribute_value);
5704 
5705             ELSE
5706                  set_User_Attribute(p_cz_attribute_name    => g_caption_attr_tbl(i),
5707                                     p_cz_attribute_value   => TO_CHAR(g_UI_Context.DRILLDOWN_CONTROL_TEXT_ID),
5708                                     px_xml_attribute_value => px_user_attribute_value);
5709             END IF;
5710 
5711           END IF;
5712         END LOOP;
5713 
5714     IF l_cached_elems_tbl.COUNT > 0 THEN
5715       FOR i IN l_cached_elems_tbl.First..l_cached_elems_tbl.Last
5716       LOOP
5717 
5718         INSERT INTO CZ_UI_TEMPLATE_ELEMENTS
5719         (
5720         TEMPLATE_ID
5721         ,UI_DEF_ID
5722         ,ELEMENT_TYPE
5723         ,ELEMENT_ID
5724         ,PERSISTENT_ELEMENT_ID
5725         ,DELETED_FLAG
5726         ,SEEDED_FLAG
5727         )
5728         SELECT
5729          p_target_template_id
5730         ,p_target_ui_def_id
5731         ,ELEMENT_TYPE
5732         ,l_cached_elems_tbl(i)
5733         ,l_cached_elems_tbl(i)
5734         ,G_NO_FLAG
5735         ,G_NO_FLAG
5736         FROM CZ_UI_TEMPLATE_ELEMENTS
5737         WHERE template_id=p_source_template_id AND
5738               ui_def_id=p_source_ui_def_id AND
5739               element_id=l_cached_source_elems_tbl(i) AND
5740               deleted_flag=G_NO_FLAG;
5741       END LOOP;
5742     END IF;
5743 
5744   END handle_User_Attributes;
5745 
5746   --
5747   -- handle user attributes in UI template
5748   --
5749   PROCEDURE handle_Template_Attributes
5750   (px_user_attribute_value IN OUT NOCOPY VARCHAR2,
5751    p_new_element_id        IN VARCHAR2,
5752    p_source_ui_def_id      IN NUMBER,
5753    p_source_template_id    IN NUMBER,
5754    p_target_ui_def_id      IN NUMBER,
5755    p_target_template_id    IN NUMBER,
5756    p_xml_node              IN xmldom.DOMNode DEFAULT g_Null_Xml_Node) IS
5757 
5758     l_cached_elems_tbl        number_tbl_type;
5759     l_cached_source_elems_tbl number_tbl_type;
5760     l_counter                 NUMBER := 0;
5761 
5762     l_id               NUMBER;
5763     l_new_action_id    NUMBER;
5764     l_new_rule_id      NUMBER;
5765     l_new_intl_text_id NUMBER;
5766 
5767   BEGIN
5768 
5769     IF px_user_attribute_value IS NULL THEN
5770       RETURN;
5771     END IF;
5772 
5773     BEGIN
5774       l_id := TO_NUMBER(get_User_Attribute(px_user_attribute_value,'actionId'));
5775     EXCEPTION
5776       WHEN OTHERS THEN
5777         l_id := NULL;
5778     END;
5779 
5780     IF l_id IS NOT NULL THEN
5781 
5782       FOR i IN(SELECT * FROM CZ_UI_ACTIONS
5783                 WHERE ui_action_id=l_id AND
5784                       ui_def_id=p_source_ui_def_id AND
5785                       source_page_id=0 AND
5786                       seeded_flag=G_NO_FLAG)
5787       LOOP
5788 
5789           l_new_action_id := allocateId('CZ_UI_ACTIONS_S');
5790 
5791           INSERT INTO CZ_UI_ACTIONS
5792           (
5793           UI_ACTION_ID
5794           ,UI_DEF_ID
5795           ,SOURCE_PAGE_ID
5796           ,CONTEXT_COMPONENT_ID
5797           ,ELEMENT_ID
5798           ,RENDER_CONDITION_ID
5799           ,UI_ACTION_TYPE
5800           ,TARGET_UI_DEF_ID
5801           ,TARGET_PERSISTENT_NODE_ID
5802           ,TARGET_NODE_PATH
5803           ,TARGET_PAGE_SET_ID
5804           ,TARGET_PAGE_ID
5805           ,TARGET_URL
5806           ,FRAME_NAME
5807           ,TARGET_ANCHOR
5808           ,DELETED_FLAG
5809           ,SEEDED_FLAG
5810           ,CX_COMMAND_NAME
5811           ,WINDOW_PARAMETERS
5812           ,TARGET_WINDOW_TYPE
5813           ,TARGET_WINDOW_NAME
5814           ,TARGET_EXPL_NODE_ID
5815           ,URL_PROPERTY_ID
5816           ,PROC_PAGE_TEMPL_UI_DEF_ID
5817           ,PAGE_TITLE_TEXT_ID
5818           ,MAIN_MESSAGE_TEXT_ID
5819           ,PROCESSING_CAPTION_TEXT_ID
5820           ,PROCESSING_PAGE_TEMPL_ID
5821           )
5822           VALUES(
5823           l_new_action_id
5824           ,p_target_ui_def_id
5825           ,0
5826           ,i.CONTEXT_COMPONENT_ID
5827           ,p_new_element_id
5828           ,i.RENDER_CONDITION_ID
5829           ,i.UI_ACTION_TYPE
5830           ,i.TARGET_UI_DEF_ID
5831           ,i.TARGET_PERSISTENT_NODE_ID
5832           ,i.TARGET_NODE_PATH
5833           ,i.TARGET_PAGE_SET_ID
5834           ,i.TARGET_PAGE_ID
5835           ,i.TARGET_URL
5836           ,i.FRAME_NAME
5837           ,i.TARGET_ANCHOR
5838           ,i.DELETED_FLAG
5839           ,'0'
5840           ,i.CX_COMMAND_NAME
5841           ,i.WINDOW_PARAMETERS
5842           ,i.TARGET_WINDOW_TYPE
5843           ,i.TARGET_WINDOW_NAME
5844           ,i.TARGET_EXPL_NODE_ID
5845           ,i.URL_PROPERTY_ID
5846           ,i.PROC_PAGE_TEMPL_UI_DEF_ID
5847           ,i.PAGE_TITLE_TEXT_ID
5848           ,i.MAIN_MESSAGE_TEXT_ID
5849           ,i.PROCESSING_CAPTION_TEXT_ID
5850           ,i.PROCESSING_PAGE_TEMPL_ID
5851           );
5852 
5853           set_User_Attribute(p_cz_attribute_name    => 'actionId',
5854                              p_cz_attribute_value   => TO_CHAR(l_new_action_id),
5855                              px_xml_attribute_value => px_user_attribute_value);
5856 
5857           IF p_source_template_id IS NOT NULL THEN
5858             l_counter := l_counter + 1;
5859             l_cached_elems_tbl(l_counter) := l_new_action_id;
5860             l_cached_source_elems_tbl(l_counter) := l_id;
5861           END IF;
5862 
5863           END LOOP;
5864         END IF;
5865 
5866         FOR i IN g_condition_attr_tbl.FIRST..g_condition_attr_tbl.LAST
5867         LOOP
5868           BEGIN
5869             l_id := TO_NUMBER(get_User_Attribute(px_user_attribute_value,g_condition_attr_tbl(i)));
5870           EXCEPTION
5871             WHEN OTHERS THEN
5872               l_id := NULL;
5873           END;
5874           IF l_id IS NOT NULL THEN
5875             copy_UI_Rule(l_id, l_new_rule_id,0 , 0, p_new_element_id,p_source_ui_def_id, p_xml_node);
5876             IF p_source_template_id IS NOT NULL THEN
5877               l_counter := l_counter + 1;
5878               l_cached_elems_tbl(l_counter) := l_new_rule_id;
5879               l_cached_source_elems_tbl(l_counter) := l_id;
5880             END IF;
5881 
5882             set_User_Attribute(p_cz_attribute_name    => g_condition_attr_tbl(i),
5883                                p_cz_attribute_value   => TO_CHAR(l_new_rule_id),
5884                                px_xml_attribute_value => px_user_attribute_value);
5885 
5886           END IF;
5887         END LOOP;
5888 
5889         FOR i IN g_caption_attr_tbl.FIRST..g_caption_attr_tbl.LAST
5890         LOOP
5891 
5892           BEGIN
5893             l_id := TO_NUMBER(get_User_Attribute(px_user_attribute_value,g_caption_attr_tbl(i)));
5894           EXCEPTION
5895             WHEN OTHERS THEN
5896               l_id := NULL;
5897           END;
5898 
5899           IF l_id IS NOT NULL THEN
5900 
5901               l_new_intl_text_id := NULL;
5902 
5903               FOR k IN(SELECT * FROM CZ_LOCALIZED_TEXTS
5904                        WHERE intl_text_id=l_id AND seeded_flag=G_NO_FLAG
5905                               AND deleted_flag=G_NO_FLAG)
5906               LOOP
5907                 IF l_new_intl_text_id IS NULL THEN
5908                   l_new_intl_text_id := allocateId('CZ_INTL_TEXTS_S');
5909                 END IF;
5910                 INSERT INTO CZ_LOCALIZED_TEXTS
5911                 (
5912                 LOCALE_ID
5913                 ,LOCALIZED_STR
5914                 ,INTL_TEXT_ID
5915                 ,DELETED_FLAG
5916                 ,EFF_FROM
5917                 ,EFF_TO
5918                 ,SECURITY_MASK
5919                 ,EFF_MASK
5920                 ,CHECKOUT_USER
5921                 ,ORIG_SYS_REF
5922                 ,LANGUAGE
5923                 ,SOURCE_LANG
5924                 ,UI_DEF_ID
5925                 ,MODEL_ID
5926                 ,SEEDED_FLAG
5927                 ,UI_PAGE_ID
5928                 ,UI_PAGE_ELEMENT_ID
5929                 )
5930                 VALUES(
5931                 k.LOCALE_ID
5932                 ,k.LOCALIZED_STR
5933                 ,l_new_intl_text_id
5934                 ,k.DELETED_FLAG
5935                 ,k.EFF_FROM
5936                 ,k.EFF_TO
5937                 ,k.SECURITY_MASK
5938                 ,k.EFF_MASK
5939                 ,k.CHECKOUT_USER
5940                 ,k.ORIG_SYS_REF
5941                 ,k.LANGUAGE
5942                 ,k.SOURCE_LANG
5943                 ,p_target_ui_def_id
5944                 ,NVL(k.model_id,0)
5945                 ,'0'
5946                 ,0
5947                 ,p_new_element_id
5948                 );
5949 
5950               END LOOP;
5951 
5952               IF l_new_intl_text_id IS NOT NULL THEN
5953                 set_User_Attribute(p_cz_attribute_name    => g_caption_attr_tbl(i),
5954                                    p_cz_attribute_value   => TO_CHAR(l_new_intl_text_id),
5955                                    px_xml_attribute_value => px_user_attribute_value);
5956 
5957                 IF p_source_template_id IS NOT NULL THEN
5958                   l_counter := l_counter + 1;
5959                   l_cached_elems_tbl(l_counter) := l_new_intl_text_id;
5960                   l_cached_source_elems_tbl(l_counter) := l_id;
5961                 END IF;
5962               END IF;
5963 
5964           END IF;
5965         END LOOP;
5966 
5967     IF l_cached_elems_tbl.COUNT > 0 THEN
5968       FOR i IN l_cached_elems_tbl.FIRST..l_cached_elems_tbl.LAST
5969       LOOP
5970         INSERT INTO CZ_UI_TEMPLATE_ELEMENTS
5971         (
5972         TEMPLATE_ID
5973         ,UI_DEF_ID
5974         ,ELEMENT_TYPE
5975         ,ELEMENT_ID
5976         ,PERSISTENT_ELEMENT_ID
5977         ,DELETED_FLAG
5978         ,SEEDED_FLAG
5979         )
5980         SELECT
5981          p_target_template_id
5982         ,p_target_ui_def_id
5983         ,ELEMENT_TYPE
5984         ,l_cached_elems_tbl(i)
5985         ,l_cached_elems_tbl(i)
5986         ,G_NO_FLAG
5987         ,G_NO_FLAG
5988         FROM CZ_UI_TEMPLATE_ELEMENTS
5989         WHERE template_id=p_source_template_id AND
5990               ui_def_id=p_source_ui_def_id AND
5991               element_id=l_cached_source_elems_tbl(i) AND
5992               deleted_flag=G_NO_FLAG;
5993       END LOOP;
5994     END IF;
5995 
5996   END handle_Template_Attributes;
5997 
5998    PROCEDURE copy_Node_Related_Entities(p_ui_def_id         NUMBER,
5999                                        p_ui_page_id        NUMBER,
6000                                        p_xml_node          xmldom.DOMNode,
6001                                        p_target_ui_def_id  NUMBER DEFAULT NULL,
6002                                        p_source_ui_page_id        NUMBER DEFAULT NULL,
6003                                        p_source_ui_def_id        NUMBER DEFAULT NULL) IS
6004 
6005     l_user_attribute_value VARCHAR2(4000);
6006     l_element_id           VARCHAR2(255);
6007     l_target_ui_def_id     NUMBER;
6008     l_source_ui_page_id     NUMBER;
6009     l_source_ui_def_id      Number;
6010 
6011   BEGIN
6012 
6013     IF p_target_ui_def_id IS NULL THEN
6014       l_target_ui_def_id := p_ui_def_id;
6015     ELSE
6016       l_target_ui_def_id := p_target_ui_def_id;
6017     END IF;
6018 
6019     IF p_source_ui_def_id IS NULL THEN
6020       l_source_ui_def_id := p_ui_def_id;
6021     ELSE
6022       l_source_ui_def_id := p_source_ui_def_id;
6023     END IF;
6024 
6025     if p_source_ui_page_id IS NULL THEN
6026       l_source_ui_page_id := p_ui_page_id;
6027     ELSE
6028       l_source_ui_page_id := p_source_ui_page_id;
6029     END IF;
6030 
6031     l_element_id := get_Attribute_Value(p_xml_node, G_ID_ATTRIBUTE);
6032 
6033     l_user_attribute_value := get_Attribute_Value(p_xml_node, G_USER_ATTRIBUTE3_NAME);
6034 
6035     IF l_user_attribute_value IS NOT NULL THEN
6036       handle_User_Attributes
6037       (px_user_attribute_value => l_user_attribute_value,
6038        p_source_ui_def_id      => l_source_ui_def_id,
6039        p_source_ui_page_id     => l_source_ui_page_id,
6040        p_target_ui_def_id      => l_target_ui_def_id,
6041        p_target_ui_page_id     => p_ui_page_id,
6042        p_new_element_id        => l_element_id,
6043        p_xml_node              => p_xml_node);
6044 
6045        set_Attribute(p_xml_node,
6046                      G_USER_ATTRIBUTE3_NAME,
6047                      l_user_attribute_value);
6048     END IF;
6049 
6050   END copy_Node_Related_Entities;
6051 
6052 
6053   PROCEDURE handle_UI_CASE_Id(p_xml_node xmldom.DOMNode) IS
6054     l_user_attribute4  VARCHAR2(4000);
6055   BEGIN
6056     IF xmldom.getNodeName(p_xml_node)='ui:case' THEN
6057 
6058       l_user_attribute4 := get_Attribute_Value(p_xml_node,
6059                                                G_USER_ATTRIBUTE4_NAME);
6060       IF l_user_attribute4 IS NOT NULL THEN
6061         set_User_Attribute(p_cz_attribute_name    => 'caseId',
6062                            p_cz_attribute_value   => get_Element_Id(),
6063                            px_xml_attribute_value => l_user_attribute4);
6064 
6065         set_Attribute(p_xml_node,G_USER_ATTRIBUTE4_NAME,l_user_attribute4);
6066 
6067       END IF;
6068     END IF;
6069   END handle_UI_CASE_Id;
6070 
6071    PROCEDURE handle_USER_ATTRIBUTE10
6072    (p_xml_root_node xmldom.DOMNode,
6073     p_ui_def_id     NUMBER,
6074     p_ui_page_id    NUMBER,
6075     p_ui_element_id VARCHAR2) IS
6076 
6077      l_user_attribute3_value  VARCHAR2(4000);
6078      l_user_attribute10_value VARCHAR2(4000);
6079      l_refenabledCondnId      VARCHAR2(255);
6080      l_refenabledCondnComp    VARCHAR2(255);
6081      l_refenabledCondnValue   VARCHAR2(255);
6082      l_new_refenabledCondnId  NUMBER;
6083      l_refdisplayCondnId      VARCHAR2(255);
6084      l_refdisplayCondnComp    VARCHAR2(255);
6085      l_refdisplayCondnValue   VARCHAR2(255);
6086      l_new_refdisplayCondnId  NUMBER;
6087 
6088    BEGIN
6089 
6090      l_user_attribute3_value := get_Attribute_Value(p_xml_root_node,
6091                                                     G_USER_ATTRIBUTE3_NAME);
6092 
6093      IF INSTR(l_user_attribute3_value,'enabledCondnId=')=0 THEN
6094 
6095        l_user_attribute10_value := get_Attribute_Value(p_xml_root_node, G_USER_ATTRIBUTE10_NAME);
6096 
6097        IF INSTR(l_user_attribute10_value,'refenabledCondnId')>0 THEN
6098          l_refenabledCondnId    := get_User_Attribute(l_user_attribute10_value, 'refenabledCondnId');
6099          l_refenabledCondnComp  := get_User_Attribute(l_user_attribute10_value, 'refenabledCondnComp');
6100          l_refenabledCondnValue := get_User_Attribute(l_user_attribute10_value, 'refenabledCondnValue');
6101 
6102          copy_UI_Rule(p_rule_id       => TO_NUMBER(l_refenabledCondnId),
6103                       x_rule_id       => l_new_refenabledCondnId,
6104                       p_ui_def_id     => p_ui_def_id,
6105                       p_ui_page_id    => p_ui_page_id,
6106                       p_ui_element_id => p_ui_element_id,
6107                       p_source_ui_def_id => p_ui_def_id);
6108 
6109          l_user_attribute3_value := l_user_attribute3_value||'|enabledCondnId='||TO_CHAR(l_new_refenabledCondnId)||
6110              '|enabledCondnComp=' || l_refenabledCondnComp || '|enabledCondnValue='||l_refenabledCondnValue;
6111 
6112          xmldom.removeAttribute(xmldom.makeElement(p_xml_root_node), G_USER_ATTRIBUTE10_NAME);
6113          set_Attribute(p_xml_root_node,G_USER_ATTRIBUTE3_NAME,l_user_attribute3_value);
6114 
6115        END IF;  -- end of IF INSTR(l_user_attribute10_value,'refenabledCondnId')>0
6116 
6117      END IF; -- end of IF INSTR(l_user_attribute3_value,'enabledCondnId=')=0
6118 
6119      IF INSTR(l_user_attribute3_value,'displayCondnId=')=0 THEN
6120        IF INSTR(l_user_attribute10_value,'refdisplayCondnId')>0 THEN
6121          l_refdisplayCondnId    := get_User_Attribute(l_user_attribute10_value, 'refdisplayCondnId');
6122          l_refdisplayCondnComp  := get_User_Attribute(l_user_attribute10_value, 'refdisplayCondnComp');
6123          l_refdisplayCondnValue := get_User_Attribute(l_user_attribute10_value, 'refdisplayCondnValue');
6124 
6125 
6126          copy_UI_Rule(p_rule_id          => TO_NUMBER(l_refdisplayCondnId),
6127                       x_rule_id          => l_new_refdisplayCondnId,
6128                       p_ui_def_id        => p_ui_def_id,
6129                       p_ui_page_id       => p_ui_page_id,
6130                       p_ui_element_id    => p_ui_element_id,
6131                       p_source_ui_def_id => p_ui_def_id);
6132 
6133          l_user_attribute3_value := l_user_attribute3_value||'|displayCondnId='||TO_CHAR(l_new_refdisplayCondnId)||
6134            '|displayCondnComp=' || l_refdisplayCondnComp || '|displayCondnValue='||l_refdisplayCondnValue;
6135          xmldom.removeAttribute(xmldom.makeElement(p_xml_root_node), G_USER_ATTRIBUTE10_NAME);
6136          set_Attribute(p_xml_root_node,G_USER_ATTRIBUTE3_NAME,l_user_attribute3_value);
6137 
6138        END IF;  -- end of IF INSTR(l_user_attribute10_value,'refdisplayCondnId')>0
6139 
6140      END IF; -- end of IF INSTR(l_user_attribute10_value,'refdisplayCondnId')>0
6141 
6142   END handle_USER_ATTRIBUTE10;
6143 
6144   PROCEDURE create_wrapper_table_layout(x_xml_table_node          OUT NOCOPY xmldom.DOMNode,
6145                                         x_xml_tabuicontent_node   OUT NOCOPY xmldom.DOMNode,
6146                                         p_target_subtree_xml_node xmldom.DOMNode) IS
6147 
6148     l_doc                   xmldom.DOMDocument;
6149     l_xml_table_node        xmldom.DOMNode;
6150 
6151   BEGIN
6152     l_doc := parse_JRAD_Document(G_TABLELAYOUT_TEMPLATE);
6153 
6154     l_xml_table_node :=xmldom.makeNode(xmldom.getDocumentElement(l_doc));
6155 
6156     remove_TopLevel_Attributes(l_xml_table_node);
6157 
6158     --x_xml_table_node := xmldom.cloneNode(l_xml_table_node,TRUE);
6159     x_xml_table_node := cloneNode(l_xml_table_node, p_target_subtree_xml_node);
6160 
6161     set_Attribute(xmldom.makeElement(x_xml_table_node),G_ID_ATTRIBUTE,get_Element_Id());
6162     set_Attribute(xmldom.makeElement(x_xml_table_node),G_USER_ATTRIBUTE5_NAME,'TABLELAYOUT_FOR_UI_GEN');
6163 
6164     x_xml_tabuicontent_node := getUIContents(x_xml_table_node);
6165 
6166   END create_wrapper_table_layout;
6167 
6168   FUNCTION insert_before(p_parent_xml_node  IN xmldom.DOMNode,
6169                          p_new_xml_node     IN xmldom.DOMNode,
6170              p_ref_xml_node     IN xmldom.DOMNode)
6171     RETURN xmldom.DOMNode IS
6172   l_new_xml_node xmldom.DOMNode;
6173   BEGIN
6174 
6175     IF xmldom.isNull(p_ref_xml_node) THEN
6176       l_new_xml_node := xmldom.appendChild(p_parent_xml_node, p_new_xml_node);
6177     ELSE
6178     l_new_xml_node := xmldom.insertBefore(p_parent_xml_node, p_new_xml_node, p_ref_xml_node);
6179   END IF;
6180 
6181     return l_new_xml_node;
6182   END insert_before;
6183 
6184   FUNCTION insert_node(p_ui_node             IN CZ_UI_PAGE_ELEMENTS%ROWTYPE,
6185                        p_new_xml_node        IN xmldom.DOMNode,
6186                        p_parent_xml_node     IN xmldom.DOMNode)
6187    RETURN xmldom.DOMNode IS
6188 
6189   l_node                  CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE;
6190     l_doc                   xmldom.DOMDocument;
6191     l_anchor_doc            xmldom.DOMDocument;
6192     l_subtree_doc           xmldom.DOMDocument;
6193     l_xml_root_node         xmldom.DOMNode;
6194     l_new_xml_root_node     xmldom.DOMNode;
6195     l_out_xml_node          xmldom.DOMNode;
6196     l_xml_table_node        xmldom.DOMNode;
6197     l_new_xml_table_node    xmldom.DOMNode;
6198     l_xml_anchor_node       xmldom.DOMNode;
6199     l_new_xml_anchor_node   xmldom.DOMNode;
6200     l_xml_node              xmldom.DOMNode;
6201     l_xml_tabuicontent_node xmldom.DOMNode;
6202     l_ui_contents_xml_node  xmldom.DOMNode;
6203     l_prev_node             xmldom.DOMNode;
6204     l_next_node             xmldom.DOMNode;
6205     l_prev_node_parent      xmldom.DOMNode;
6206     l_next_node_parent      xmldom.DOMNode;
6207     l_prev_node_parent_ui_cnt    xmldom.DOMNode;
6208     l_next_node_parent_ui_cnt    xmldom.DOMNode;
6209     l_grand_parent          xmldom.DOMNode;
6210     l_next_sibling_of_parent xmldom.DOMNode;
6211     l_child_nodes_tbl       xmldom.DOMNodeList;
6212     l_attribute_value       VARCHAR2(4000);
6213     l_attribute_source      VARCHAR2(4000);
6214     l_user_attribute        VARCHAR2(4000);
6215     l_user_attribute4       VARCHAR2(4000);
6216     l_prev_element_id       VARCHAR2(255);
6217     l_next_element_id       VARCHAR2(255);
6218     l_prev_element_template_id NUMBER;
6219     l_next_element_template_id NUMBER;
6220     l_prev_elt_lyt_ui_style VARCHAR2(1);
6221     l_next_elt_lyt_ui_style VARCHAR2(1);
6222     l_lyt_ui_style          VARCHAR2(1);
6223     l_old_ui_element_id     VARCHAR2(255);
6224     l_new_ui_element_id     VARCHAR2(255);
6225     l_switcher_element_id   VARCHAR2(255);
6226     l_user_attribute3_value VARCHAR2(4000);
6227     l_switcher_casename     VARCHAR2(255);
6228     l_length                NUMBER;
6229     l_ui_action_id          NUMBER;
6230     l_element_signature_id  NUMBER;
6231     l_wrap_it               BOOLEAN;
6232     l_drilldown_text_id     NUMBER;
6233     l_wrap_with_links       BOOLEAN := FALSE;
6234     l_template_is_used_by_ref BOOLEAN := TRUE;
6235 
6236   BEGIN
6237 
6238 
6239     l_node := get_Model_Node_By_Persist_Id(p_ui_node.persistent_node_id,g_UI_Context.devl_project_id);
6240     l_new_xml_root_node := p_new_xml_node;
6241 
6242   --DEBUG('asp:insert_node ' || l_node.name);
6243 
6244     BEGIN
6245 
6246       SELECT element_id, ctrl_template_id INTO l_prev_element_id, l_prev_element_template_id
6247       FROM CZ_UI_PAGE_ELEMENTS
6248       WHERE ui_def_id=p_ui_node.ui_def_id AND
6249             page_id = p_ui_node.page_id AND
6250             parent_element_id = p_ui_node.parent_element_id AND
6251             deleted_flag NOT IN (G_YES_FLAG, G_LIMBO_FLAG) AND
6252             seq_nbr = (SELECT max(seq_nbr)
6253                        FROM CZ_UI_PAGE_ELEMENTS
6254                        WHERE ui_def_id=p_ui_node.ui_def_id AND
6255                              page_id = p_ui_node.page_id AND
6256                              parent_element_id = p_ui_node.parent_element_id AND
6257                              seq_nbr<p_ui_node.seq_nbr AND
6258                              deleted_flag NOT IN (G_YES_FLAG, G_LIMBO_FLAG) AND
6259                              NOT (element_type = G_UI_DRILLDOWN_NODE_TYPE AND
6260                                   ctrl_template_id IS NULL) AND
6261                              NOT (element_signature_id IS NULL AND ctrl_template_id IS NULL))
6262             AND rownum < 2;
6263 
6264     EXCEPTION
6265       WHEN NO_DATA_FOUND THEN
6266            NULL;
6267     END;
6268 
6269     --DEBUG('asp:Here 1');
6270 
6271     BEGIN
6272       SELECT element_id, ctrl_template_id INTO l_next_element_id, l_next_element_template_id
6273       FROM CZ_UI_PAGE_ELEMENTS
6274       WHERE ui_def_id=p_ui_node.ui_def_id AND
6275             page_id = p_ui_node.page_id AND
6276             parent_element_id = p_ui_node.parent_element_id AND
6277             deleted_flag NOT IN (G_YES_FLAG, G_LIMBO_FLAG, G_MARK_TO_DELETE) AND
6278             seq_nbr = ( SELECT min(seq_nbr)
6279                         FROM CZ_UI_PAGE_ELEMENTS
6280                         WHERE ui_def_id=p_ui_node.ui_def_id AND
6281                               page_id = p_ui_node.page_id AND
6282                               parent_element_id = p_ui_node.parent_element_id AND
6283                               seq_nbr>p_ui_node.seq_nbr AND
6284                               deleted_flag NOT IN (G_YES_FLAG, G_LIMBO_FLAG, G_MARK_TO_DELETE, G_MARK_TO_ADD, G_MARK_TO_MOVE) AND
6285                               NOT (element_type = G_UI_DRILLDOWN_NODE_TYPE AND
6286                                    ctrl_template_id IS NULL) AND
6287                               NOT (element_signature_id IS NULL AND ctrl_template_id IS NULL))
6288             AND rownum < 2;
6289 
6290     EXCEPTION
6291       WHEN NO_DATA_FOUND THEN
6292            NULL;
6293     END;
6294 
6295     --DEBUG('Here 2');
6296 
6297   IF l_prev_element_id IS NOT NULL THEN
6298     l_prev_node := g_dom_elements_tbl(TO_NUMBER(l_prev_element_id));
6299 
6300     l_prev_node_parent_ui_cnt := xmldom.getParentNode(l_prev_node);
6301     l_prev_node_parent := xmldom.getParentNode(l_prev_node_parent_ui_cnt);
6302     BEGIN
6303         SELECT layout_ui_style INTO l_prev_elt_lyt_ui_style
6304       FROM CZ_UI_TEMPLATES
6305       WHERE template_id = l_prev_element_template_id
6306       AND ui_def_id = 0
6307     AND deleted_flag = G_NO_FLAG;
6308 
6309     EXCEPTION
6310       WHEN NO_DATA_FOUND THEN
6311       NULL;
6312     END;
6313   END IF;
6314 
6315   --DEBUG('Here 3');
6316 
6317   IF l_next_element_id IS NOT NULL THEN
6318     l_next_node := g_dom_elements_tbl(TO_NUMBER(l_next_element_id));
6319     l_next_node_parent_ui_cnt := xmldom.getParentNode(l_next_node);
6320     l_next_node_parent := xmldom.getParentNode(l_next_node_parent_ui_cnt);
6321     BEGIN
6322         SELECT layout_ui_style INTO l_next_elt_lyt_ui_style
6323       FROM CZ_UI_TEMPLATES
6324       WHERE template_id = l_next_element_template_id
6325       AND ui_def_id = 0
6326     AND deleted_flag = G_NO_FLAG;
6327 
6328     EXCEPTION
6329       WHEN NO_DATA_FOUND THEN
6330       NULL;
6331     END;
6332   END IF;
6333 
6334   --DEBUG('Here 4');
6335 
6336   IF p_ui_node.ctrl_template_id IS NOT NULL THEN
6337 
6338     SELECT layout_ui_style INTO l_lyt_ui_style
6339   FROM CZ_UI_TEMPLATES
6340   WHERE template_id = p_ui_node.ctrl_template_id
6341     AND ui_def_id = 0
6342     AND deleted_flag = G_NO_FLAG;
6343 
6344     IF l_lyt_ui_style = G_LABEL_PAIR_LAYOUT_STYLE THEN
6345       l_wrap_it := TRUE;
6346   ELSE
6347     l_wrap_it := FALSE;
6348     END IF;
6349   END IF;
6350 
6351   --DEBUG('Here 5');
6352 
6353   IF l_prev_element_id IS NOT NULL
6354         OR l_next_element_id IS NOT NULL THEN
6355       IF l_wrap_it THEN
6356         IF l_prev_element_id IS NOT NULL AND
6357           NVL(l_prev_elt_lyt_ui_style, G_OTHER_LAYOUT_STYLE) = G_LABEL_PAIR_LAYOUT_STYLE THEN
6358             l_next_node := xmldom.getNextSibling(l_prev_node);
6359         l_new_xml_root_node := insert_before(l_prev_node_parent_ui_cnt, l_new_xml_root_node, l_next_node);
6360         ELSIF l_next_element_id IS NOT NULL AND
6361              NVL(l_next_elt_lyt_ui_style, G_OTHER_LAYOUT_STYLE) = G_LABEL_PAIR_LAYOUT_STYLE THEN
6362           l_new_xml_root_node := insert_before(l_next_node_parent_ui_cnt, l_new_xml_root_node, l_next_node);
6363         ELSE
6364           create_wrapper_table_layout(l_xml_table_node, l_xml_tabuicontent_node, p_parent_xml_node);
6365           l_new_xml_root_node := xmldom.appendChild(l_xml_tabuicontent_node, l_new_xml_root_node);
6366           IF l_prev_element_id IS NOT NULL THEN
6367             l_next_node := xmldom.getNextSibling(l_prev_node);
6368             l_xml_table_node := insert_before(l_prev_node_parent_ui_cnt, l_xml_table_node, l_next_node);
6369           ELSIF l_next_element_id IS NOT NULL THEN
6370             l_xml_table_node := insert_before(l_next_node_parent_ui_cnt, l_xml_table_node, l_next_node);
6371           ELSE
6372             l_ui_contents_xml_node := getUIContents(p_parent_xml_node);
6373             l_xml_table_node := xmldom.appendChild(l_ui_contents_xml_node, l_xml_table_node);
6374           END IF;
6375         END IF;
6376       ELSE -- new element is not LABEL_DATA_PAIR
6377 
6378         IF l_prev_element_id IS NOT NULL AND l_next_element_id IS NOT NULL AND
6379         NVL(l_prev_elt_lyt_ui_style, G_OTHER_LAYOUT_STYLE) = G_LABEL_PAIR_LAYOUT_STYLE AND
6380       NVL(l_next_elt_lyt_ui_style, G_OTHER_LAYOUT_STYLE) = G_LABEL_PAIR_LAYOUT_STYLE THEN
6381 
6382 
6383           IF get_Attribute_Value(l_prev_node_parent, G_ID_ATTRIBUTE) = get_Attribute_Value(l_next_node_parent, G_ID_ATTRIBUTE) THEN
6384             IF xmldom.getNodeName(l_prev_node_parent) = 'oa:tableLayout' THEN
6385               l_grand_parent := xmldom.getParentNode(l_prev_node_parent);
6386               create_wrapper_table_layout(l_xml_table_node, l_xml_tabuicontent_node,  p_parent_xml_node);
6387               l_next_sibling_of_parent := xmldom.getNextSibling(l_prev_node_parent);
6388               l_xml_table_node := insert_before(l_grand_parent, l_xml_table_node, l_next_sibling_of_parent);
6389               l_next_node := xmldom.removeChild(l_prev_node_parent_ui_cnt, l_next_node);
6390               l_next_node := xmldom.appendChild(l_xml_tabuicontent_node, l_next_node);
6391               l_next_node := l_xml_table_node;
6392             END IF;
6393             l_next_node := xmldom.insertBefore(l_grand_parent, l_new_xml_root_node, l_next_node);
6394           ELSE
6395             l_grand_parent := xmldom.getParentNode(l_prev_node_parent);
6396             l_next_sibling_of_parent := xmldom.getNextSibling(l_prev_node_parent);
6397             l_new_xml_root_node := insert_before(l_grand_parent, l_new_xml_root_node, l_next_sibling_of_parent);
6398           END IF;
6399         ELSIF l_prev_element_id IS NOT NULL AND NVL(l_prev_elt_lyt_ui_style, G_OTHER_LAYOUT_STYLE) <> G_LABEL_PAIR_LAYOUT_STYLE THEN
6400           l_next_node := xmldom.getNextSibling(l_prev_node);
6401           l_new_xml_root_node := insert_before(l_prev_node_parent_ui_cnt, l_new_xml_root_node, l_next_node);
6402         ELSIF l_next_element_id IS NOT NULL AND
6403           NVL(l_next_elt_lyt_ui_style, G_OTHER_LAYOUT_STYLE) <> G_LABEL_PAIR_LAYOUT_STYLE THEN
6404           l_new_xml_root_node := insert_before(l_next_node_parent_ui_cnt, l_new_xml_root_node, l_next_node);
6405         ELSIF l_prev_element_id IS NOT NULL THEN
6406           l_grand_parent := xmldom.getParentNode(l_prev_node_parent);
6407           l_next_sibling_of_parent := xmldom.getNextSibling(l_prev_node_parent);
6408           l_new_xml_root_node := insert_before(l_grand_parent, l_new_xml_root_node, l_next_sibling_of_parent);
6409         ELSE
6410           l_grand_parent := xmldom.getParentNode(l_next_node_parent);
6411           l_new_xml_root_node := insert_before(l_grand_parent, l_new_xml_root_node, l_next_node_parent);
6412     END IF;
6413       END IF;
6414   ELSE
6415     -- If neither prev_element and next_element is found
6416     -- Insert at the end
6417       --DEBUG('asp:Append at the end');
6418 
6419    IF l_wrap_it THEN
6420        l_ui_contents_xml_node := getUIContents(p_parent_xml_node);
6421        create_wrapper_table_layout(l_xml_table_node, l_xml_tabuicontent_node, p_parent_xml_node);
6422        l_xml_table_node := xmldom.appendChild(l_ui_contents_xml_node, l_xml_table_node);
6423        l_new_xml_root_node := xmldom.appendChild(l_xml_tabuicontent_node, l_new_xml_root_node);
6424      ELSE
6425        l_ui_contents_xml_node := getUIContents(p_parent_xml_node);
6426        l_new_xml_root_node := xmldom.appendChild(l_ui_contents_xml_node, l_new_xml_root_node);
6427      END IF;
6428   END IF;
6429 
6430   g_dom_elements_tbl(TO_NUMBER(p_ui_node.element_id)) := l_new_xml_root_node;
6431   RETURN l_new_xml_root_node;
6432 
6433   END insert_node;
6434 
6435   FUNCTION pluck_XML_node(p_jrad_doc    CZ_UI_TEMPLATES.jrad_doc%TYPE,
6436                           p_page_id     NUMBER,
6437                           p_element_id  VARCHAR2)
6438     RETURN xmldom.DOMNode IS
6439 
6440   l_xml_node_to_pluck  xmldom.DOMNode;
6441   l_parent_xml_node    xmldom.DOMNode;
6442   l_subtree_doc        xmldom.DOMDocument;
6443   l_element_id         NUMBER;
6444 
6445   BEGIN
6446 
6447     l_element_id := TO_NUMBER(p_element_id);
6448 
6449     IF g_dom_elements_to_move.EXISTS(l_element_id) THEN
6450       l_xml_node_to_pluck := g_dom_elements_to_move(l_element_id);
6451 
6452     ELSE
6453       l_subtree_doc := parse_JRAD_Document(p_jrad_doc);
6454 
6455       l_xml_node_to_pluck := find_XML_Node_By_Attribute(l_subtree_doc,
6456                                                         G_ID_ATTRIBUTE,
6457                                                         p_element_id,
6458                                                         G_NO_FLAG);
6459 
6460       l_parent_xml_node := xmldom.getParentNode(l_xml_node_to_pluck);
6461 
6462       l_xml_node_to_pluck := xmldom.removeChild(l_parent_xml_node, l_xml_node_to_pluck);
6463 
6464       Save_Document(l_subtree_doc, p_jrad_doc);
6465     END IF;
6466 
6467     RETURN l_xml_node_to_pluck;
6468 
6469   END pluck_XML_node;
6470 
6471 
6472   FUNCTION move_XML_Node(p_ui_node             IN CZ_UI_PAGE_ELEMENTS%ROWTYPE,
6473                          p_parent_xml_node     xmldom.DOMNode)
6474   RETURN xmldom.DOMNode IS
6475 
6476   l_src_page_id        NUMBER;
6477   l_xml_node_to_move   xmldom.DOMNode;
6478     l_jrad_doc           CZ_UI_TEMPLATES.jrad_doc%TYPE;
6479   l_counter            NUMBER;
6480   l_element_ids_tbl    varchar2_tbl_type;
6481   l_id                 VARCHAR2(255);
6482   l_component_id       NUMBER;
6483   l_old_component_id   NUMBER;
6484 
6485   BEGIN
6486 
6487   l_src_page_id := g_tgt_pg_to_src_pg_map(p_ui_node.page_id)(TO_NUMBER(p_ui_node.element_id));
6488 
6489   SELECT jrad_doc INTO l_jrad_doc
6490     FROM CZ_UI_PAGES
6491     WHERE ui_def_id= g_UI_Context.ui_def_id AND
6492           page_id=l_src_page_id;
6493 
6494   l_xml_node_to_move := pluck_XML_node(l_jrad_doc, l_src_page_id, p_ui_node.element_id);
6495   l_xml_node_to_move := cloneNode(l_xml_node_to_move, p_parent_xml_node);
6496 
6497   l_counter := -1;
6498   resolve_view_names(l_xml_node_to_move, p_ui_node.page_id, l_counter, l_element_ids_tbl);
6499 
6500 
6501   SELECT ps_node_id INTO l_component_id
6502     FROM CZ_PS_NODES
6503    WHERE devl_project_id = g_UI_Context.devl_project_id
6504      AND persistent_node_Id = p_ui_node.pagebase_persistent_node_id;
6505 
6506   SELECT ps_node_id INTO l_old_component_id
6507     FROM CZ_PS_NODES
6508    WHERE devl_project_id = g_UI_Context.devl_project_id
6509      AND persistent_node_id = (SELECT persistent_node_id
6510                                  FROM CZ_UI_PAGES
6511                                 WHERE ui_def_id = g_UI_Context.ui_Def_id
6512                                   AND page_id = l_src_page_id);
6513 
6514 
6515 
6516   FOR i in (SELECT rule_id, ui_page_element_id
6517               FROM CZ_RULES
6518              WHERE devl_project_id = g_UI_Context.devl_project_id
6519                AND ui_def_id = g_UI_Context.ui_def_id
6520                AND ui_page_id = l_src_page_id
6521                AND component_id = l_old_component_id
6522                AND deleted_flag = G_NO_FLAG)
6523   LOOP
6524     DEBUG('asp: Found rule ' || i.rule_id || ', for element ' || i.ui_page_element_Id);
6525     IF l_element_ids_tbl.EXISTS(i.ui_page_element_id) THEN
6526       DEBUG('asp: Updating rule ' || i.rule_id || ' for element_id ' || i.ui_page_element_id);
6527       UPDATE CZ_RULES
6528          SET component_id = l_component_id,
6529              ui_page_id = p_ui_node.page_id
6530        WHERE devl_project_id = g_UI_Context.devl_project_id
6531          AND rule_id = i.rule_id;
6532     END IF;
6533   END LOOP;
6534 
6535   FOR i in (SELECT intl_text_id, ui_page_element_id
6536               FROM CZ_INTL_TEXTS
6537              WHERE model_id = g_UI_Context.devl_project_id
6538                AND ui_def_id = g_UI_Context.ui_def_id
6539                AND ui_page_id = l_src_page_id
6540                AND deleted_flag = G_NO_FLAG)
6541   LOOP
6542     IF l_element_ids_tbl.EXISTS(i.ui_page_element_id) THEN
6543       DEBUG('asp: Updating intl_text ' || i.intl_text_id || ' for element_id ' || i.ui_page_element_id);
6544       UPDATE CZ_LOCALIZED_TEXTS
6545          SET ui_page_id = p_ui_node.page_id
6546        WHERE intl_text_id = i.intl_text_id;
6547     END IF;
6548   END LOOP;
6549   l_xml_node_to_move := insert_node(p_ui_node, l_xml_node_to_move, p_parent_xml_node);
6550 
6551   RETURN l_xml_node_to_move;
6552 
6553   END move_XML_Node;
6554 
6555   --
6556   -- replace numeric suffix at the end of p_jrad_id with p_root_jrad_id
6557   -- if there is no numeric suffix then it just adds '_'||p_root_jrad_id to p_jrad_id
6558   -- Ex. : if  p_jrad_id="_czabcd_100" and p_root_jrad_id="12345"
6559   -- then function will return "_czabcd_12345"
6560   --
6561   FUNCTION handle_JRAD_Id(p_jrad_id      IN VARCHAR2,
6562                           p_root_jrad_id IN VARCHAR2) RETURN VARCHAR2 IS
6563     l_ind      NUMBER;
6564     l_num      NUMBER;
6565     l_jrad_id  VARCHAR2(4000);
6566     l_next_str VARCHAR2(4000);
6567   BEGIN
6568     l_jrad_id := p_jrad_id;
6569     l_ind := INSTR(l_jrad_id,'_');
6570     LOOP
6571       l_next_str := SUBSTR(l_jrad_id,l_ind+1);
6572       l_ind := INSTR(l_next_str,'_');
6573       IF l_ind=0 THEN
6574         BEGIN
6575           l_num     := TO_NUMBER(l_next_str);
6576           l_jrad_id := REPLACE(p_jrad_id,l_next_str,p_root_jrad_id);
6577           RETURN l_jrad_id;
6578         EXCEPTION
6579           WHEN OTHERS THEN
6580             RETURN p_jrad_id||'_'||p_root_jrad_id;
6581         END;
6582       ELSE
6583         l_jrad_id:= l_next_str;
6584       END IF;
6585     END LOOP;
6586   END handle_JRAD_Id;
6587 
6588   FUNCTION create_UIXML_Element_new(p_ui_node             IN CZ_UI_PAGE_ELEMENTS%ROWTYPE,
6589                                     p_parent_xml_node     xmldom.DOMNode)
6590     RETURN xmldom.DOMNode IS
6591 
6592     l_node                       CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE;
6593     l_ctrl_template_name         CZ_UI_TEMPLATES.template_name%TYPE;
6594     l_doc                        xmldom.DOMDocument;
6595     l_anchor_doc                 xmldom.DOMDocument;
6596     l_subtree_doc                xmldom.DOMDocument;
6597     l_xml_root_node              xmldom.DOMNode;
6598     l_new_xml_root_node          xmldom.DOMNode;
6599     l_out_xml_node               xmldom.DOMNode;
6600     l_xml_table_node             xmldom.DOMNode;
6601     l_new_xml_table_node         xmldom.DOMNode;
6602     l_xml_anchor_node            xmldom.DOMNode;
6603     l_new_xml_anchor_node        xmldom.DOMNode;
6604     l_xml_node                   xmldom.DOMNode;
6605     l_xml_tabuicontent_node      xmldom.DOMNode;
6606     l_ui_contents_xml_node       xmldom.DOMNode;
6607     l_prev_node                  xmldom.DOMNode;
6608     l_next_node                  xmldom.DOMNode;
6609     l_prev_node_parent           xmldom.DOMNode;
6610     l_next_node_parent           xmldom.DOMNode;
6611     l_prev_node_parent_ui_cnt    xmldom.DOMNode;
6612     l_next_node_parent_ui_cnt    xmldom.DOMNode;
6613     l_grand_parent               xmldom.DOMNode;
6614     l_next_sibling_of_parent     xmldom.DOMNode;
6615 
6616     l_curr_parent_xml_node  xmldom.DOMNode;
6617     l_xml_node_name         VARCHAR2(255);
6618     l_new_attribute_value   VARCHAR2(255);
6619 
6620     l_child_nodes_tbl            xmldom.DOMNodeList;
6621     l_attribute_value            VARCHAR2(4000);
6622     l_attribute_source           VARCHAR2(4000);
6623     l_user_attribute             VARCHAR2(4000);
6624     l_user_attribute4            VARCHAR2(4000);
6625     l_prev_element_id            VARCHAR2(255);
6626     l_next_element_id            VARCHAR2(255);
6627     l_jrad_doc                   VARCHAR2(255);
6628     l_ancestor_node              VARCHAR2(255);
6629     l_hgrid_element_id           VARCHAR2(255);
6630     l_old_switcher_xml_id        VARCHAR2(255);
6631     l_prev_element_template_id   NUMBER;
6632     l_next_element_template_id   NUMBER;
6633     l_prev_elt_lyt_ui_style      VARCHAR2(1);
6634     l_next_elt_lyt_ui_style      VARCHAR2(1);
6635     l_old_ui_element_id          VARCHAR2(255);
6636     l_new_ui_element_id          VARCHAR2(255);
6637     l_switcher_element_id        VARCHAR2(255);
6638     l_user_attribute3_value      VARCHAR2(4000);
6639     l_switcher_casename          VARCHAR2(255);
6640     l_switcher_xml_id            VARCHAR2(255);
6641     l_uicase_name                VARCHAR2(255);
6642     l_length                     NUMBER;
6643     l_ui_action_id               NUMBER;
6644     l_element_signature_id       NUMBER;
6645     l_wrap_it                    BOOLEAN;
6646     l_drilldown_text_id          NUMBER;
6647     l_wrap_with_links            BOOLEAN := FALSE;
6648     l_template_is_used_by_ref    BOOLEAN := TRUE;
6649 
6650   BEGIN
6651     --DEBUG('asp:Create UI XML Element new started...');
6652     IF p_ui_node.ctrl_template_id IS NULL THEN
6653       RETURN l_xml_node;
6654     END IF;
6655 
6656     l_node := get_Model_Node_By_Persist_Id(p_ui_node.persistent_node_id,g_UI_Context.devl_project_id);
6657 
6658     --DEBUG('asp:Create_ui_xml_new ' || l_node.name || ', element_id ' || p_ui_node.element_id);
6659 
6660     l_template_is_used_by_ref := is_Used_By_Reference(l_node.detailed_type_id,p_ui_node.ctrl_template_id);
6661 
6662     BEGIN
6663       SELECT element_id, ctrl_template_id INTO l_prev_element_id, l_prev_element_template_id
6664       FROM CZ_UI_PAGE_ELEMENTS
6665       WHERE ui_def_id=p_ui_node.ui_def_id AND
6666             page_id = p_ui_node.page_id AND
6667             parent_element_id = p_ui_node.parent_element_id AND
6668             deleted_flag NOT IN (G_YES_FLAG, G_LIMBO_FLAG) AND
6669 --jonatara:bug fix7307460
6670      	    NOT (element_type = G_UI_DRILLDOWN_NODE_TYPE AND ctrl_template_id IS NULL) AND
6671      	    NOT (element_signature_id IS NULL AND ctrl_template_id IS NULL ) AND
6672             seq_nbr = (SELECT max(seq_nbr)
6673                        FROM CZ_UI_PAGE_ELEMENTS
6674                        WHERE ui_def_id=p_ui_node.ui_def_id AND
6675                              page_id = p_ui_node.page_id AND
6676                              parent_element_id = p_ui_node.parent_element_id AND
6677                              seq_nbr<p_ui_node.seq_nbr AND
6678                              deleted_flag NOT IN (G_YES_FLAG, G_LIMBO_FLAG) AND
6679                              NOT (element_type = G_UI_DRILLDOWN_NODE_TYPE AND
6680                                   ctrl_template_id IS NULL) AND
6681                              NOT (element_signature_id IS NULL AND ctrl_template_id IS NULL))
6682             AND rownum < 2;
6683 
6684     EXCEPTION
6685       WHEN NO_DATA_FOUND THEN
6686            NULL;
6687     END;
6688 
6689     BEGIN
6690 
6691       SELECT element_id, ctrl_template_id INTO l_next_element_id, l_next_element_template_id
6692       FROM CZ_UI_PAGE_ELEMENTS
6693       WHERE ui_def_id=p_ui_node.ui_def_id AND
6694             page_id = p_ui_node.page_id AND
6695             parent_element_id = p_ui_node.parent_element_id AND
6696             deleted_flag NOT IN (G_YES_FLAG, G_LIMBO_FLAG, G_MARK_TO_DELETE) AND
6697 --jonatara:bug fix7307460
6698 	    NOT (element_type = G_UI_DRILLDOWN_NODE_TYPE AND ctrl_template_id IS NULL) AND
6699 	    NOT (element_signature_id IS NULL AND ctrl_template_id IS NULL) AND
6700             seq_nbr = ( SELECT min(seq_nbr)
6701                         FROM CZ_UI_PAGE_ELEMENTS
6702                         WHERE ui_def_id=p_ui_node.ui_def_id AND
6703                               page_id = p_ui_node.page_id AND
6704                               parent_element_id = p_ui_node.parent_element_id AND
6705                               seq_nbr>p_ui_node.seq_nbr AND
6706                               deleted_flag NOT IN (G_YES_FLAG, G_LIMBO_FLAG, G_MARK_TO_DELETE, G_MARK_TO_ADD, G_MARK_TO_MOVE) AND
6707                               NOT (element_type = G_UI_DRILLDOWN_NODE_TYPE AND
6708                                    ctrl_template_id IS NULL) AND
6709                               NOT (element_signature_id IS NULL AND ctrl_template_id IS NULL))
6710             AND rownum < 2;
6711 
6712 
6713     EXCEPTION
6714       WHEN NO_DATA_FOUND THEN
6715            NULL;
6716     END;
6717 
6718 
6719   -- Now lets get the new element ready for insertion. Once the new node
6720   -- is ready, we will insert it int he appropriate place
6721 
6722     --
6723     -- drilldowns will be handled by special way ( bug #3271034 )
6724     --
6725     IF p_ui_node.ctrl_template_id IN(G_DRILLDOWN_BUTTON_TEMPLATE_ID,G_DRILLDOWN_IMAGE_TEMPLATE_ID,
6726        G_DRILLDOWN_LABEL_TEMPLATE_ID) THEN
6727        IF g_UI_Context.DRILLDOWN_IMAGE_URL IS NOT NULL THEN
6728          l_ctrl_template_name := get_JRAD_Name(p_template_id => G_DRILLDOWN_IMAGE_TEMPLATE_ID);
6729        ELSE
6730          l_ctrl_template_name := get_JRAD_Name(p_template_id => p_ui_node.ctrl_template_id);
6731        END IF;
6732     ELSE
6733        l_ctrl_template_name := get_JRAD_Name(p_template_id => p_ui_node.ctrl_template_id);
6734     END IF;
6735 
6736     --
6737     -- parse document(template) which is going to be nested element
6738     --
6739     l_subtree_doc := parse_JRAD_Document(l_ctrl_template_name);
6740 
6741     IF xmldom.isNull(l_subtree_doc) THEN
6742       add_Error_Message(p_message_name => 'CZ_WRONG_UI_TEMPLATE',
6743                         p_token_name   => 'UI_TEMPLATE',
6744                         p_token_value  => l_ctrl_template_name,
6745                         p_fatal_error  => TRUE);
6746 
6747        RAISE WRONG_UI_TEMPLATE;
6748     END IF;
6749 
6750     --
6751     -- get subdocument's root node
6752     --
6753     l_xml_root_node := xmldom.makeNode(xmldom.getDocumentElement(l_subtree_doc));
6754 
6755     --
6756     -- remove common attributes of container and subtree
6757     --
6758     remove_TopLevel_Attributes(l_xml_root_node);
6759 
6760     IF l_template_is_used_by_ref THEN
6761       l_element_signature_id := 6011;
6762     ELSE
6763       l_element_signature_id := p_ui_node.element_signature_id;
6764     END IF;
6765 
6766 
6767     --
6768     -- set Attributes for this subtree = Template
6769     --
6770     set_Template_Attributes(p_xml_root_node        => l_xml_root_node,
6771                             p_ui_node              => p_ui_node,
6772                             p_element_signature_id => l_element_signature_id);
6773 
6774     --
6775     -- set a special attribute "blockSize" if it is Table control
6776     --
6777     /* commented out according to request from 8/12/2004
6778     IF  xmldom.getNodeName(l_xml_root_node) IN('oa:table') THEN
6779       set_Attribute(l_xml_root_node,
6780                     'blockSize',
6781                     TO_CHAR(g_UI_Context.ROWS_PER_TABLE));
6782     END IF;
6783     */
6784 
6785     --DEBUG('Here 7');
6786     IF l_template_is_used_by_ref THEN
6787 
6788       --
6789       -- returns cloned DOM subtree
6790       --
6791       --l_new_xml_root_node := xmldom.cloneNode(l_xml_root_node,TRUE);
6792       l_new_xml_root_node := cloneNode(l_xml_root_node, p_parent_xml_node);
6793 
6794       --DEBUG('asp:Adding ' || p_ui_node.element_id || ' to table');
6795       g_dom_elements_tbl(TO_NUMBER(p_ui_node.element_id)) := l_new_xml_root_node;
6796       --
6797       -- remove non user attributes from top tag
6798       --
6799       remove_Non_User_Attributes(l_new_xml_root_node);
6800 
6801       --
6802       -- set "extends" attribute
6803       --
6804       xmldom.setAttribute(xmldom.makeElement(l_new_xml_root_node),'extends',l_ctrl_template_name);
6805 
6806       --
6807       -- remove content of template subtree
6808       --
6809       l_child_nodes_tbl:=xmldom.getChildNodes(l_new_xml_root_node);
6810 
6811       --
6812       -- we need to get length of array of child nodes
6813       -- to go through the array in loop
6814       --
6815       l_length := xmldom.getLength(l_child_nodes_tbl);
6816       FOR k IN 0..l_length-1
6817       LOOP
6818         --
6819         -- get next child DOM node
6820         --
6821         l_xml_node := xmldom.item(l_child_nodes_tbl, k);
6822         l_out_xml_node:=xmldom.removeChild(l_new_xml_root_node,l_xml_node);
6823       END LOOP;
6824 
6825     ELSE -- use UI Template by Copy
6826 
6827       l_child_nodes_tbl := xmldom.getElementsByTagName(l_subtree_doc, '*');
6828 
6829       l_length := xmldom.getLength(l_child_nodes_tbl);
6830       IF (l_length > 0) THEN
6831         FOR k IN 0..l_length-1
6832         LOOP
6833           --
6834           -- get next child DOM node
6835           --
6836           l_xml_node := xmldom.item(l_child_nodes_tbl, k);
6837 
6838           l_curr_parent_xml_node := xmldom.getParentNode(l_xml_node);
6839 
6840           IF k > 0 THEN
6841             l_attribute_value := get_Attribute_Value(l_xml_node, G_ID_ATTRIBUTE);
6842 
6843             l_xml_node_name := xmldom.getNodeName(l_xml_node);
6844 
6845             IF l_attribute_value IS NOT NULL THEN
6846               l_new_attribute_value := handle_JRAD_Id(l_attribute_value,p_ui_node.element_id);
6847               l_new_attribute_value := REPLACE(REPLACE(l_new_attribute_value,'_czt','_czn'), '_czc','_czn');
6848               set_Attribute(xmldom.makeElement(l_xml_node),G_ID_ATTRIBUTE, l_new_attribute_value);
6849             END IF;
6850 
6851             l_ancestor_node := get_Attribute_Value(l_xml_node,
6852                                                    'ancestorNode');
6853             IF l_ancestor_node IS NOT NULL THEN
6854 
6855               SELECT jrad_doc INTO l_jrad_doc FROM CZ_UI_PAGES
6856               WHERE page_id=p_ui_node.page_id AND ui_def_id=p_ui_node.ui_def_id;
6857 
6858               l_hgrid_element_id := find_Element_Id_Of_XMLTag(l_xml_node, 'oa:tree');
6859               IF NOT(xmldom.IsNull(l_xml_node)) THEN
6860                 l_ancestor_node := l_jrad_doc||'.'||l_hgrid_element_id;
6861 
6862                 set_Attribute(l_xml_node,
6863                               'ancestorNode',
6864                               l_ancestor_node);
6865               END IF;
6866             END IF;
6867 
6868             --
6869             -- set value of user attribute "switcherDefaultCaseName" to new jrad id of <oa:switcher>
6870             --
6871             IF xmldom.getNodeName(l_xml_node)='oa:switcher' THEN
6872               l_old_switcher_xml_id := l_attribute_value;
6873               l_user_attribute3_value := get_Attribute_Value(l_xml_node, G_USER_ATTRIBUTE3_NAME);
6874               l_switcher_casename := get_User_Attribute(l_user_attribute3_value ,'switcherDefaultCaseName');
6875               l_switcher_casename := REPLACE(l_switcher_casename,l_attribute_value, l_new_attribute_value);
6876               l_switcher_casename := REPLACE(REPLACE(l_switcher_casename,'_czt','_czn'), '_czc','_czn');
6877               set_User_Attribute(p_cz_attribute_name    => 'switcherDefaultCaseName',
6878                                  p_cz_attribute_value   => l_switcher_casename,
6879                                  px_xml_attribute_value => l_user_attribute3_value);
6880 
6881               set_Attribute(l_xml_node,
6882                             G_USER_ATTRIBUTE3_NAME,
6883                             l_user_attribute3_value);
6884             END IF;
6885 
6886             --
6887             -- set value of attribute "name" of <ui:case> to id of parent <oa:switcher>
6888             --
6889             IF (l_xml_node_name='ui:case' AND xmldom.getNodeName(l_curr_parent_xml_node)='oa:switcher') THEN
6890               l_switcher_xml_id := get_Attribute_Value(l_curr_parent_xml_node, G_ID_ATTRIBUTE);
6891               l_uicase_name     :=  get_Attribute_Value(l_xml_node, 'name');
6892               set_Attribute(xmldom.makeElement(l_xml_node),
6893                             'name',
6894                             REPLACE(REPLACE(REPLACE(l_uicase_name,l_old_switcher_xml_id,l_switcher_xml_id),'_czt','_czn'), '_czc', '_czn'));
6895               handle_UI_CASE_Id(l_xml_node);
6896             END IF;
6897 
6898             --
6899             -- if current tag is <oa:stackLayout>
6900             -- then replace old id with new one
6901             --
6902             IF (l_xml_node_name='oa:stackLayout' AND
6903                xmldom.getNodeName(l_curr_parent_xml_node)='ui:case') AND l_attribute_value IS NOT NULL THEN
6904               set_Attribute(xmldom.makeElement(l_xml_node),
6905                             G_ID_ATTRIBUTE,
6906                            REPLACE(REPLACE(get_Attribute_Value(l_curr_parent_xml_node, 'name'),'_czt','_czn'),'_czc','_czn'));
6907             END IF;
6908 
6909             IF l_attribute_value IS NOT NULL THEN
6910               --
6911               -- create a new copies for corresponding entities ( captions, rules ,... )
6912               --
6913               copy_Node_Related_Entities(p_ui_def_id   => p_ui_node.ui_def_id,
6914                                          p_ui_page_id  => p_ui_node.page_id,
6915                                          p_xml_node    => l_xml_node);
6916             END IF;
6917 
6918             IF p_ui_node.ctrl_template_id=g_DRILLDOWN_TEMPLATE_ID THEN
6919               IF attribute_Value(l_xml_node, 'source') IS NULL AND
6920                  g_UI_Context.DRILLDOWN_IMAGE_URL IS NOT NULL THEN
6921                  set_Attribute(l_xml_node,
6922                                'source',
6923                                 g_UI_Context.DRILLDOWN_IMAGE_URL);
6924               END IF;
6925 
6926               l_user_attribute := get_Attribute_Value(l_xml_node,
6927                                                      G_USER_ATTRIBUTE3_NAME);
6928 
6929               IF l_user_attribute IS NOT NULL THEN
6930 
6931                 IF p_ui_node.element_type=G_UI_CX_BUTTON_NODE_TYPE THEN
6932 
6933                    set_User_Attribute(p_cz_attribute_name    => 'captionIntlTextId',
6934                                       p_cz_attribute_value   => TO_CHAR(g_cx_names_tbl(TO_NUMBER(p_ui_node.element_id))),
6935                                       px_xml_attribute_value => l_user_attribute);
6936 
6937                    set_User_Attribute(p_cz_attribute_name    => 'rolloverIntlTextId',
6938                                       p_cz_attribute_value   => TO_CHAR(g_cx_names_tbl(TO_NUMBER(p_ui_node.element_id))),
6939                                       px_xml_attribute_value => l_user_attribute);
6940                 ELSE
6941                    IF  g_UI_Context.DRILLDOWN_CONTROL_TEXT_ID IS NOT NULL THEN
6942 
6943                      l_drilldown_text_id := copy_Intl_Text(g_UI_Context.DRILLDOWN_CONTROL_TEXT_ID,
6944                                                            g_UI_Context.ui_def_id,
6945                                                            p_ui_node.page_id, p_ui_node.element_id);
6946 
6947                      set_User_Attribute(p_cz_attribute_name    => 'captionIntlTextId',
6948                                         p_cz_attribute_value   => TO_CHAR(l_drilldown_text_id),
6949                                         px_xml_attribute_value => l_user_attribute);
6950 
6951                      set_User_Attribute(p_cz_attribute_name    => 'rolloverIntlTextId',
6952                                         p_cz_attribute_value   => TO_CHAR(l_drilldown_text_id),
6953                                         px_xml_attribute_value => l_user_attribute);
6954 
6955                    END IF;
6956                 END IF;   -- end of p_ui_node.element_type=G_UI_CX_BUTTON_NODE_TYPE THEN
6957 
6958                 BEGIN
6959                   l_ui_action_id := get_UI_Action_Id(p_ui_node);
6960                 EXCEPTION
6961                   WHEN OTHERS THEN
6962                      NULL;
6963                 END;
6964 
6965                 IF l_ui_action_id IS NOT NULL THEN
6966 
6967                   set_User_Attribute(p_cz_attribute_name    => 'actionId',
6968                                      p_cz_attribute_value   => TO_CHAR(l_ui_action_id),
6969                                      px_xml_attribute_value => l_user_attribute);
6970 
6971                 END IF;
6972 
6973                 set_Attribute(l_xml_node,G_USER_ATTRIBUTE3_NAME,l_user_attribute);
6974 
6975               END IF;     -- end of IF l_user_attribute IS NOT NULL
6976 
6977             END IF;  -- end of IF p_ui_node.ctrl_template_id=g_DRILLDOWN_TEMPLATE_ID
6978 
6979             --++++++ add template references ++++++
6980             add_Extends_Refs(p_xml_node  => l_xml_node,
6981                              p_ui_node   => p_ui_node);
6982 
6983           END IF; -- end of  IF k > 0 THEN
6984         END LOOP;
6985       END IF;
6986 
6987       --l_new_xml_root_node := xmldom.cloneNode(l_xml_root_node, TRUE);
6988       l_new_xml_root_node := cloneNode(l_xml_root_node, p_parent_xml_node);
6989 
6990       --DEBUG('asp:Adding ' || p_ui_node.element_id || ' to table 2');
6991       g_dom_elements_tbl(TO_NUMBER(p_ui_node.element_id)) := l_new_xml_root_node;
6992     END IF;
6993 
6994     -- The new element is now ready. It is
6995   -- l_new_xml_root_node, the root of the subtree to be added
6996   -- We need to add this root node to an appropriate location
6997   -- int the XML DOM.
6998 
6999 
7000   -- we have to decide if we want to add this new element
7001   -- after the prev element, before the next element or as the
7002   -- last element of the given parent region
7003 
7004   IF l_prev_element_id IS NOT NULL THEN
7005     l_prev_node := g_dom_elements_tbl(TO_NUMBER(l_prev_element_id));
7006     l_prev_node_parent_ui_cnt := xmldom.getParentNode(l_prev_node);
7007     l_prev_node_parent := xmldom.getParentNode(l_prev_node_parent_ui_cnt);
7008     BEGIN
7009         SELECT layout_ui_style INTO l_prev_elt_lyt_ui_style
7010       FROM CZ_UI_TEMPLATES
7011       WHERE template_id = l_prev_element_template_id
7012       AND ui_def_id = 0
7013     AND deleted_flag = G_NO_FLAG;
7014 
7015     EXCEPTION
7016       WHEN NO_DATA_FOUND THEN
7017       NULL;
7018     END;
7019   END IF;
7020 
7021   IF l_next_element_id IS NOT NULL THEN
7022     --DEBUG('Here 8.11 ' || l_next_element_id);
7023     IF g_dom_elements_tbl.EXISTS(TO_NUMBER(l_next_element_id)) THEN
7024       l_next_node := g_dom_elements_tbl(TO_NUMBER(l_next_element_id));
7025       --DEBUG('Here 8.12');
7026       l_next_node_parent_ui_cnt := xmldom.getParentNode(l_next_node);
7027       --DEBUG('Here 8.13');
7028       l_next_node_parent := xmldom.getParentNode(l_next_node_parent_ui_cnt);
7029       --DEBUG('Here 8.14');
7030       BEGIN
7031         SELECT layout_ui_style INTO l_next_elt_lyt_ui_style
7032         FROM CZ_UI_TEMPLATES
7033         WHERE template_id = l_next_element_template_id
7034         AND ui_def_id = 0
7035         AND deleted_flag = G_NO_FLAG;
7036 
7037       EXCEPTION
7038         WHEN NO_DATA_FOUND THEN
7039           NULL;
7040       END;
7041     ELSE
7042       l_next_element_id := NULL;
7043     END IF;
7044   END IF;
7045 
7046   --DEBUG('Here 9' || l_node.detailed_type_id);
7047   IF l_node.detailed_type_id IN(CZ_TYPES.UNON_COUNT_FEATURE_TYPEID,
7048                                   CZ_TYPES.UCOUNT_FEATURE_TYPEID,
7049                                   CZ_TYPES.UCOUNT_FEATURE01_TYPEID,
7050                                   CZ_TYPES.UMINMAX_FEATURE_TYPEID,
7051                                   CZ_TYPES.UINTEGER_FEATURE_TYPEID,
7052                                   CZ_TYPES.UDECIMAL_FEATURE_TYPEID,
7053                                   CZ_TYPES.UBOOLEAN_FEATURE_TYPEID,
7054                                   CZ_TYPES.UTEXT_FEATURE_TYPEID,
7055                                   CZ_TYPES.UTOTAL_TYPEID,
7056                                   CZ_TYPES.URESOURCE_TYPEID) AND
7057        NVL(l_node.layout_ui_style,G_LABEL_PAIR_LAYOUT_STYLE) IN(G_LABEL_PAIR_LAYOUT_STYLE,G_WRAPPED_LAYOUT_STYLE) THEN
7058 
7059        --DEBUG('asp:Wrap it 1 ' || l_node.name);
7060        l_wrap_it  := TRUE;
7061 
7062   ELSIF l_node.ps_node_type IN(G_BOM_MODEL_TYPE,G_BOM_OPTION_CLASS_TYPE) OR
7063           l_node.detailed_type_id IN(CZ_TYPES.UOPTIONAL_BOM_REF_TYPEID,CZ_TYPES.UMINMAX_BOM_REF_TYPEID) THEN
7064 
7065        IF NVL(l_node.layout_ui_style,G_TABLE_LAYOUT_STYLE) = G_TABLE_LAYOUT_STYLE  OR
7066          l_node.detailed_type_id IN(CZ_TYPES.UOPTIONAL_BOM_REF_TYPEID,CZ_TYPES.UMINMAX_BOM_REF_TYPEID) THEN
7067          l_wrap_it := FALSE;
7068 
7069        ELSIF l_node.layout_ui_style IN(G_LABEL_PAIR_LAYOUT_STYLE,G_WRAPPED_LAYOUT_STYLE) AND
7070          l_node.detailed_type_id NOT IN(CZ_TYPES.UOPTIONAL_BOM_REF_TYPEID,CZ_TYPES.UMINMAX_BOM_REF_TYPEID) THEN
7071          l_wrap_it := TRUE;
7072        ELSE
7073          l_wrap_it := FALSE;
7074        END IF;
7075 
7076        IF g_UI_Context.PRIMARY_NAVIGATION IN(G_SINGLE_PAGE) OR
7077           g_UI_Context.PAGIN_BOMOC IN(G_SINGLE_PG_TYPE,G_SUBSECTIONS_PG_TYPE) THEN
7078          l_wrap_with_links := TRUE;
7079        END IF;
7080 
7081     ELSIF l_node.detailed_type_id IN(CZ_TYPES.UCOUNT_FEATURE01_TYPEID,
7082                                      CZ_TYPES.UCOUNT_FEATURE_TYPEID,
7083                                      CZ_TYPES.UMINMAX_FEATURE_TYPEID) THEN
7084       l_wrap_it         := FALSE;
7085     END IF;
7086 
7087     IF l_prev_element_id IS NOT NULL
7088         OR l_next_element_id IS NOT NULL THEN
7089       IF l_wrap_it THEN
7090         IF l_prev_element_id IS NOT NULL AND
7091           NVL(l_prev_elt_lyt_ui_style, G_OTHER_LAYOUT_STYLE) = G_LABEL_PAIR_LAYOUT_STYLE THEN
7092             l_next_node := xmldom.getNextSibling(l_prev_node);
7093         l_new_xml_root_node := insert_before(l_prev_node_parent_ui_cnt, l_new_xml_root_node, l_next_node);
7094         ELSIF l_next_element_id IS NOT NULL AND
7095              NVL(l_next_elt_lyt_ui_style, G_OTHER_LAYOUT_STYLE) = G_LABEL_PAIR_LAYOUT_STYLE THEN
7096           l_new_xml_root_node := insert_before(l_next_node_parent_ui_cnt, l_new_xml_root_node, l_next_node);
7097         ELSE
7098           create_wrapper_table_layout(l_xml_table_node, l_xml_tabuicontent_node, p_parent_xml_node);
7099           l_new_xml_root_node := xmldom.appendChild(l_xml_tabuicontent_node, l_new_xml_root_node);
7100           IF l_prev_element_id IS NOT NULL THEN
7101             l_next_node := xmldom.getNextSibling(l_prev_node);
7102             l_xml_table_node := insert_before(l_prev_node_parent_ui_cnt, l_xml_table_node, l_next_node);
7103           ELSIF l_next_element_id IS NOT NULL THEN
7104             l_xml_table_node := insert_before(l_next_node_parent_ui_cnt, l_xml_table_node, l_next_node);
7105           ELSE
7106             l_ui_contents_xml_node := getUIContents(p_parent_xml_node);
7107             l_xml_table_node := xmldom.appendChild(l_ui_contents_xml_node, l_xml_table_node);
7108           END IF;
7109         END IF;
7110       ELSE -- new element is not LABEL_DATA_PAIR
7111 
7112         IF l_prev_element_id IS NOT NULL AND l_next_element_id IS NOT NULL AND
7113           NVL(l_prev_elt_lyt_ui_style, G_OTHER_LAYOUT_STYLE) = G_LABEL_PAIR_LAYOUT_STYLE AND
7114           NVL(l_next_elt_lyt_ui_style, G_OTHER_LAYOUT_STYLE) = G_LABEL_PAIR_LAYOUT_STYLE THEN
7115 
7116 
7117           IF get_Attribute_Value(l_prev_node_parent, G_ID_ATTRIBUTE) = get_Attribute_Value(l_next_node_parent, G_ID_ATTRIBUTE) THEN
7118             IF xmldom.getNodeName(l_prev_node_parent) = 'oa:tableLayout' THEN
7119               l_grand_parent := xmldom.getParentNode(l_prev_node_parent);
7120               create_wrapper_table_layout(l_xml_table_node, l_xml_tabuicontent_node, p_parent_xml_node);
7121               l_next_sibling_of_parent := xmldom.getNextSibling(l_prev_node_parent);
7122               l_xml_table_node := insert_before(l_grand_parent, l_xml_table_node, l_next_sibling_of_parent);
7123               l_next_node := xmldom.removeChild(l_prev_node_parent_ui_cnt, l_next_node);
7124               l_next_node := xmldom.appendChild(l_xml_tabuicontent_node, l_next_node);
7125               l_next_node := l_xml_table_node;
7126             END IF;
7127             l_next_node := xmldom.insertBefore(l_grand_parent, l_new_xml_root_node, l_next_node);
7128           ELSE
7129             l_grand_parent := xmldom.getParentNode(l_prev_node_parent);
7130             l_next_sibling_of_parent := xmldom.getNextSibling(l_prev_node_parent);
7131             l_new_xml_root_node := insert_before(l_grand_parent, l_new_xml_root_node, l_next_sibling_of_parent);
7132           END IF;
7133         ELSIF l_prev_element_id IS NOT NULL AND NVL(l_prev_elt_lyt_ui_style, G_OTHER_LAYOUT_STYLE) <> G_LABEL_PAIR_LAYOUT_STYLE THEN
7134           l_next_node := xmldom.getNextSibling(l_prev_node);
7135           l_new_xml_root_node := insert_before(l_prev_node_parent_ui_cnt, l_new_xml_root_node, l_next_node);
7136         ELSIF l_next_element_id IS NOT NULL AND
7137           NVL(l_next_elt_lyt_ui_style, G_OTHER_LAYOUT_STYLE) <> G_LABEL_PAIR_LAYOUT_STYLE THEN
7138           l_new_xml_root_node := insert_before(l_next_node_parent_ui_cnt, l_new_xml_root_node, l_next_node);
7139         ELSIF l_prev_element_id IS NOT NULL THEN
7140           l_grand_parent := xmldom.getParentNode(l_prev_node_parent);
7141           l_next_sibling_of_parent := xmldom.getNextSibling(l_prev_node_parent);
7142           l_new_xml_root_node := insert_before(l_grand_parent, l_new_xml_root_node, l_next_sibling_of_parent);
7143         ELSE
7144           l_grand_parent := xmldom.getParentNode(l_next_node_parent);
7145           l_new_xml_root_node := insert_before(l_grand_parent, l_new_xml_root_node, l_next_node_parent);
7146     END IF;
7147       END IF;
7148   ELSE
7149     -- If neither prev_element and next_element is found
7150     -- Insert at the end
7151     --DEBUG('asp:Append at the end');
7152 
7153     IF l_wrap_it THEN
7154        --DEBUG('Append at the end. Wrapping ' || xmldom.getNodeName(p_parent_xml_node));
7155        l_ui_contents_xml_node := getUIContents(p_parent_xml_node);
7156        --DEBUG('Append at the end. Wrapping ' || xmldom.getNodeName(l_ui_contents_xml_node));
7157        create_wrapper_table_layout(l_xml_table_node, l_xml_tabuicontent_node, p_parent_xml_node);
7158        l_xml_table_node := xmldom.appendChild(l_ui_contents_xml_node, l_xml_table_node);
7159        l_new_xml_root_node := xmldom.appendChild(l_xml_tabuicontent_node, l_new_xml_root_node);
7160     ELSE
7161        --DEBUG('Append at the end. Not wrapping');
7162        l_ui_contents_xml_node := getUIContents(p_parent_xml_node);
7163        l_new_xml_root_node := xmldom.appendChild(l_ui_contents_xml_node, l_new_xml_root_node);
7164     END IF;
7165   END IF;
7166 
7167   RETURN l_new_xml_root_node;
7168 
7169   END create_UIXML_Element_new;
7170 
7171   --
7172   -- create new XML JRAD element
7173   --
7174   FUNCTION create_UIXML_Element(p_ui_node             IN CZ_UI_PAGE_ELEMENTS%ROWTYPE,
7175                                 p_parent_xml_node     xmldom.DOMNode)
7176     RETURN xmldom.DOMNode IS
7177 
7178     l_node                  CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE;
7179     l_ctrl_template_name    CZ_UI_TEMPLATES.template_name%TYPE;
7180     l_doc                   xmldom.DOMDocument;
7181     l_anchor_doc            xmldom.DOMDocument;
7182     l_subtree_doc           xmldom.DOMDocument;
7183     l_xml_root_node         xmldom.DOMNode;
7184     l_new_xml_root_node     xmldom.DOMNode;
7185     l_out_xml_node          xmldom.DOMNode;
7186     l_xml_table_node        xmldom.DOMNode;
7187     l_new_xml_table_node    xmldom.DOMNode;
7188     l_xml_anchor_node       xmldom.DOMNode;
7189     l_new_xml_anchor_node   xmldom.DOMNode;
7190     l_xml_node              xmldom.DOMNode;
7191     l_xml_tabuicontent_node xmldom.DOMNode;
7192     l_ui_contents_xml_node  xmldom.DOMNode;
7193 
7194     l_curr_parent_xml_node  xmldom.DOMNode;
7195     l_xml_node_name         VARCHAR2(255);
7196     l_new_attribute_value   VARCHAR2(255);
7197 
7198     l_child_nodes_tbl       xmldom.DOMNodeList;
7199     l_attribute_value       VARCHAR2(4000);
7200     l_attribute_source      VARCHAR2(4000);
7201     l_user_attribute        VARCHAR2(4000);
7202     l_user_attribute4       VARCHAR2(4000);
7203     l_jrad_doc              VARCHAR2(255);
7204     l_ancestor_node         VARCHAR2(255);
7205     l_hgrid_element_id      VARCHAR2(255);
7206     l_prev_element_id       VARCHAR2(255);
7207     l_old_ui_element_id     VARCHAR2(255);
7208     l_new_ui_element_id     VARCHAR2(255);
7209     l_switcher_element_id   VARCHAR2(255);
7210     l_user_attribute3_value VARCHAR2(4000);
7211     l_switcher_casename     VARCHAR2(255);
7212     l_old_switcher_xml_id   VARCHAR2(255);
7213     l_switcher_xml_id       VARCHAR2(255);
7214     l_uicase_name           VARCHAR2(255);
7215     l_length                NUMBER;
7216     l_ui_action_id          NUMBER;
7217     l_element_signature_id  NUMBER;
7218     l_non_bom_content       BOOLEAN;
7219     l_wrap_it               BOOLEAN;
7220     l_drilldown_text_id     NUMBER;
7221     l_wrap_with_links       BOOLEAN := FALSE;
7222     l_template_is_used_by_ref BOOLEAN := TRUE;
7223 
7224   BEGIN
7225 
7226   IF g_using_new_UI_refresh THEN
7227     RETURN create_UIXML_Element_new(p_ui_node, p_parent_xml_node);
7228   END IF;
7229 
7230     IF p_ui_node.ctrl_template_id IS NULL THEN
7231       RETURN l_xml_node;
7232     END IF;
7233 
7234     l_node := get_Model_Node_By_Persist_Id(p_ui_node.persistent_node_id,g_UI_Context.devl_project_id);
7235 
7236     l_template_is_used_by_ref := is_Used_By_Reference(l_node.detailed_type_id,p_ui_node.ctrl_template_id);
7237 
7238     BEGIN
7239       SELECT element_id INTO l_prev_element_id
7240         FROM CZ_UI_PAGE_ELEMENTS
7241        WHERE ui_def_id=p_ui_node.ui_def_id AND
7242              parent_persistent_node_id=p_ui_node.parent_persistent_node_id AND
7243              seq_nbr=p_ui_node.seq_nbr-1 AND
7244              deleted_flag<>G_YES_FLAG;
7245 
7246       l_xml_tabuicontent_node := find_Table_Of_XML_Node(p_parent_xml_node, l_prev_element_id);
7247 
7248     EXCEPTION
7249       WHEN OTHERS THEN
7250            NULL;
7251     END;
7252 
7253     --
7254     -- drilldowns will be handled by special way ( bug #3271034 )
7255     --
7256     IF p_ui_node.ctrl_template_id IN(G_DRILLDOWN_BUTTON_TEMPLATE_ID,G_DRILLDOWN_IMAGE_TEMPLATE_ID,
7257        G_DRILLDOWN_LABEL_TEMPLATE_ID) THEN
7258        IF g_UI_Context.DRILLDOWN_IMAGE_URL IS NOT NULL THEN
7259          l_ctrl_template_name := get_JRAD_Name(p_template_id => G_DRILLDOWN_IMAGE_TEMPLATE_ID);
7260        ELSE
7261          l_ctrl_template_name := get_JRAD_Name(p_template_id => p_ui_node.ctrl_template_id);
7262        END IF;
7263     ELSE
7264        l_ctrl_template_name := get_JRAD_Name(p_template_id => p_ui_node.ctrl_template_id);
7265     END IF;
7266 
7267     IF l_node.detailed_type_id IN(CZ_TYPES.UNON_COUNT_FEATURE_TYPEID,
7268                                   CZ_TYPES.UCOUNT_FEATURE_TYPEID,
7269                                   CZ_TYPES.UCOUNT_FEATURE01_TYPEID,
7270                                   CZ_TYPES.UMINMAX_FEATURE_TYPEID,
7271                                   CZ_TYPES.UINTEGER_FEATURE_TYPEID,
7272                                   CZ_TYPES.UDECIMAL_FEATURE_TYPEID,
7273                                   CZ_TYPES.UBOOLEAN_FEATURE_TYPEID,
7274                                   CZ_TYPES.UTEXT_FEATURE_TYPEID,
7275                                   CZ_TYPES.UTOTAL_TYPEID,
7276                                   CZ_TYPES.URESOURCE_TYPEID) AND
7277        NVL(l_node.layout_ui_style,G_LABEL_PAIR_LAYOUT_STYLE) IN(G_LABEL_PAIR_LAYOUT_STYLE,G_WRAPPED_LAYOUT_STYLE) THEN
7278 
7279        l_non_bom_content := TRUE;
7280        l_wrap_it  := TRUE;
7281 
7282        --
7283        -- add TableLayout
7284        --
7285        IF xmldom.isNull(l_xml_tabuicontent_node) THEN
7286 
7287          BEGIN
7288            l_doc := parse_JRAD_Document(G_TABLELAYOUT_TEMPLATE);
7289 
7290            l_xml_table_node :=xmldom.makeNode(xmldom.getDocumentElement(l_doc));
7291 
7292            remove_TopLevel_Attributes(l_xml_table_node);
7293 
7294            --l_new_xml_table_node := xmldom.cloneNode(l_xml_table_node,TRUE);
7295            l_new_xml_table_node := cloneNode(l_xml_table_node, p_parent_xml_node);
7296 
7297            set_Attribute(xmldom.makeElement(l_new_xml_table_node),G_ID_ATTRIBUTE,get_Element_Id());
7298            set_Attribute(xmldom.makeElement(l_new_xml_table_node),G_USER_ATTRIBUTE5_NAME,'TABLELAYOUT_FOR_UI_GEN');
7299 
7300            l_xml_tabuicontent_node := getUIContents(l_new_xml_table_node);
7301 
7302            IF xmldom.getNodeName(p_parent_xml_node) IN('oa:header','oa:stackLayout',
7303                                                        'oa:flowLayout','oa:tableLayout') THEN
7304 
7305              l_ui_contents_xml_node := getUIContents(p_parent_xml_node);
7306              l_out_xml_node := xmldom.appendChild(l_ui_contents_xml_node,l_new_xml_table_node);
7307            ELSE
7308              l_out_xml_node := xmldom.appendChild(p_parent_xml_node,l_new_xml_table_node);
7309            END IF;
7310 
7311         EXCEPTION
7312           WHEN OTHERS THEN
7313             NULL;
7314         END;
7315       END IF;
7316 
7317     --
7318     -- BOM part
7319     --
7320     ELSIF l_node.ps_node_type IN(G_BOM_MODEL_TYPE,G_BOM_OPTION_CLASS_TYPE) OR
7321           l_node.detailed_type_id IN(CZ_TYPES.UOPTIONAL_BOM_REF_TYPEID,CZ_TYPES.UMINMAX_BOM_REF_TYPEID) THEN
7322 
7323        l_non_bom_content := TRUE;
7324 
7325        IF NVL(l_node.layout_ui_style,G_TABLE_LAYOUT_STYLE) = G_TABLE_LAYOUT_STYLE  OR
7326          l_node.detailed_type_id IN(CZ_TYPES.UOPTIONAL_BOM_REF_TYPEID,CZ_TYPES.UMINMAX_BOM_REF_TYPEID) THEN
7327          l_wrap_it := FALSE;
7328 
7329        ELSIF l_node.layout_ui_style IN(G_LABEL_PAIR_LAYOUT_STYLE,G_WRAPPED_LAYOUT_STYLE) AND
7330          l_node.detailed_type_id NOT IN(CZ_TYPES.UOPTIONAL_BOM_REF_TYPEID,CZ_TYPES.UMINMAX_BOM_REF_TYPEID) THEN
7331          --
7332          -- add TableLayout
7333          --
7334          IF xmldom.isNull(l_xml_tabuicontent_node) THEN
7335            BEGIN
7336              l_doc := parse_JRAD_Document(G_TABLELAYOUT_TEMPLATE);
7337 
7338              l_xml_table_node :=xmldom.makeNode(xmldom.getDocumentElement(l_doc));
7339 
7340              remove_TopLevel_Attributes(l_xml_table_node);
7341 
7342              --l_new_xml_table_node := xmldom.cloneNode(l_xml_table_node,TRUE);
7343              l_new_xml_table_node := cloneNode(l_xml_table_node, p_parent_xml_node);
7344 
7345              set_Attribute(xmldom.makeElement(l_new_xml_table_node),G_ID_ATTRIBUTE,get_Element_Id());
7346              set_Attribute(xmldom.makeElement(l_new_xml_table_node),G_USER_ATTRIBUTE5_NAME,'TABLELAYOUT_FOR_UI_GEN');
7347 
7348              l_xml_tabuicontent_node := getUIContents(l_new_xml_table_node);
7349 
7350              IF xmldom.getNodeName(p_parent_xml_node) IN('oa:header','oa:stackLayout',
7351                                                          'oa:flowLayout','oa:tableLayout') THEN
7352 
7353                l_ui_contents_xml_node := getUIContents(p_parent_xml_node);
7354 
7355                l_out_xml_node := xmldom.appendChild(l_ui_contents_xml_node,l_new_xml_table_node);
7356              ELSE
7357                l_out_xml_node := xmldom.appendChild(p_parent_xml_node,l_new_xml_table_node);
7358              END IF;
7359            EXCEPTION
7360              WHEN OTHERS THEN
7361                DEBUG('create_UIXML_Element : '||SQLERRM);
7362            END;
7363          END IF;
7364          l_wrap_it := TRUE;
7365        ELSE
7366          l_wrap_it := FALSE;
7367        END IF;
7368 
7369        IF g_UI_Context.PRIMARY_NAVIGATION IN(G_SINGLE_PAGE) OR
7370           g_UI_Context.PAGIN_BOMOC IN(G_SINGLE_PG_TYPE,G_SUBSECTIONS_PG_TYPE) THEN
7371          l_wrap_with_links := TRUE;
7372        END IF;
7373 
7374     ELSIF l_node.detailed_type_id IN(CZ_TYPES.UCOUNT_FEATURE01_TYPEID,
7375                                      CZ_TYPES.UCOUNT_FEATURE_TYPEID,
7376                                      CZ_TYPES.UMINMAX_FEATURE_TYPEID) THEN
7377       l_non_bom_content := FALSE;
7378       l_wrap_it         := FALSE;
7379     ELSE
7380       l_non_bom_content := FALSE;
7381     END IF;
7382 
7383     --
7384     -- parse document(template) which is going to be nested element
7385     --
7386     l_subtree_doc := parse_JRAD_Document(l_ctrl_template_name);
7387 
7388     IF xmldom.isNull(l_subtree_doc) THEN
7389       add_Error_Message(p_message_name => 'CZ_WRONG_UI_TEMPLATE',
7390                         p_token_name   => 'UI_TEMPLATE',
7391                         p_token_value  => l_ctrl_template_name,
7392                         p_fatal_error  => TRUE);
7393 
7394        RAISE WRONG_UI_TEMPLATE;
7395     END IF;
7396 
7397     --
7398     -- get subdocument's root node
7399     --
7400     l_xml_root_node := xmldom.makeNode(xmldom.getDocumentElement(l_subtree_doc));
7401 
7402     IF l_template_is_used_by_ref=FALSE THEN
7403       handle_USER_ATTRIBUTE10(p_xml_root_node => l_xml_root_node,
7404                               p_ui_def_id     => p_ui_node.ui_def_id,
7405                               p_ui_page_id    => p_ui_node.page_id,
7406                               p_ui_element_id => p_ui_node.element_id);
7407     END IF;
7408 
7409     --
7410     -- remove common attributes of container and subtree
7411     --
7412     remove_TopLevel_Attributes(l_xml_root_node);
7413 
7414     IF l_template_is_used_by_ref THEN
7415       l_element_signature_id := 6011;
7416     ELSE
7417       l_element_signature_id := p_ui_node.element_signature_id;
7418     END IF;
7419 
7420     --
7421     -- set Attributes for this subtree = Template
7422     --
7423     set_Template_Attributes(p_xml_root_node        => l_xml_root_node,
7424                             p_ui_node              => p_ui_node,
7425                             p_element_signature_id => l_element_signature_id);
7426 
7427     --
7428     -- set a special attribute "blockSize" if it is Table control
7429     --
7430     /* commented out according to request from 8/12/2004
7431     IF  xmldom.getNodeName(l_xml_root_node) IN('oa:table') THEN
7432       set_Attribute(l_xml_root_node,
7433                     'blockSize',
7434                     TO_CHAR(g_UI_Context.ROWS_PER_TABLE));
7435     END IF;
7436     */
7437     IF l_template_is_used_by_ref THEN
7438 
7439       --
7440       -- returns cloned DOM subtree
7441       --
7442       -- l_new_xml_root_node := xmldom.cloneNode(l_xml_root_node,TRUE);
7443       l_new_xml_root_node := cloneNode(l_xml_root_node, p_parent_xml_node);
7444 
7445       --
7446       -- remove non user attributes from top tag
7447       --
7448       remove_Non_User_Attributes(l_new_xml_root_node);
7449 
7450       --
7451       -- set "extends" attribute
7452       --
7453       xmldom.setAttribute(xmldom.makeElement(l_new_xml_root_node),'extends',l_ctrl_template_name);
7454 
7455       --
7456       -- remove content of template subtree
7457       --
7458       l_child_nodes_tbl:=xmldom.getChildNodes(l_new_xml_root_node);
7459 
7460       --
7461       -- we need to get length of array of child nodes
7462       -- to go through the array in loop
7463       --
7464       l_length := xmldom.getLength(l_child_nodes_tbl);
7465       FOR k IN 0..l_length-1
7466       LOOP
7467         --
7468         -- get next child DOM node
7469         --
7470         l_xml_node := xmldom.item(l_child_nodes_tbl, k);
7471         l_out_xml_node:=xmldom.removeChild(l_new_xml_root_node,l_xml_node);
7472       END LOOP;
7473 
7474     ELSE -- use UI Template by Copy
7475 
7476       l_child_nodes_tbl := xmldom.getElementsByTagName(l_subtree_doc, '*');
7477 
7478       l_length := xmldom.getLength(l_child_nodes_tbl);
7479       IF (l_length > 0) THEN
7480         FOR k IN 0..l_length-1
7481         LOOP
7482           --
7483           -- get next child DOM node
7484           --
7485           l_xml_node := xmldom.item(l_child_nodes_tbl, k);
7486           l_curr_parent_xml_node := xmldom.getParentNode(l_xml_node);
7487 
7488           IF k > 0 THEN
7489             l_attribute_value := get_Attribute_Value(l_xml_node, G_ID_ATTRIBUTE);
7490 
7491             l_xml_node_name := xmldom.getNodeName(l_xml_node);
7492 
7493             IF l_attribute_value IS NOT NULL THEN
7494               l_new_attribute_value := handle_JRAD_Id(l_attribute_value,p_ui_node.element_id);
7495               set_Attribute(xmldom.makeElement(l_xml_node),G_ID_ATTRIBUTE,REPLACE(REPLACE(l_new_attribute_value,'_czt','_czn'),'_czc','_czn'));
7496             END IF;
7497 
7498             l_ancestor_node := get_Attribute_Value(l_xml_node,
7499                                                    'ancestorNode');
7500             IF l_ancestor_node IS NOT NULL THEN
7501 
7502               SELECT jrad_doc INTO l_jrad_doc FROM CZ_UI_PAGES
7503               WHERE page_id=p_ui_node.page_id AND ui_def_id=p_ui_node.ui_def_id;
7504 
7505               l_hgrid_element_id := find_Element_Id_Of_XMLTag(l_xml_node, 'oa:tree');
7506               IF NOT(xmldom.IsNull(l_xml_node)) THEN
7507                 l_ancestor_node := l_jrad_doc||'.'||l_hgrid_element_id;
7508 
7509                 set_Attribute(l_xml_node,
7510                               'ancestorNode',
7511                               l_ancestor_node);
7512               END IF;
7513             END IF;
7514 
7515             --
7516             -- set value of user attribute "switcherDefaultCaseName" to new jrad id of <oa:switcher>
7517             --
7518             IF xmldom.getNodeName(l_xml_node)='oa:switcher' THEN
7519               l_old_switcher_xml_id := l_attribute_value;
7520               l_user_attribute3_value := get_Attribute_Value(l_xml_node, G_USER_ATTRIBUTE3_NAME);
7521               l_switcher_casename := get_User_Attribute(l_user_attribute3_value ,'switcherDefaultCaseName');
7522               l_switcher_casename := REPLACE(REPLACE(REPLACE(l_switcher_casename,l_attribute_value, l_new_attribute_value),'_czt','_czn'),'_czc','_czn');
7523               set_User_Attribute(p_cz_attribute_name    => 'switcherDefaultCaseName',
7524                                  p_cz_attribute_value   => l_switcher_casename,
7525                                  px_xml_attribute_value => l_user_attribute3_value);
7526 
7527               set_Attribute(l_xml_node,
7528                             G_USER_ATTRIBUTE3_NAME,
7529                             l_user_attribute3_value);
7530             END IF;
7531 
7532             --
7533             -- set value of attribute "name" of <ui:case> to id of parent <oa:switcher>
7534             --
7535             IF (l_xml_node_name='ui:case' AND xmldom.getNodeName(l_curr_parent_xml_node)='oa:switcher') THEN
7536               l_switcher_xml_id := get_Attribute_Value(l_curr_parent_xml_node, G_ID_ATTRIBUTE);
7537               l_uicase_name     :=  get_Attribute_Value(l_xml_node, 'name');
7538               set_Attribute(xmldom.makeElement(l_xml_node),
7539                             'name',
7540                             REPLACE(REPLACE(REPLACE(l_uicase_name,l_old_switcher_xml_id,l_switcher_xml_id),'_czt','_czn'),'_czc','_czn'));
7541               handle_UI_CASE_Id(l_xml_node);
7542             END IF;
7543 
7544             --
7545             -- if current tag is <oa:stackLayout>
7546             -- then replace old id with new one
7547             --
7548             IF (l_xml_node_name='oa:stackLayout' AND
7549                xmldom.getNodeName(l_curr_parent_xml_node)='ui:case') AND l_attribute_value IS NOT NULL THEN
7550               set_Attribute(xmldom.makeElement(l_xml_node),
7551                             G_ID_ATTRIBUTE,
7552                            REPLACE(REPLACE(get_Attribute_Value(l_curr_parent_xml_node, 'name'),'_czt','_czn'),'_czc','_czn'));
7553             END IF;
7554 
7555             IF l_attribute_value IS NOT NULL THEN
7556               --
7557               -- create a new copies for corresponding entities ( captions, rules ,... )
7558               --
7559               copy_Node_Related_Entities(p_ui_def_id   => p_ui_node.ui_def_id,
7560                                          p_ui_page_id  => p_ui_node.page_id,
7561                                          p_xml_node    => l_xml_node);
7562             END IF;
7563 
7564             IF p_ui_node.ctrl_template_id=g_DRILLDOWN_TEMPLATE_ID THEN
7565               IF attribute_Value(l_xml_node, 'source') IS NULL AND
7566                  g_UI_Context.DRILLDOWN_IMAGE_URL IS NOT NULL THEN
7567                  set_Attribute(l_xml_node,
7568                                'source',
7569                                 g_UI_Context.DRILLDOWN_IMAGE_URL);
7570               END IF;
7571 
7572               l_user_attribute := get_Attribute_Value(l_xml_node,
7573                                                      G_USER_ATTRIBUTE3_NAME);
7574 
7575               IF l_user_attribute IS NOT NULL THEN
7576 
7577                 IF p_ui_node.element_type=G_UI_CX_BUTTON_NODE_TYPE THEN
7578 
7579                    set_User_Attribute(p_cz_attribute_name    => 'captionIntlTextId',
7580                                       p_cz_attribute_value   => TO_CHAR(g_cx_names_tbl(TO_NUMBER(p_ui_node.element_id))),
7581                                       px_xml_attribute_value => l_user_attribute);
7582 
7583                    set_User_Attribute(p_cz_attribute_name    => 'rolloverIntlTextId',
7584                                       p_cz_attribute_value   => TO_CHAR(g_cx_names_tbl(TO_NUMBER(p_ui_node.element_id))),
7585                                       px_xml_attribute_value => l_user_attribute);
7586                 ELSE
7587                    IF  g_UI_Context.DRILLDOWN_CONTROL_TEXT_ID IS NOT NULL THEN
7588 
7589                      l_drilldown_text_id := copy_Intl_Text(g_UI_Context.DRILLDOWN_CONTROL_TEXT_ID,
7590                                                            g_UI_Context.ui_def_id,
7591                                                            p_ui_node.page_id, p_ui_node.element_id);
7592 
7593                      set_User_Attribute(p_cz_attribute_name    => 'captionIntlTextId',
7594                                         p_cz_attribute_value   => TO_CHAR(l_drilldown_text_id),
7595                                         px_xml_attribute_value => l_user_attribute);
7596 
7597                      set_User_Attribute(p_cz_attribute_name    => 'rolloverIntlTextId',
7598                                         p_cz_attribute_value   => TO_CHAR(l_drilldown_text_id),
7599                                         px_xml_attribute_value => l_user_attribute);
7600 
7601                    END IF;
7602                 END IF;   -- end of p_ui_node.element_type=G_UI_CX_BUTTON_NODE_TYPE THEN
7603 
7604                 BEGIN
7605                   l_ui_action_id := get_UI_Action_Id(p_ui_node);
7606                 EXCEPTION
7607                   WHEN OTHERS THEN
7608                      NULL;
7609                 END;
7610 
7611                 IF l_ui_action_id IS NOT NULL THEN
7612 
7613                   set_User_Attribute(p_cz_attribute_name    => 'actionId',
7614                                      p_cz_attribute_value   => TO_CHAR(l_ui_action_id),
7615                                      px_xml_attribute_value => l_user_attribute);
7616 
7617                 END IF;
7618 
7619                 set_Attribute(l_xml_node,G_USER_ATTRIBUTE3_NAME,l_user_attribute);
7620 
7621               END IF;     -- end of IF l_user_attribute IS NOT NULL
7622 
7623             END IF;  -- end of IF p_ui_node.ctrl_template_id=g_DRILLDOWN_TEMPLATE_ID
7624 
7625             --++++++ add template references ++++++
7626             add_Extends_Refs(p_xml_node  => l_xml_node,
7627                              p_ui_node   => p_ui_node);
7628 
7629           END IF; -- end of  IF k > 0 THEN
7630         END LOOP;
7631       END IF;
7632 
7633       --l_new_xml_root_node := xmldom.cloneNode(l_xml_root_node, TRUE);
7634       l_new_xml_root_node := cloneNode(l_xml_root_node, p_parent_xml_node);
7635 
7636     END IF;
7637 
7638     IF l_wrap_it THEN
7639 
7640       IF l_wrap_with_links THEN
7641 
7642         BEGIN
7643           l_anchor_doc := parse_JRAD_Document(G_ANCHOR_TEMPLATE);
7644 
7645           l_xml_anchor_node :=xmldom.makeNode(xmldom.getDocumentElement(l_anchor_doc));
7646 
7647            remove_TopLevel_Attributes(l_xml_anchor_node);
7648 
7649            --l_new_xml_anchor_node := xmldom.cloneNode(l_xml_anchor_node,TRUE);
7650            l_new_xml_anchor_node := cloneNode(l_xml_anchor_node, p_parent_xml_node);
7651 
7652            set_Attribute(xmldom.makeElement(l_new_xml_anchor_node),G_ID_ATTRIBUTE,get_Element_Id());
7653            set_Attribute(xmldom.makeElement(l_new_xml_anchor_node),G_USER_ATTRIBUTE5_NAME,'ANCHOR_GENERATED_BY_UI_GEN');
7654 
7655            l_out_xml_node := xmldom.appendChild(l_xml_tabuicontent_node,
7656                                                 l_new_xml_anchor_node);
7657 
7658            l_out_xml_node := xmldom.appendChild(l_xml_tabuicontent_node,
7659                                                 l_new_xml_root_node);
7660 
7661         EXCEPTION
7662           WHEN OTHERS THEN
7663             DEBUG('create_UIXML_Element() : '||SQLERRM);
7664          END;
7665 
7666       ELSE -- don't wrap it with rowLayout+Link
7667 
7668         l_out_xml_node := xmldom.appendChild(l_xml_tabuicontent_node,
7669                                              l_new_xml_root_node);
7670 
7671       END IF;
7672 
7673       RETURN l_out_xml_node;
7674 
7675     ELSE -- don't wrap with TableLayout
7676 
7677       IF l_wrap_with_links THEN
7678         BEGIN
7679           l_anchor_doc := parse_JRAD_Document(G_LINK_TEMPLATE);
7680 
7681           l_xml_anchor_node :=xmldom.makeNode(xmldom.getDocumentElement(l_anchor_doc));
7682 
7683           remove_TopLevel_Attributes(l_xml_anchor_node);
7684 
7685           --l_new_xml_anchor_node := xmldom.cloneNode(l_xml_anchor_node,TRUE);
7686           l_new_xml_anchor_node := cloneNode(l_xml_anchor_node, p_parent_xml_node);
7687 
7688           set_Attribute(xmldom.makeElement(l_new_xml_anchor_node),G_ID_ATTRIBUTE,
7689             '_czt'||to_char(p_ui_node.persistent_node_id)); -- fix for bug #4047136
7690           set_Attribute(xmldom.makeElement(l_new_xml_anchor_node),G_USER_ATTRIBUTE5_NAME,'LINK_GENERATED_BY_UI_GEN');
7691         EXCEPTION
7692           WHEN OTHERS THEN
7693             DEBUG('create_UIXML_Element() : '||SQLERRM);
7694         END;
7695       END IF;
7696 
7697       IF xmldom.getNodeName(p_parent_xml_node) IN('oa:header','oa:stackLayout',
7698          'oa:flowLayout','oa:tableLayout') THEN
7699 
7700 
7701          l_ui_contents_xml_node := getUIContents(p_parent_xml_node);
7702 
7703          IF l_wrap_with_links THEN
7704            l_out_xml_node := xmldom.appendChild(l_ui_contents_xml_node,
7705                                                 l_new_xml_anchor_node);
7706          END IF;
7707          l_out_xml_node := xmldom.appendChild(l_ui_contents_xml_node,
7708                                               l_new_xml_root_node);
7709       ELSE
7710 
7711          IF l_wrap_with_links THEN
7712            l_out_xml_node := xmldom.appendChild(p_parent_xml_node,
7713                                                 l_new_xml_anchor_node);
7714          END IF;
7715 
7716         l_out_xml_node := xmldom.appendChild(p_parent_xml_node,
7717                                              l_new_xml_root_node);
7718       END IF;
7719       RETURN l_out_xml_node;
7720     END IF;
7721 
7722   END create_UIXML_Element;
7723 
7724   --
7725   -- add new XML region
7726   --
7727   FUNCTION create_UIXML_Region(p_ui_node             IN CZ_UI_PAGE_ELEMENTS%ROWTYPE,
7728                                p_parent_xml_node     xmldom.DOMNode)
7729     RETURN xmldom.DOMNode IS
7730 
7731     l_subtree_doc          xmldom.DOMDocument;
7732     l_xml_root_node        xmldom.DOMNode;
7733     l_new_xml_root_node    xmldom.DOMNode;
7734     l_out_xml_node         xmldom.DOMNode;
7735     l_ui_contents_xml_node xmldom.DOMNode;
7736     l_jrad_doc             CZ_UI_TEMPLATES.jrad_doc%TYPE;
7737 
7738   BEGIN
7739 
7740     l_jrad_doc := get_JRAD_Name(G_NSTD_CONTAINER_TEMPLATE_ID, G_GLOBAL_TEMPLATES_UI_DEF_ID);
7741 
7742     --
7743     -- parse document(template) which is going to be nested element
7744     --
7745     l_subtree_doc := parse_JRAD_Document(l_jrad_doc);
7746 
7747     IF xmldom.isNull(l_subtree_doc) THEN
7748        add_Error_Message(p_message_name => 'CZ_WRONG_UI_TEMPLATE',
7749                          p_token_name   => 'UI_TEMPLATE',
7750                          p_token_value  => l_jrad_doc,
7751                          p_fatal_error  => TRUE);
7752        RAISE WRONG_UI_TEMPLATE;
7753     END IF;
7754 
7755     --
7756     -- get subdocument's root node
7757     --
7758     l_xml_root_node := xmldom.makeNode(xmldom.getDocumentElement(l_subtree_doc));
7759 
7760     --
7761     -- remove common attributes of container and subtree
7762     --
7763     remove_TopLevel_Attributes(l_xml_root_node);
7764 
7765     --
7766     -- set Attributes for this subtree = Template
7767     --
7768     set_Template_Attributes(p_xml_root_node => l_xml_root_node,
7769                             p_ui_node       => p_ui_node);
7770 
7771     --
7772     -- this is a requirement from cz runtime : controllerClass must be =NULL
7773     --
7774     set_Attribute(l_xml_root_node,'controllerClass','');
7775 
7776     --
7777     -- returns cloned DOM subtree
7778     --
7779     --l_new_xml_root_node := xmldom.cloneNode(l_xml_root_node, TRUE);
7780     l_new_xml_root_node := cloneNode(l_xml_root_node, p_parent_xml_node);
7781 
7782     g_dom_elements_tbl(TO_NUMBER(p_ui_node.element_id)) := l_new_xml_root_node;
7783 
7784     IF xmldom.getNodeName(p_parent_xml_node) IN('oa:header','oa:stackLayout',
7785       'oa:flowLayout','oa:tableLayout','oa:rowLayout') THEN
7786 
7787       l_ui_contents_xml_node := getUIContents(p_parent_xml_node);
7788       l_out_xml_node := xmldom.appendChild(l_ui_contents_xml_node,
7789                                            l_new_xml_root_node);
7790     ELSE
7791       l_out_xml_node := xmldom.appendChild(p_parent_xml_node,
7792                                            l_new_xml_root_node);
7793     END IF;
7794 
7795     RETURN l_out_xml_node;
7796 
7797   END create_UIXML_Region;
7798 
7799   --
7800   -- replace XML JRAD element
7801   --
7802   FUNCTION replace_UIXML_Element(p_ui_node             IN CZ_UI_PAGE_ELEMENTS%ROWTYPE,
7803                                  p_parent_xml_node     xmldom.DOMNode,
7804                                  p_xml_node_to_replace xmldom.DOMNode)
7805     RETURN xmldom.DOMNode IS
7806 
7807     l_subtree_doc           xmldom.DOMDocument;
7808     l_xml_root_node         xmldom.DOMNode;
7809     l_new_xml_root_node     xmldom.DOMNode;
7810     l_out_xml_node          xmldom.DOMNode;
7811     l_tabxml_uicontens_node xmldom.DOMNode;
7812     l_tabxml_node           xmldom.DOMNode;
7813     l_xml_node              xmldom.DOMNode;
7814     l_parent_xml_node       xmldom.DOMNode;
7815     l_child_nodes_tbl       xmldom.DOMNodeList;
7816     l_jrad_doc              CZ_UI_TEMPLATES.jrad_doc%TYPE;
7817     l_node                  CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE;
7818     l_user_attribute4       VARCHAR2(4000);
7819     l_user_attribute        VARCHAR2(4000);
7820     l_drilldown_text_id     NUMBER;
7821     l_ui_action_id          NUMBER;
7822     l_length                NUMBER;
7823     l_use_by_reference      BOOLEAN;
7824     l_curr_parent_xml_node    xmldom.DOMNode;
7825     l_attribute_value           VARCHAR2(32000);
7826     l_xml_node_name             VARCHAR2(4000);
7827     l_old_switcher_xml_id       VARCHAR2(4000);
7828     l_user_attribute3_value     VARCHAR2(32000);
7829     l_switcher_casename         VARCHAR2(4000);
7830     l_new_attribute_value       VARCHAR2(32000);
7831     l_switcher_xml_id           VARCHAR2(4000);
7832     l_uicase_name               VARCHAR2(4000);
7833 
7834 
7835   BEGIN
7836 
7837     l_node := get_Model_Node_By_Persist_Id(p_ui_node.persistent_node_id,g_UI_Context.devl_project_id);
7838 
7839     IF p_ui_node.ctrl_template_id IS NULL AND p_ui_node.element_type=G_UI_DRILLDOWN_NODE_TYPE THEN
7840       BEGIN
7841         l_new_xml_root_node := xmldom.removeChild(p_parent_xml_node,p_xml_node_to_replace);
7842       EXCEPTION
7843         WHEN OTHERS THEN
7844           l_tabxml_node := find_Table_Of_XML_Node(p_parent_xml_node, p_ui_node.element_id);
7845           IF NOT(xmldom.IsNull(l_tabxml_node)) THEN
7846             l_tabxml_uicontens_node := getUIContents(l_tabxml_node);
7847             l_new_xml_root_node := xmldom.removeChild(l_tabxml_uicontens_node,p_xml_node_to_replace);
7848           END IF;
7849       END;
7850       RETURN p_parent_xml_node;
7851     END IF;
7852 
7853     l_use_by_reference := is_Used_By_Reference(p_detailed_type_id => l_node.detailed_type_id,
7854                                                p_ctrl_template_id => p_ui_node.ctrl_template_id);
7855 
7856     l_user_attribute4 := get_Attribute_Value(p_xml_node_to_replace, G_USER_ATTRIBUTE4_NAME);
7857     l_user_attribute :=  get_User_Attribute(l_user_attribute4, 'elementType');
7858 
7859     IF l_user_attribute IS NOT NULL AND (NOT l_user_attribute = '6011') THEN
7860       l_use_by_reference := FALSE;
7861     END IF;
7862 
7863     l_jrad_doc := get_JRAD_Name(p_template_id => p_ui_node.ctrl_template_id);
7864 
7865     l_subtree_doc := parse_JRAD_Document(l_jrad_doc);
7866 
7867     IF xmldom.isNull(l_subtree_doc) THEN
7868       add_Error_Message(p_message_name => 'CZ_WRONG_UI_TEMPLATE',
7869                         p_token_name   => 'UI_TEMPLATE',
7870                         p_token_value  => l_jrad_doc,
7871                         p_fatal_error  => TRUE);
7872        RAISE WRONG_UI_TEMPLATE;
7873     END IF;
7874 
7875     --
7876     -- get subdocument's root node
7877     --
7878     l_xml_root_node := xmldom.makeNode(xmldom.getDocumentElement(l_subtree_doc));
7879 
7880     --
7881     -- remove common attributes of container and subtree
7882     --
7883     remove_TopLevel_Attributes(l_xml_root_node);
7884 
7885     --
7886     -- set Attributes for this subtree = Template
7887     --
7888     set_Template_Attributes(p_xml_root_node => l_xml_root_node,
7889                             p_ui_node       => p_ui_node);
7890 
7891    IF l_use_by_reference  THEN
7892       --
7893       -- returns cloned DOM subtree
7894       --
7895       --l_new_xml_root_node := xmldom.cloneNode(l_xml_root_node,TRUE);
7896       l_new_xml_root_node := cloneNode(l_xml_root_node, p_parent_xml_node);
7897 
7898 
7899       --
7900       -- set "extends" attribute
7901       --
7902       xmldom.setAttribute(xmldom.makeElement(l_new_xml_root_node),'extends',l_jrad_doc);
7903 
7904       l_user_attribute4 := get_Attribute_Value(l_new_xml_root_node,
7905                                                G_USER_ATTRIBUTE4_NAME);
7906       IF l_user_attribute4 IS NOT NULL THEN
7907         set_User_Attribute(p_cz_attribute_name    => 'name',
7908                            p_cz_attribute_value   => p_ui_node.name,
7909                            px_xml_attribute_value => l_user_attribute4);
7910         IF p_ui_node.element_signature_id IS NOT NULL THEN
7911            set_User_Attribute(p_cz_attribute_name    => 'elementType',
7912                               p_cz_attribute_value   => '6011',
7913                               px_xml_attribute_value => l_user_attribute4);
7914 
7915         END IF;
7916         set_Attribute(l_new_xml_root_node,
7917                       G_USER_ATTRIBUTE4_NAME,
7918                       l_user_attribute4);
7919 
7920       END IF;
7921 
7922       --
7923       -- remove content of template subtree
7924       --
7925       l_child_nodes_tbl:=xmldom.getChildNodes(l_new_xml_root_node);
7926 
7927       --
7928       -- we need to get length of array of child nodes
7929       -- to go through the array in loop
7930       --
7931       l_length := xmldom.getLength(l_child_nodes_tbl);
7932       FOR k IN 0..l_length-1
7933       LOOP
7934         --
7935         -- get next child DOM node
7936         --
7937         l_xml_node := xmldom.item(l_child_nodes_tbl, k);
7938         l_out_xml_node:=xmldom.removeChild(l_new_xml_root_node,l_xml_node);
7939       END LOOP;
7940 
7941     ELSE  -- use by Copy
7942       l_child_nodes_tbl := xmldom.getElementsByTagName(xmldom.makeElement(l_xml_root_node), '*');
7943       l_length := xmldom.getLength(l_child_nodes_tbl);
7944       IF (l_length > 0) THEN
7945         FOR k IN 0..l_length-1
7946         LOOP
7947           --
7948           -- get next child DOM node
7949           --
7950           l_xml_node := xmldom.item(l_child_nodes_tbl, k);
7951 
7952           IF p_ui_node.ctrl_template_id=g_DRILLDOWN_TEMPLATE_ID THEN
7953 
7954             IF attribute_Value(l_xml_node, 'source') IS NULL AND
7955                g_UI_Context.DRILLDOWN_IMAGE_URL IS NOT NULL THEN
7956                set_Attribute(l_xml_node,
7957                              'source',
7958                               g_UI_Context.DRILLDOWN_IMAGE_URL);
7959             END IF;
7960 
7961             l_user_attribute := get_Attribute_Value(l_xml_node,
7962                                                    G_USER_ATTRIBUTE3_NAME);
7963 
7964             IF l_user_attribute IS NOT NULL THEN
7965 
7966               IF  g_UI_Context.DRILLDOWN_CONTROL_TEXT_ID IS NOT NULL THEN
7967 
7968                  l_drilldown_text_id := copy_Intl_Text(g_UI_Context.DRILLDOWN_CONTROL_TEXT_ID,
7969                                                        g_UI_Context.ui_def_id,
7970                                                        p_ui_node.page_id, p_ui_node.element_id);
7971 
7972                  set_User_Attribute(p_cz_attribute_name    => 'captionIntlTextId',
7973                                     p_cz_attribute_value   => TO_CHAR(l_drilldown_text_id),
7974                                     px_xml_attribute_value => l_user_attribute);
7975 
7976                  set_User_Attribute(p_cz_attribute_name    => 'rolloverIntlTextId',
7977                                     p_cz_attribute_value   => TO_CHAR(l_drilldown_text_id),
7978                                     px_xml_attribute_value => l_user_attribute);
7979 
7980                END IF;
7981 
7982 
7983                BEGIN
7984                  l_ui_action_id := get_UI_Action_Id(p_ui_node);
7985                EXCEPTION
7986                  WHEN OTHERS THEN
7987                     NULL;
7988                END;
7989 
7990                IF l_ui_action_id IS NOT NULL THEN
7991 
7992                  set_User_Attribute(p_cz_attribute_name    => 'actionId',
7993                                     p_cz_attribute_value   => TO_CHAR(l_ui_action_id),
7994                                     px_xml_attribute_value => l_user_attribute);
7995 
7996                END IF;
7997 
7998                set_Attribute(l_xml_node,G_USER_ATTRIBUTE3_NAME,l_user_attribute);
7999 
8000              END IF;     -- end of IF l_user_attribute IS NOT NULL
8001           END IF;   -- end of IF p_ui_node.ctrl_template_id=g_DRILLDOWN_TEMPLATE_ID THEN
8002 
8003           IF k > 0 THEN
8004 
8005             l_curr_parent_xml_node := xmldom.getParentNode(l_xml_node);
8006 
8007             l_attribute_value := get_Attribute_Value(l_xml_node, G_ID_ATTRIBUTE);
8008 
8009             l_xml_node_name := xmldom.getNodeName(l_xml_node);
8010 
8011             IF l_attribute_value IS NOT NULL THEN
8012               l_new_attribute_value := handle_JRAD_Id(l_attribute_value,p_ui_node.element_id);
8013               l_new_attribute_value := REPLACE(REPLACE(l_new_attribute_value,'_czt','_czn'), '_czc','_czn');
8014               set_Attribute(xmldom.makeElement(l_xml_node),G_ID_ATTRIBUTE, l_new_attribute_value);
8015             END IF;
8016 
8017             --
8018             -- set value of user attribute "switcherDefaultCaseName" to new jrad id of <oa:switcher>
8019             --
8020             IF xmldom.getNodeName(l_xml_node)='oa:switcher' THEN
8021               l_old_switcher_xml_id := l_attribute_value;
8022               l_user_attribute3_value := get_Attribute_Value(l_xml_node, G_USER_ATTRIBUTE3_NAME);
8023               l_switcher_casename := get_User_Attribute(l_user_attribute3_value ,'switcherDefaultCaseName');
8024               l_switcher_casename := REPLACE(l_switcher_casename,l_attribute_value, l_new_attribute_value);
8025               l_switcher_casename := REPLACE(REPLACE(l_switcher_casename,'_czt','_czn'), '_czc','_czn');
8026               set_User_Attribute(p_cz_attribute_name    => 'switcherDefaultCaseName',
8027                                  p_cz_attribute_value   => l_switcher_casename,
8028                                  px_xml_attribute_value => l_user_attribute3_value);
8029 
8030               set_Attribute(l_xml_node,
8031                             G_USER_ATTRIBUTE3_NAME,
8032                             l_user_attribute3_value);
8033             END IF;
8034 
8035             --
8036             -- set value of attribute "name" of <ui:case> to id of parent <oa:switcher>
8037             --
8038             IF (l_xml_node_name='ui:case' AND xmldom.getNodeName(l_curr_parent_xml_node)='oa:switcher') THEN
8039               l_switcher_xml_id := get_Attribute_Value(l_curr_parent_xml_node, G_ID_ATTRIBUTE);
8040               l_uicase_name     :=  get_Attribute_Value(l_xml_node, 'name');
8041               set_Attribute(xmldom.makeElement(l_xml_node),
8042                             'name',
8043                             REPLACE(REPLACE(REPLACE(l_uicase_name,l_old_switcher_xml_id,l_switcher_xml_id),'_czt','_czn'), '_czc', '_czn'));
8044               handle_UI_CASE_Id(l_xml_node);
8045             END IF;
8046 
8047             --
8048             -- if current tag is <oa:stackLayout>
8049             -- then replace old id with new one
8050             --
8051             IF (l_xml_node_name='oa:stackLayout' AND
8052                xmldom.getNodeName(l_curr_parent_xml_node)='ui:case') AND l_attribute_value IS NOT NULL THEN
8053               set_Attribute(xmldom.makeElement(l_xml_node),
8054                             G_ID_ATTRIBUTE,
8055                            REPLACE(REPLACE(get_Attribute_Value(l_curr_parent_xml_node, 'name'),'_czt','_czn'),'_czc','_czn'));
8056             END IF;
8057           END IF; -- end of  IF k > 0 THEN
8058 
8059         END LOOP;
8060       END IF; -- end of IF (l_length > 0) THEN
8061 
8062       --l_new_xml_root_node := xmldom.cloneNode(l_xml_root_node, TRUE);
8063       l_new_xml_root_node := cloneNode(l_xml_root_node, p_parent_xml_node);
8064 
8065 
8066       l_user_attribute4 := get_Attribute_Value(l_new_xml_root_node,
8067                                                G_USER_ATTRIBUTE4_NAME);
8068       IF l_user_attribute4 IS NOT NULL THEN
8069 
8070         set_User_Attribute(p_cz_attribute_name    => 'name',
8071                            p_cz_attribute_value   => p_ui_node.name,
8072                            px_xml_attribute_value => l_user_attribute4);
8073 
8074         IF p_ui_node.element_signature_id IS NOT NULL THEN
8075            set_User_Attribute(p_cz_attribute_name    => 'elementType',
8076                               p_cz_attribute_value   => TO_CHAR(p_ui_node.element_signature_id),
8077                               px_xml_attribute_value => l_user_attribute4);
8078 
8079         END IF;
8080 
8081         set_Attribute(l_new_xml_root_node,
8082                       G_USER_ATTRIBUTE4_NAME,
8083                       l_user_attribute4);
8084 
8085       END IF;
8086 
8087     END IF; -- end of use by Copy
8088 
8089     l_parent_xml_node := xmldom.getParentNode(p_xml_node_to_replace);
8090     IF g_using_new_UI_refresh THEN
8091       g_dom_elements_tbl.DELETE(TO_NUMBER(p_ui_node.element_id));
8092       g_dom_elements_tbl(TO_NUMBER(p_ui_node.element_id)) := l_new_xml_root_node;
8093       l_new_xml_root_node := xmldom.replaceChild(l_parent_xml_node,l_new_xml_root_node, p_xml_node_to_replace);
8094     ELSE
8095     BEGIN
8096       l_new_xml_root_node := xmldom.replaceChild(p_parent_xml_node,l_new_xml_root_node, p_xml_node_to_replace);
8097     EXCEPTION
8098       WHEN OTHERS THEN
8099         l_tabxml_node := find_Table_Of_XML_Node(p_parent_xml_node, p_ui_node.element_id);
8100         IF NOT(xmldom.IsNull(l_tabxml_node)) THEN
8101           l_tabxml_uicontens_node := getUIContents(l_tabxml_node);
8102           l_new_xml_root_node := xmldom.replaceChild(l_tabxml_uicontens_node, l_new_xml_root_node, p_xml_node_to_replace);
8103         END IF;
8104     END;
8105     END IF;
8106     RETURN p_parent_xml_node;
8107 
8108   EXCEPTION
8109     WHEN OTHERS THEN
8110       DEBUG('replace_UIXML_Element() : '||SQLERRM);
8111       RETURN p_parent_xml_node;
8112   END replace_UIXML_Element;
8113 
8114 
8115   PROCEDURE refresh_Model_Path(p_ui_element_id       VARCHAR2,
8116                                p_ui_page_id          NUMBER,
8117                                p_persistent_node_id  NUMBER,
8118                                p_xml_node_to_refresh xmldom.DOMNode) IS
8119 
8120     l_new_model_path        VARCHAR2(32000);
8121     l_current_model_path    VARCHAR2(32000);
8122     l_user_attribute3       VARCHAR2(32000);
8123     l_ui_node_expl_id       NUMBER;
8124     l_ui_action_id          NUMBER;
8125 
8126   BEGIN
8127 
8128     IF p_persistent_node_id IS NOT NULL THEN
8129       --
8130       -- get value of "user:attribute1"
8131       --
8132       l_current_model_path  := get_Attribute_Value(p_xml_node_to_refresh,
8133                                                  G_USER_ATTRIBUTE1_NAME);
8134 
8135       IF l_current_model_path IS NOT NULL THEN
8136 
8137         SELECT model_ref_expl_id INTO l_ui_node_expl_id FROM CZ_UI_PAGE_ELEMENTS
8138          WHERE ui_def_id=g_UI_Context.ui_def_id AND page_id=p_ui_page_id AND element_id=p_ui_element_id;
8139 
8140         l_new_model_path := get_Runtime_Relative_Path(p_model_id             => g_UI_Context.devl_project_id,
8141                                                       p_persistent_node_id   => p_persistent_node_id,
8142                                                       p_page_id              => p_ui_page_id,
8143                                                       p_ui_node_expl_id      => l_ui_node_expl_id);
8144 
8145          IF l_new_model_path IS NOT NULL THEN
8146           --
8147           -- attribute1 is always used only for model_path
8148           --
8149           set_Attribute(p_xml_node_to_refresh,
8150                         G_USER_ATTRIBUTE1_NAME,
8151                         'model_path='||l_new_model_path);
8152          END IF;
8153 
8154       END IF; -- end of IF l_current_model_path IS NOT NULL
8155     END IF; -- end of IF p_persistent_node_id IS NOT NULL
8156 
8157     l_user_attribute3  := get_Attribute_Value(p_xml_node_to_refresh,
8158                                               G_USER_ATTRIBUTE3_NAME);
8159 
8160     IF l_user_attribute3 IS NOT NULL THEN
8161 
8162       BEGIN
8163         l_ui_action_id := TO_NUMBER(get_User_Attribute(l_user_attribute3,'actionId'));
8164       EXCEPTION
8165         WHEN OTHERS THEN
8166           l_ui_action_id := NULL;
8167       END;
8168 
8169       IF l_ui_action_id IS NOT NULL THEN
8170         FOR i IN(SELECT target_persistent_node_id,target_expl_node_id FROM CZ_UI_ACTIONS
8171                  WHERE ui_def_id=g_UI_Context.ui_def_id AND
8172                        source_page_id=p_ui_page_id AND
8173                        element_id=p_ui_element_id AND
8174                        target_node_path IS NOT NULL AND
8175                        deleted_flag=G_NO_FLAG)
8176         LOOP
8177           l_new_model_path := get_Runtime_Relative_Path(p_model_id             => g_UI_Context.devl_project_id,
8178                                                         p_persistent_node_id   => i.target_persistent_node_id,
8179                                                         p_page_id              => p_ui_page_id,
8180                                                         p_ui_node_expl_id      => i.target_expl_node_id);
8181 
8182           IF l_new_model_path IS NOT NULL THEN
8183             UPDATE CZ_UI_ACTIONS
8184                SET target_node_path=l_new_model_path
8185              WHERE ui_def_id=g_UI_Context.ui_def_id AND
8186                    source_page_id=p_ui_page_id AND
8187                    element_id=p_ui_element_id AND
8188                    target_node_path<>l_new_model_path;
8189           END IF;
8190         END LOOP;
8191       END IF; -- end of IF l_action_id IS NOT NULL ...
8192 
8193     END IF;  -- end of IF l_user_attribute3 IS NOT NULL
8194 
8195   EXCEPTION
8196     WHEN OTHERS THEN
8197       NULL;
8198   END refresh_Model_Path;
8199 
8200   PROCEDURE refresh_All_Model_Paths(p_xml_doc     xmldom.DOMDocument,
8201                                     p_page_id     NUMBER) IS
8202 
8203     l_node                xmldom.DOMNode;
8204     l_nodeslist           xmldom.DOMNodeList;
8205     l_empty_xml_node      xmldom.DOMNode;
8206     l_length              NUMBER;
8207     l_element_id          VARCHAR2(32000);
8208     l_persistent_node_id  NUMBER;
8209     l_exists_in_page_elem BOOLEAN;
8210 
8211   BEGIN
8212 
8213     l_nodeslist := xmldom.getElementsByTagName(p_xml_doc, '*');
8214     l_length    := xmldom.getLength(l_nodeslist);
8215 
8216     --
8217     -- delete XML elements
8218     --
8219     FOR i IN 0..l_length-1
8220     LOOP
8221         l_node := xmldom.item(l_nodeslist, i);
8222         l_element_id := get_Attribute_Value(l_node, G_ID_ATTRIBUTE);
8223         IF l_element_id IS NOT NULL THEN
8224            BEGIN
8225              SELECT persistent_node_id INTO l_persistent_node_id FROM CZ_UI_PAGE_ELEMENTS
8226              WHERE ui_def_id=g_UI_Context.ui_def_id AND
8227                    page_id=p_page_id AND
8228                    element_id=l_element_id;
8229 
8230              refresh_Model_Path(p_ui_element_id      => l_element_id,
8231                                p_ui_page_id          => p_page_id,
8232                                p_persistent_node_id  => l_persistent_node_id,
8233                                p_xml_node_to_refresh => l_node);
8234            EXCEPTION
8235              WHEN NO_DATA_FOUND THEN
8236                refresh_Model_Path(p_ui_element_id       => l_element_id,
8237                                   p_ui_page_id          => p_page_id,
8238                                   p_persistent_node_id  => NULL,
8239                                   p_xml_node_to_refresh => l_node);
8240            END;
8241 
8242         END IF;
8243 
8244     END LOOP;
8245 
8246   END refresh_All_Model_Paths;
8247 
8248   ---------------------------------------------------------------------
8249   ------------------- JDR DOC BUILDER / XML Parsing -------------------
8250   ---------------------------------------------------------------------
8251 
8252   --
8253   -- get attributes of a given DOM node
8254   -- Parameters : p_node - DOM node
8255   -- Return     : array of attributes in format of  attributes_tbl_type array
8256   --
8257   FUNCTION get_Attributes(p_node IN xmldom.DOMNode)
8258     RETURN attributes_tbl_type IS
8259 
8260     l_attr_tbl     attributes_tbl_type;
8261     l_node_map_tbl xmldom.DOMNamedNodeMap;
8262     l_node_attr    xmldom.DOMNode;
8263     l_index        NUMBER;
8264     l_length       NUMBER;
8265 
8266   BEGIN
8267     l_node_map_tbl := xmldom.getAttributes(p_node);
8268     IF (xmldom.isNull(l_node_map_tbl) = FALSE) THEN
8269       l_length := xmldom.getLength(l_node_map_tbl);
8270       --
8271       -- loop through attributes
8272       --
8273       l_index := 1;
8274       FOR i IN 0 .. l_length - 1
8275       LOOP
8276         l_node_attr := xmldom.item(l_node_map_tbl, i);
8277         l_attr_tbl(l_index).NAME := xmldom.getNodeName(l_node_attr);
8278         l_attr_tbl(l_index).VALUE := xmldom.getNodeValue(l_node_attr);
8279         l_index := l_index + 1;
8280       END LOOP;
8281     END IF;
8282     RETURN l_attr_tbl;
8283   END get_Attributes;
8284 
8285   --
8286   -- set attributes for JRAD doc builder element p_jraddoc_node
8287   -- to attributes of DOM node p_node
8288   -- so this means that we just copy all attributes from DOM Node p_node
8289   -- to attributes of jdr_docbuilder.Element p_jraddoc_node
8290   -- it is used when DOM tree is converted to JRAD document
8291   --  Parameters : p_node - DOM node
8292   --               p_jraddoc_node - JRAD doc builder element
8293   -- Notes : it is not used in UI Generation/UI Refresh process directly
8294   --
8295   PROCEDURE set_Attributes(p_node         xmldom.DOMNode,
8296                            p_jraddoc_node jdr_docbuilder.Element) IS
8297 
8298     l_attr_tbl attributes_tbl_type;
8299 
8300   BEGIN
8301     l_attr_tbl := get_Attributes(p_node);
8302     IF l_attr_tbl.COUNT > 0 THEN
8303       FOR l IN l_attr_tbl.FIRST .. l_attr_tbl.LAST
8304       LOOP
8305         jdr_docbuilder.setAttribute(p_jraddoc_node,
8306                                     l_attr_tbl(l).NAME,
8307                                     l_attr_tbl(l).VALUE);
8308       END LOOP;
8309       l_attr_tbl.DELETE;
8310     END IF;
8311   END set_Attributes;
8312 
8313   --
8314   -- create JRAD element based on a given VARCHAR2 string
8315   -- which must be in the following form :
8316   --  <NS>:<Tag>
8317   -- Example : 'oa:button'
8318   --
8319   -- Parameters : p_node_name - VARCHAR2 string which contains string
8320   -- described above
8321   --
8322   FUNCTION createElement(p_node_name IN VARCHAR2)
8323     RETURN jdr_docbuilder.Element IS
8324 
8325     l_ns VARCHAR2(255);
8326     l_el VARCHAR2(255);
8327 
8328   BEGIN
8329     l_ns := SUBSTR(p_node_name, 1, INSTR(p_node_name, ':'));
8330     l_el := SUBSTR(p_node_name, INSTR(p_node_name, ':') + 1);
8331 
8332     RETURN jdr_docbuilder.createElement(l_ns, l_el);
8333   END createElement;
8334 
8335   --
8336   -- recursive procedure which
8337   -- scans DOM tree and create a corresponding JRAD document
8338   -- Parameters :
8339   --  p_nodeList - list of DOM nodes of the current level in DOM tree
8340   --  p_groupingTag - identifies XML grouping tag
8341   --  p_parent      - identifes parent JRAD docbuilder element
8342   --
8343   PROCEDURE traverse_DOM_Tree(p_nodeList    xmldom.DOMNodeList,
8344                               p_groupingTag VARCHAR2,
8345                               p_parent      jdr_docbuilder.Element) IS
8346 
8347     l_next_level_tbl xmldom.DOMNodeList;
8348     l_node           xmldom.DOMNode;
8349     l_parent_xml_node xmldom.DOMNode;
8350     l_attr_tbl       attributes_tbl_type;
8351     l_child          jdr_docbuilder.Element;
8352     l_tag_name       VARCHAR2(255);
8353     l_parent_tag_name VARCHAR2(255);
8354     l_grouping_tag   VARCHAR2(255);
8355     l_ns             VARCHAR2(255);
8356     l_gr             VARCHAR2(255);
8357     l_attr_value     VARCHAR2(32000);
8358     l_st             VARCHAR2(1) := '';
8359     l_length         NUMBER;
8360 
8361   BEGIN
8362 
8363     --
8364     -- now we have a DOM tree of the target JRAD document
8365     -- and we need to populate JRAD tables by using jdr_docbuilder API
8366     --
8367     l_length := xmldom.getLength(p_nodeList);
8368 
8369     FOR i IN 0 .. l_length - 1
8370     LOOP
8371       l_node := xmldom.item(p_nodeList, i);
8372 
8373       l_tag_name := xmldom.getNodeName(l_node);
8374 
8375       l_parent_xml_node := xmldom.getParentNode(l_node);
8376 
8377       IF NOT(xmldom.isNull(l_parent_xml_node)) THEN
8378         l_parent_tag_name := xmldom.getNodeName(l_parent_xml_node);
8379       END IF;
8380 
8381       l_grouping_tag := '';
8382 
8383       l_attr_tbl     := get_Attributes(l_node);
8384 
8385       IF l_attr_tbl.COUNT = 0 AND l_tag_name NOT IN('ui:firePartialAction') THEN
8386 
8387         --
8388         -- this is grouping tag
8389         --
8390         l_grouping_tag := l_tag_name;
8391 
8392       END IF;
8393 
8394       l_st := NULL;
8395 
8396       IF p_groupingTag IS NOT NULL THEN
8397 
8398         l_child := createElement(l_tag_name);
8399 
8400         l_st := G_YES_FLAG;
8401 
8402         IF l_attr_tbl.COUNT > 0 THEN
8403           FOR l IN l_attr_tbl.FIRST .. l_attr_tbl.LAST
8404           LOOP
8405             l_attr_value := l_attr_tbl(l).VALUE;
8406 
8407               l_attr_value := REPLACE(l_attr_value, G_UMPERS, G_UMPERS||'amp;');
8408               l_attr_value := REPLACE(l_attr_value, '<', G_UMPERS||'lt;');
8409               l_attr_value := REPLACE(l_attr_value, '>', G_UMPERS||'gt;');
8410               l_attr_value := REPLACE(l_attr_value, '"', G_UMPERS||'quot;');
8411               l_attr_value := REPLACE(l_attr_value, '''', G_UMPERS||'apos;');
8412 
8413             jdr_docbuilder.setAttribute(l_child,
8414                                         l_attr_tbl(l).NAME,
8415                                         l_attr_value);
8416           END LOOP;
8417           l_attr_tbl.DELETE;
8418         END IF; -- end of IF l_attr_tbl.COUNT > 0 THEN
8419 
8420         l_ns := SUBSTR(p_groupingTag, 1, INSTR(p_groupingTag, ':'));
8421         l_gr := SUBSTR(p_groupingTag, INSTR(p_groupingTag, ':') + 1);
8422 
8423         IF l_ns IS NULL THEN
8424           l_ns := 'jrad:';
8425         END IF;
8426         jdr_docbuilder.addChild(p_parent, l_ns, l_gr, l_child);
8427 
8428         /* new jdr_docbuilder function */
8429 
8430       ELSE
8431        IF (l_tag_name='ui:case' AND
8432          l_parent_tag_name IN('oa:switcher')) OR
8433          (l_tag_name='oa:stackLayout' AND l_parent_tag_name = 'ui:case') THEN
8434 
8435           l_child := createElement(l_tag_name);
8436 
8437           l_st := G_YES_FLAG;
8438           IF l_attr_tbl.COUNT > 0 THEN
8439             FOR l IN l_attr_tbl.FIRST .. l_attr_tbl.LAST
8440             LOOP
8441               l_attr_value := l_attr_tbl(l).VALUE;
8442 
8443               l_attr_value := REPLACE(l_attr_value, G_UMPERS, G_UMPERS||'amp;');
8444               l_attr_value := REPLACE(l_attr_value, '<', G_UMPERS||'lt;');
8445               l_attr_value := REPLACE(l_attr_value, '>', G_UMPERS||'gt;');
8446               l_attr_value := REPLACE(l_attr_value, '"', G_UMPERS||'quot;');
8447               l_attr_value := REPLACE(l_attr_value, '''', G_UMPERS||'apos;');
8448 
8449               jdr_docbuilder.setAttribute(l_child,
8450                                           l_attr_tbl(l).NAME,
8451                                           l_attr_value);
8452 
8453             END LOOP;
8454             l_attr_tbl.DELETE;
8455           END IF;
8456 
8457           jdr_docbuilder.addChild(p_parent, l_child);
8458 
8459         END IF;
8460 
8461         NULL;
8462       END IF; -- end of IF p_groupingTag IS NOT NULL THEN
8463 
8464       l_next_level_tbl := xmldom.getChildNodes(l_node);
8465       IF NOT(xmldom.isNull(l_next_level_tbl)) AND
8466          xmldom.getLENGTH(l_next_level_tbl) <> 0 THEN
8467 
8468         IF l_st IS NULL THEN
8469           traverse_DOM_Tree(l_next_level_tbl,
8470                             l_grouping_tag,
8471                             p_parent);
8472         ELSE
8473           traverse_DOM_Tree(l_next_level_tbl,
8474                             l_grouping_tag,
8475                             l_child);
8476         END IF;
8477       END IF;
8478 
8479     END LOOP;
8480 
8481   END traverse_DOM_Tree;
8482 
8483   FUNCTION get_JRADNLS_Lang RETURN VARCHAR2 IS
8484     l_lang VARCHAR2(255);
8485   BEGIN
8486     SELECT ISO_LANGUAGE||'-'||
8487            ISO_TERRITORY
8488       INTO l_lang
8489       FROM FND_LANGUAGES_VL
8490      WHERE language_code=USERENV('LANG');
8491     RETURN l_lang;
8492   EXCEPTION
8493     WHEN OTHERS THEN
8494       RETURN 'EN-US';
8495   END get_JRADNLS_Lang;
8496 
8497   --
8498   -- convert DOM Tree to JRAD record sets
8499   -- by ising DOM methods AND jdr_docbuilder API
8500   -- Parameters : p_jrad_doc_name - specifies full JRAD name of
8501   --              document that will be created from DOM tree
8502   --              which is identified by global DOM Document variable g_DOC
8503   --
8504   PROCEDURE convert_DOM_to_JRAD(p_doc           xmldom.DOMDocument,
8505                                 p_jrad_doc_name IN VARCHAR2) IS
8506 
8507     l_dom_root_node xmldom.DOMNode;
8508     l_topLevel      jdr_docbuilder.Element;
8509     l_status        PLS_INTEGER;
8510     l_lang          VARCHAR2(255);
8511   BEGIN
8512 
8513     g_DOC := p_doc;
8514 
8515     --
8516     -- refresh global jdr_docbuilder's structures
8517     --
8518     jdr_docbuilder.refresh;
8519 
8520     --
8521     -- get Document's root node
8522     --
8523     l_dom_root_node := xmldom.makeNode(xmldom.getDocumentElement(g_DOC));
8524 
8525     --
8526     -- remove top level xml attributes - jdrdocbuilder always adds these attributes
8527     -- so we don't need to have a duplicates
8528     --
8529     remove_TopLevel_Attributes(l_dom_root_node);
8530 
8531     l_lang := get_JRADNLS_Lang();
8532     --
8533     -- create a target JRAD document
8534     --
8535     g_JRADDOC := jdr_docbuilder.createDocument(p_jrad_doc_name, l_lang);
8536 
8537     --
8538     -- create root element of the target JRAD document
8539     --
8540     l_topLevel := createElement(xmldom.getNodeName(l_dom_root_node));
8541 
8542     --
8543     -- set top level attributes
8544     --
8545     set_Attributes(l_dom_root_node, l_topLevel);
8546 
8547     --
8548     -- set JRAD top level node
8549     --
8550     jdr_docbuilder.setTopLevelElement(g_JRADDOC, l_topLevel);
8551 
8552     --
8553     -- modify the source DOM tree and create the target JRAD document
8554     -- traverse_DOM_Tree() is recursive procedure
8555     --
8556     traverse_DOM_Tree(xmldom.getChildNodes(l_dom_root_node),
8557                       '',
8558                       l_topLevel);
8559 
8560     --
8561     -- finally SAVE the target JRAD document
8562     --
8563     l_status := jdr_docbuilder.SAVE;
8564 
8565   END convert_DOM_to_JRAD;
8566 
8567   --
8568   -- save JRAD document
8569   --
8570   PROCEDURE Save_Document(p_xml_doc  xmldom.DOMDocument,
8571                           p_doc_name IN VARCHAR2) IS
8572   BEGIN
8573     convert_DOM_to_JRAD(p_doc => p_xml_doc, p_jrad_doc_name => p_doc_name);
8574   END Save_Document;
8575 
8576   ---------------------------------------------------------------------
8577   ----------  end of JDR DOC BUILDER / XML Parsing Part ---------------
8578   ---------------------------------------------------------------------
8579 
8580   PROCEDURE set_UI_Global_Entities IS
8581   BEGIN
8582 
8583     IF NVL(g_UI_Context.preserve_model_hierarchy,G_YES_FLAG) = G_YES_FLAG THEN
8584       g_suppress_refresh_flag := G_NO_FLAG;
8585     ELSE
8586       g_suppress_refresh_flag := G_YES_FLAG;
8587     END IF;
8588 
8589     SELECT root_element_signature_id
8590       INTO g_DRILLDOWN_ELEM_SIGNATURE_ID
8591       FROM CZ_UI_TEMPLATES
8592      WHERE template_id=g_DRILLDOWN_TEMPLATE_ID AND
8593            ui_def_id=G_GLOBAL_TEMPLATES_UI_DEF_ID AND
8594            deleted_flag=G_NO_FLAG;
8595 
8596     IF g_DRILLDOWN_TEMPLATE_ID=G_DRILLDOWN_BUTTON_TEMPLATE_ID THEN
8597        g_DRILLDOWN_B_SIGNATURE_ID := g_DRILLDOWN_ELEM_SIGNATURE_ID;
8598     ELSE
8599       SELECT root_element_signature_id
8600         INTO g_DRILLDOWN_B_SIGNATURE_ID
8601         FROM CZ_UI_TEMPLATES
8602        WHERE ui_def_id=G_GLOBAL_TEMPLATES_UI_DEF_ID AND
8603              template_id=G_DRILLDOWN_BUTTON_TEMPLATE_ID AND
8604              deleted_flag=G_NO_FLAG;
8605     END IF;
8606 
8607     SELECT TEMPLATE_TOKEN INTO G_CAPTION_RULE_TOKENNAME FROM CZ_RULES
8608     WHERE rule_id=G_DEFAULT_CAPTION_RULE_ID;
8609 
8610   END set_UI_Global_Entities;
8611 
8612   --
8613   -- get UI context
8614   --
8615   FUNCTION get_UI_Context(p_ui_def_id IN NUMBER) RETURN CZ_UI_DEFS%ROWTYPE IS
8616   BEGIN
8617     RETURN get_UI_Def_Node(p_ui_def_id);
8618   END get_UI_Context;
8619 
8620   --
8621   -- set global UI context
8622   --
8623   PROCEDURE set_UI_Context(p_ui_def_id IN NUMBER) IS
8624     l_ui_def_id          NUMBER;
8625   BEGIN
8626     l_ui_def_id := p_ui_def_id; -- this is to handle bug in 9i PL/SQL
8627     g_UI_Context := get_UI_Context(l_ui_def_id);
8628 
8629     IF g_UI_Context.ROWS_PER_TABLE=-1 THEN
8630       g_UI_Context.ROWS_PER_TABLE := 1000000;
8631     END IF;
8632 
8633     IF g_UI_CONTEXT.PAGIN_MAXCONTROLS=-1 THEN
8634       g_UI_CONTEXT.PAGIN_MAXCONTROLS := 1000000;
8635     END IF;
8636 
8637   END set_UI_Context;
8638 
8639   --
8640   -- set current global UI Context
8641   -- ( UI Generation mode )
8642   --
8643   FUNCTION create_UI_Context(p_model_id           IN NUMBER,
8644                              p_master_template_id IN NUMBER DEFAULT NULL,
8645                              p_ui_name            IN VARCHAR2 DEFAULT NULL,
8646                              p_description        IN VARCHAR2 DEFAULT NULL,
8647                              p_show_all_nodes     IN VARCHAR2 DEFAULT NULL,
8648                              p_create_empty_ui    IN VARCHAR2 DEFAULT NULL)
8649     RETURN CZ_UI_DEFS%ROWTYPE IS
8650 
8651     l_node                        CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE;
8652     l_page_ui_node                CZ_UI_PAGE_ELEMENTS%ROWTYPE;
8653     l_page_set_id                 CZ_UI_PAGE_SETS.page_set_id%TYPE;
8654     l_page_ref_id                 CZ_UI_PAGE_REFS.page_ref_id%TYPE;
8655     l_page_set_type               CZ_UI_PAGE_SETS.page_set_type%TYPE;
8656     l_master_template_id          NUMBER;
8657 
8658   BEGIN
8659     l_master_template_id := p_master_template_id;  -- this is to handle bug in 9i PL/SQL
8660 
8661     --
8662     -- set UI context as UI Master Template Setting
8663     --
8664     set_UI_Context(l_master_template_id);
8665     g_UI_Context.from_master_template_id := l_master_template_id;
8666 
8667     IF g_UI_Context.ROWS_PER_TABLE=-1 THEN
8668       g_UI_Context.ROWS_PER_TABLE := 1000000;
8669     END IF;
8670     IF g_UI_CONTEXT.PAGIN_MAXCONTROLS=-1 THEN
8671       g_UI_CONTEXT.PAGIN_MAXCONTROLS := 1000000;
8672     END IF;
8673 
8674     --
8675     -- allocate a new ui_def_id for new UI
8676     --
8677     g_UI_Context.ui_def_id               := allocateId('CZ_UI_DEFS_S');
8678     g_UI_Context.devl_project_id         := p_model_id;
8679     g_UI_Context.component_id            := p_model_id;
8680     g_UI_Context.master_template_flag    := G_NO_FLAG;
8681     g_UI_Context.seeded_flag             := G_NO_FLAG;
8682     g_UI_Context.ui_style                := G_OA_STYLE_UI;
8683     g_UI_Context.from_master_template_id := NVL(l_master_template_id,G_DEFAULT_MASTER_TEMPLATE_ID);
8684     g_UI_Context.empty_ui_flag           := NVL(p_create_empty_ui,G_NO_FLAG);
8685 
8686     IF p_create_empty_ui IS NULL OR p_create_empty_ui='0' THEN
8687       g_UI_Context.suppress_refresh_flag   := '0';
8688     ELSE
8689       g_UI_Context.suppress_refresh_flag   := '1';
8690     END IF;
8691 
8692     g_UI_Context.persistent_ui_def_id    := g_UI_Context.ui_def_id;
8693     g_UI_Context.desc_text               := p_description;
8694     g_UI_Context.model_timestamp         := SYSDATE;
8695     g_UI_Context.ui_status               := G_NEW_UI_STATUS;
8696     g_UI_Context.show_all_nodes_flag     := NVL(p_show_all_nodes,G_NO_FLAG);
8697 
8698     IF g_UI_Context.start_url IS NULL THEN
8699       g_UI_Context.start_url := G_DEFAULT_START_URL;
8700     END IF;
8701 
8702     IF g_UI_Context.page_layout IS NULL THEN
8703       g_UI_Context.page_layout := G_DEFAULT_PAGE_LAYOUT;
8704     END IF;
8705 
8706     g_ui_def_nodes_tbl(g_UI_Context.ui_def_id) := g_UI_Context;
8707 
8708     --
8709     -- count number of UIs for a given model
8710     --
8711     SELECT COUNT(ui_def_id) + 1
8712       INTO g_UI_Context.tree_seq
8713       FROM CZ_UI_DEFS
8714      WHERE component_id = p_model_id AND
8715            deleted_flag = G_NO_FLAG;
8716 
8717     IF p_ui_name IS NULL THEN
8718       SELECT NAME || ' User Interface (' || TO_CHAR(g_UI_Context.tree_seq) || ')'
8719         INTO g_UI_Context.NAME
8720         FROM CZ_DEVL_PROJECTS
8721        WHERE devl_project_id = p_model_id;
8722     ELSE
8723       g_UI_Context.NAME      := p_ui_name;
8724     END IF;
8725 
8726     set_UI_Global_Entities();
8727 
8728     --
8729     -- create local UI Templates if they need to be created
8730     --
8731     create_Local_UI_Templates();
8732 
8733     INSERT INTO CZ_UI_DEFS
8734       (UI_DEF_ID,
8735        DESC_TEXT,
8736        NAME,
8737        DEVL_PROJECT_ID,
8738        COMPONENT_ID,
8739        TREE_SEQ,
8740        UI_STYLE,
8741        GEN_VERSION,
8742        TREENODE_DISPLAY_SOURCE,
8743        GEN_HEADER,
8744        LOOK_AND_FEEL,
8745        CONTROLS_PER_SCREEN,
8746        PRIMARY_NAVIGATION,
8747        PERSISTENT_UI_DEF_ID,
8748        MODEL_TIMESTAMP,
8749        UI_STATUS,
8750        PAGE_SET_ID,
8751        START_PAGE_ID,
8752        ERR_RUN_ID,
8753        START_URL,
8754        PAGE_LAYOUT,
8755        PRICE_UPDATE,
8756        SEEDED_FLAG,
8757        MASTER_TEMPLATE_FLAG,
8758        PRICE_DISPLAY,
8759        FROM_MASTER_TEMPLATE_ID,
8760        PAGIN_MAXCONTROLS,
8761        PAGIN_NONINST,
8762        PAGIN_NONINST_REFCOMP,
8763        CONTROL_LAYOUT,
8764        PAGIN_DRILLDOWNCTRL,
8765        OUTER_TEMPLATE_USAGE,
8766        PAGIN_BOMOC,
8767        BOMUI_LAYOUT,
8768        BOMQTYINPUTCTRLS,
8769        CTRLTEMPLUSE_BOM,
8770        CTRLTEMPLUSE_NONBOM,
8771        NONBOM_UILAYOUT,
8772        CTRLTEMPLUSE_COMMON,
8773        CTRLTEMPLUSE_REQDMSG,
8774        CTRLTEMPLUSE_OPTMSG,
8775        MENU_CAPTION_RULE_ID,
8776        PAGE_CAPTION_RULE_ID,
8777        PRESERVE_MODEL_HIERARCHY,
8778        EMPTY_UI_FLAG,
8779        SHOW_TRAIN,
8780        PAGINATION_SLOT,
8781        DRILLDOWN_CONTROL_TEXT_ID,
8782        DRILLDOWN_IMAGE_URL,
8783        ROWS_PER_TABLE,
8784        CTRLTEMPLATEUSE_BUTTONBAR,
8785        CTRLTEMPLATEUSE_UTILITYPAGE,
8786        OPTION_SORT_SELECT_FIRST,
8787        OPTION_SORT_ORDER,
8788        OPTION_SORT_METHOD,
8789        SHOW_ALL_NODES_FLAG,
8790        PAGE_STATUS_TEMPLATE_USAGE,
8791        suppress_refresh_flag,
8792        DELETED_FLAG,
8793        UI_TIMESTAMP_REFRESH,
8794        DRILLDOWN_TX_TYPE,
8795        CONTENT_LAST_UPDATE_DATE,
8796        DISABLE_AUTOOVERRIDE_FLAG
8797       )
8798       SELECT g_UI_Context.ui_def_id,
8799              g_UI_Context.desc_text,
8800              g_UI_Context.NAME,
8801              g_UI_Context.devl_project_id,
8802              g_UI_Context.component_id,
8803              g_UI_Context.tree_seq,
8804              g_UI_Context.ui_style,
8805              G_GEN_VERSION,
8806              TREENODE_DISPLAY_SOURCE,
8807              G_GEN_HEADER,
8808              LOOK_AND_FEEL,
8809              CONTROLS_PER_SCREEN,
8810              PRIMARY_NAVIGATION,
8811              g_UI_Context.persistent_ui_def_id,
8812              g_UI_Context.model_timestamp,
8813              g_UI_Context.ui_status,
8814              g_UI_Context.page_set_id,
8815              g_UI_Context.start_page_id,
8816              g_UI_Context.err_run_id,
8817              g_UI_Context.start_url,
8818              g_UI_Context.page_layout,
8819              G_DEFAULT_PRICE_UPDATE,
8820              '0',
8821              '0',
8822              G_DEFAULT_PRICE_DISPLAY,
8823              g_UI_Context.from_master_template_id,
8824              PAGIN_MAXCONTROLS,
8825              PAGIN_NONINST,
8826              PAGIN_NONINST_REFCOMP,
8827              CONTROL_LAYOUT,
8828              PAGIN_DRILLDOWNCTRL,
8829              OUTER_TEMPLATE_USAGE,
8830              PAGIN_BOMOC,
8831              BOMUI_LAYOUT,
8832              BOMQTYINPUTCTRLS,
8833              CTRLTEMPLUSE_BOM,
8834              CTRLTEMPLUSE_NONBOM,
8835              NONBOM_UILAYOUT,
8836              CTRLTEMPLUSE_COMMON,
8837              CTRLTEMPLUSE_REQDMSG,
8838              CTRLTEMPLUSE_OPTMSG,
8839              MENU_CAPTION_RULE_ID,
8840              PAGE_CAPTION_RULE_ID,
8841              PRESERVE_MODEL_HIERARCHY,
8842              NVL(p_create_empty_ui, G_NO_FLAG),
8843              SHOW_TRAIN,
8844              PAGINATION_SLOT,
8845              DRILLDOWN_CONTROL_TEXT_ID,
8846              DRILLDOWN_IMAGE_URL,
8847              ROWS_PER_TABLE,
8848              CTRLTEMPLATEUSE_BUTTONBAR,
8849              CTRLTEMPLATEUSE_UTILITYPAGE,
8850              OPTION_SORT_SELECT_FIRST,
8851              OPTION_SORT_ORDER,
8852              OPTION_SORT_METHOD,
8853              p_show_all_nodes,
8854              PAGE_STATUS_TEMPLATE_USAGE,
8855              g_UI_Context.suppress_refresh_flag,
8856              DELETED_FLAG,
8857              SYSDATE,
8858              DRILLDOWN_TX_TYPE,
8859              CONTENT_LAST_UPDATE_DATE,
8860              DISABLE_AUTOOVERRIDE_FLAG
8861     FROM CZ_UI_DEFS
8862     WHERE ui_def_id = g_UI_Context.from_master_template_id;
8863 
8864     --
8865     -- get root model node
8866     --
8867     l_node := get_Model_Node(p_model_id);
8868 
8869     --
8870     -- create root UI page
8871     --
8872     l_page_ui_node  := create_UI_Page(p_node          => l_node,
8873                                       x_page_set_id   => l_page_set_id,
8874                                       x_page_set_type => l_page_set_type,
8875                                       x_page_ref_id   => l_page_ref_id);
8876 
8877     g_UI_Context.start_page_id := l_page_ui_node.page_id;
8878     g_UI_Context.page_set_id   := l_page_set_id;
8879 
8880     UPDATE CZ_UI_DEFS
8881        SET start_page_id=g_UI_Context.start_page_id,
8882            page_set_id=g_UI_Context.page_set_id
8883      WHERE ui_def_id=g_UI_Context.ui_def_id;
8884 
8885     RETURN g_UI_Context;
8886 
8887   END create_UI_Context;
8888 
8889   --
8890   -- get UI context of target UI
8891   --
8892   FUNCTION get_Target_UI_Context(p_ui_def_node  IN CZ_UI_DEFS%ROWTYPE,
8893                                  p_reference_id IN NUMBER)
8894    RETURN CZ_UI_DEFS%ROWTYPE IS
8895     l_init_ui_def_id     NUMBER;
8896     l_target_ui_def_node CZ_UI_DEFS%ROWTYPE;
8897     l_old_context        CZ_UI_DEFS%ROWTYPE;
8898   BEGIN
8899     l_init_ui_def_id := p_ui_def_node.ui_def_id;
8900     l_old_context    := g_UI_Context;
8901 
8902     SELECT *
8903       INTO l_target_ui_def_node
8904       FROM CZ_UI_DEFS
8905      WHERE ui_def_id = (SELECT MAX(ui_def_id)
8906                           FROM CZ_UI_DEFS
8907                          WHERE devl_project_id = p_reference_id AND
8908                                ui_status IN (G_PROCESSED_UI_STATUS,G_NEW_UI_STATUS) AND
8909                                deleted_flag = G_NO_FLAG);
8910 
8911     /* ***  bug #3848809 ***
8912     IF g_UI_Context.PRIMARY_NAVIGATION=G_MODEL_TREE_MENU AND
8913        l_target_ui_def_node.PRIMARY_NAVIGATION <> G_MODEL_TREE_MENU THEN
8914 
8915       l_target_ui_def_node := create_UI_Context(p_model_id           => p_reference_id,
8916                                                 p_master_template_id => p_ui_def_node.from_master_template_id,
8917                                                 p_show_all_nodes     => p_ui_def_node.show_all_nodes_flag,
8918                                                 p_create_empty_ui    =>  p_ui_def_node.empty_ui_flag);
8919       --
8920       -- set global UI context
8921       --
8922       set_UI_Context(l_init_ui_def_id);
8923 
8924       RETURN l_target_ui_def_node;
8925 
8926     ELSE
8927     */
8928       RETURN l_target_ui_def_node;
8929     -- END IF;
8930 
8931   EXCEPTION
8932     WHEN NO_DATA_FOUND THEN
8933 
8934       l_target_ui_def_node := create_UI_Context(p_model_id           => p_reference_id,
8935                                                 p_master_template_id => p_ui_def_node.from_master_template_id,
8936                                                 p_show_all_nodes     => p_ui_def_node.show_all_nodes_flag,
8937                                                 p_create_empty_ui    => p_ui_def_node.empty_ui_flag);
8938       --
8939       -- set global UI context
8940       --
8941       --set_UI_Context(l_init_ui_def_id);
8942       g_UI_Context := l_old_context;
8943 
8944       RETURN l_target_ui_def_node;
8945   END get_Target_UI_Context;
8946 
8947   FUNCTION find_CX_On_UI_Page(p_page_id      IN NUMBER,
8948                               p_component_id IN NUMBER,
8949                               p_command_name IN VARCHAR2)
8950     RETURN VARCHAR2 IS
8951 
8952     l_page_persistent_node_id NUMBER;
8953 
8954   BEGIN
8955 
8956     SELECT persistent_node_id INTO l_page_persistent_node_id
8957     FROM CZ_UI_PAGES
8958     WHERE page_id=p_page_id AND ui_def_id=g_UI_Context.ui_def_id;
8959 
8960     FOR i IN (SELECT element_id FROM CZ_UI_PAGE_ELEMENTS
8961               WHERE ui_def_id=g_UI_Context.ui_def_id AND
8962                     page_id IN(SELECT page_id FROM CZ_UI_PAGES
8963                     WHERE ui_def_id=g_UI_Context.ui_def_id AND
8964                     persistent_node_id=l_page_persistent_node_id AND deleted_flag NOT IN(G_YES_FLAG,G_MARK_TO_DELETE)) AND
8965                     element_type=G_UI_CX_BUTTON_NODE_TYPE AND
8966                     persistent_node_id=(SELECT persistent_node_id FROM CZ_PS_NODES
8967                     WHERE ps_node_id=p_component_id)
8968                     AND deleted_flag NOT IN(G_YES_FLAG,G_MARK_TO_DELETE))
8969    LOOP
8970      FOR k IN(SELECT ui_action_id FROM CZ_UI_ACTIONS
8971               WHERE ui_def_id=g_UI_Context.ui_def_id AND element_id=i.element_id AND
8972                     cx_command_name=p_command_name AND deleted_flag=G_NO_FLAG)
8973      LOOP
8974        RETURN i.element_id;
8975      END LOOP;
8976    END LOOP;
8977    -- no CX on the page
8978    RETURN G_NO_FLAG;
8979   END find_CX_On_UI_Page;
8980 
8981   --
8982   -- create new CX button
8983   --
8984   PROCEDURE add_CX_Button(p_node                IN CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE,
8985                           p_ui_node             IN CZ_UI_PAGE_ELEMENTS%ROWTYPE) IS
8986 
8987     l_element_id             CZ_UI_PAGE_ELEMENTS.element_id%TYPE;
8988     l_parent_element_id      CZ_UI_PAGE_ELEMENTS.parent_element_id%TYPE;
8989     l_ui_action_id           CZ_UI_ACTIONS.ui_action_id%TYPE;
8990     l_name                   CZ_UI_PAGE_ELEMENTS.name%TYPE;
8991     l_page_path              VARCHAR2(32000);
8992     l_ui_intl_text_id        INTEGER;
8993     l_counter                INTEGER;
8994     l_new_node               BOOLEAN := FALSE;
8995 
8996     l_pb_model_ref_expl_id   NUMBER;
8997     l_pb_persistent_node_id  NUMBER;
8998     l_persistent_id          NUMBER;
8999     l_ref_model_id           NUMBER;
9000 
9001   BEGIN
9002 
9003     IF p_ui_node.suppress_refresh_flag=G_YES_FLAG THEN
9004       RETURN;
9005     END IF;
9006 
9007     FOR i IN(SELECT DISTINCT b.data_value, b.expr_node_id, a.INSTANTIATION_SCOPE, a.name
9008              FROM CZ_RULES a, CZ_EXPRESSION_NODES b
9009              WHERE a.devl_project_id=p_node.devl_project_id AND
9010                    a.component_id=p_node.ps_node_id AND
9011                    a.rule_type=G_CZ_EXTENTSIONS_RULE_TYPE AND
9012                    a.deleted_flag=G_NO_FLAG AND
9013                    a.disabled_flag=G_NO_FLAG AND
9014                    a.invalid_flag=G_NO_FLAG AND
9015                    b.rule_id=a.rule_id AND
9016                    b.deleted_flag=G_NO_FLAG AND
9017                    b.argument_signature_id=G_EVENT_ON_COMMAND_SIGID AND
9018                    data_value IS NOT NULL)
9019     LOOP
9020       -- do not create a CX for instantiable reference with
9021       -- instantiation_scope= INSTANCE
9022       IF p_node.ps_node_type=G_REFERENCE_TYPE AND
9023          p_node.instantiable_flag NOT IN(G_MANDATORY_INST_TYPE) AND
9024          i.INSTANTIATION_SCOPE=1 THEN
9025          add_Error_Message(p_message_name => 'CZ_CX_IS_IN_WRONG_SCOPE',
9026                             p_token_name1  => 'EVENT_NAME',
9027                             p_token_value1 => i.data_value,
9028                             p_token_name2  => 'RULE_NAME',
9029                             p_token_value2 => i.name,
9030                             p_fatal_error  => FALSE);
9031         RETURN;
9032       END IF;
9033       IF find_CX_On_UI_Page(p_ui_node.page_id, p_node.ps_node_id, i.data_value) = G_NO_FLAG THEN
9034 
9035         l_element_id := get_Element_Id();
9036         l_ui_intl_text_id := allocateId('CZ_INTL_TEXTS_S');
9037         INSERT INTO CZ_INTL_TEXTS
9038            (INTL_TEXT_ID,
9039             TEXT_STR,
9040             DELETED_FLAG,
9041             SEEDED_FLAG,
9042             UI_DEF_ID,
9043             MODEL_ID,
9044             UI_PAGE_ID,
9045             UI_PAGE_ELEMENT_ID
9046             )
9047         VALUES
9048            (l_ui_intl_text_id,
9049             i.data_value,
9050             G_NO_FLAG,
9051             G_NO_FLAG,
9052             g_UI_Context.ui_def_id,
9053             g_UI_Context.devl_project_id,
9054             p_ui_node.page_id,
9055             l_element_id
9056            );
9057         g_cx_names_tbl(TO_NUMBER(l_element_id)) := l_ui_intl_text_id;
9058 
9059         IF p_ui_node.parent_element_id IS NULL THEN
9060           l_parent_element_id := p_ui_node.element_id;
9061         ELSE
9062           l_parent_element_id := p_ui_node.parent_element_id;
9063         END IF;
9064         l_new_node := TRUE;
9065 
9066         SELECT COUNT(element_id)+1 INTO l_counter FROM CZ_UI_PAGE_ELEMENTS
9067         WHERE ui_def_id=g_UI_Context.ui_def_id AND
9068               page_id=p_ui_node.page_id AND
9069               ctrl_template_id=G_DRILLDOWN_BUTTON_TEMPLATE_ID AND
9070              deleted_flag NOT IN(G_YES_FLAG,G_MARK_TO_DELETE);
9071 
9072        l_name := G_DRILLDOWN_TEMPLATE_NAME||' - '||TO_CHAR(l_counter);
9073 
9074        INSERT INTO CZ_UI_PAGE_ELEMENTS
9075          (ui_def_id,
9076          persistent_node_id,
9077          parent_persistent_node_id,
9078          region_persistent_node_id,
9079          pagebase_persistent_node_id,
9080          page_id,
9081          base_page_flag,
9082          seq_nbr,
9083          ctrl_template_id,
9084          ctrl_template_ui_def_id,
9085          element_id,
9086          parent_element_id,
9087          element_type,
9088          instantiable_flag,
9089          model_ref_expl_id,
9090          element_signature_id,
9091          name,
9092          deleted_flag)
9093        VALUES
9094         (p_ui_node.ui_def_id,
9095          p_node.persistent_node_id,
9096          p_node.parent_persistent_node_id,
9097          p_ui_node.region_persistent_node_id,
9098          p_ui_node.pagebase_persistent_node_id,
9099          p_ui_node.page_id,
9100          NULL,
9101          p_ui_node.seq_nbr+1,
9102          G_DRILLDOWN_BUTTON_TEMPLATE_ID,
9103          G_GLOBAL_TEMPLATES_UI_DEF_ID,
9104          l_element_id,
9105          l_parent_element_id,
9106          G_UI_CX_BUTTON_NODE_TYPE,
9107          NULL,
9108          p_ui_node.model_ref_expl_id,
9109          g_DRILLDOWN_B_SIGNATURE_ID,
9110          l_name,
9111          G_MARK_TO_ADD);
9112 
9113          l_ui_action_id := allocateId('CZ_UI_ACTIONS_S');
9114 
9115          INSERT INTO CZ_UI_ACTIONS
9116          (
9117          ui_action_id
9118          ,ui_def_id
9119          ,source_page_id
9120          ,context_component_id
9121          ,element_id
9122          ,render_condition_id
9123          ,ui_action_type
9124          ,target_ui_def_id
9125          ,target_persistent_node_id
9126          ,target_node_path
9127          ,target_page_set_id
9128          ,target_page_id
9129          ,target_url
9130          ,frame_name
9131          ,target_anchor
9132          ,seeded_flag
9133          ,cx_command_name
9134          ,window_parameters
9135          ,target_window_type
9136          ,target_window_name
9137          ,target_expl_node_id
9138          ,deleted_flag
9139          )
9140          VALUES
9141          (
9142          l_ui_action_id
9143          ,p_ui_node.ui_def_id
9144          ,p_ui_node.page_id
9145          ,p_node.persistent_node_id
9146          ,l_element_id
9147          ,NULL
9148          ,G_CX_BUTTON_ACTION_TYPE
9149          ,NULL
9150          ,NULL
9151          ,NULL
9152          ,NULL
9153          ,NULL
9154          ,NULL
9155          ,NULL
9156          ,NULL
9157          ,'0'
9158          ,i.data_value
9159          ,NULL
9160          ,NULL
9161          ,NULL
9162          ,NULL
9163          ,G_NO_FLAG
9164          );
9165 
9166       END IF;
9167 
9168     END LOOP;
9169 
9170     IF p_node.ps_node_type=G_REFERENCE_TYPE THEN
9171 
9172     FOR i IN(SELECT a.model_ref_expl_id, b.data_value, a.component_id, b.expr_node_id, a.name, a.INSTANTIATION_SCOPE
9173              FROM CZ_RULES a, CZ_EXPRESSION_NODES b
9174              WHERE a.devl_project_id=p_node.devl_project_id AND
9175                    a.component_id IN
9176                (SELECT ps_node_id FROM CZ_PS_NODES
9177                 WHERE devl_project_id IN
9178                 (SELECT DISTINCT component_id FROM CZ_MODEL_REF_EXPLS
9179                 START WITH model_id=p_node.devl_project_id AND
9180                            referring_node_id=p_node.ps_node_id AND
9181                            deleted_flag='0'
9182                 CONNECT BY PRIOR model_ref_expl_id=parent_expl_node_id AND
9183                          deleted_flag='0' AND PRIOR deleted_flag='0') AND
9184                 deleted_flag='0') AND
9185                    a.rule_type=G_CZ_EXTENTSIONS_RULE_TYPE AND
9186                    a.deleted_flag=G_NO_FLAG AND
9187                    a.disabled_flag=G_NO_FLAG AND
9188                    a.invalid_flag=G_NO_FLAG AND
9189                    b.rule_id=a.rule_id AND
9190                    b.deleted_flag=G_NO_FLAG AND
9191                    b.argument_signature_id=G_EVENT_ON_COMMAND_SIGID AND
9192                    data_value IS NOT NULL)
9193       LOOP
9194 
9195         -- do not create a CX for instantiable reference with
9196         -- instantiation_scope= INSTANCE
9197         IF p_node.ps_node_type=G_REFERENCE_TYPE AND
9198            p_node.instantiable_flag NOT IN(G_MANDATORY_INST_TYPE) AND
9199            i.INSTANTIATION_SCOPE=1 THEN
9200           add_Error_Message(p_message_name => 'CZ_CX_IS_IN_WRONG_SCOPE',
9201                             p_token_name1  => 'EVENT_NAME',
9202                             p_token_value1 => i.data_value,
9203                             p_token_name2  => 'RULE_NAME',
9204                             p_token_value2 => i.name,
9205                             p_fatal_error  => FALSE);
9206           RETURN;
9207         END IF;
9208 
9209         IF find_CX_On_UI_Page(p_ui_node.page_id, p_node.ps_node_id, i.data_value) = G_NO_FLAG THEN
9210 
9211           l_element_id := get_Element_Id();
9212           l_ui_intl_text_id := allocateId('CZ_INTL_TEXTS_S');
9213           INSERT INTO CZ_INTL_TEXTS
9214            (INTL_TEXT_ID,
9215             TEXT_STR,
9216             DELETED_FLAG,
9217             SEEDED_FLAG,
9218             UI_DEF_ID,
9219             MODEL_ID,
9220             UI_PAGE_ID,
9221             UI_PAGE_ELEMENT_ID)
9222           VALUES
9223            (l_ui_intl_text_id,
9224             i.data_value,
9225             G_NO_FLAG,
9226             G_NO_FLAG,
9227             g_UI_Context.ui_def_id,
9228             g_UI_Context.devl_project_id,
9229             p_ui_node.page_id,
9230             l_element_id
9231            );
9232           g_cx_names_tbl(TO_NUMBER(l_element_id)) := l_ui_intl_text_id;
9233 
9234           IF p_ui_node.parent_element_id IS NULL THEN
9235             l_parent_element_id := p_ui_node.element_id;
9236           ELSE
9237             l_parent_element_id := p_ui_node.parent_element_id;
9238           END IF;
9239 
9240           l_new_node := TRUE;
9241 
9242           INSERT INTO CZ_UI_PAGE_ELEMENTS
9243          (ui_def_id,
9244          persistent_node_id,
9245          parent_persistent_node_id,
9246          region_persistent_node_id,
9247          pagebase_persistent_node_id,
9248          page_id,
9249          base_page_flag,
9250          seq_nbr,
9251          ctrl_template_id,
9252          ctrl_template_ui_def_id,
9253          element_id,
9254          parent_element_id,
9255          element_type,
9256          instantiable_flag,
9257          model_ref_expl_id,
9258          element_signature_id,
9259          name,
9260          deleted_flag)
9261        VALUES
9262         (p_ui_node.ui_def_id,
9263          p_node.persistent_node_id,
9264          p_node.parent_persistent_node_id,
9265          p_ui_node.region_persistent_node_id,
9266          p_ui_node.pagebase_persistent_node_id,
9267          p_ui_node.page_id,
9268          NULL,
9269          p_ui_node.seq_nbr+1,
9270          G_DRILLDOWN_BUTTON_TEMPLATE_ID,
9271          G_GLOBAL_TEMPLATES_UI_DEF_ID,
9272          l_element_id,
9273          l_parent_element_id,
9274          G_UI_CX_BUTTON_NODE_TYPE,
9275          NULL,
9276          p_ui_node.model_ref_expl_id,
9277          g_DRILLDOWN_B_SIGNATURE_ID,
9278          'Button - '||i.data_value,
9279          G_MARK_TO_ADD);
9280 
9281          l_ui_action_id := allocateId('CZ_UI_ACTIONS_S');
9282 
9283          INSERT INTO CZ_UI_ACTIONS
9284          (
9285          ui_action_id
9286          ,ui_def_id
9287          ,source_page_id
9288          ,context_component_id
9289          ,element_id
9290          ,render_condition_id
9291          ,ui_action_type
9292          ,target_ui_def_id
9293          ,target_persistent_node_id
9294          ,target_node_path
9295          ,target_page_set_id
9296          ,target_page_id
9297          ,target_url
9298          ,frame_name
9299          ,target_anchor
9300          ,seeded_flag
9301          ,cx_command_name
9302          ,window_parameters
9303          ,target_window_type
9304          ,target_window_name
9305          ,target_expl_node_id
9306          ,deleted_flag
9307          )
9308          VALUES
9309          (
9310          l_ui_action_id
9311          ,p_ui_node.ui_def_id
9312          ,p_ui_node.page_id
9313          ,p_node.persistent_node_id
9314          ,l_element_id
9315          ,NULL
9316          ,G_CX_BUTTON_ACTION_TYPE
9317          ,NULL
9318          ,NULL
9319          ,NULL
9320          ,NULL
9321          ,NULL
9322          ,NULL
9323          ,NULL
9324          ,NULL
9325          ,'0'
9326          ,i.data_value
9327          ,NULL
9328          ,NULL
9329          ,NULL
9330          ,NULL
9331          ,G_NO_FLAG
9332          );
9333 
9334          -- find model to which model ref expl node with i.model_ref_expl_id belongs to
9335          FOR k IN(SELECT component_id, ps_node_type FROM CZ_MODEL_REF_EXPLS
9336                    START WITH model_ref_expl_id=i.model_ref_expl_id
9337                   CONNECT BY PRIOR parent_expl_node_id=model_ref_expl_id AND deleted_flag='0')
9338          LOOP
9339            IF k.ps_node_type = CZ_TYPES.PS_NODE_TYPE_REFERENCE THEN
9340              l_ref_model_id := k.component_id;
9341              EXIT;
9342            END IF;
9343          END LOOP;
9344 
9345          -- find persistent_node_id of PS node which is used in CX binding
9346          SELECT persistent_node_id INTO l_persistent_id FROM CZ_PS_NODES
9347           WHERE devl_project_id=l_ref_model_id AND ps_node_id=i.component_id;
9348 
9349          -- find model_ref_expl_id and persistent_node_id of pagebase
9350          SELECT model_ref_expl_id, persistent_node_id INTO l_pb_model_ref_expl_id, l_pb_persistent_node_id  FROM CZ_UI_PAGE_ELEMENTS
9351           WHERE ui_def_id=p_ui_node.ui_def_id AND page_id=p_ui_node.page_id AND
9352                 element_id=p_ui_node.parent_element_id;
9353 
9354          -- save runtime relative path of CX button in associative array g_ref_cx_paths_tbl ( UI element_id <-> runtime relative path )
9355          g_ref_cx_paths_tbl(TO_NUMBER(l_element_id)) := CZ_DEVELOPER_UTILS_PVT.runtime_relative_path(p_base_expl_id => l_pb_model_ref_expl_id,
9356                                                                                                      p_base_pers_id => l_pb_persistent_node_id,
9357                                                                                                      p_node_expl_id => i.model_ref_expl_id,
9358                                                                                                      p_node_pers_id => l_persistent_id);
9359 
9360         END IF;
9361 
9362       END LOOP;
9363 
9364     END IF;
9365 
9366     --
9367     -- if CX button is added then mark UI page as page
9368     -- to refresh
9369     --
9370     IF l_new_node THEN
9371       --
9372       -- mark UI Page as refreshed
9373       --
9374       mark_UI_Page_As_Refreshed(p_ui_node.page_id, p_ui_node.ui_def_id);
9375     END IF;
9376 
9377   END add_CX_Button;
9378 
9379   --
9380   -- handle CX for those nodes which have no corresponding
9381   -- records in table CZ_UI_PAGE_ELEMENTS
9382   --
9383   PROCEDURE handle_CXs_For_nonUINodes IS
9384 
9385     l_ui_intl_text_id   CZ_INTL_TEXTS.intl_text_id%TYPE;
9386     l_element_id        CZ_UI_PAGE_ELEMENTS.element_id%TYPE;
9387     l_parent_element_id CZ_UI_PAGE_ELEMENTS.element_id%TYPE;
9388     l_ui_action_id      CZ_UI_ACTIONS.ui_action_id%TYPE;
9389 
9390   BEGIN
9391 
9392      FOR option_node IN(SELECT ps_node_id,persistent_node_id,
9393                                parent_persistent_node_id FROM CZ_UITEMPLS_FOR_PSNODES_V a
9394                          WHERE devl_project_id=g_UI_Context.devl_project_id AND
9395                                ui_def_id=g_UI_Context.from_master_template_id AND
9396                                ps_node_type IN(G_OPTION_TYPE, G_BOM_STANDART_ITEM_TYPE) AND
9397                                ui_omit=G_NO_FLAG AND deleted_flag=G_NO_FLAG AND
9398                                EXISTS(SELECT NULL FROM CZ_RULES
9399                                        WHERE devl_project_id=g_UI_Context.devl_project_id AND
9400                                              component_id=a.ps_node_id AND
9401                                              disabled_flag=G_NO_FLAG AND
9402                                              deleted_flag=G_NO_FLAG))
9403      LOOP
9404        FOR parent_ui_node IN(SELECT *
9405                                FROM CZ_UI_PAGE_ELEMENTS
9406                               WHERE ui_def_id=g_UI_Context.ui_def_id AND
9407                                     persistent_node_id=option_node.parent_persistent_node_id AND
9408                                     deleted_flag NOT IN(G_YES_FLAG, G_MARK_TO_DELETE, G_LIMBO_FLAG))
9409        LOOP
9410 
9411          FOR i IN(SELECT DISTINCT b.data_value, b.expr_node_id, a.INSTANTIATION_SCOPE, a.NAME
9412                     FROM CZ_RULES a, CZ_EXPRESSION_NODES b
9413                    WHERE a.devl_project_id=g_UI_Context.devl_project_id AND
9414                          a.component_id=option_node.ps_node_id AND
9415                          a.rule_type=G_CZ_EXTENTSIONS_RULE_TYPE AND
9416                          a.deleted_flag=G_NO_FLAG AND
9417                          a.disabled_flag=G_NO_FLAG AND
9418                          a.invalid_flag=G_NO_FLAG AND
9419                          b.rule_id=a.rule_id AND
9420                          b.deleted_flag=G_NO_FLAG AND
9421                          b.argument_signature_id=G_EVENT_ON_COMMAND_SIGID AND
9422                          b.data_value IS NOT NULL)
9423          LOOP
9424            IF find_CX_On_UI_Page(parent_ui_node.page_id, option_node.ps_node_id, i.data_value) = G_NO_FLAG THEN
9425              l_element_id := get_Element_Id();
9426 
9427              l_ui_intl_text_id := allocateId('CZ_INTL_TEXTS_S');
9428              INSERT INTO CZ_INTL_TEXTS
9429               (INTL_TEXT_ID,
9430                TEXT_STR,
9431                DELETED_FLAG,
9432                SEEDED_FLAG,
9433                UI_DEF_ID,
9434                MODEL_ID,
9435                UI_PAGE_ID,
9436                UI_PAGE_ELEMENT_ID
9437               )
9438              VALUES
9439              (l_ui_intl_text_id,
9440               i.data_value,
9441               G_NO_FLAG,
9442               G_NO_FLAG,
9443               g_UI_Context.ui_def_id,
9444               g_UI_Context.devl_project_id,
9445               parent_ui_node.page_id,
9446               l_element_id
9447              );
9448 
9449             g_cx_names_tbl(TO_NUMBER(l_element_id)) := l_ui_intl_text_id;
9450             g_ref_cx_paths_tbl(TO_NUMBER(l_element_id)) := get_Model_Path(parent_ui_node)||
9451             '.'||TO_CHAR(option_node.persistent_node_id);
9452 
9453             IF parent_ui_node.parent_element_id IS NULL THEN
9454               l_parent_element_id := parent_ui_node.element_id;
9455             ELSE
9456               l_parent_element_id := parent_ui_node.parent_element_id;
9457             END IF;
9458 
9459             INSERT INTO CZ_UI_PAGE_ELEMENTS
9460              (ui_def_id,
9461              persistent_node_id,
9462              parent_persistent_node_id,
9463              region_persistent_node_id,
9464              pagebase_persistent_node_id,
9465              page_id,
9466              base_page_flag,
9467              seq_nbr,
9468              ctrl_template_id,
9469              ctrl_template_ui_def_id,
9470              element_id,
9471              parent_element_id,
9472              element_type,
9473              instantiable_flag,
9474              model_ref_expl_id,
9475              element_signature_id,
9476              NAME,
9477              deleted_flag)
9478             VALUES
9479              (g_UI_Context.ui_def_id,
9480              option_node.persistent_node_id,
9481              option_node.parent_persistent_node_id,
9482              parent_ui_node.region_persistent_node_id,
9483              parent_ui_node.pagebase_persistent_node_id,
9484              parent_ui_node.page_id,
9485              NULL,
9486              parent_ui_node.seq_nbr+1,
9487              G_DRILLDOWN_BUTTON_TEMPLATE_ID,
9488              G_GLOBAL_TEMPLATES_UI_DEF_ID,
9489              l_element_id,
9490              l_parent_element_id,
9491              G_UI_CX_BUTTON_NODE_TYPE,
9492              NULL,
9493              parent_ui_node.model_ref_expl_id,
9494              g_DRILLDOWN_B_SIGNATURE_ID,
9495              G_DRILLDOWN_TEMPLATE_NAME||' - '||l_element_id,
9496              G_MARK_TO_ADD);
9497 
9498             l_ui_action_id := allocateId('CZ_UI_ACTIONS_S');
9499 
9500             INSERT INTO CZ_UI_ACTIONS
9501             (
9502              ui_action_id
9503              ,ui_def_id
9504              ,source_page_id
9505              ,context_component_id
9506              ,element_id
9507              ,render_condition_id
9508              ,ui_action_type
9509              ,target_ui_def_id
9510              ,target_persistent_node_id
9511              ,target_node_path
9512              ,target_page_set_id
9513              ,target_page_id
9514              ,target_url
9515              ,frame_name
9516              ,target_anchor
9517              ,seeded_flag
9518              ,cx_command_name
9519              ,window_parameters
9520              ,target_window_type
9521              ,target_window_name
9522              ,target_expl_node_id
9523              ,deleted_flag
9524              )
9525              VALUES
9526              (
9527              l_ui_action_id
9528              ,g_UI_Context.ui_def_id
9529              ,parent_ui_node.page_id
9530              ,option_node.persistent_node_id
9531              ,l_element_id
9532              ,NULL
9533              ,G_CX_BUTTON_ACTION_TYPE
9534             ,NULL
9535              ,NULL
9536              ,NULL
9537              ,NULL
9538              ,NULL
9539              ,NULL
9540              ,NULL
9541              ,NULL
9542              ,'0'
9543              ,i.data_value
9544              ,NULL
9545              ,NULL
9546              ,NULL
9547              ,NULL
9548              ,G_NO_FLAG
9549              );
9550 
9551              mark_UI_Page_As_Refreshed(parent_ui_node.page_id, g_UI_Context.ui_def_id);
9552            END IF;  -- end of IF find_CX_On_UI_Page
9553 
9554          END LOOP; -- end of loop with index i
9555 
9556        END LOOP; -- end of loop with index parent_ui_node
9557 
9558      END LOOP; -- end of loop with index option_node
9559 
9560   END handle_CXs_For_nonUINodes;
9561 
9562 
9563   FUNCTION disabled_for_refresh(p_page_element IN CZ_UI_PAGE_ELEMENTS%ROWTYPE) RETURN BOOLEAN
9564   IS
9565     l_dummy VARCHAR2(1);
9566   BEGIN
9567 
9568     SELECT '1' INTO l_dummy
9569     FROM DUAL
9570     WHERE '1' IN (SELECT suppress_refresh_flag
9571                   FROM cz_ui_page_elements
9572                   START WITH ui_def_Id = p_page_element.ui_def_id
9573                   AND page_id = p_page_element.page_id
9574                   AND element_id = p_page_element.element_id
9575                   CONNECT BY PRIOR parent_element_id IS NOT NULL
9576                   AND prior suppress_refresh_flag = G_NO_FLAG
9577                   AND ui_def_Id = p_page_element.ui_def_id
9578                   AND page_id = p_page_element.page_id
9579                   AND prior parent_element_id = element_id);
9580     RETURN TRUE;
9581   EXCEPTION
9582     WHEN NO_DATA_FOUND THEN
9583       RETURN FALSE;
9584   END disabled_for_refresh;
9585 
9586   --
9587   -- handle CX for those nodes which have no corresponding
9588   -- records in table CZ_UI_PAGE_ELEMENTS
9589   --
9590   PROCEDURE handle_CXs IS
9591 
9592     l_ui_intl_text_id   CZ_INTL_TEXTS.intl_text_id%TYPE;
9593     l_element_id        CZ_UI_PAGE_ELEMENTS.element_id%TYPE;
9594     l_parent_element_id CZ_UI_PAGE_ELEMENTS.element_id%TYPE;
9595     l_ui_action_id      CZ_UI_ACTIONS.ui_action_id%TYPE;
9596     l_ps_node           CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE;
9597     l_invalid_flag      VARCHAR2(1);
9598 
9599   BEGIN
9600 
9601 
9602      FOR i in (SELECT DISTINCT page_id
9603                FROM cz_ui_page_elements
9604                WHERE ui_def_Id = g_UI_Context.ui_def_id
9605                AND element_type = G_UI_CX_BUTTON_NODE_TYPE
9606                AND deleted_flag = G_NO_FLAG)
9607      LOOP
9608        --DEBUG('asp: Marking page ' || i.page_id || ', ' || g_UI_Context.ui_def_id || ' for refresh ');
9609        mark_UI_Page_As_Refreshed(i.page_id, g_UI_Context.ui_def_id);
9610      END LOOP;
9611 
9612 
9613      FOR i in (SELECT b.data_value, b.expr_node_id, a.INSTANTIATION_SCOPE, a.NAME,
9614                  (SELECT persistent_node_id
9615                   FROM CZ_PS_NODES
9616                   WHERE devl_project_id = g_UI_Context.devl_project_id
9617                   AND ps_node_id = a.component_id) persistent_node_Id
9618                FROM CZ_RULES a, CZ_EXPRESSION_NODES b
9619                WHERE a.devl_project_id=g_UI_Context.devl_project_id AND
9620                      a.rule_type=G_CZ_EXTENTSIONS_RULE_TYPE AND
9621                      b.rule_id=a.rule_id AND
9622                      b.argument_signature_id=G_EVENT_ON_COMMAND_SIGID AND
9623                      b.data_value IS NOT NULL AND
9624                      b.last_update_date > g_UI_Context.UI_TIMESTAMP_REFRESH)
9625      LOOP
9626        BEGIN
9627 
9628          SELECT e.element_id INTO l_element_id
9629          FROM CZ_UI_PAGE_ELEMENTS e
9630          WHERE ui_def_id = g_UI_Context.ui_def_id AND
9631                persistent_node_id = i.persistent_node_id AND
9632                element_type = G_UI_CX_BUTTON_NODE_TYPE AND
9633                deleted_flag NOT IN (G_YES_FLAG, G_MARK_TO_DELETE) AND
9634                EXISTS (SELECT NULL FROM CZ_UI_ACTIONS a
9635                        WHERE a.ui_def_id = e.ui_def_id AND
9636                              a.source_page_id = e.page_id AND
9637                              a.element_id = e.element_id AND
9638                              a.deleted_flag NOT IN (G_YES_FLAG, G_MARK_TO_DELETE) AND
9639                              a.cx_command_name = i.data_value);
9640        EXCEPTION
9641          WHEN NO_DATA_FOUND THEN
9642            -- No button for the action; Create one
9643            FOR j in (SELECT *
9644                      FROM CZ_UI_PAGE_ELEMENTS e
9645                      WHERE ui_def_id = g_UI_Context.ui_def_id AND
9646                            persistent_node_id = i.persistent_node_id AND
9647                            deleted_flag NOT IN (G_YES_FLAG, G_MARK_TO_DELETE))
9648           LOOP
9649             IF NOT disabled_for_refresh(j) THEN
9650               l_ps_node := get_Model_Node_By_Persist_id(i.persistent_node_id, g_UI_Context.devl_project_id);
9651               add_CX_button(l_ps_node, j);
9652               EXIT;
9653             END IF;
9654           END LOOP;
9655        END;
9656      END LOOP;
9657   END handle_CXs;
9658 
9659   --
9660   -- create single UI element
9661   --
9662   FUNCTION create_UI_Element(p_node                 IN CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE,
9663                              p_parent_ui_node       IN CZ_UI_PAGE_ELEMENTS%ROWTYPE,
9664                              p_insert_index         IN NUMBER DEFAULT -1)
9665     RETURN CZ_UI_PAGE_ELEMENTS%ROWTYPE IS
9666 
9667     l_ui_node                 CZ_UI_PAGE_ELEMENTS%ROWTYPE;
9668     l_node_exists_in_ui       VARCHAR2(1);
9669     l_counter                 NUMBER;
9670     l_parent_seq_nbr          NUMBER;
9671     l_max_prev_seq_nbr        NUMBER;
9672 
9673   BEGIN
9674 
9675     IF p_parent_ui_node.suppress_refresh_flag=G_YES_FLAG THEN
9676       RETURN l_ui_node;
9677     END IF;
9678 
9679     BEGIN
9680       SELECT G_YES_FLAG INTO l_node_exists_in_ui FROM dual
9681       WHERE EXISTS(SELECT NULL FROM CZ_UI_PAGE_ELEMENTS
9682       WHERE ui_def_id=g_UI_Context.ui_def_id AND
9683             page_id=p_parent_ui_node.page_id AND
9684             parent_element_id=p_parent_ui_node.element_id AND
9685             persistent_node_id=p_node.persistent_node_id AND
9686             element_type IS NULL AND deleted_flag=G_NO_FLAG);
9687       RETURN l_ui_node;
9688     EXCEPTION
9689       WHEN NO_DATA_FOUND THEN
9690         NULL;
9691     END;
9692 
9693     l_ui_node.ui_def_id                   := p_parent_ui_node.ui_def_id;
9694     l_ui_node.persistent_node_id          := p_node.persistent_node_id;
9695     l_ui_node.parent_persistent_node_id   := p_node.parent_persistent_node_id;
9696 
9697     l_ui_node.region_persistent_node_id   := p_parent_ui_node.region_persistent_node_id;
9698     l_ui_node.pagebase_persistent_node_id := p_parent_ui_node.pagebase_persistent_node_id;
9699     l_ui_node.page_id                     := p_parent_ui_node.page_id;
9700 
9701     IF p_insert_index > 0 THEN
9702       l_max_prev_seq_nbr := p_insert_index-1;
9703       l_ui_node.seq_nbr := p_insert_index;
9704     ELSE
9705     SELECT NVL(MAX(seq_nbr),0) INTO l_max_prev_seq_nbr  FROM CZ_UI_PAGE_ELEMENTS
9706     START WITH ui_def_id=g_UI_Context.ui_def_id AND
9707                page_id=p_parent_ui_node.page_id AND
9708                element_id=p_parent_ui_node.element_id AND
9709                deleted_flag NOT IN(G_YES_FLAG,G_MARK_TO_DELETE)
9710     CONNECT BY PRIOR ui_def_id=g_UI_Context.ui_def_id AND
9711        ui_def_id=g_UI_Context.ui_def_id AND PRIOR page_id= p_parent_ui_node.page_id
9712         AND page_id=p_parent_ui_node.page_id AND PRIOR element_id=parent_element_id AND
9713         PRIOR deleted_flag NOT IN(G_YES_FLAG,G_MARK_TO_DELETE) AND
9714         deleted_flag NOT IN(G_YES_FLAG,G_MARK_TO_DELETE);
9715 
9716     l_ui_node.seq_nbr  := l_max_prev_seq_nbr + 1;
9717     END IF;
9718 
9719     UPDATE CZ_UI_PAGE_ELEMENTS
9720        SET seq_nbr=seq_nbr+1
9721      WHERE ui_def_id=g_UI_Context.ui_def_id AND
9722            page_id=p_parent_ui_node.page_id AND
9723            seq_nbr>l_max_prev_seq_nbr AND
9724            deleted_flag NOT IN(G_YES_FLAG,G_MARK_TO_DELETE);
9725 
9726     l_ui_node.element_id                  := get_Element_Id();
9727 
9728     l_ui_node.parent_element_id           := p_parent_ui_node.element_id;
9729 
9730     l_ui_node.ctrl_template_id            := p_node.template_id;
9731     l_ui_node.ctrl_template_ui_def_id     := p_node.template_ui_def_id;
9732 
9733     l_ui_node.element_type                := G_UI_REGULAR_NODE_TYPE;
9734 
9735     IF p_node.detailed_type_id=CZ_TYPES.UNON_COUNT_FEATURE_TYPEID THEN
9736       l_ui_node.element_type              := G_UNON_COUNT_FEATURE_TYPEID;
9737     ELSIF p_node.detailed_type_id=CZ_TYPES.UCOUNT_FEATURE_TYPEID THEN
9738       l_ui_node.element_type              := G_UCOUNT_FEATURE_TYPEID;
9739     ELSIF p_node.detailed_type_id=CZ_TYPES.UCOUNT_FEATURE01_TYPEID THEN
9740       l_ui_node.element_type              := G_UCOUNT_FEATURE01_TYPEID;
9741     ELSIF p_node.detailed_type_id=CZ_TYPES.UMINMAX_FEATURE_TYPEID THEN
9742       l_ui_node.element_type              := G_UMINMAX_FEATURE_TYPEID;
9743     ELSIF p_node.detailed_type_id=CZ_TYPES.UMINMAX_CONNECTOR THEN
9744       l_ui_node.element_type              := G_UMINMAX_CONNECTOR_TYPEID;
9745     ELSE
9746       l_ui_node.element_type              := G_UI_REGULAR_NODE_TYPE;
9747     END IF;
9748 
9749     l_ui_node.instantiable_flag           := p_node.instantiable_flag;
9750 
9751     IF p_node.detailed_type_id=CZ_TYPES.UMINMAX_CONNECTOR THEN
9752       IF (p_node.maximum=1 AND p_node.minimum=0) THEN
9753         l_ui_node.instantiable_flag := G_OPTIONAL_INST_TYPE;
9754       ELSE
9755         l_ui_node.instantiable_flag := G_MINMAX_INST_TYPE;
9756       END IF;
9757     END IF;
9758 
9759     l_ui_node.model_ref_expl_id           := get_Expl_Id(p_model_id     => p_node.devl_project_id,
9760                                                          p_ps_node_id   => p_node.ps_node_id,
9761                                                          p_component_id => p_node.component_id,
9762                                                          p_ps_node_type => p_node.ps_node_type);
9763     l_ui_node.element_signature_id        := p_node.root_element_signature_id;
9764     l_ui_node.deleted_flag                := G_MARK_TO_ADD;
9765 
9766     SELECT COUNT(element_id)+1 INTO l_counter FROM CZ_UI_PAGE_ELEMENTS
9767     WHERE ui_def_id=g_UI_Context.ui_def_id AND
9768           page_id=l_ui_node.page_id AND
9769           ctrl_template_id=l_ui_node.ctrl_template_id AND
9770           deleted_flag NOT IN(G_YES_FLAG,G_MARK_TO_DELETE);
9771 
9772     l_ui_node.name := p_node.template_name||' - '||TO_CHAR(l_counter);
9773 
9774     --DEBUG('asp:Inserting ' || l_ui_node.element_id || ' at seq ' || l_ui_node.seq_nbr);
9775 
9776     INSERT INTO CZ_UI_PAGE_ELEMENTS
9777       (ui_def_id,
9778        persistent_node_id,
9779        parent_persistent_node_id,
9780        region_persistent_node_id,
9781        pagebase_persistent_node_id,
9782        page_id,
9783        seq_nbr,
9784        ctrl_template_id,
9785        element_id,
9786        parent_element_id,
9787        element_type,
9788        instantiable_flag,
9789        ctrl_template_ui_def_id,
9790        model_ref_expl_id,
9791        element_signature_id,
9792        name,
9793        deleted_flag)
9794     VALUES
9795       (l_ui_node.ui_def_id,
9796        l_ui_node.persistent_node_id,
9797        l_ui_node.parent_persistent_node_id,
9798        l_ui_node.region_persistent_node_id,
9799        l_ui_node.pagebase_persistent_node_id,
9800        l_ui_node.page_id,
9801        l_ui_node.seq_nbr,
9802        l_ui_node.ctrl_template_id,
9803        l_ui_node.element_id,
9804        l_ui_node.parent_element_id,
9805        l_ui_node.element_type,
9806        l_ui_node.instantiable_flag,
9807        l_ui_node.ctrl_template_ui_def_id,
9808        l_ui_node.model_ref_expl_id,
9809        l_ui_node.element_signature_id,
9810        l_ui_node.name,
9811        l_ui_node.deleted_flag);
9812 
9813     --
9814     -- mark UI Page as refreshed
9815     --
9816     mark_UI_Page_As_Refreshed(l_ui_node.page_id, l_ui_node.ui_def_id);
9817     add_CX_Button(p_node     => p_node,
9818                   p_ui_node  => l_ui_node);
9819 
9820     RETURN l_ui_node;
9821 
9822   END create_UI_Element;
9823 
9824   --
9825   -- add Instance Management Controls
9826   --
9827   PROCEDURE add_Instance_Controls(p_ui_node          IN CZ_UI_PAGE_ELEMENTS%ROWTYPE,
9828                                   p_parent_ui_node   IN CZ_UI_PAGE_ELEMENTS%ROWTYPE,
9829                                   p_node             IN CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE) IS
9830 
9831     l_element_id                  CZ_UI_PAGE_ELEMENTS.element_id%TYPE;
9832     l_element_type                CZ_UI_PAGE_ELEMENTS.element_type%TYPE;
9833     l_ui_node_name                CZ_UI_PAGE_ELEMENTS.name%TYPE;
9834     l_parent_seq_nbr              NUMBER;
9835     l_seq_nbr                     NUMBER;
9836     l_counter                     NUMBER;
9837     l_max_prev_seq_nbr            NUMBER;
9838 
9839   BEGIN
9840 
9841     IF p_parent_ui_node.suppress_refresh_flag=G_YES_FLAG THEN
9842       RETURN;
9843     END IF;
9844 
9845     SELECT NVL(MAX(seq_nbr),0) INTO l_max_prev_seq_nbr  FROM CZ_UI_PAGE_ELEMENTS
9846     START WITH ui_def_id=g_UI_Context.ui_def_id AND
9847                page_id=p_parent_ui_node.page_id AND
9848                element_id=p_parent_ui_node.element_id AND
9849                deleted_flag NOT IN(G_YES_FLAG,G_MARK_TO_DELETE)
9850     CONNECT BY PRIOR ui_def_id=g_UI_Context.ui_def_id AND
9851        ui_def_id=g_UI_Context.ui_def_id AND PRIOR page_id= p_parent_ui_node.page_id
9852         AND page_id=p_parent_ui_node.page_id AND PRIOR element_id=parent_element_id AND
9853         PRIOR deleted_flag NOT IN(G_YES_FLAG,G_MARK_TO_DELETE) AND
9854         deleted_flag NOT IN(G_YES_FLAG,G_MARK_TO_DELETE);
9855 
9856     l_seq_nbr  := l_max_prev_seq_nbr + 1;
9857 
9858     UPDATE CZ_UI_PAGE_ELEMENTS
9859        SET seq_nbr=seq_nbr+1
9860      WHERE ui_def_id=g_UI_Context.ui_def_id AND
9861            page_id=p_parent_ui_node.page_id AND
9862            seq_nbr>l_max_prev_seq_nbr AND
9863            deleted_flag NOT IN(G_YES_FLAG,G_MARK_TO_DELETE);
9864 
9865     IF p_node.detailed_type_id IN(CZ_TYPES.UOPTIONAL_COMPONENT_TYPEID,CZ_TYPES.UMINMAX_COMPONENT_TYPEID) THEN
9866        l_element_type := G_UI_NONBOMADDINST_NODE_TYPE;
9867     ELSIF p_node.detailed_type_id IN(CZ_TYPES.UOPTIONAL_BOM_REF_TYPEID,CZ_TYPES.UMINMAX_BOM_REF_TYPEID) THEN
9868       l_element_type := G_UI_BOMADDINST_NODE_TYPE;
9869     ELSE
9870       NULL;
9871     END IF;
9872 
9873     l_element_id := get_Element_Id();
9874 
9875     l_ui_node_name := get_UI_Node_Name(p_page_id       => p_parent_ui_node.page_id,
9876                                        p_template_id   => p_node.template_id,
9877                                        p_template_name => p_node.template_name);
9878 
9879     INSERT INTO CZ_UI_PAGE_ELEMENTS
9880               (ui_def_id,
9881                persistent_node_id,
9882                parent_persistent_node_id,
9883                region_persistent_node_id,
9884                pagebase_persistent_node_id,
9885                page_id,
9886                seq_nbr,
9887                ctrl_template_id,
9888                element_id,
9889                parent_element_id,
9890                element_type,
9891                instantiable_flag,
9892                ctrl_template_ui_def_id,
9893                model_ref_expl_id,
9894                element_signature_id,
9895                name,
9896                deleted_flag)
9897        VALUES
9898               (p_ui_node.ui_def_id,
9899                p_ui_node.persistent_node_id,
9900                p_ui_node.parent_persistent_node_id,
9901                p_parent_ui_node.region_persistent_node_id,
9902                p_parent_ui_node.pagebase_persistent_node_id,
9903                p_parent_ui_node.page_id,
9904                l_seq_nbr,
9905                p_node.template_id,
9906                l_element_id,
9907                p_parent_ui_node.element_id,
9908                l_element_type,
9909                p_ui_node.instantiable_flag,
9910                p_node.template_ui_def_id,
9911                p_ui_node.model_ref_expl_id,
9912                p_node.root_element_signature_id,
9913                l_ui_node_name,
9914                G_MARK_DO_NOT_REFRESH);
9915 
9916     -- delete drilldown associated with the same persistent_node_id
9917     --
9918     UPDATE CZ_UI_PAGE_ELEMENTS
9919        SET deleted_flag=G_MARK_TO_DELETE
9920      WHERE ui_def_id = p_parent_ui_node.ui_def_id AND
9921            persistent_node_id=p_ui_node.persistent_node_id AND
9922            element_type=G_UI_PAGEDRILLDOWN_NODE_TYPE AND
9923            deleted_flag=G_NO_FLAG;
9924 
9925     mark_UI_Page_As_Refreshed(p_parent_ui_node.page_id, p_parent_ui_node.ui_def_id);
9926 
9927   END add_Instance_Controls;
9928 
9929   --
9930   -- create Drilldown button
9931   --
9932   PROCEDURE create_Drilldown_Button(p_parent_ui_node  IN CZ_UI_PAGE_ELEMENTS%ROWTYPE,
9933                                     p_ui_node         IN CZ_UI_PAGE_ELEMENTS%ROWTYPE,
9934                                     p_page_set_id     IN NUMBER) IS
9935 
9936       l_element_id              CZ_UI_PAGE_ELEMENTS.element_id%TYPE;
9937       l_ui_action_id            CZ_UI_ACTIONS.ui_action_id%TYPE;
9938       l_seq_nbr                 CZ_UI_PAGE_ELEMENTS.seq_nbr%TYPE;
9939       l_ui_node_name            CZ_UI_PAGE_ELEMENTS.name%TYPE;
9940 
9941   BEGIN
9942 
9943     IF p_parent_ui_node.suppress_refresh_flag=G_YES_FLAG THEN
9944       RETURN;
9945     END IF;
9946 
9947     l_seq_nbr := get_Last_Seq_Nbr(p_parent_ui_node.element_id)+1;
9948 
9949     l_element_id := get_Element_Id();
9950 
9951     g_ELEMENT_COUNTER := g_ELEMENT_COUNTER + 1;
9952 
9953     l_ui_node_name := 'Drilldown Button - '||TO_CHAR(l_seq_nbr);
9954 
9955     IF g_DRILLDOWN_TEMPLATE_ID = G_DRILLDOWN_IMAGE_TEMPLATE_ID THEN
9956       l_ui_node_name := 'Drilldown Image - '||TO_CHAR(l_seq_nbr);
9957     ELSIF g_DRILLDOWN_TEMPLATE_ID = G_DRILLDOWN_LABEL_TEMPLATE_ID THEN
9958       l_ui_node_name := 'Drilldown Label - '||TO_CHAR(l_seq_nbr);
9959     ELSE
9960       l_ui_node_name := 'Drilldown Button - '||TO_CHAR(l_seq_nbr);
9961     END IF;
9962 
9963     INSERT INTO CZ_UI_PAGE_ELEMENTS
9964       (ui_def_id,
9965        persistent_node_id,
9966        parent_persistent_node_id,
9967        region_persistent_node_id,
9968        pagebase_persistent_node_id,
9969        page_id,
9970        seq_nbr,
9971        ctrl_template_id,
9972        element_id,
9973        parent_element_id,
9974        element_type,
9975        instantiable_flag,
9976        ctrl_template_ui_def_id,
9977        model_ref_expl_id,
9978        name,
9979        element_signature_id,
9980        deleted_flag)
9981     VALUES
9982       (p_parent_ui_node.ui_def_id,
9983        p_ui_node.persistent_node_id,
9984        p_ui_node.parent_persistent_node_id,
9985        p_parent_ui_node.region_persistent_node_id,
9986        p_parent_ui_node.pagebase_persistent_node_id,
9987        p_parent_ui_node.page_id,
9988        l_seq_nbr,
9989        g_DRILLDOWN_TEMPLATE_ID,
9990        l_element_id,
9991        p_parent_ui_node.element_id,
9992        G_UI_PAGEDRILLDOWN_NODE_TYPE,
9993        NULL,
9994        G_GLOBAL_TEMPLATES_UI_DEF_ID,
9995        NULL,
9996        l_ui_node_name,
9997        g_DRILLDOWN_ELEM_SIGNATURE_ID,
9998        G_MARK_TO_ADD);
9999 
10000     l_ui_action_id := allocateId('CZ_UI_ACTIONS_S');
10001     INSERT INTO CZ_UI_ACTIONS
10002       (ui_action_id,
10003        ui_def_id,
10004        source_page_id,
10005        context_component_id,
10006        element_id,
10007        ui_action_type,
10008        target_ui_def_id,
10009        target_persistent_node_id,
10010        target_node_path,
10011        target_page_set_id,
10012        target_page_id,
10013        target_expl_node_id,
10014        seeded_flag,
10015        deleted_flag)
10016     VALUES
10017       (l_ui_action_id,
10018        p_parent_ui_node.ui_def_id,
10019        p_parent_ui_node.page_id,
10020        p_parent_ui_node.region_persistent_node_id,
10021        l_element_id,
10022        G_ACTION_CONFIGURE_SUBCOMP,
10023        NULL,
10024        p_ui_node.persistent_node_id,
10025        TO_CHAR(p_ui_node.persistent_node_id),
10026        p_page_set_id,
10027        p_ui_node.page_id,
10028        p_ui_node.model_ref_expl_id,
10029        G_NO_FLAG,
10030        G_NO_FLAG);
10031 
10032     mark_UI_Page_As_Refreshed(p_parent_ui_node.page_id, p_parent_ui_node.ui_def_id);
10033 
10034   END create_Drilldown_Button;
10035 
10036   --
10037   -- check : does this BOM node contain child BOM nodes
10038   --
10039   FUNCTION contains_BOM_Nodes(p_ps_node_id IN NUMBER)
10040     RETURN BOOLEAN IS
10041     l_ps_node_type NUMBER;
10042   BEGIN
10043 
10044    SELECT ps_node_type INTO l_ps_node_type FROM CZ_PS_NODES
10045    WHERE ps_node_id=p_ps_node_id AND deleted_flag=G_NO_FLAG;
10046 
10047     IF l_ps_node_type=G_REFERENCE_TYPE THEN
10048       RETURN TRUE;
10049     END IF;
10050 
10051     FOR i IN (SELECT DISTINCT ps_node_type,reference_id FROM CZ_PS_NODES
10052               WHERE parent_id=p_ps_node_id AND
10053                     deleted_flag=G_NO_FLAG AND ui_omit=G_NO_FLAG AND
10054                     (ps_node_type IN(G_BOM_MODEL_TYPE,G_BOM_OPTION_CLASS_TYPE,G_BOM_STANDART_ITEM_TYPE) OR
10055                      ps_node_type=G_REFERENCE_TYPE))
10056     LOOP
10057       IF i.ps_node_type=G_REFERENCE_TYPE THEN
10058          SELECT ps_node_type INTO l_ps_node_type FROM CZ_PS_NODES
10059          WHERE ps_node_id=i.reference_id;
10060          IF l_ps_node_type=G_BOM_MODEL_TYPE THEN
10061            RETURN TRUE;
10062          END IF;
10063       ELSE
10064         RETURN TRUE;
10065       END IF;
10066     END LOOP;
10067     RETURN FALSE;
10068   END contains_BOM_Nodes;
10069 
10070   PROCEDURE add_BOM_Node
10071   (
10072   p_node                  IN CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE,
10073   p_page_id               IN NUMBER,
10074   p_pagebase_expl_node_id IN NUMBER,
10075   p_parent_element_id     IN VARCHAR2,
10076   p_pagebase_persistent_node_id IN NUMBER,
10077   p_check_child_bom_nodes       IN VARCHAR2 DEFAULT NULL) IS
10078 
10079     l_bom_element_id  CZ_UI_PAGE_ELEMENTS.element_id%TYPE;
10080     l_ui_node_name    CZ_UI_PAGE_ELEMENTS.name%TYPE;
10081   BEGIN
10082 
10083       IF p_check_child_bom_nodes IS NULL OR p_check_child_bom_nodes=G_YES_FLAG THEN
10084         IF NOT(contains_BOM_Nodes(p_node.ps_node_id)) THEN
10085           RETURN;
10086         END IF;
10087       END IF;
10088 
10089       l_bom_element_id := get_Element_Id();
10090 
10091       l_ui_node_name := p_node.template_name||' - 1';
10092 
10093       --DEBUG('asp:Inserting BOM Node ' || l_bom_element_id|| ' at seq ' || 1);
10094       --
10095       -- shift all UI elements down , because BOM table will have seq_nbr=1
10096       --
10097       UPDATE CZ_UI_PAGE_ELEMENTS
10098          SET seq_nbr=seq_nbr+1
10099        WHERE ui_def_id=g_UI_Context.ui_def_id AND page_id=p_page_id AND
10100              deleted_flag NOT IN(G_YES_FLAG, G_LIMBO_FLAG);
10101 
10102 
10103       INSERT INTO CZ_UI_PAGE_ELEMENTS
10104       (ui_def_id,
10105        persistent_node_id,
10106        parent_persistent_node_id,
10107        region_persistent_node_id,
10108        pagebase_persistent_node_id,
10109        page_id,
10110        seq_nbr,
10111        ctrl_template_id,
10112        element_id,
10113        parent_element_id,
10114        element_type,
10115        instantiable_flag,
10116        ctrl_template_ui_def_id,
10117        model_ref_expl_id,
10118        element_signature_id,
10119        name,
10120        deleted_flag)
10121       VALUES
10122       (g_UI_Context.ui_def_id,
10123        p_node.persistent_node_id,
10124        p_node.parent_persistent_node_id,
10125        p_node.persistent_node_id,
10126        p_pagebase_persistent_node_id,
10127        p_page_id,
10128        1,
10129        p_node.template_id,
10130        l_bom_element_id,
10131        p_parent_element_id,
10132        G_UI_BOMADDINST_NODE_TYPE,
10133        p_node.instantiable_flag,
10134        p_node.template_ui_def_id,
10135        p_pagebase_expl_node_id,
10136        p_node.root_element_signature_id,
10137        l_ui_node_name,
10138        G_MARK_TO_ADD);
10139 
10140     mark_UI_Page_As_Refreshed(p_page_id, g_UI_Context.ui_def_id);
10141 
10142   END add_BOM_Node;
10143 
10144   --
10145   -- get Parent Page Data ( page_set_id and page_id )
10146   --
10147   PROCEDURE get_Parent_Page_Data
10148   (
10149   p_parent_persistent_node_id IN NUMBER,
10150   p_parent_page_id            IN NUMBER,
10151   x_page_set_id               OUT NOCOPY NUMBER,
10152   x_page_id                   OUT NOCOPY NUMBER,
10153   x_parent_page_set_type      OUT NOCOPY NUMBER,
10154   x_parent_page_ref_id        OUT NOCOPY NUMBER,
10155   x_parent_node_depth         OUT NOCOPY NUMBER
10156   ) IS
10157 
10158   BEGIN
10159 
10160     IF p_parent_persistent_node_id IS NOT NULL THEN
10161 
10162       IF p_parent_page_id IS NULL THEN
10163 
10164         SELECT MIN(page_id)
10165           INTO x_page_id
10166           FROM CZ_UI_PAGES
10167          WHERE ui_def_id = g_UI_Context.ui_def_id AND
10168                persistent_node_id = p_parent_persistent_node_id AND
10169                NVL(split_seq_nbr,1)=1 AND
10170                deleted_flag IN(G_NO_FLAG,G_MARK_TO_ADD,G_MARK_TO_REFRESH);
10171 
10172         IF x_page_id IS NULL THEN
10173           NULL;
10174         ELSE
10175           SELECT page_set_id INTO x_page_set_id
10176             FROM CZ_UI_PAGES
10177            WHERE page_id=x_page_id AND
10178                  ui_def_id = g_UI_Context.ui_def_id;
10179         END IF;
10180 
10181       ELSE
10182 
10183         x_page_id := p_parent_page_id;
10184 
10185         SELECT page_set_id INTO x_page_set_id
10186           FROM CZ_UI_PAGES
10187          WHERE page_id=p_parent_page_id AND
10188                ui_def_id = g_UI_Context.ui_def_id;
10189 
10190       END IF;
10191 
10192       BEGIN
10193 
10194         SELECT MIN(page_ref_id)
10195           INTO x_parent_page_ref_id
10196           FROM CZ_UI_PAGE_REFS
10197          WHERE ui_def_id = g_UI_Context.ui_def_id AND
10198                NVL(page_set_id,-1)=NVL(x_page_set_id,-1) AND
10199                target_page_id=x_page_id AND deleted_flag=G_NO_FLAG;
10200 
10201         SELECT node_depth,page_ref_type INTO x_parent_node_depth,  x_parent_page_set_type
10202           FROM CZ_UI_PAGE_REFS
10203          WHERE ui_def_id = g_UI_Context.ui_def_id AND
10204                page_ref_id=x_parent_page_ref_id;
10205       EXCEPTION
10206         WHEN NO_DATA_FOUND THEN
10207           IF x_page_set_id IS NOT NULL THEN
10208             SELECT page_set_type INTO x_parent_page_set_type FROM CZ_UI_PAGE_SETS
10209             WHERE ui_def_id = g_UI_Context.ui_def_id AND page_set_id=x_page_set_id;
10210           END IF;
10211           x_parent_node_depth := 1;
10212       END;
10213 
10214     ELSE
10215 
10216       x_page_set_id := NULL;
10217       x_page_id     := NULL;
10218       x_parent_page_ref_id := NULL;
10219       x_parent_node_depth := 1;
10220       x_parent_page_set_type := NULL;
10221 
10222     END IF;
10223 
10224   END get_Parent_Page_Data;
10225 
10226 
10227   FUNCTION get_new_page_ref_seq(p_node      IN CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE,
10228                                 p_page_set_id IN NUMBER,
10229                                 p_parent_page_ref_id NUMBER) RETURN NUMBER IS
10230 
10231     l_seq_nbr                   NUMBER;
10232 
10233   BEGIN
10234 
10235     --DEBUG('asp: Getting seq_nbr for ps node ' || p_node.name);
10236 
10237     IF NOT g_using_new_UI_refresh THEN
10238       SELECT COUNT(*)+1 INTO l_seq_nbr
10239         FROM CZ_UI_PAGE_REFS
10240        WHERE ui_def_id=g_UI_Context.ui_def_id AND
10241              page_set_id = p_page_set_id AND
10242              parent_page_ref_id=p_parent_page_ref_id AND
10243              deleted_flag=G_NO_FLAG;
10244 
10245       RETURN l_seq_nbr;
10246     END IF;
10247 
10248     IF p_node.tree_seq = 1 THEN
10249       RETURN 1;
10250     ELSE
10251       BEGIN
10252         --DEBUG('asp: Getting seq_nbr for ps node ' || p_node.name || ', tree_seq ' || p_node.tree_seq);
10253         FOR i IN 1..p_node.tree_seq-1
10254         LOOP
10255           FOR j in (SELECT persistent_node_id
10256                     FROM CZ_PS_NODES
10257                     WHERE devl_project_id = g_UI_Context.devl_project_id
10258                     AND parent_id = p_node.parent_id
10259                     AND tree_seq = p_node.tree_seq-i
10260                     AND deleted_flag = G_NO_FLAG)
10261           LOOP
10262           --DEBUG('asp: predecessor persistent_node_id = ' || l_predecessor_persistent_id);
10263 
10264             SELECT NVL(max(seq_nbr), 0) INTO l_seq_nbr
10265             FROM CZ_UI_PAGE_REFS
10266             WHERE ui_def_id = g_UI_Context.ui_def_id
10267             AND page_set_id = p_page_set_id
10268             AND parent_page_ref_id = p_parent_page_ref_id
10269             AND target_persistent_node_id = j.persistent_node_id
10270             AND deleted_flag = G_NO_FLAG;
10271 
10272             --DEBUG('asp: max predecessorseq_nbr = ' || l_seq_nbr);
10273 
10274             IF l_seq_nbr > 0 THEN
10275               l_seq_nbr := l_seq_nbr + 1;
10276               RETURN l_seq_nbr;
10277             END IF;
10278           END LOOP;
10279         END LOOP;
10280 
10281         -- node of the predecesors found in cz_ui_page_refs
10282         RETURN 1;
10283 
10284       EXCEPTION
10285         WHEN NO_DATA_FOUND THEN
10286           -- seq_nbrs in cz_ps_nodes are not correct
10287           SELECT NVL(count(*), 0) + 1 INTO l_seq_nbr
10288           FROM CZ_UI_PAGE_REFS
10289           WHERE ui_def_id = g_UI_Context.ui_def_Id
10290           AND page_set_id = p_page_set_id
10291           AND parent_page_ref_id = p_parent_page_ref_id
10292           AND deleted_flag = G_NO_FLAG;
10293 
10294           RETURN l_seq_nbr;
10295       END;
10296     END IF;
10297 
10298   END get_new_page_ref_seq;
10299 
10300   --
10301   -- create new UI page
10302   --
10303   FUNCTION create_UI_Page(p_node                  IN CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE,
10304                           x_page_set_id           OUT NOCOPY NUMBER,
10305                           x_page_set_type         OUT NOCOPY NUMBER,
10306                           x_page_ref_id           OUT NOCOPY NUMBER,
10307                           p_parent_page_id        IN NUMBER DEFAULT NULL)
10308     RETURN CZ_UI_PAGE_ELEMENTS%ROWTYPE IS
10309 
10310     l_page_node                 CZ_UI_PAGES%ROWTYPE;
10311     l_bom_element_id            CZ_UI_PAGE_ELEMENTS.element_id%TYPE;
10312     l_page_ui_node              CZ_UI_PAGE_ELEMENTS%ROWTYPE;
10313     l_page_ref_id               CZ_UI_PAGE_REFS.page_ref_id%TYPE;
10314     l_parent_page_ref_id        CZ_UI_PAGE_REFS.page_ref_id%TYPE;
10315     l_seq_nbr                   CZ_UI_PAGE_REFS.seq_nbr%TYPE;
10316     l_node_depth                CZ_UI_PAGE_REFS.node_depth%TYPE;
10317     l_page_set_id               CZ_UI_PAGE_SETS.page_set_id%TYPE;
10318     l_last_page_id              CZ_UI_PAGES.page_id%TYPE;
10319     l_parent_page_id            CZ_UI_PAGES.page_id%TYPE;
10320     l_page_set_type             CZ_UI_PAGE_SETS.page_set_type%TYPE;
10321     l_ui_node_name              CZ_UI_PAGE_ELEMENTS.name%TYPE;
10322     l_ref_pagebase_path         CZ_UI_PAGE_REFS.target_path%TYPE;
10323     l_parent_ui_page_node       CZ_UI_PAGES%ROWTYPE;
10324     l_ui_page_set_node          CZ_UI_PAGE_SETS%ROWTYPE;
10325     l_parent_page_persistent_id NUMBER;
10326     l_page_counter              NUMBER;
10327     l_pagebase_expl_node_id     NUMBER;
10328     l_is_inst_node              BOOLEAN := FALSE;
10329     l_is_drilldown_node         BOOLEAN := FALSE;
10330     l_create_page_ref           BOOLEAN := TRUE;
10331     l_is_page                   BOOLEAN := TRUE;
10332 
10333   BEGIN
10334 
10335     l_is_page := is_UI_Page(p_node, l_is_drilldown_node);
10336 
10337     IF l_is_page=FALSE THEN
10338       RETURN l_page_ui_node ;
10339     END IF;
10340 
10341     IF g_UI_Context.control_layout=1 THEN
10342       G_CONTAINER_TEMPLATE_ID := G_2COLS_CONTAINER_TEMPLATE_ID;
10343     ELSIF g_UI_Context.control_layout=2 THEN
10344       G_CONTAINER_TEMPLATE_ID := G_3COLS_CONTAINER_TEMPLATE_ID;
10345     END IF;
10346 
10347     IF p_node.instantiable_flag IN(G_OPTIONAL_INST_TYPE,G_MINMAX_INST_TYPE) OR
10348        p_node.virtual_flag=G_NO_FLAG THEN
10349 
10350       l_is_inst_node := TRUE;
10351 
10352     END IF;
10353 
10354     l_pagebase_expl_node_id := get_Expl_Id(p_model_id     => p_node.devl_project_id,
10355                                            p_ps_node_id   => p_node.ps_node_id,
10356                                            p_component_id => p_node.component_id,
10357                                            p_ps_node_type => p_node.ps_node_type);
10358 
10359     -- In cases where a node is to added to a region because of
10360     -- max_siblings test, the parent UI node may not be bound to the parent
10361     -- of the new ps node. In such a case, the parent_page_id passed in
10362     -- may not be that of the parent_ps_node. So we pass in a NULL p_parent_page_id to
10363     -- get_Parent_page_data so that the right parent_page_id is found and the new
10364     -- page is added under the correct parent in page refs
10365 
10366     l_parent_page_id := p_parent_page_id;
10367     l_parent_page_persistent_id := p_node.parent_persistent_node_id;
10368 
10369     IF l_parent_page_id IS NOT NULL THEN
10370       BEGIN
10371 
10372         SELECT persistent_node_id INTO l_parent_page_persistent_id
10373         FROM CZ_UI_PAGES
10374         WHERE ui_Def_id = g_UI_Context.ui_def_id
10375         AND   page_id = l_parent_page_id;
10376 
10377         IF NOT l_parent_page_persistent_id = p_node.parent_persistent_node_id THEN
10378           l_parent_page_id := NULL;
10379         END IF;
10380       EXCEPTION
10381         WHEN NO_DATA_FOUND THEN
10382           l_parent_page_id := NULL;
10383       END;
10384     END IF;
10385 
10386     get_Parent_Page_Data(p_parent_persistent_node_id => l_parent_page_persistent_id,
10387                          p_parent_page_id            => l_parent_page_id,
10388                          x_page_set_id               => l_page_set_id,
10389                          x_page_id                   => l_last_page_id,
10390                          x_parent_page_set_type      => l_page_set_type,
10391                          x_parent_page_ref_id        => l_parent_page_ref_id,
10392                          x_parent_node_depth         => l_node_depth);
10393 
10394     l_node_depth := l_node_depth + 1;
10395     IF l_page_set_type IS NULL THEN
10396       l_page_set_type := g_UI_Context.PRIMARY_NAVIGATION;
10397     END IF;
10398 
10399     --
10400     -- if it is root model node or nonvirtual model node
10401     -- then  create new Page Set
10402     --
10403     -- create a new Page Set
10404     --  List of enumerated Page Set types :
10405     --    1 - PAGE_FLOW
10406     --    2 - SINGLE_LEVEL_MENU
10407     --    3 - MULTI_LEVEL_MENU
10408     --    4 - MODEL_TREE_MENU
10409     --
10410     IF (p_node.parent_id IS NULL OR
10411        (p_node.virtual_flag=G_NO_FLAG AND
10412         g_UI_Context.PRIMARY_NAVIGATION NOT IN (G_MODEL_TREE_MENU))) AND
10413        g_UI_Context.PRIMARY_NAVIGATION NOT IN(G_SINGLE_PAGE)  THEN
10414 
10415       create_Page_Set(p_ui_def_id          => g_UI_Context.ui_def_id,
10416                       p_page_set_type      => l_page_set_type,
10417                       p_persistent_node_id => p_node.persistent_node_id,
10418                       p_model_ref_expl_id  => l_pagebase_expl_node_id,
10419                       x_page_set_id        => l_page_set_id);
10420 
10421      l_node_depth         := 1;
10422      l_seq_nbr            := 1;
10423      l_parent_page_ref_id := NULL;
10424 
10425     END IF;
10426 
10427     --
10428     -- get num of this page in this UI
10429     --
10430     l_page_counter := get_Page_Counter() + 1;
10431 
10432     l_page_node.page_id               := allocateId('CZ_UI_PAGES_S');
10433     l_page_node.ui_def_id             := g_UI_Context.ui_def_id;
10434     l_page_node.NAME                  := 'Page-'||TO_CHAR(l_page_counter);
10435     l_page_node.persistent_node_id    := p_node.persistent_node_id;
10436     l_page_node.jrad_doc              := generate_JRAD_Page_Name(l_page_counter);
10437 
10438     IF l_is_drilldown_node OR g_UI_Context.PRIMARY_NAVIGATION IN(G_SINGLE_PAGE)THEN
10439       l_page_node.page_set_id           := NULL;
10440     ELSE
10441       l_page_node.page_set_id           := l_page_set_id;
10442     END IF;
10443 
10444     l_page_node.split_seq_nbr         := 1;
10445     l_page_node.caption_source        := G_DEFAULT_CAPTION_RULE_ID;
10446 
10447     l_page_node.pagebase_path         := get_Page_Path(p_node.ps_node_id);
10448 
10449     l_page_node.pagebase_expl_node_id := l_pagebase_expl_node_id;
10450     l_page_node.seeded_flag           := G_NO_FLAG;
10451     l_page_node.deleted_flag          := G_MARK_TO_ADD;
10452 
10453     INSERT INTO CZ_UI_PAGES
10454       (page_id,
10455        ui_def_id,
10456        NAME,
10457        persistent_node_id,
10458        jrad_doc,
10459        page_set_id,
10460        split_seq_nbr,
10461        caption_source,
10462        pagebase_path,
10463        pagebase_expl_node_id,
10464        page_rev_nbr,
10465        seeded_flag,
10466        page_status_template_id,
10467        page_status_templ_uidef_id,
10468        caption_rule_id,
10469        deleted_flag)
10470     VALUES
10471       (l_page_node.page_id ,
10472        l_page_node.ui_def_id,
10473        l_page_node.NAME,
10474        l_page_node.persistent_node_id,
10475        l_page_node.jrad_doc,
10476        l_page_node.page_set_id,
10477        l_page_node.split_seq_nbr,
10478        l_page_node.caption_source,
10479        l_page_node.pagebase_path,
10480        l_page_node.pagebase_expl_node_id,
10481        1,
10482        l_page_node.seeded_flag,
10483        g_PAGE_STATUS_TEMPLATE_ID,
10484        G_GLOBAL_TEMPLATES_UI_DEF_ID,
10485        NULL,
10486        l_page_node.deleted_flag);
10487 
10488     --
10489     -- add new UI page to cache
10490     --
10491     g_ui_pages_tbl(l_page_node.page_id) := l_page_node;
10492 
10493     l_page_ui_node.ui_def_id                   := g_UI_Context.ui_def_id;
10494     l_page_ui_node.persistent_node_id          := p_node.persistent_node_id;
10495     l_page_ui_node.parent_persistent_node_id   := p_node.parent_persistent_node_id;
10496     l_page_ui_node.region_persistent_node_id   := p_node.persistent_node_id;
10497     l_page_ui_node.pagebase_persistent_node_id := p_node.persistent_node_id;
10498     l_page_ui_node.page_id                     := l_page_node.page_id;
10499     l_page_ui_node.seq_nbr                     := 0;
10500     l_page_ui_node.ctrl_template_id            := G_CONTAINER_TEMPLATE_ID;
10501     l_page_ui_node.element_id                  := get_Element_Id();
10502     l_page_ui_node.parent_element_id           := NULL;
10503     l_page_ui_node.element_type                := G_UI_PAGE_NODE_TYPE;
10504     l_page_ui_node.instantiable_flag           := p_node.instantiable_flag;
10505     l_page_ui_node.ctrl_template_ui_def_id     := G_GLOBAL_TEMPLATES_UI_DEF_ID;
10506     l_page_ui_node.model_ref_expl_id           := l_page_node.pagebase_expl_node_id;
10507     l_page_ui_node.base_page_flag              := G_YES_FLAG;
10508 
10509     l_page_ui_node.deleted_flag                := G_MARK_TO_ADD;
10510 
10511     g_ELEMENT_COUNTER   := 0;
10512     l_page_ui_node.name := 'Page Region - 1';
10513 
10514     INSERT INTO CZ_UI_PAGE_ELEMENTS
10515       (ui_def_id,
10516        persistent_node_id,
10517        parent_persistent_node_id,
10518        region_persistent_node_id,
10519        pagebase_persistent_node_id,
10520        page_id,
10521        seq_nbr,
10522        ctrl_template_id,
10523        element_id,
10524        parent_element_id,
10525        element_type,
10526        instantiable_flag,
10527        ctrl_template_ui_def_id,
10528        model_ref_expl_id,
10529        base_page_flag,
10530        element_signature_id,
10531        name,
10532        deleted_flag)
10533     VALUES
10534       (l_page_ui_node.ui_def_id,
10535        l_page_ui_node.persistent_node_id,
10536        l_page_ui_node.parent_persistent_node_id,
10537        l_page_ui_node.region_persistent_node_id,
10538        l_page_ui_node.pagebase_persistent_node_id,
10539        l_page_ui_node.page_id,
10540        l_page_ui_node.seq_nbr,
10541        l_page_ui_node.ctrl_template_id,
10542        l_page_ui_node.element_id,
10543        l_page_ui_node.parent_element_id,
10544        l_page_ui_node.element_type,
10545        l_page_ui_node.instantiable_flag,
10546        l_page_ui_node.ctrl_template_ui_def_id,
10547        l_page_ui_node.model_ref_expl_id,
10548        l_page_ui_node.base_page_flag,
10549        6004,
10550        l_page_ui_node.name,
10551        l_page_ui_node.deleted_flag);
10552 
10553     IF p_node.ps_node_type IN(G_BOM_MODEL_TYPE, G_BOM_OPTION_CLASS_TYPE) AND
10554        NVL(g_UI_Context.suppress_refresh_flag,G_NO_FLAG)=G_NO_FLAG  THEN
10555 
10556        --  AND contains_BOM_Nodes(p_node) THEN -- related to bug #3622010
10557 
10558        add_BOM_Node(p_node                  => p_node,
10559                     p_page_id               => l_page_ui_node.page_id,
10560                     p_pagebase_expl_node_id => l_page_node.pagebase_expl_node_id,
10561                     p_parent_element_id     => l_page_ui_node.element_id,
10562                     p_pagebase_persistent_node_id => l_page_ui_node.pagebase_persistent_node_id);
10563 
10564     END IF;
10565 
10566     IF NVL(g_UI_Context.suppress_refresh_flag,G_NO_FLAG)=G_NO_FLAG THEN
10567       add_CX_Button(p_node               => p_node,
10568                     p_ui_node            => l_page_ui_node);
10569     END IF;
10570 
10571     IF NVL(g_UI_Context.suppress_refresh_flag,G_NO_FLAG)=G_NO_FLAG THEN
10572       FOR i IN(SELECT *
10573                  FROM CZ_UI_PAGE_ELEMENTS
10574                 WHERE ui_def_id=l_page_ui_node.ui_def_id AND
10575                       page_id=l_last_page_id AND
10576                       persistent_node_id=l_page_ui_node.parent_persistent_node_id AND
10577                       element_type IN(G_UI_PAGE_NODE_TYPE,G_UI_REGION_NODE_TYPE) AND
10578                       deleted_flag IN(G_NO_FLAG, G_MARK_TO_ADD, G_MARK_TO_REFRESH))
10579       LOOP
10580         IF NVL(i.suppress_refresh_flag, G_NO_FLAG) = G_NO_FLAG THEN
10581           IF l_is_inst_node THEN
10582              add_Instance_Controls(p_ui_node          => l_page_ui_node,
10583                                    p_parent_ui_node   => i,
10584                                    p_node             => p_node);
10585            END IF;
10586            IF l_is_drilldown_node AND l_is_inst_node=FALSE THEN
10587               create_Drilldown_Button(p_parent_ui_node => i,
10588                                       p_ui_node        => l_page_ui_node,
10589                                       p_page_set_id    => l_page_set_id);
10590            END IF;
10591         END IF;
10592       END LOOP;
10593     END IF;
10594     --
10595     -- at this point UI page is already created ,but
10596     -- is not attached to any Page Sets yet
10597     --
10598 
10599    IF l_is_drilldown_node=FALSE THEN
10600 
10601    FOR m IN(SELECT page_set_id FROM CZ_UI_PAGE_SETS
10602             WHERE ui_def_id=g_UI_Context.ui_def_id AND
10603                   page_set_id=l_page_set_id AND
10604                   NVL(suppress_refresh_flag,G_NO_FLAG)=G_NO_FLAG)
10605    LOOP
10606 
10607      /******** attach new UI Page to Page Set *********************/
10608      BEGIN
10609 
10610        --
10611        -- create a new record for this UI page in CZ_UI_PAGE_REFS
10612        --
10613        l_page_ref_id := allocateId('CZ_UI_PAGE_REFS_S');
10614 
10615        l_ref_pagebase_path := get_Page_Path(p_node.ps_node_id, l_page_set_id);
10616 
10617        IF g_UI_Context.PRIMARY_NAVIGATION IN(G_SINGLE_LEVEL_MENU) THEN
10618 
10619          SELECT COUNT(*)+1 INTO l_seq_nbr
10620          FROM CZ_UI_PAGE_REFS WHERE ui_def_id=g_UI_Context.ui_def_id AND
10621               deleted_flag=G_NO_FLAG;
10622 
10623        ELSIF g_UI_Context.PRIMARY_NAVIGATION IN(G_MODEL_TREE_MENU) THEN
10624 
10625 
10626          l_seq_nbr := get_new_page_ref_seq(p_node, l_page_set_id, l_parent_page_ref_id);
10627 
10628          UPDATE CZ_UI_PAGE_REFS
10629          SET seq_nbr = seq_nbr + 1
10630          WHERE ui_def_id = g_UI_Context.ui_def_id
10631          AND page_set_id = l_page_set_id
10632          AND parent_page_ref_id = l_parent_page_ref_id
10633          AND seq_nbr >= l_seq_nbr
10634          AND deleted_flag = G_NO_FLAG;
10635 
10636        ELSE
10637          IF l_seq_nbr IS NULL THEN
10638             l_seq_nbr :=p_node.tree_seq;
10639          END IF;
10640        END IF;
10641 
10642       INSERT INTO CZ_UI_PAGE_REFS
10643       (ui_def_id,
10644        page_set_id,
10645        page_ref_id,
10646        parent_page_ref_id,
10647        seq_nbr,
10648        node_depth,
10649        condition_id,
10650        NAME,
10651        caption_source,
10652        target_persistent_node_id,
10653        target_path,
10654        target_ui_def_id,
10655        target_page_set_id,
10656        target_page_id,
10657        modified_flags,
10658        path_to_prev_page,
10659        path_to_next_page,
10660        page_ref_type,
10661        target_expl_node_id,
10662        caption_rule_id,
10663        deleted_flag)
10664        VALUES
10665       (g_UI_Context.ui_def_id,
10666        l_page_set_id,
10667        l_page_ref_id,
10668        l_parent_page_ref_id,
10669        l_seq_nbr,
10670        l_node_depth,
10671        NULL,
10672        p_node.name,
10673        G_DEFAULT_CAPTION_RULE_ID,
10674        p_node.persistent_node_id,
10675        l_ref_pagebase_path,
10676        NULL,
10677        NULL,
10678        l_page_ui_node.page_id,
10679        0,
10680        NULL,
10681        NULL,
10682        l_page_set_type,
10683        l_page_node.pagebase_expl_node_id,
10684        NULL,
10685        G_NO_FLAG);
10686 
10687       EXCEPTION
10688         WHEN OTHERS THEN
10689           DEBUG('create_UI_Page() : '||SQLERRM);
10690           NULL;
10691       END;
10692 
10693      /******** end of attaching to Page Set *********************/
10694 
10695        x_page_set_id   := l_page_set_id;
10696        x_page_set_type := l_page_set_type;
10697        x_page_ref_id   := l_page_ref_id;
10698      END LOOP;
10699 
10700    END IF;
10701 
10702    RETURN l_page_ui_node;
10703 
10704   END create_UI_Page;
10705 
10706   --
10707   -- create nested Region
10708   --
10709   FUNCTION create_UI_Region(p_node                 IN CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE,
10710                             p_parent_ui_node       IN CZ_UI_PAGE_ELEMENTS%ROWTYPE,
10711                             p_insert_index         IN NUMBER DEFAULT -1)
10712     RETURN CZ_UI_PAGE_ELEMENTS%ROWTYPE IS
10713 
10714     l_ui_node                 CZ_UI_PAGE_ELEMENTS%ROWTYPE;
10715     l_bom_element_id          CZ_UI_PAGE_ELEMENTS.element_id%TYPE;
10716     l_ui_node_name            CZ_UI_PAGE_ELEMENTS.name%TYPE;
10717     l_counter                 NUMBER;
10718     l_parent_seq_nbr          NUMBER;
10719     l_last_seq_nbr            NUMBER;
10720     l_prev_seq_nbr            NUMBER;
10721     l_max_prev_seq_nbr        NUMBER;
10722     l_child_count             NUMBER;
10723     l_page_id                 NUMBER;
10724 
10725   BEGIN
10726 
10727     IF p_parent_ui_node.suppress_refresh_flag=G_YES_FLAG THEN
10728       RETURN l_ui_node;
10729     END IF;
10730 
10731     -- do not create UI region if already exists UI page with the same persistent_node_id
10732     BEGIN
10733       SELECT page_id INTO l_page_id FROM CZ_UI_PAGES
10734        WHERE ui_def_id=g_UI_CONTEXT.ui_def_id AND persistent_node_id=p_node.persistent_node_id AND
10735              deleted_flag NOT IN (G_YES_FLAG,G_MARK_TO_DELETE, G_LIMBO_FLAG) AND rownum<2;
10736        RETURN l_ui_node;
10737     EXCEPTION
10738       WHEN NO_DATA_FOUND THEN
10739            NULL;
10740     END;
10741     l_ui_node.ui_def_id                   := g_UI_Context.ui_def_id;
10742     l_ui_node.persistent_node_id          := p_node.persistent_node_id;
10743     l_ui_node.parent_persistent_node_id   := p_node.parent_persistent_node_id;
10744     l_ui_node.region_persistent_node_id   := p_node.persistent_node_id;
10745     l_ui_node.pagebase_persistent_node_id := p_parent_ui_node.persistent_node_id;
10746     l_ui_node.page_id                     := p_parent_ui_node.page_id;
10747 
10748     IF p_insert_index = -1 THEN
10749       SELECT NVL(MAX(seq_nbr),0) INTO l_max_prev_seq_nbr  FROM CZ_UI_PAGE_ELEMENTS
10750       START WITH ui_def_id=g_UI_Context.ui_def_id AND
10751                  page_id=p_parent_ui_node.page_id AND
10752                  element_id=p_parent_ui_node.element_id AND
10753                  deleted_flag NOT IN(G_YES_FLAG,G_MARK_TO_DELETE)
10754       CONNECT BY PRIOR ui_def_id=g_UI_Context.ui_def_id AND
10755          ui_def_id=g_UI_Context.ui_def_id AND PRIOR page_id= p_parent_ui_node.page_id
10756           AND page_id=p_parent_ui_node.page_id AND PRIOR element_id=parent_element_id AND
10757           PRIOR deleted_flag NOT IN(G_YES_FLAG,G_MARK_TO_DELETE) AND
10758           deleted_flag NOT IN(G_YES_FLAG,G_MARK_TO_DELETE);
10759     ELSE
10760       l_max_prev_seq_nbr := p_insert_index-1;
10761     END IF;
10762 
10763     l_ui_node.seq_nbr  := l_max_prev_seq_nbr + 1;
10764 
10765     UPDATE CZ_UI_PAGE_ELEMENTS
10766        SET seq_nbr=seq_nbr+1
10767      WHERE ui_def_id=g_UI_Context.ui_def_id AND
10768            page_id=p_parent_ui_node.page_id AND
10769            seq_nbr>l_max_prev_seq_nbr AND
10770            deleted_flag NOT IN(G_YES_FLAG,G_MARK_TO_DELETE);
10771 
10772     l_ui_node.element_id                  := get_Element_Id();
10773 
10774     l_ui_node.parent_element_id           := p_parent_ui_node.element_id;
10775 
10776     l_ui_node.element_type                := G_UI_REGION_NODE_TYPE;
10777     l_ui_node.instantiable_flag           := p_node.instantiable_flag;
10778     l_ui_node.ctrl_template_id            := G_NSTD_CONTAINER_TEMPLATE_ID;
10779     l_ui_node.ctrl_template_ui_def_id     := p_node.template_ui_def_id;
10780     l_ui_node.model_ref_expl_id           := get_Expl_Id(p_model_id       => p_node.devl_project_id,
10781                                                          p_ps_node_id     => p_node.ps_node_id,
10782                                                          p_component_id   => p_node.component_id,
10783                                                          p_ps_node_type   => p_node.ps_node_type);
10784     l_ui_node.element_signature_id        := 6007;
10785     l_ui_node.deleted_flag                := G_MARK_TO_ADD;
10786 
10787     SELECT COUNT(element_id)+1 INTO l_counter FROM CZ_UI_PAGE_ELEMENTS
10788     WHERE ui_def_id=g_UI_Context.ui_def_id AND
10789           page_id=l_ui_node.page_id AND
10790           ctrl_template_id=l_ui_node.ctrl_template_id AND
10791           deleted_flag NOT IN(G_YES_FLAG,G_MARK_TO_DELETE);
10792 
10793     l_ui_node.name :='Nested Region - '||TO_CHAR(l_counter);
10794 
10795     INSERT INTO CZ_UI_PAGE_ELEMENTS
10796       (ui_def_id,
10797        persistent_node_id,
10798        parent_persistent_node_id,
10799        region_persistent_node_id,
10800        pagebase_persistent_node_id,
10801        page_id,
10802        seq_nbr,
10803        ctrl_template_id,
10804        element_id,
10805        parent_element_id,
10806        element_type,
10807        instantiable_flag,
10808        ctrl_template_ui_def_id,
10809        model_ref_expl_id,
10810        element_signature_id,
10811        name,
10812        deleted_flag)
10813     VALUES
10814       (l_ui_node.ui_def_id,
10815        l_ui_node.persistent_node_id,
10816        l_ui_node.parent_persistent_node_id,
10817        l_ui_node.region_persistent_node_id,
10818        l_ui_node.pagebase_persistent_node_id,
10819        l_ui_node.page_id,
10820        l_ui_node.seq_nbr,
10821        l_ui_node.ctrl_template_id,
10822        l_ui_node.element_id,
10823        l_ui_node.parent_element_id,
10824        l_ui_node.element_type,
10825        l_ui_node.instantiable_flag,
10826        l_ui_node.ctrl_template_ui_def_id,
10827        l_ui_node.model_ref_expl_id,
10828        l_ui_node.element_signature_id,
10829        l_ui_node.name,
10830        l_ui_node.deleted_flag);
10831 
10832     --
10833     -- add UI Elements node to cache
10834     --
10835     g_ui_page_elements_tbl(TO_NUMBER(l_ui_node.element_id)) := l_ui_node;
10836 
10837     IF p_node.ps_node_type IN(G_BOM_MODEL_TYPE, G_BOM_OPTION_CLASS_TYPE) THEN
10838        add_BOM_Node(p_node                  => p_node,
10839                     p_page_id               => l_ui_node.page_id,
10840                     p_pagebase_expl_node_id => l_ui_node.model_ref_expl_id,
10841                     p_parent_element_id     => l_ui_node.element_id,
10842                     p_pagebase_persistent_node_id => l_ui_node.pagebase_persistent_node_id);
10843 
10844     END IF;
10845 
10846     --
10847     -- mark UI Page as refreshed
10848     --
10849     mark_UI_Page_As_Refreshed(l_ui_node.page_id, l_ui_node.ui_def_id);
10850     add_CX_Button(p_node     => p_node,
10851                   p_ui_node  => l_ui_node);
10852 
10853     RETURN l_ui_node;
10854 
10855   END create_UI_Region;
10856 
10857   --
10858   -- create new UI Reference
10859   --
10860   FUNCTION create_UI_Reference(p_node                 IN CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE,
10861                                p_parent_ui_node       IN CZ_UI_PAGE_ELEMENTS%ROWTYPE)
10862     RETURN CZ_UI_PAGE_ELEMENTS%ROWTYPE IS
10863 
10864     l_ui_node                       CZ_UI_PAGE_ELEMENTS%ROWTYPE;
10865     l_page_ref_node                 CZ_UI_PAGE_REFS%ROWTYPE;
10866     l_target_ui_def_node            CZ_UI_DEFS%ROWTYPE;
10867     l_page_ref_id                   CZ_UI_PAGE_REFS.page_ref_id%TYPE;
10868     l_ui_action_id                  CZ_UI_ACTIONS.ui_action_id%TYPE;
10869     l_max_seq_nbr                   CZ_UI_PAGE_ELEMENTS.seq_nbr%TYPE;
10870     l_ps_node_type                  CZ_PS_NODES.ps_node_type%TYPE;
10871     l_target_path                   CZ_UI_PAGE_REFS.target_path%TYPE;
10872     l_ps_node                       CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE;
10873     l_counter                       NUMBER;
10874     l_persistent_node_id            NUMBER;
10875     l_seq_nbr                       NUMBER;
10876     l_max_prev_seq_nbr              NUMBER;
10877 
10878   BEGIN
10879 
10880     IF p_parent_ui_node.suppress_refresh_flag=G_YES_FLAG THEN
10881       RETURN l_ui_node;
10882     END IF;
10883 
10884     --
10885     -- get UI Def data of referenced UI
10886     --
10887     l_target_ui_def_node := get_Target_UI_Context(p_ui_def_node  => g_UI_Context,
10888                                                   p_reference_id => p_node.reference_id);
10889 
10890     l_ui_node.model_ref_expl_id := get_Expl_Id(p_model_id     => p_node.devl_project_id,
10891                                                p_ps_node_id   => p_node.ps_node_id,
10892                                                p_component_id => p_node.component_id,
10893                                                p_ps_node_type => p_node.ps_node_type);
10894 
10895     l_ui_node.ui_def_id                       := p_parent_ui_node.ui_def_id;
10896     l_ui_node.persistent_node_id              := p_node.persistent_node_id;
10897     l_ui_node.parent_persistent_node_id       := p_node.parent_persistent_node_id;
10898     l_ui_node.region_persistent_node_id       := p_parent_ui_node.region_persistent_node_id;
10899     l_ui_node.pagebase_persistent_node_id     := p_parent_ui_node.pagebase_persistent_node_id;
10900     l_ui_node.page_id                         := p_parent_ui_node.page_id;
10901 
10902 
10903     SELECT NVL(MAX(seq_nbr),0) INTO l_max_prev_seq_nbr  FROM CZ_UI_PAGE_ELEMENTS
10904     START WITH ui_def_id=g_UI_Context.ui_def_id AND
10905                page_id=p_parent_ui_node.page_id AND
10906                element_id=p_parent_ui_node.element_id AND
10907                deleted_flag NOT IN(G_YES_FLAG,G_MARK_TO_DELETE)
10908     CONNECT BY PRIOR ui_def_id=g_UI_Context.ui_def_id AND
10909        ui_def_id=g_UI_Context.ui_def_id AND PRIOR page_id= p_parent_ui_node.page_id
10910         AND page_id=p_parent_ui_node.page_id AND PRIOR element_id=parent_element_id AND
10911         PRIOR deleted_flag NOT IN(G_YES_FLAG,G_MARK_TO_DELETE) AND
10912         deleted_flag NOT IN(G_YES_FLAG,G_MARK_TO_DELETE);
10913 
10914     l_ui_node.seq_nbr  := l_max_prev_seq_nbr + 1;
10915 
10916     UPDATE CZ_UI_PAGE_ELEMENTS
10917        SET seq_nbr=seq_nbr+1
10918      WHERE ui_def_id=g_UI_Context.ui_def_id AND
10919            page_id=p_parent_ui_node.page_id AND
10920            seq_nbr>l_max_prev_seq_nbr AND
10921            deleted_flag NOT IN(G_YES_FLAG,G_MARK_TO_DELETE);
10922 
10923 
10924     l_ui_node.ctrl_template_id                := p_node.template_id;
10925     l_ui_node.element_id                      := get_Element_Id();
10926     l_ui_node.parent_element_id               := p_parent_ui_node.element_id;
10927 
10928     IF p_node.detailed_type_id IN(CZ_TYPES.UMANDATORY_REF_TYPEID) THEN
10929       l_ui_node.element_type := G_UI_DRILLDOWN_NODE_TYPE;
10930     ELSIF p_node.detailed_type_id IN(CZ_TYPES.UOPTIONAL_COMPONENT_TYPEID,CZ_TYPES.UMINMAX_COMPONENT_TYPEID) THEN
10931        l_ui_node.element_type := G_UI_NONBOMADDINST_NODE_TYPE;
10932     ELSIF p_node.detailed_type_id IN(CZ_TYPES.UOPTIONAL_BOM_REF_TYPEID,CZ_TYPES.UMINMAX_BOM_REF_TYPEID) THEN
10933        l_ui_node.element_type := G_UI_BOMADDINST_NODE_TYPE;
10934     ELSE
10935        NULL;
10936     END IF;
10937 
10938     l_ui_node.instantiable_flag               := p_node.instantiable_flag;
10939     l_ui_node.ctrl_template_ui_def_id         := p_node.template_ui_def_id;
10940     l_ui_node.element_signature_id            := p_node.root_element_signature_id;
10941     l_ui_node.deleted_flag                    := G_MARK_TO_ADD;
10942 
10943     SELECT COUNT(element_id)+1 INTO l_counter FROM CZ_UI_PAGE_ELEMENTS
10944     WHERE ui_def_id=g_UI_Context.ui_def_id AND
10945           page_id=l_ui_node.page_id AND
10946           ctrl_template_id=l_ui_node.ctrl_template_id AND
10947           deleted_flag NOT IN(G_YES_FLAG,G_MARK_TO_DELETE);
10948 
10949     l_ui_node.name := p_node.template_name||' - '||TO_CHAR(l_counter);
10950 
10951     --
10952     -- special handling for BOM referencies
10953     --
10954 
10955     IF p_node.detailed_type_id IN(CZ_TYPES.UMANDATORY_REF_TYPEID) THEN
10956        BEGIN
10957 
10958          SELECT NVL(MAX(seq_nbr),0) INTO l_max_seq_nbr
10959          FROM CZ_UI_PAGE_ELEMENTS
10960          WHERE ui_def_id=l_ui_node.ui_def_id
10961          AND parent_element_id=l_ui_node.parent_element_id
10962          AND deleted_flag IN(G_NO_FLAG,G_MARK_TO_REFRESH,G_MARK_TO_ADD)
10963          AND element_type IN(G_UI_BOMADDINST_NODE_TYPE);
10964 
10965          SELECT persistent_node_id INTO l_persistent_node_id
10966            FROM CZ_UI_PAGE_ELEMENTS
10967           WHERE ui_def_id=l_ui_node.ui_def_id AND
10968                 parent_element_id=l_ui_node.parent_element_id AND
10969                 seq_nbr=l_max_seq_nbr AND
10970                 ROWNUM<2;
10971 
10972          l_ps_node := get_Model_Node_By_Persist_Id(l_persistent_node_id,g_UI_COntext.devl_project_id);
10973 
10974          SELECT ps_node_type INTO l_ps_node_type
10975            FROM CZ_PS_NODES
10976           WHERE devl_project_id=p_node.reference_id AND
10977                 parent_id IS NULL AND
10978                 deleted_flag=G_NO_FLAG;
10979 
10980          IF l_ps_node_type IN(G_BOM_MODEL_TYPE,G_BOM_OPTION_CLASS_TYPE) AND
10981             (l_ps_node.ps_node_type IN(G_BOM_MODEL_TYPE,G_BOM_OPTION_CLASS_TYPE) OR
10982             l_ps_node.detailed_type_id in(CZ_TYPES.UOPTIONAL_BOM_REF_TYPEID,CZ_TYPES.UMINMAX_BOM_REF_TYPEID)) THEN
10983            l_ui_node.ctrl_template_id := NULL;
10984            l_ui_node.ctrl_template_ui_def_id := NULL;
10985          END IF;
10986 
10987        EXCEPTION
10988          WHEN OTHERS THEN
10989            DEBUG('create_UI_Reference() : '||SQLERRM);
10990        END;
10991     END IF;
10992 
10993     --
10994     --  model nodes must have associated record in CZ_UI_PAGE_ELEMENTS
10995     --
10996     INSERT INTO CZ_UI_PAGE_ELEMENTS
10997       (ui_def_id,
10998        persistent_node_id,
10999        parent_persistent_node_id,
11000        region_persistent_node_id,
11001        pagebase_persistent_node_id,
11002        page_id,
11003        seq_nbr,
11004        ctrl_template_id,
11005        element_id,
11006        parent_element_id,
11007        element_type,
11008        instantiable_flag,
11009        ctrl_template_ui_def_id,
11010        model_ref_expl_id,
11011        element_signature_id,
11012        name,
11013        deleted_flag)
11014     VALUES
11015       (l_ui_node.ui_def_id,
11016        l_ui_node.persistent_node_id,
11017        l_ui_node.parent_persistent_node_id,
11018        l_ui_node.region_persistent_node_id,
11019        l_ui_node.pagebase_persistent_node_id,
11020        l_ui_node.page_id,
11021        l_ui_node.seq_nbr,
11022        l_ui_node.ctrl_template_id,
11023        l_ui_node.element_id,
11024        l_ui_node.parent_element_id,
11025        l_ui_node.element_type,
11026        l_ui_node.instantiable_flag,
11027        l_ui_node.ctrl_template_ui_def_id,
11028        l_ui_node.model_ref_expl_id,
11029        l_ui_node.element_signature_id,
11030        l_ui_node.name,
11031        l_ui_node.deleted_flag);
11032 
11033     BEGIN
11034 
11035       UPDATE CZ_UI_REFS
11036          SET deleted_flag=G_NO_FLAG
11037        WHERE
11038          ui_def_id = l_ui_node.ui_def_id AND
11039          ref_persistent_node_id = l_ui_node.persistent_node_id;
11040 
11041       IF SQL%ROWCOUNT=0 THEN
11042         INSERT INTO CZ_UI_REFS
11043         (ui_def_id,
11044          ref_ui_def_id,
11045          ref_persistent_node_id,
11046          model_ref_expl_id,
11047          deleted_flag)
11048         VALUES
11049         (l_ui_node.ui_def_id,
11050          l_target_ui_def_node.ui_def_id,
11051          l_ui_node.persistent_node_id,
11052          l_ui_node.model_ref_expl_id,
11053          G_NO_FLAG);
11054       END IF;
11055 
11056     EXCEPTION
11057       WHEN OTHERS THEN
11058         NULL;
11059     END;
11060 
11061     l_ui_action_id := allocateId('CZ_UI_ACTIONS_S');
11062     INSERT INTO CZ_UI_ACTIONS
11063       (ui_action_id,
11064        ui_def_id,
11065        source_page_id,
11066        context_component_id,
11067        element_id,
11068        ui_action_type,
11069        target_ui_def_id,
11070        target_persistent_node_id,
11071        target_node_path,
11072        target_page_set_id,
11073        target_page_id,
11074        target_expl_node_id,
11075        seeded_flag,
11076        deleted_flag)
11077     VALUES
11078       (l_ui_action_id,
11079        l_ui_node.ui_def_id,
11080        l_ui_node.page_id,
11081        l_ui_node.region_persistent_node_id,
11082        l_ui_node.element_id,
11083        G_ACTION_CONFIGURE_SUBCOMP,
11084        l_target_ui_def_node.ui_def_id,
11085        p_node.persistent_node_id,
11086        TO_CHAR(p_node.persistent_node_id),
11087        l_target_ui_def_node.page_set_id,
11088        l_target_ui_def_node.start_page_id,
11089        l_ui_node.model_ref_expl_id,
11090        G_NO_FLAG,
11091        G_NO_FLAG);
11092 
11093     add_CX_Button(p_node               => p_node,
11094                   p_ui_node            => l_ui_node);
11095 
11096     --
11097     -- mark UI Page as refreshed
11098     --
11099     mark_UI_Page_As_Refreshed(l_ui_node.page_id, l_ui_node.ui_def_id);
11100 
11101     IF NOT(l_target_ui_def_node.PRIMARY_NAVIGATION=G_MODEL_TREE_MENU AND
11102        g_UI_Context.PRIMARY_NAVIGATION=G_MODEL_TREE_MENU) THEN
11103       RETURN l_ui_node;
11104     END IF;
11105 
11106     BEGIN
11107       l_page_ref_node := get_UI_Page_Ref_Node(p_ui_node => p_parent_ui_node);
11108     EXCEPTION
11109       WHEN NO_DATA_FOUND THEN
11110         RETURN l_ui_node;
11111     END;
11112 
11113     FOR m IN(SELECT page_set_id FROM CZ_UI_PAGE_SETS
11114               WHERE ui_def_id=g_UI_Context.ui_def_id AND
11115                     page_set_id=l_page_ref_node.page_set_id AND
11116                     NVL(suppress_refresh_flag,G_NO_FLAG)=G_NO_FLAG)
11117     LOOP
11118 
11119       --
11120       -- create a new record for this UI page in CZ_UI_PAGE_REFS
11121       --
11122       l_page_ref_id := allocateId('CZ_UI_PAGE_REFS_S');
11123 
11124        IF l_target_ui_def_node.start_page_id=-1 THEN
11125 
11126          SELECT MIN(page_id) INTO l_target_ui_def_node.start_page_id
11127            FROM CZ_UI_PAGES
11128           WHERE ui_def_id=l_target_ui_def_node.ui_def_id AND
11129                 deleted_flag IN(G_NO_FLAG,G_MARK_TO_ADD,G_MARK_TO_REFRESH);
11130 
11131          SELECT MIN(page_set_id) INTO l_target_ui_def_node.page_set_id
11132            FROM CZ_UI_PAGE_SETS
11133           WHERE ui_def_id=l_target_ui_def_node.ui_def_id AND deleted_flag=G_NO_FLAG;
11134 
11135       END IF;
11136 
11137       l_target_path := get_Page_Path(p_node.ps_node_id,l_page_ref_node.page_set_id);
11138 
11139       IF g_UI_Context.PRIMARY_NAVIGATION IN(G_SINGLE_LEVEL_MENU) THEN
11140         SELECT COUNT(*)+1 INTO l_seq_nbr
11141         FROM CZ_UI_PAGE_REFS WHERE ui_def_id=g_UI_Context.ui_def_id AND
11142              deleted_flag=G_NO_FLAG;
11143       ELSIF g_UI_Context.PRIMARY_NAVIGATION IN(G_MODEL_TREE_MENU) THEN
11144 
11145         l_seq_nbr := get_new_page_ref_seq(p_node, l_page_ref_node.page_set_id, l_page_ref_node.page_ref_id);
11146 
11147         UPDATE CZ_UI_PAGE_REFS
11148         SET seq_nbr = seq_nbr + 1
11149         WHERE ui_def_id = g_UI_Context.ui_def_id
11150         AND page_set_id = l_page_ref_node.page_set_id
11151         AND parent_page_ref_id = l_page_ref_node.page_ref_id
11152         AND seq_nbr >= l_seq_nbr
11153         AND deleted_flag = G_NO_FLAG;
11154       ELSE
11155         l_seq_nbr :=p_node.tree_seq;
11156       END IF;
11157 
11158       INSERT INTO CZ_UI_PAGE_REFS
11159       (ui_def_id,
11160        page_set_id,
11161        page_ref_id,
11162        parent_page_ref_id,
11163        seq_nbr,
11164        node_depth,
11165        NAME,
11166        caption_source,
11167        target_persistent_node_id,
11168        target_path,
11169        target_ui_def_id,
11170        target_page_set_id,
11171        target_page_id,
11172        modified_flags,
11173        page_ref_type,
11174        target_expl_node_id,
11175        caption_rule_id,
11176        deleted_flag)
11177        VALUES
11178       (l_ui_node.ui_def_id,
11179        l_page_ref_node.page_set_id,
11180        l_page_ref_id,
11181        l_page_ref_node.page_ref_id,
11182        l_seq_nbr,
11183        l_page_ref_node.node_depth+1,
11184        p_node.NAME,
11185        G_DEFAULT_CAPTION_RULE_ID,
11186        p_node.persistent_node_id,
11187        l_target_path,
11188        l_target_ui_def_node.ui_def_id, --NULL, -- request from Alok -- old code l_target_ui_def_node.ui_def_id,
11189        l_target_ui_def_node.page_set_id, --NULL, -- request from Alok -- old code l_target_ui_def_node.page_set_id,
11190        l_target_ui_def_node.start_page_id, --NULL, -- request from Alok -- old code l_target_ui_def_node.start_page_id,
11191        0,
11192        l_page_ref_node.page_ref_type,
11193        l_ui_node.model_ref_expl_id,
11194        NULL,
11195        G_NO_FLAG);
11196 
11197     END LOOP;
11198 
11199     RETURN l_ui_node;
11200 
11201   END create_UI_Reference;
11202 
11203   --
11204   -- delete UI element recursively
11205   --
11206   PROCEDURE delete_UI_Element(p_ui_node               IN CZ_UI_PAGE_ELEMENTS%ROWTYPE,
11207                               p_suppress_refresh_flag IN CZ_UI_PAGE_ELEMENTS.suppress_refresh_flag%TYPE DEFAULT NULL,
11208                               p_delete_in_model       IN BOOLEAN DEFAULT NULL) IS
11209 
11210     l_suppress_refresh_flag CZ_UI_PAGE_ELEMENTS.suppress_refresh_flag%TYPE;
11211     l_del_flag              BOOLEAN := FALSE;
11212   BEGIN
11213 
11214     --
11215     -- get suppress_refresh_flag flag of UI region to which this element
11216     -- belong to
11217     --
11218     IF p_suppress_refresh_flag IS NULL THEN
11219        FOR i IN (SELECT persistent_node_id,region_persistent_node_id,suppress_refresh_flag
11220                  FROM CZ_UI_PAGE_ELEMENTS
11221                  START WITH ui_def_id = p_ui_node.ui_def_id AND
11222                           deleted_flag IN
11223                           (G_NO_FLAG, G_MARK_TO_ADD, G_MARK_TO_REFRESH,
11224                            G_MARK_TO_DELETE) AND element_id = p_ui_node.element_id
11225                  CONNECT BY PRIOR parent_element_id = element_id AND
11226                          deleted_flag IN
11227                          (G_NO_FLAG, G_MARK_TO_ADD, G_MARK_TO_REFRESH,
11228                           G_MARK_TO_DELETE) AND
11229                          PRIOR deleted_flag IN
11230                           (G_NO_FLAG, G_MARK_TO_ADD, G_MARK_TO_REFRESH,
11231                            G_MARK_TO_DELETE))
11232         LOOP
11233           IF i.persistent_node_id=i.region_persistent_node_id THEN
11234              l_suppress_refresh_flag := i.suppress_refresh_flag;
11235           END IF;
11236         END LOOP;
11237     ELSE
11238        IF p_suppress_refresh_flag=G_YES_FLAG THEN
11239          l_suppress_refresh_flag := p_suppress_refresh_flag;
11240        ELSE
11241          l_suppress_refresh_flag := p_ui_node.suppress_refresh_flag;
11242        END IF;
11243     END IF;
11244 
11245     --
11246     -- if suppress_refresh_flag = true (G_YES_FLAG) then
11247     -- node will be deleted
11248     -- else node will be deassiated from model node
11249     --
11250     IF NVL(l_suppress_refresh_flag,G_NO_FLAG) = G_NO_FLAG THEN
11251 
11252        --
11253        -- delete UI element
11254        --
11255        UPDATE CZ_UI_PAGE_ELEMENTS
11256           SET deleted_flag = G_MARK_TO_DELETE
11257         WHERE ui_def_id = p_ui_node.ui_def_id AND
11258               element_id IN
11259               (SELECT element_id FROM CZ_UI_PAGE_ELEMENTS
11260                START WITH ui_def_id=p_ui_node.ui_def_id AND element_id=p_ui_node.element_id
11261                CONNECT BY PRIOR ui_def_id=p_ui_node.ui_def_id AND ui_def_id=p_ui_node.ui_def_id AND
11262                PRIOR element_id=parent_element_id AND
11263                      deleted_flag IN (G_NO_FLAG, G_MARK_TO_ADD, G_MARK_TO_REFRESH,G_MARK_TO_DELETE) AND
11264                PRIOR deleted_flag IN(G_NO_FLAG, G_MARK_TO_ADD, G_MARK_TO_REFRESH,G_MARK_TO_DELETE));
11265 
11266        l_del_flag := TRUE;
11267 
11268     ELSE
11269       IF p_delete_in_model THEN
11270          --
11271          -- deassociate UI element from model node
11272          --
11273          UPDATE CZ_UI_PAGE_ELEMENTS
11274             SET deleted_flag = G_MARK_TO_DEASSOCIATE,
11275                 persistent_node_id = 0
11276           WHERE ui_def_id = p_ui_node.ui_def_id AND
11277                 element_id IN
11278                 (SELECT element_id FROM CZ_UI_PAGE_ELEMENTS
11279                  START WITH ui_def_id=p_ui_node.ui_def_id AND element_id=p_ui_node.element_id
11280                  CONNECT BY PRIOR ui_def_id=p_ui_node.ui_def_id AND
11281                   PRIOR element_id=parent_element_id AND
11282                         deleted_flag IN (G_NO_FLAG, G_MARK_TO_ADD, G_MARK_TO_REFRESH,G_MARK_TO_DELETE) AND
11283                   PRIOR deleted_flag IN(G_NO_FLAG, G_MARK_TO_ADD, G_MARK_TO_REFRESH,G_MARK_TO_DELETE));
11284          l_del_flag := TRUE;
11285       END IF;
11286     END IF;
11287 
11288     IF l_del_flag THEN
11289       --
11290       -- delete UI Ref from Page Sets
11291       --
11292       UPDATE CZ_UI_PAGE_REFS
11293          SET deleted_flag = G_YES_FLAG
11294        WHERE ui_def_id=p_ui_node.ui_def_id AND
11295              target_persistent_node_id=p_ui_node.persistent_node_id AND
11296              deleted_flag=G_NO_FLAG AND
11297              target_page_id NOT IN(SELECT page_id FROM CZ_UI_PAGES
11298              WHERE ui_def_id=g_UI_Context.ui_def_id);
11299 
11300       IF SQL%ROWCOUNT>0 THEN
11301         --
11302         -- delete UI Ref
11303         --
11304         UPDATE CZ_UI_REFS
11305            SET deleted_flag = G_YES_FLAG
11306          WHERE ui_def_id=p_ui_node.ui_def_id AND
11307                ref_persistent_node_id=p_ui_node.persistent_node_id AND
11308                deleted_flag=G_NO_FLAG AND NOT EXISTS
11309                (SELECT NULL FROM CZ_UI_PAGE_ELEMENTS
11310                 WHERE ui_def_id=p_ui_node.ui_def_id AND
11311                       persistent_node_id=p_ui_node.persistent_node_id AND
11312                       deleted_flag IN(G_NO_FLAG,G_MARK_TO_ADD,G_MARK_TO_REFRESH));
11313       END IF;
11314 
11315     END IF;
11316 
11317     --
11318     -- mark UI Page as refreshed
11319     --
11320     mark_UI_Page_As_Refreshed(p_ui_node.page_id, p_ui_node.ui_def_id);
11321 
11322   END delete_UI_Element;
11323 
11324   --
11325   -- remove UI Page Ref record
11326   --
11327   PROCEDURE remove_UI_Page_Ref(p_ui_node IN CZ_UI_PAGE_ELEMENTS%ROWTYPE) IS
11328 
11329     l_page_ref_id             NUMBER;
11330     l_parent_page_ref_id      NUMBER;
11331     l_page_set_id             NUMBER;
11332     l_seq_nbr                 NUMBER;
11333 
11334   BEGIN
11335 
11336         SELECT MIN(page_ref_id) INTO l_page_ref_id
11337           FROM CZ_UI_PAGE_REFS
11338          WHERE ui_def_id=p_ui_node.ui_def_id AND
11339                target_page_id=p_ui_node.page_id AND
11340                deleted_flag=G_NO_FLAG;
11341 
11342         UPDATE CZ_UI_PAGE_REFS
11343            SET deleted_flag = G_YES_FLAG
11344          WHERE ui_def_id=p_ui_node.ui_def_id AND
11345                page_ref_id=l_page_ref_id
11346             RETURNING parent_page_ref_id,page_set_id,seq_nbr
11347                  INTO l_parent_page_ref_id,l_page_set_id,l_seq_nbr;
11348 
11349 
11350         --
11351         -- update seq nbr to seq nbr - 1
11352         --
11353         UPDATE CZ_UI_PAGE_REFS
11354            SET seq_nbr = seq_nbr - 1
11355          WHERE ui_def_id=p_ui_node.ui_def_id AND
11356                page_set_id=l_page_set_id AND
11357                parent_page_ref_id = l_parent_page_ref_id AND
11358                seq_nbr > l_seq_nbr AND
11359                deleted_flag=G_NO_FLAG;
11360 
11361 
11362   EXCEPTION
11363     WHEN OTHERS THEN
11364       NULL;
11365   END remove_UI_Page_Ref;
11366 
11367   PROCEDURE delete_Related_Buttons(p_ui_node IN CZ_UI_PAGE_ELEMENTS%ROWTYPE) IS
11368     l_suppress_refresh_flag     CZ_UI_PAGE_ELEMENTS.suppress_refresh_flag%TYPE;
11369   BEGIN
11370 
11371     FOR i IN(SELECT element_id,parent_element_id,page_id,suppress_refresh_flag
11372                FROM CZ_UI_PAGE_ELEMENTS a
11373               WHERE ui_def_id=p_ui_node.ui_def_id AND
11374                     persistent_node_id=p_ui_node.persistent_node_id AND
11375                     element_type IN(G_UI_BOMADDINST_NODE_TYPE,
11376                                     G_UI_NONBOMADDINST_NODE_TYPE,
11377                                     G_UI_PAGEDRILLDOWN_NODE_TYPE) AND
11378                     deleted_flag NOT IN(G_YES_FLAG, G_LIMBO_FLAG))
11379     LOOP
11380 
11381        IF i.parent_element_id IS NOT NULL THEN
11382          BEGIN
11383            l_suppress_refresh_flag := G_NO_FLAG;
11384            SELECT NVL(suppress_refresh_flag,G_NO_FLAG) INTO l_suppress_refresh_flag
11385              FROM CZ_UI_PAGE_ELEMENTS
11386             WHERE ui_def_id  = p_ui_node.ui_def_id AND
11387                   page_id = i.page_id AND
11388                   element_id=i.parent_element_id;
11389          EXCEPTION
11390            WHEN NO_DATA_FOUND THEN
11391              NULL;
11392          END;
11393        END IF;
11394 
11395        IF l_suppress_refresh_flag=G_YES_FLAG OR i.suppress_refresh_flag=G_YES_FLAG THEN
11396          UPDATE CZ_UI_PAGE_ELEMENTS
11397             SET deleted_flag = G_MARK_TO_DEASSOCIATE,
11398                 persistent_node_id=0
11399           WHERE ui_def_id  = p_ui_node.ui_def_id AND
11400                 page_id = i.page_id AND
11401                 element_id = i.element_id;
11402        ELSE
11403          UPDATE CZ_UI_PAGE_ELEMENTS
11404             SET deleted_flag = G_MARK_TO_DELETE
11405           WHERE ui_def_id  = p_ui_node.ui_def_id AND
11406                 page_id = i.page_id AND
11407                 element_id = i.element_id;
11408        END IF;
11409 
11410        mark_UI_Page_As_Refreshed(i.page_id, p_ui_node.ui_def_id);
11411 
11412     END LOOP;
11413 
11414   END delete_Related_Buttons;
11415 
11416   --
11417   -- delete UI container
11418   --
11419   PROCEDURE delete_UI_Container(p_ui_node IN CZ_UI_PAGE_ELEMENTS%ROWTYPE) IS
11420       TYPE number_tbl_type        IS TABLE OF NUMBER INDEX BY BINARY_INTEGER;
11421       l_element_id_tbl            varchar_tbl_type;
11422       l_parent_element_id_tbl     varchar_tbl_type;
11423       l_persistent_node_id_tbl    number_tbl_type;
11424       l_suppress_refresh_flag_tbl varchar_tbl_type;
11425       l_page_id_tbl               number_tbl_type;
11426       l_suppress_refresh_flag     CZ_UI_PAGE_ELEMENTS.suppress_refresh_flag%TYPE;
11427 
11428   BEGIN
11429 
11430     --
11431     -- if it's a page remove page and corresponding UI Page ref record
11432     --
11433     IF p_ui_node.parent_element_id IS NULL THEN
11434 
11435       SELECT element_id, parent_element_id, persistent_node_id,page_id, NVL(suppress_refresh_flag,G_NO_FLAG)
11436         BULK COLLECT INTO l_element_id_tbl, l_parent_element_id_tbl, l_persistent_node_id_tbl,
11437                          l_page_id_tbl, l_suppress_refresh_flag_tbl
11438         FROM CZ_UI_PAGE_ELEMENTS
11439        WHERE ui_def_id=p_ui_node.ui_def_id AND
11440              page_id=p_ui_node.page_id AND
11441              deleted_flag NOT IN(G_YES_FLAG);
11442 
11443        delete_Related_Buttons(p_ui_node);
11444 
11445        --
11446        -- mark this UI Page as deleted
11447        --
11448        mark_UI_Page_As_Deleted(p_ui_node.page_id, p_ui_node.ui_def_id);
11449 
11450        --
11451        -- remove corresponding UI page ref record
11452        --
11453        remove_UI_Page_Ref(p_ui_node);
11454 
11455     ELSE
11456 
11457       SELECT element_id,persistent_node_id,page_id, suppress_refresh_flag
11458         BULK COLLECT INTO  l_element_id_tbl, l_persistent_node_id_tbl,
11459                            l_page_id_tbl, l_suppress_refresh_flag_tbl
11460         FROM CZ_UI_PAGE_ELEMENTS
11461        START WITH ui_def_id=p_ui_node.ui_def_id AND
11462                   page_id=p_ui_node.page_id AND
11463                   element_id=p_ui_node.element_id
11464        CONNECT BY PRIOR element_id=parent_element_id AND
11465                         ui_def_id=p_ui_node.ui_def_id AND PRIOR
11466                         ui_def_id=p_ui_node.ui_def_id;
11467 
11468        mark_UI_Page_As_Refreshed(p_ui_node.page_id, p_ui_node.ui_def_id);
11469 
11470     END IF;
11471 
11472     IF l_element_id_tbl.COUNT=0 THEN
11473       RETURN;
11474     END IF;
11475 
11476     FOR i IN l_element_id_tbl.FIRST..l_element_id_tbl.LAST
11477     LOOP
11478 
11479       BEGIN
11480         l_suppress_refresh_flag := G_NO_FLAG;
11481         IF l_parent_element_id_tbl(i) IS NOT NULL THEN
11482           SELECT NVL(suppress_refresh_flag,G_NO_FLAG) INTO l_suppress_refresh_flag
11483             FROM CZ_UI_PAGE_ELEMENTS
11484            WHERE ui_def_id  = p_ui_node.ui_def_id AND
11485                  page_id = p_ui_node.page_id AND
11486                  element_id=l_parent_element_id_tbl(i);
11487         END IF;
11488       EXCEPTION
11489         WHEN NO_DATA_FOUND THEN
11490           NULL;
11491       END;
11492 
11493       IF l_suppress_refresh_flag=G_YES_FLAG OR l_suppress_refresh_flag_tbl(i)=G_YES_FLAG THEN
11494         UPDATE CZ_UI_PAGE_ELEMENTS
11495            SET deleted_flag = G_MARK_TO_DEASSOCIATE,
11496                persistent_node_id=0
11497          WHERE ui_def_id  = p_ui_node.ui_def_id AND
11498                page_id = p_ui_node.page_id AND
11499                element_id = l_element_id_tbl(i);
11500       ELSE
11501         UPDATE CZ_UI_PAGE_ELEMENTS
11502            SET deleted_flag = G_MARK_TO_DELETE
11503          WHERE ui_def_id  = p_ui_node.ui_def_id AND
11504                page_id = p_ui_node.page_id AND
11505                element_id = l_element_id_tbl(i);
11506       END IF;
11507 
11508       UPDATE CZ_UI_ACTIONS
11509          SET deleted_flag=G_YES_FLAG
11510        WHERE ui_def_id=p_ui_node.ui_def_id AND
11511              source_page_id=p_ui_node.page_id AND
11512              element_id=l_element_id_tbl(i);
11513     END LOOP;
11514 
11515   END delete_UI_Container;
11516 
11517   PROCEDURE handle_Deleted_Nodes(p_ui_def_id IN NUMBER) IS
11518 
11519     l_suppress_refresh_flag CZ_UI_PAGE_ELEMENTS.suppress_refresh_flag%TYPE;
11520 
11521   BEGIN
11522 
11523    -- delete UI References
11524     UPDATE CZ_UI_PAGE_REFS uiref
11525       SET deleted_flag=G_YES_FLAG
11526     WHERE ui_def_id=p_ui_def_id AND target_ui_def_id IS NOT NULL AND
11527            NOT EXISTS(SELECT NULL FROM CZ_PS_NODES a
11528            WHERE a.devl_project_id=(SELECT b.devl_project_id FROM CZ_UI_DEFS b
11529            WHERE b.ui_def_id=p_ui_def_id) AND
11530            persistent_node_id=uiref.target_persistent_node_id AND deleted_flag=G_NO_FLAG)
11531            AND deleted_flag=G_NO_FLAG;
11532 
11533     UPDATE CZ_UI_REFS uiref
11534        SET deleted_flag=G_YES_FLAG
11535      WHERE ui_def_id=p_ui_def_id AND
11536            NOT EXISTS(SELECT NULL FROM CZ_PS_NODES a
11537            WHERE a.devl_project_id=(SELECT b.devl_project_id FROM CZ_UI_DEFS b
11538            WHERE b.ui_def_id=p_ui_def_id) AND
11539            persistent_node_id=uiref.ref_persistent_node_id AND deleted_flag=G_NO_FLAG)
11540            AND deleted_flag=G_NO_FLAG;
11541 
11542   END handle_Deleted_Nodes;
11543 
11544   --
11545   -- delete UI page
11546   --
11547   PROCEDURE delete_UI_Page(p_ui_node IN CZ_UI_PAGE_ELEMENTS%ROWTYPE) IS
11548 
11549     l_page_set_id               CZ_UI_PAGE_SETS.page_set_id%TYPE;
11550     l_parent_page_ref_id        CZ_UI_PAGE_REFS.page_ref_id%TYPE;
11551     l_seq_nbr                   CZ_UI_PAGE_REFS.seq_nbr%TYPE;
11552     l_path_to_next_page         CZ_UI_PAGE_REFS.path_to_next_page%TYPE;
11553     l_target_persistent_node_id CZ_UI_PAGE_REFS.target_persistent_node_id%TYPE;
11554     l_target_page_id            CZ_UI_PAGE_REFS.target_page_id%TYPE;
11555     l_ui_page_ref_node          CZ_UI_PAGE_REFS%ROWTYPE;
11556     l_ui_page_node              CZ_UI_PAGES%ROWTYPE;
11557     l_page_ref_id               CZ_UI_PAGE_REFS.page_ref_id%TYPE;
11558 
11559 
11560   BEGIN
11561     --
11562     -- delete all child UI nodes
11563     --
11564     delete_UI_Container(p_ui_node);
11565 
11566   END delete_UI_Page;
11567 
11568   --
11569   -- delete UI region
11570   --
11571   PROCEDURE delete_UI_Region(p_ui_node IN CZ_UI_PAGE_ELEMENTS%ROWTYPE) IS
11572   BEGIN
11573     delete_UI_Container(p_ui_node);
11574   END delete_UI_Region;
11575 
11576 
11577   PROCEDURE replace_page_ref_target_path(p_node           IN CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE,
11578                                          p_page_id        IN CZ_UI_PAGES.page_id%TYPE) IS
11579 
11580     l_page_set_id            CZ_UI_PAGE_REFS.page_set_id%TYPE;
11581     l_target_path            CZ_UI_PAGE_REFS.target_path%TYPE;
11582     l_page_path_from_root    CZ_UI_PAGE_REFS.target_path%TYPE;
11583     l_old_page_path_from_root CZ_UI_PAGE_REFS.target_path%TYPE;
11584 
11585   BEGIN
11586 
11587     SELECT page_set_id,pagebase_path INTO l_page_set_id,l_old_page_path_from_root FROM CZ_UI_PAGES
11588     WHERE page_id=p_page_id AND ui_def_id=g_UI_Context.ui_def_id;
11589 
11590     l_target_path := get_Page_Path(p_node.ps_node_id, l_page_set_id);
11591     l_page_path_from_root := get_Page_Path(p_node.ps_node_id, NULL);
11592 
11593     IF l_page_path_from_root <> l_old_page_path_from_root THEN
11594       UPDATE CZ_UI_PAGES
11595          SET pagebase_path=l_page_path_from_root,
11596              deleted_flag=DECODE(deleted_flag,G_MARK_TO_ADD,G_MARK_TO_ADD,G_MARK_TO_REFRESH)
11597        WHERE page_id=p_page_id AND
11598              ui_def_id=g_UI_Context.ui_def_id AND
11599              deleted_flag NOT IN(G_YES_FLAG,G_MARK_TO_DELETE);
11600 
11601       IF SQL%ROWCOUNT>0 THEN
11602           --DEBUG('asp: updating target path 3 for page ' || p_page_id || ' to ' || l_target_path);
11603           UPDATE CZ_UI_PAGE_REFS
11604             SET target_path=l_target_path
11605           WHERE ui_def_id=g_UI_Context.ui_def_id AND
11606                 target_page_id=p_page_id;
11607       END IF;
11608     END IF;
11609 
11610   END replace_page_ref_target_path;
11611 
11612   PROCEDURE replace_page_ref_target_path(p_node           IN CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE) IS
11613     l_target_path            CZ_UI_PAGE_REFS.target_path%TYPE;
11614   BEGIN
11615 
11616     IF p_node.ps_node_type = G_REFERENCE_TYPE AND
11617        g_UI_Context.primary_navigation = G_MODEL_TREE_MENU THEN
11618 
11619       FOR i in (SELECT page_set_id, page_ref_id
11620                 FROM CZ_UI_PAGE_REFS
11621                 WHERE ui_def_id = g_UI_Context.ui_def_id
11622                 AND target_ui_def_id IS NOT NULL
11623                 AND target_page_id IS NOT NULL
11624                 AND target_persistent_node_id = p_node.persistent_node_id
11625                 AND deleted_flag = G_NO_FLAG)
11626 
11627       LOOP
11628         l_target_path := get_Page_Path(p_node.ps_node_id, i.page_set_id);
11629         --DEBUG('asp: updating target path 10 for page ref ' || i.page_ref_id || ' to ' || l_target_path);
11630         UPDATE CZ_UI_PAGE_REFS
11631           SET target_path=l_target_path
11632         WHERE ui_def_id=g_UI_Context.ui_def_id
11633         AND page_set_id = i.page_set_id
11634         AND page_ref_id = i.page_ref_id;
11635       END LOOP;
11636 
11637     ELSE
11638       FOR i in (SELECT page_id
11639                 FROM CZ_UI_PAGES
11640                 WHERE ui_def_id = g_UI_Context.ui_def_id
11641                 AND persistent_node_id = p_node.persistent_node_id
11642                 AND deleted_flag NOT IN (G_YES_FLAG, G_LIMBO_FLAG))
11643       LOOP
11644         replace_page_ref_target_path(p_node, i.page_id);
11645       END LOOP;
11646     END IF;
11647   END replace_page_ref_target_path;
11648 
11649 
11650   PROCEDURE replace_page_ref_target_path(p_ui_node        IN CZ_UI_PAGE_ELEMENTS%ROWTYPE,
11651                                          p_node           IN CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE) IS
11652 
11653     l_page_set_id            CZ_UI_PAGE_REFS.page_set_id%TYPE;
11654     l_target_path            CZ_UI_PAGE_REFS.target_path%TYPE;
11655     l_page_path_from_root    CZ_UI_PAGE_REFS.target_path%TYPE;
11656     l_old_page_path_from_root CZ_UI_PAGE_REFS.target_path%TYPE;
11657 
11658   BEGIN
11659 
11660     replace_page_ref_target_path(p_node, p_ui_node.page_id);
11661 
11662   END replace_page_ref_target_path;
11663 
11664   PROCEDURE move_page_ref(p_page_set_id            IN CZ_UI_PAGE_REFS.page_set_id%TYPE,
11665                           p_page_ref_id            IN CZ_UI_PAGE_REFS.page_ref_id%TYPE,
11666                           p_node                   IN CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE,
11667                           x_new_parent_page_ref_id OUT NOCOPY CZ_UI_PAGE_REFS.page_ref_id%TYPE) IS
11668 
11669 
11670     l_page_ref_type          CZ_UI_PAGE_REFS.page_ref_type%TYPE;
11671     l_new_parent_node_depth  CZ_UI_PAGE_REFS.node_depth%TYPE;
11672     l_node_depth             CZ_UI_PAGE_REFS.node_depth%TYPE;
11673     l_page_set_suppress_flag CZ_UI_PAGE_SETS.suppress_refresh_flag%TYPE;
11674 
11675   BEGIN
11676 
11677     x_new_parent_page_ref_id := NULL;
11678 
11679 
11680     IF p_page_set_id IS NOT NULL THEN
11681       SELECT suppress_refresh_flag INTO l_page_set_suppress_flag FROM CZ_UI_PAGE_SETS
11682       WHERE ui_def_id=g_UI_Context.ui_def_id AND page_set_id=p_page_set_id;
11683     END IF;
11684 
11685     BEGIN
11686       SELECT page_ref_type, node_depth
11687         INTO l_page_ref_type, l_node_depth
11688         FROM CZ_UI_PAGE_REFS
11689        WHERE ui_def_id=g_UI_Context.ui_def_id AND
11690              page_ref_id=p_page_ref_id AND
11691              deleted_flag=G_NO_FLAG;
11692 
11693       -- get new parent page ref id
11694       BEGIN
11695         SELECT MIN(page_ref_id)
11696           INTO x_new_parent_page_ref_id
11697           FROM CZ_UI_PAGE_REFS
11698          WHERE ui_def_id=g_UI_Context.ui_def_id AND
11699                target_persistent_node_id=p_node.parent_persistent_node_id AND
11700                deleted_flag=G_NO_FLAG;
11701 
11702         SELECT node_depth
11703           INTO l_new_parent_node_depth
11704           FROM CZ_UI_PAGE_REFS
11705          WHERE ui_def_id=g_UI_Context.ui_def_id AND
11706                page_ref_id=x_new_parent_page_ref_id;
11707 
11708       EXCEPTION
11709         WHEN NO_DATA_FOUND THEN
11710           NULL;
11711       END;
11712 
11713       IF x_new_parent_page_ref_id IS NULL THEN -- parent node does not exists in CZ_UI_PAGE_REFS
11714 
11715         IF l_page_ref_type IN (G_MODEL_TREE_MENU) AND p_node.parent_id IS NOT NULL THEN
11716           --DEBUG('asp: Deleting page_ref 5 ' || p_page_ref_id);
11717           UPDATE CZ_UI_PAGE_REFS
11718              SET deleted_flag=G_YES_FLAG
11719            WHERE ui_def_id=g_UI_Context.ui_def_id AND
11720                  page_ref_id=p_page_ref_id AND
11721                  deleted_flag=G_NO_FLAG;
11722         END IF;
11723 
11724       ELSE
11725 
11726           g_check_boundaries_tbl(g_UI_Context.ui_def_id) := G_YES_FLAG;
11727           --DEBUG('asp: Setting parent_page_ref_id of page ref ' || p_page_ref_id || ' to ' || x_new_parent_page_ref_id);
11728           --DEBUG('asp: Setting seq_nbr of page ref ' || p_page_ref_id || ' to ' || p_node.tree_seq);
11729           UPDATE CZ_UI_PAGE_REFS
11730              SET parent_page_ref_id = x_new_parent_page_ref_id,
11731                  seq_nbr = p_node.tree_seq
11732            WHERE ui_def_id=g_UI_Context.ui_def_id AND
11733                  page_ref_id=p_page_ref_id;
11734 
11735           UPDATE CZ_UI_PAGE_REFS
11736              SET node_depth = node_depth + (l_new_parent_node_depth-l_node_depth) + 1
11737            WHERE (ui_def_id,page_ref_id) IN
11738                 (SELECT ui_def_id,page_ref_id FROM CZ_UI_PAGE_REFS
11739                  START WITH ui_def_id=g_UI_Context.ui_def_id AND page_ref_id=p_page_ref_id
11740                  CONNECT BY PRIOR page_ref_id=parent_page_ref_id AND
11741                  ui_def_id=g_UI_Context.ui_def_id AND PRIOR ui_def_id=g_UI_Context.ui_def_id AND
11742                  deleted_flag=G_NO_FLAG AND PRIOR deleted_flag=G_NO_FLAG);
11743 
11744       END IF;
11745 
11746     EXCEPTION
11747       WHEN OTHERS THEN
11748         NULL;
11749     END;
11750 
11751   END move_page_ref;
11752 
11753 
11754   PROCEDURE move_page_ref(p_ui_node                IN CZ_UI_PAGE_ELEMENTS%ROWTYPE,
11755                           p_node                   IN CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE,
11756                           x_new_parent_page_ref_id OUT NOCOPY CZ_UI_PAGE_REFS.page_ref_id%TYPE) IS
11757 
11758     l_page_set_id            CZ_UI_PAGE_REFS.page_set_id%TYPE;
11759     l_page_ref_id            CZ_UI_PAGE_REFS.page_ref_id%TYPE;
11760 
11761   BEGIN
11762 
11763     BEGIN
11764 
11765       SELECT page_set_id INTO l_page_set_id FROM CZ_UI_PAGES
11766        WHERE page_id=p_ui_node.page_id AND ui_def_id=g_UI_Context.ui_def_id;
11767 
11768       SELECT page_ref_id, parent_page_ref_id
11769         INTO l_page_ref_id, x_new_parent_page_ref_id
11770         FROM CZ_UI_PAGE_REFS
11771        WHERE ui_def_id=g_UI_Context.ui_def_id AND
11772              page_set_id = l_page_set_id AND
11773              target_page_id = p_ui_node.page_id AND
11774              deleted_flag=G_NO_FLAG AND
11775              rownum < 2;
11776 
11777       IF p_node.parent_persistent_node_id <> p_ui_node.parent_persistent_node_id THEN
11778         move_page_ref(l_page_set_id, l_page_ref_id, p_node, x_new_parent_page_ref_id);
11779       END IF;
11780     EXCEPTION
11781       WHEN NO_DATA_FOUND THEN
11782         NULL;
11783     END;
11784   END move_page_ref;
11785 
11786   --
11787   -- change instantiability of Page
11788   --
11789   PROCEDURE check_Page_Changes(p_ui_node        IN CZ_UI_PAGE_ELEMENTS%ROWTYPE,
11790                                p_node           IN CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE) IS
11791 
11792     l_changed_pages_tbl      number_tbl_type;
11793     l_persistent_node_id_tbl number_tbl_type;
11794     l_ps_node_id_tb          number_tbl_type;
11795     l_component_id_tbl       number_tbl_type;
11796     l_ps_node_type_tbl       number_tbl_type;
11797     l_page_set_id            CZ_UI_PAGE_REFS.page_set_id%TYPE;
11798     l_parent_ref_persist_id  CZ_UI_PAGE_REFS.target_persistent_node_id%TYPE;
11799     l_new_parent_page_ref_id CZ_UI_PAGE_REFS.page_ref_id%TYPE;
11800     l_curr_target_path       CZ_UI_PAGE_REFS.target_path%TYPE;
11801     l_page_set_suppress_flag CZ_UI_PAGE_SETS.suppress_refresh_flag%TYPE;
11802     l_mark_flag              CZ_UI_PAGE_ELEMENTS.deleted_flag%TYPE;
11803     l_ui_node_name           CZ_UI_PAGE_ELEMENTS.name%TYPE;
11804 
11805   BEGIN
11806 
11807     SELECT page_set_id INTO l_page_set_id FROM CZ_UI_PAGES
11808     WHERE page_id=p_ui_node.page_id AND ui_def_id=g_UI_Context.ui_def_id;
11809 
11810     IF l_page_set_id IS NOT NULL THEN
11811       SELECT suppress_refresh_flag INTO l_page_set_suppress_flag FROM CZ_UI_PAGE_SETS
11812       WHERE ui_def_id=g_UI_Context.ui_def_id AND page_set_id=l_page_set_id;
11813     END IF;
11814 
11815     move_page_ref(p_ui_node, p_node, l_new_parent_page_ref_id);
11816 
11817     IF p_node.parent_persistent_node_id<>p_ui_node.parent_persistent_node_id AND
11818        p_ui_node.instantiable_flag=p_node.instantiable_flag AND
11819        p_ui_node.instantiable_flag IN(G_OPTIONAL_INST_TYPE,G_MINMAX_INST_TYPE,G_MANDATORY_INST_TYPE) THEN
11820 
11821      FOR i IN(SELECT page_id,element_id,parent_element_id,suppress_refresh_flag FROM CZ_UI_PAGE_ELEMENTS
11822               WHERE ui_def_id=p_ui_node.ui_def_id AND
11823                     persistent_node_id=p_ui_node.parent_persistent_node_id AND
11824                             ((region_persistent_node_id=persistent_node_id OR
11825                                    pagebase_persistent_node_id=persistent_node_id) AND
11826                                    ctrl_template_id IN( G_CONTAINER_TEMPLATE_ID
11827                                                         ,G_NSTD_CONTAINER_TEMPLATE_ID
11828                                                         ,G_2COLS_CONTAINER_TEMPLATE_ID
11829                                                         ,G_3COLS_CONTAINER_TEMPLATE_ID)) AND
11830                                    deleted_flag NOT IN(G_YES_FLAG,G_MARK_TO_DELETE))
11831     LOOP
11832       IF i.suppress_refresh_flag=G_YES_FLAG THEN
11833         UPDATE CZ_UI_PAGE_ELEMENTS
11834            SET deleted_flag=G_MARK_TO_DEASSOCIATE,
11835                persistent_node_id=0
11836          WHERE ui_def_id=p_ui_node.ui_def_id AND
11837                page_id=i.page_id AND
11838                persistent_node_id=p_ui_node.persistent_node_id AND
11839                element_type IN(G_UI_NONBOMADDINST_NODE_TYPE,
11840                                G_UI_BOMADDINST_NODE_TYPE,
11841                                G_UI_PAGEDRILLDOWN_NODE_TYPE);
11842       ELSE
11843         UPDATE CZ_UI_PAGE_ELEMENTS
11844            SET deleted_flag=G_MARK_TO_DELETE
11845          WHERE ui_def_id=p_ui_node.ui_def_id AND
11846                page_id=i.page_id AND
11847                persistent_node_id=p_ui_node.persistent_node_id AND
11848                element_type IN(G_UI_NONBOMADDINST_NODE_TYPE,
11849                                G_UI_BOMADDINST_NODE_TYPE,
11850                                G_UI_PAGEDRILLDOWN_NODE_TYPE);
11851       END IF;
11852 
11853       mark_UI_Page_As_Refreshed(i.page_id, p_ui_node.ui_def_id);
11854 
11855     END LOOP;
11856 
11857       FOR parent_ui_node IN(SELECT * FROM CZ_UI_PAGE_ELEMENTS
11858                             WHERE ui_def_id=g_UI_Context.ui_def_id AND
11859                                   persistent_node_id=p_node.parent_persistent_node_id AND
11860                                   ((region_persistent_node_id=persistent_node_id OR
11861                                    pagebase_persistent_node_id=persistent_node_id) AND
11862                                    ctrl_template_id IN( G_CONTAINER_TEMPLATE_ID
11863                                                         ,G_NSTD_CONTAINER_TEMPLATE_ID
11864                                                         ,G_2COLS_CONTAINER_TEMPLATE_ID
11865                                                         ,G_3COLS_CONTAINER_TEMPLATE_ID)) AND
11866                                    deleted_flag NOT IN(G_YES_FLAG,G_MARK_TO_DELETE))
11867       LOOP
11868         IF NVL(parent_ui_node.suppress_refresh_flag, G_NO_FLAG) = G_NO_FLAG THEN
11869           IF p_ui_node.instantiable_flag IN(G_OPTIONAL_INST_TYPE,G_MINMAX_INST_TYPE) THEN
11870             --
11871             -- add new Instance Management COntrol to the parent UI Page
11872             --
11873             add_Instance_Controls(p_ui_node          => p_ui_node,
11874                                   p_parent_ui_node   => parent_ui_node,
11875                                   p_node             => p_node);
11876           ELSE -- MANDATORY
11877             IF l_new_parent_page_ref_id IS NULL THEN
11878               create_Drilldown_Button(p_parent_ui_node => parent_ui_node,
11879                                       p_ui_node        => p_ui_node,
11880                                       p_page_set_id    => l_page_set_id);
11881             END IF;
11882           END IF;
11883         END IF;
11884       END LOOP;
11885 
11886     END IF; -- end of IF p_node.parent_persistent_node_id<> ...
11887 
11888     --
11889     -- (n,m)/(0,1) => (1,1)
11890     --
11891     IF p_ui_node.instantiable_flag IN(G_OPTIONAL_INST_TYPE,G_MINMAX_INST_TYPE) AND
11892        p_node.instantiable_flag=G_MANDATORY_INST_TYPE THEN
11893 
11894       g_check_boundaries_tbl(g_UI_Context.ui_def_id) := G_YES_FLAG;
11895 
11896       --
11897       -- remove all Instance Management Controls with a given
11898       -- persistent_node_id = p_ui_node.persistent_node_id
11899       --
11900       remove_Instance_Controls(p_ui_node);
11901 
11902       IF g_UI_Context.PRIMARY_NAVIGATION IN(G_SINGLE_PAGE,G_SUBTABS) OR
11903         l_new_parent_page_ref_id IS NULL  THEN
11904 
11905         FOR parent_ui_node IN(SELECT * FROM CZ_UI_PAGE_ELEMENTS
11906                               WHERE ui_def_id=g_UI_Context.ui_def_id AND
11907                                   persistent_node_id=p_node.parent_persistent_node_id AND
11908                                   (region_persistent_node_id=persistent_node_id OR
11909                                    pagebase_persistent_node_id=persistent_node_id) AND
11910                                    ctrl_template_id IN( G_CONTAINER_TEMPLATE_ID
11911                                                         ,G_NSTD_CONTAINER_TEMPLATE_ID
11912                                                         ,G_2COLS_CONTAINER_TEMPLATE_ID
11913                                                         ,G_3COLS_CONTAINER_TEMPLATE_ID) AND
11914                                    deleted_flag NOT IN(G_YES_FLAG,G_MARK_TO_DELETE))
11915         LOOP
11916           IF NVL(parent_ui_node.suppress_refresh_flag, G_NO_FLAG) = G_NO_FLAG THEN
11917             create_Drilldown_Button(p_parent_ui_node => parent_ui_node,
11918                                     p_ui_node        => p_ui_node,
11919                                     p_page_set_id    => l_page_set_id);
11920           END IF;
11921         END LOOP;
11922 
11923       END IF;
11924 
11925       --
11926       -- if navigation style is not Dynamic Tree Menu then
11927       -- merge parent and child Page Flows
11928       --
11929       IF g_UI_Context.PRIMARY_NAVIGATION<>G_MODEL_TREE_MENU AND l_page_set_id IS NOT NULL AND
11930          NVL(l_page_set_suppress_flag,G_NO_FLAG)=G_NO_FLAG THEN
11931         merge_Page_Flows(p_ui_node);
11932       END IF;
11933 
11934     END IF;
11935 
11936     IF  p_ui_node.instantiable_flag IN(G_OPTIONAL_INST_TYPE,G_MINMAX_INST_TYPE) AND
11937        p_node.instantiable_flag IN(G_OPTIONAL_INST_TYPE,G_MINMAX_INST_TYPE) AND
11938        p_ui_node.instantiable_flag <> p_node.instantiable_flag THEN
11939 
11940       g_check_boundaries_tbl(g_UI_Context.ui_def_id) := G_YES_FLAG;
11941 
11942       --
11943       -- synchronize CZ_UI_PAGE_ELEMENTS.instantiable_flag with
11944       -- CZ_PS_NODES.instantiable_flag
11945       --
11946       FOR n IN(SELECT ui_def_id,page_id,element_id FROM CZ_UI_PAGE_ELEMENTS a
11947                 WHERE ui_def_id=p_ui_node.ui_def_id AND
11948                       persistent_node_id=p_ui_node.persistent_node_id AND
11949                       element_type IN(G_UI_NONBOMADDINST_NODE_TYPE,G_UI_BOMADDINST_NODE_TYPE) AND
11950                       deleted_flag=G_NO_FLAG AND NVL(suppress_refresh_flag,G_NO_FLAG)=G_NO_FLAG AND
11951                       EXISTS(SELECT NULL FROM CZ_UI_PAGE_ELEMENTS
11952                               WHERE ui_def_id=p_ui_node.ui_def_id AND
11953                                     page_id=a.page_id AND
11954                                     element_id=a.parent_element_id AND
11955                                     NVL(suppress_refresh_flag,G_NO_FLAG)=G_NO_FLAG)
11956                )
11957      LOOP
11958 
11959       l_ui_node_name := get_UI_Node_Name(p_page_id       => n.page_id,
11960                                          p_template_id   => p_node.template_id,
11961                                          p_template_name => p_node.template_name);
11962 
11963       UPDATE CZ_UI_PAGE_ELEMENTS a
11964       SET ctrl_template_id =  p_node.template_id,
11965           ctrl_template_ui_def_id = p_node.template_ui_def_id,
11966           instantiable_flag = p_node.instantiable_flag,
11967           name=l_ui_node_name,
11968           deleted_flag=G_MARK_TO_REFRESH
11969       WHERE ui_def_id=n.ui_def_id AND
11970             page_id=n.page_id AND
11971             element_id=n.element_id;
11972 
11973        IF SQL%ROWCOUNT > 0 THEN
11974          l_changed_pages_tbl(l_changed_pages_tbl.COUNT+1) := n.page_id;
11975        END IF;
11976      END LOOP;
11977 
11978      IF l_changed_pages_tbl.COUNT>0 THEN
11979          FOR i IN l_changed_pages_tbl.First..l_changed_pages_tbl.Last
11980          LOOP
11981            mark_UI_Page_As_Refreshed(l_changed_pages_tbl(i), g_UI_Context.ui_def_id);
11982          END LOOP;
11983       END IF;
11984 
11985       FOR parent_ui_node IN(SELECT * FROM CZ_UI_PAGE_ELEMENTS a
11986                               WHERE ui_def_id=g_UI_Context.ui_def_id AND
11987                                   persistent_node_id=p_node.parent_persistent_node_id AND
11988                                   (region_persistent_node_id=persistent_node_id OR
11989                                    pagebase_persistent_node_id=persistent_node_id) AND
11990                                    deleted_flag NOT IN(G_YES_FLAG,G_MARK_TO_DELETE) AND
11991                                    NVL(suppress_refresh_flag,G_NO_FLAG)=G_NO_FLAG AND
11992                                    ctrl_template_id IN( G_CONTAINER_TEMPLATE_ID
11993                                                         ,G_NSTD_CONTAINER_TEMPLATE_ID
11994                                                         ,G_2COLS_CONTAINER_TEMPLATE_ID
11995                                                         ,G_3COLS_CONTAINER_TEMPLATE_ID) AND
11996                                    NOT EXISTS(SELECT NULL FROM CZ_UI_PAGE_ELEMENTS b
11997                                                WHERE b.ui_def_id=g_UI_Context.ui_def_id AND
11998                                                      b.page_id=a.page_id AND
11999                                                      b.region_persistent_node_id=a.region_persistent_node_id AND
12000                                                      b.persistent_node_id=p_ui_node.persistent_node_id AND
12001                                                      b.element_type IN(G_UI_NONBOMADDINST_NODE_TYPE,G_UI_BOMADDINST_NODE_TYPE) AND
12002                                                      b.deleted_flag NOT IN(G_MARK_TO_DELETE,G_YES_FLAG))
12003                            )
12004       LOOP
12005         --
12006         -- add new Instance Management Control to the parent UI Page
12007         --
12008         add_Instance_Controls(p_ui_node          => p_ui_node,
12009                               p_parent_ui_node   => parent_ui_node,
12010                               p_node             => p_node);
12011       END LOOP;
12012 
12013     END IF;
12014 
12015     IF p_node.instantiable_flag IN(G_OPTIONAL_INST_TYPE,G_MINMAX_INST_TYPE) AND
12016        p_ui_node.instantiable_flag=G_MANDATORY_INST_TYPE THEN
12017 
12018       g_check_boundaries_tbl(g_UI_Context.ui_def_id) := G_YES_FLAG;
12019 
12020       FOR parent_ui_node IN(SELECT * FROM CZ_UI_PAGE_ELEMENTS
12021                             WHERE ui_def_id=g_UI_Context.ui_def_id AND
12022                                   persistent_node_id=p_node.parent_persistent_node_id AND
12023                                   ((region_persistent_node_id=persistent_node_id OR
12024                                    pagebase_persistent_node_id=persistent_node_id) AND
12025                                    ctrl_template_id IN( G_CONTAINER_TEMPLATE_ID
12026                                                         ,G_NSTD_CONTAINER_TEMPLATE_ID
12027                                                         ,G_2COLS_CONTAINER_TEMPLATE_ID
12028                                                         ,G_3COLS_CONTAINER_TEMPLATE_ID)) AND
12029                                    deleted_flag NOT IN(G_YES_FLAG,G_MARK_TO_DELETE))
12030       LOOP
12031         IF NVL(parent_ui_node.suppress_refresh_flag, G_NO_FLAG) = G_NO_FLAG THEN
12032           --
12033           -- add new Instance Management COntrol to the parent UI Page
12034           --
12035           add_Instance_Controls(p_ui_node          => p_ui_node,
12036                                 p_parent_ui_node   => parent_ui_node,
12037                                 p_node             => p_node);
12038         END IF;
12039       END LOOP;
12040 
12041       IF g_UI_Context.PRIMARY_NAVIGATION NOT IN(G_MODEL_TREE_MENU) AND l_page_set_id IS NOT NULL AND
12042          NVL(l_page_set_suppress_flag,G_NO_FLAG)=G_NO_FLAG THEN
12043          split_Page_Flow(p_ui_node);
12044       END IF;
12045 
12046     END IF;
12047 
12048     --
12049     -- synchronize CZ_UI_PAGE_ELEMENTS.instantiable_flag with
12050     -- CZ_PS_NODES.instantiable_flag
12051     --
12052     UPDATE CZ_UI_PAGE_ELEMENTS
12053        SET instantiable_flag = p_node.instantiable_flag,
12054            parent_persistent_node_id=p_node.parent_persistent_node_id
12055      WHERE ui_def_id = p_ui_node.ui_def_id AND
12056            persistent_node_id = p_ui_node.persistent_node_id;
12057 
12058 
12059      replace_page_ref_target_path(p_ui_node, p_node);
12060 
12061   END check_Page_Changes;
12062 
12063   --
12064   -- change instantiability of Page
12065   --
12066   PROCEDURE check_Reference_Changes(p_ui_node        IN CZ_UI_PAGE_ELEMENTS%ROWTYPE,
12067                                     p_node           IN CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE) IS
12068       l_refresh_ui_page    BOOLEAN:=FALSE;
12069       l_persistent_node_id NUMBER;
12070       l_max_seq_nbr        NUMBER;
12071       l_ps_node_type       NUMBER;
12072       l_ps_node            CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE;
12073       l_target_path        CZ_UI_PAGE_REFS.target_path%TYPE;
12074       l_ui_node_name       CZ_UI_PAGE_ELEMENTS.name%TYPE;
12075       l_template_id        NUMBER;
12076       l_template_ui_def_id NUMBER;
12077 
12078   BEGIN
12079 
12080    IF p_ui_node.instantiable_flag IN(G_OPTIONAL_INST_TYPE,G_MINMAX_INST_TYPE) AND
12081       p_node.instantiable_flag=G_MANDATORY_INST_TYPE THEN
12082 
12083        --jonatara:bug6439536
12084        g_check_boundaries_tbl(g_UI_Context.ui_def_id) := G_YES_FLAG;
12085 
12086        l_template_id := p_node.template_id;
12087        l_template_ui_def_id := p_node.template_ui_def_id;
12088 
12089        BEGIN
12090 
12091          SELECT ps_node_type INTO l_ps_node_type
12092            FROM CZ_PS_NODES
12093           WHERE devl_project_id=p_node.reference_id AND
12094                 parent_id IS NULL AND
12095                 deleted_flag=G_NO_FLAG;
12096 
12097          FOR i IN(SELECT persistent_node_id FROM CZ_UI_PAGE_ELEMENTS
12098                    WHERE ui_def_id=p_ui_node.ui_def_id
12099                          AND parent_element_id=p_ui_node.parent_element_id
12100                          AND persistent_node_id<>p_ui_node.persistent_node_id AND
12101                          deleted_flag IN(G_NO_FLAG,G_MARK_TO_REFRESH,G_MARK_TO_ADD))
12102          LOOP
12103            l_ps_node := get_Model_Node_By_Persist_Id(i.persistent_node_id,g_UI_COntext.devl_project_id);
12104 
12105            IF l_ps_node_type IN(G_BOM_MODEL_TYPE,G_BOM_OPTION_CLASS_TYPE) AND
12106               (l_ps_node.ps_node_type IN(G_BOM_MODEL_TYPE,G_BOM_OPTION_CLASS_TYPE) OR
12107               l_ps_node.detailed_type_id in(CZ_TYPES.UOPTIONAL_BOM_REF_TYPEID,CZ_TYPES.UMINMAX_BOM_REF_TYPEID)) THEN
12108               l_template_id := NULL;
12109               l_template_ui_def_id := NULL;
12110               EXIT;
12111            END IF;
12112 
12113          END LOOP;
12114 
12115        EXCEPTION
12116          WHEN OTHERS THEN
12117            DEBUG('check_Reference_Changes() : '||SQLERRM);
12118        END;
12119 
12120       l_ui_node_name := get_UI_Node_Name(p_page_id       => p_ui_node.page_id,
12121                                         p_template_id   => l_template_id,
12122                                         p_template_name => p_node.template_name);
12123 
12124       UPDATE CZ_UI_PAGE_ELEMENTS
12125       SET ctrl_template_id = l_template_id,
12126           ctrl_template_ui_def_id = l_template_ui_def_id,
12127           element_type = G_UI_DRILLDOWN_NODE_TYPE,
12128           instantiable_flag = p_node.instantiable_flag,
12129           name=l_ui_node_name,
12130           deleted_flag=G_MARK_TO_REFRESH
12131       WHERE ui_def_id=p_ui_node.ui_def_id AND
12132             persistent_node_id=p_ui_node.persistent_node_id AND
12133             element_type IN(G_UI_NONBOMADDINST_NODE_TYPE,G_UI_BOMADDINST_NODE_TYPE) AND
12134             deleted_flag=G_NO_FLAG AND
12135             NVL(suppress_refresh_flag,G_NO_FLAG)=G_NO_FLAG;
12136 
12137       l_refresh_ui_page := TRUE;
12138 
12139    END IF;
12140 
12141    IF  p_ui_node.instantiable_flag IN(G_OPTIONAL_INST_TYPE,G_MINMAX_INST_TYPE) AND
12142        p_node.instantiable_flag IN(G_OPTIONAL_INST_TYPE,G_MINMAX_INST_TYPE) AND
12143        p_ui_node.instantiable_flag <> p_node.instantiable_flag THEN
12144 
12145        --jonatara:bug6439536
12146        g_check_boundaries_tbl(g_UI_Context.ui_def_id) := G_YES_FLAG;
12147 
12148       l_ui_node_name := get_UI_Node_Name(p_page_id       => p_ui_node.page_id,
12149                                          p_template_id   => l_template_id,
12150                                          p_template_name => p_node.template_name);
12151 
12152       --
12153       -- synchronize UI template with actual detailed node type
12154       --
12155       UPDATE CZ_UI_PAGE_ELEMENTS
12156       SET ctrl_template_id = p_node.template_id,
12157           ctrl_template_ui_def_id = p_node.template_ui_def_id,
12158           instantiable_flag = p_node.instantiable_flag,
12159           name=l_ui_node_name,
12160           deleted_flag=G_MARK_TO_REFRESH
12161       WHERE ui_def_id=p_ui_node.ui_def_id AND
12162             persistent_node_id=p_ui_node.persistent_node_id AND
12163             element_type IN(G_UI_NONBOMADDINST_NODE_TYPE,G_UI_BOMADDINST_NODE_TYPE) AND
12164             deleted_flag=G_NO_FLAG AND
12165             NVL(suppress_refresh_flag,G_NO_FLAG)=G_NO_FLAG;
12166 
12167      IF SQL%ROWCOUNT>0 THEN
12168        l_refresh_ui_page := TRUE;
12169      END IF;
12170 
12171    END IF;
12172 
12173    IF p_node.instantiable_flag IN(G_OPTIONAL_INST_TYPE,G_MINMAX_INST_TYPE) AND
12174       p_ui_node.instantiable_flag=G_MANDATORY_INST_TYPE THEN
12175 
12176        --jonatara:bug6439536
12177        g_check_boundaries_tbl(g_UI_Context.ui_def_id) := G_YES_FLAG;
12178 
12179       l_ui_node_name := get_UI_Node_Name(p_page_id       => p_ui_node.page_id,
12180                                          p_template_id   => l_template_id,
12181                                          p_template_name => p_node.template_name);
12182 
12183       --
12184       -- synchronize UI template with actual detailed node type
12185       --
12186       UPDATE CZ_UI_PAGE_ELEMENTS
12187       SET ctrl_template_id = p_node.template_id,
12188           ctrl_template_ui_def_id = p_node.template_ui_def_id,
12189           instantiable_flag = p_node.instantiable_flag,
12190           element_type = G_UI_NONBOMADDINST_NODE_TYPE,
12191           name=l_ui_node_name,
12192           deleted_flag=DECODE(NVL(ctrl_template_id,-1),-1,G_MARK_TO_ADD,G_MARK_TO_REFRESH)
12193       WHERE ui_def_id=p_ui_node.ui_def_id AND
12194             page_id=p_ui_node.page_id AND
12195             element_id=p_ui_node.element_id AND
12196             NVL(suppress_refresh_flag,G_NO_FLAG)=G_NO_FLAG;
12197       IF SQL%ROWCOUNT>0 THEN
12198         l_refresh_ui_page := TRUE;
12199       END IF;
12200    END IF;
12201 
12202    IF l_refresh_ui_page THEN
12203      UPDATE CZ_UI_PAGES
12204         SET deleted_flag=G_MARK_TO_REFRESH,
12205             page_rev_nbr = page_rev_nbr + 1
12206       WHERE ui_def_id=p_ui_node.ui_def_id AND
12207             page_id=p_ui_node.page_id;
12208    END IF;
12209 
12210    UPDATE CZ_UI_PAGE_ELEMENTS
12211       SET instantiable_flag = p_node.instantiable_flag
12212     WHERE ui_def_id = p_ui_node.ui_def_id AND
12213           persistent_node_id = p_ui_node.persistent_node_id AND
12214           instantiable_flag <> p_node.instantiable_flag;
12215 
12216     FOR i IN(SELECT page_set_id
12217                FROM CZ_UI_PAGE_REFS
12218               WHERE ui_def_id=g_UI_Context.ui_def_id AND
12219                     target_persistent_node_id=p_ui_node.persistent_node_id AND
12220                     deleted_flag=G_NO_FLAG)
12221     LOOP
12222       l_target_path := get_Page_Path(p_node.ps_node_id, i.page_set_id);
12223       UPDATE CZ_UI_PAGE_REFS
12224          SET target_path=l_target_path
12225        WHERE ui_def_id=g_UI_Context.ui_def_id AND
12226              target_persistent_node_id=p_ui_node.persistent_node_id AND
12227              deleted_flag=G_NO_FLAG AND
12228               target_path<>l_target_path;
12229     END LOOP;
12230 
12231   END check_Reference_Changes;
12232 
12233 
12234   PROCEDURE check_Connector_Changes(p_ui_node        IN CZ_UI_PAGE_ELEMENTS%ROWTYPE,
12235                                     p_node           IN CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE) IS
12236       l_refresh_ui_page    BOOLEAN:=FALSE;
12237       l_persistent_node_id NUMBER;
12238       l_max_seq_nbr        NUMBER;
12239       l_ps_node_type       NUMBER;
12240       l_ps_node            CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE;
12241       l_target_path        CZ_UI_PAGE_REFS.target_path%TYPE;
12242       l_ui_node_name       CZ_UI_PAGE_ELEMENTS.name%TYPE;
12243       l_instantiable_flag  CZ_UI_PAGE_ELEMENTS.instantiable_flag%TYPE;
12244       l_template_id        NUMBER;
12245       l_template_ui_def_id NUMBER;
12246 
12247   BEGIN
12248 
12249    IF NVL(p_ui_node.instantiable_flag, '*') <> NVL(p_node.instantiable_flag, '*') THEN
12250 
12251       l_template_id := p_node.template_id;
12252       l_template_ui_def_id := p_node.template_ui_def_id;
12253 
12254       l_ui_node_name := get_UI_Node_Name(p_page_id       => p_ui_node.page_id,
12255                                          p_template_id   => l_template_id,
12256                                          p_template_name => p_node.template_name);
12257 
12258       IF (p_node.maximum=1 AND p_node.minimum=1) THEN
12259         l_instantiable_flag := G_MANDATORY_INST_TYPE;
12260       ELSIF (p_node.maximum=1 AND p_node.minimum=0) THEN
12261         l_instantiable_flag := G_OPTIONAL_INST_TYPE;
12262       ELSE
12263         l_instantiable_flag := G_MINMAX_INST_TYPE;
12264       END IF;
12265 
12266       UPDATE CZ_UI_PAGE_ELEMENTS
12267       SET ctrl_template_id = l_template_id,
12268           ctrl_template_ui_def_id = l_template_ui_def_id,
12269           instantiable_flag = l_instantiable_flag,
12270           name=l_ui_node_name,
12271           deleted_flag=G_MARK_TO_REFRESH
12272       WHERE ui_def_id=p_ui_node.ui_def_id AND
12273             persistent_node_id=p_ui_node.persistent_node_id AND
12274             deleted_flag=G_NO_FLAG AND
12275             NVL(suppress_refresh_flag,G_NO_FLAG)=G_NO_FLAG;
12276 
12277       IF SQL%ROWCOUNT > 0 THEN
12278         UPDATE CZ_UI_PAGES
12279            SET deleted_flag=G_MARK_TO_REFRESH,
12280               page_rev_nbr = page_rev_nbr + 1
12281          WHERE ui_def_id=p_ui_node.ui_def_id AND
12282                page_id=p_ui_node.page_id;
12283       END IF;
12284 
12285    END IF;
12286 
12287   END check_Connector_Changes;
12288 
12289   --
12290   -- change instantiability of UI region
12291   --
12292   PROCEDURE check_Region_Changes(p_ui_node      IN CZ_UI_PAGE_ELEMENTS%ROWTYPE,
12293                                  p_node         IN CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE) IS
12294 
12295     l_page_ui_node                CZ_UI_PAGE_ELEMENTS%ROWTYPE;
12296     l_page_set_id                 CZ_UI_PAGE_SETS.page_set_id%TYPE;
12297     l_page_ref_id                 CZ_UI_PAGE_REFS.page_ref_id%TYPE;
12298     l_page_set_type               CZ_UI_PAGE_SETS.page_set_type%TYPE;
12299 
12300   BEGIN
12301 
12302    IF (p_node.instantiable_flag IN(G_OPTIONAL_INST_TYPE,G_MINMAX_INST_TYPE)
12303        OR p_node.virtual_flag=G_NO_FLAG) AND
12304       p_ui_node.instantiable_flag=G_MANDATORY_INST_TYPE
12305       AND NVL(p_ui_node.suppress_refresh_flag,G_NO_FLAG)=G_NO_FLAG THEN
12306 
12307       g_check_boundaries_tbl(g_UI_Context.ui_def_id) := G_YES_FLAG;
12308 
12309       l_page_ui_node := create_UI_Page(p_node           => p_node,
12310                                        x_page_set_id    => l_page_set_id,
12311                                        x_page_set_type  => l_page_set_type,
12312                                        x_page_ref_id    => l_page_ref_id,
12313                                        p_parent_page_id => p_ui_node.page_id);
12314 
12315       UPDATE CZ_UI_PAGE_ELEMENTS
12316          SET deleted_flag=G_MARK_TO_DELETE
12317        WHERE ui_def_id=p_ui_node.ui_def_id AND
12318              page_id=p_ui_node.page_id AND
12319              element_id=p_ui_node.element_id;
12320 
12321       UPDATE CZ_UI_PAGE_ELEMENTS
12322          SET page_id = l_page_ui_node.page_id,
12323              pagebase_persistent_node_id = l_page_ui_node.persistent_node_id,
12324              deleted_flag=G_MARK_TO_ADD
12325        WHERE (ui_def_id,page_id,element_id) IN
12326              (SELECT ui_def_id,page_id,element_id FROM
12327               CZ_UI_PAGE_ELEMENTS
12328               START WITH ui_def_id=p_ui_node.ui_def_id AND
12329                          page_id=p_ui_node.page_id AND
12330                          element_id=p_ui_node.element_id
12331               CONNECT BY
12332                          PRIOR ui_def_id=p_ui_node.ui_def_id AND
12333                          PRIOR page_id=p_ui_node.page_id AND
12334                          PRIOR element_id=parent_element_id AND
12335                          PRIOR deleted_flag <> G_YES_FLAG AND
12336                          ui_def_id=p_ui_node.ui_def_id AND
12337                          page_id=p_ui_node.page_id AND
12338                          deleted_flag <> G_YES_FLAG)
12339               AND element_id <> p_ui_node.element_id;
12340 
12341       UPDATE CZ_UI_PAGE_ELEMENTS
12342          SET parent_element_id=l_page_ui_node.element_id
12343        WHERE ui_def_id=p_ui_node.ui_def_id AND
12344              page_id=l_page_ui_node.page_id AND
12345              parent_element_id=p_ui_node.element_id;
12346 
12347       /*
12348       IF g_UI_Context.PRIMARY_NAVIGATION NOT IN(G_MODEL_TREE_MENU) THEN
12349          split_Page_Flow(l_page_ui_node);
12350       END IF;
12351       */
12352       /*
12353       BEGIN
12354         g_moved_content_tbl(to_number(p_ui_node.element_id)) := l_page_ui_node.page_id;
12355       EXCEPTION
12356         WHEN OTHERS THEN
12357           NULL;
12358       END;
12359       */
12360    END IF;
12361 
12362   END check_Region_Changes;
12363 
12364   --
12365   -- add new UI node
12366   --
12367   PROCEDURE add_New_UI_Node(p_ui_node               IN CZ_UI_PAGE_ELEMENTS%ROWTYPE,
12368                             p_insert_index          IN NUMBER DEFAULT -1,
12369                             p_model_node            IN CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE,
12370                             p_suppress_refresh_flag IN VARCHAR2,
12371                             x_new_ui_pages_tbl      IN OUT NOCOPY ui_page_elements_tbl_type,
12372                             x_new_ui_node           OUT NOCOPY CZ_UI_PAGE_ELEMENTS%ROWTYPE) IS
12373 
12374     l_old_page_id   NUMBER;
12375     l_page_set_id   NUMBER;
12376     l_page_set_type NUMBER;
12377     l_page_ref_id   NUMBER;
12378     l_drilldown     BOOLEAN;
12379 
12380   BEGIN
12381 
12382     IF p_model_node.ui_omit=G_YES_FLAG THEN
12383       RETURN;
12384     END IF;
12385 
12386     -- it must be a new UI page
12387     IF p_model_node.ps_node_type IN(G_PRODUCT_TYPE,G_COMPONENT_TYPE,
12388       G_BOM_MODEL_TYPE,G_BOM_OPTION_CLASS_TYPE) AND
12389            is_UI_Page(p_node     => p_model_node,
12390                       x_drilldown => l_drilldown) THEN
12391 
12392             BEGIN
12393               SELECT page_id INTO l_old_page_id FROM CZ_UI_PAGES
12394               WHERE ui_def_id=g_UI_Context.ui_def_id AND
12395                     persistent_node_id=p_model_node.persistent_node_id AND
12396                     deleted_flag IN(G_NO_FLAG, G_MARK_TO_ADD, G_MARK_TO_REFRESH) AND
12397                     rownum<2;
12398             EXCEPTION
12399               WHEN OTHERS THEN
12400                 -- create new UI page
12401                 x_new_ui_node := create_UI_Page(p_node            => p_model_node,
12402                                                  x_page_set_id     => l_page_set_id,
12403                                                  x_page_set_type   => l_page_set_type,
12404                                                  x_page_ref_id     => l_page_ref_id,
12405                                                  p_parent_page_id  => p_ui_node.page_id);
12406 
12407                x_new_ui_pages_tbl(x_new_ui_pages_tbl.COUNT+1) := x_new_ui_node;
12408             END;
12409 
12410        -- it must be UI Region
12411        ELSIF  p_model_node.ps_node_type IN(G_PRODUCT_TYPE,G_COMPONENT_TYPE,
12412              G_BOM_MODEL_TYPE,G_BOM_OPTION_CLASS_TYPE) AND NVL(p_suppress_refresh_flag,G_NO_FLAG)=G_NO_FLAG THEN
12413           x_new_ui_node := create_UI_Region(p_node              => p_model_node,
12414                                             p_parent_ui_node    => p_ui_node,
12415                                             p_insert_index      => p_insert_index);
12416           --
12417           -- it must be UI Reference
12418           --
12419         ELSIF p_model_node.ps_node_type = G_REFERENCE_TYPE AND NVL(p_suppress_refresh_flag,G_NO_FLAG)=G_NO_FLAG THEN
12420           x_new_ui_node := create_UI_Reference(p_node              => p_model_node,
12421                                                p_parent_ui_node    => p_ui_node);
12422           --
12423           -- other UI elements
12424           --
12425         ELSE
12426           IF NVL(p_suppress_refresh_flag,G_NO_FLAG)=G_NO_FLAG THEN
12427             x_new_ui_node := create_UI_Element(p_node              => p_model_node,
12428                                                p_parent_ui_node    => p_ui_node,
12429                                                p_insert_index      => p_insert_index);
12430           END IF;
12431         END IF; -- end of IF is_UI_Page()
12432 
12433   END;
12434 
12435   --
12436   -- check UI Node changes
12437   --
12438   PROCEDURE check_UI_Node_Changes(p_ui_node    IN CZ_UI_PAGE_ELEMENTS%ROWTYPE,
12439                                   p_model_node IN CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE) IS
12440 
12441     l_ui_layout_ui_style          CZ_UI_TEMPLATES.layout_ui_style%TYPE;
12442     l_model_layout_ui_style       CZ_UI_TEMPLATES.layout_ui_style%TYPE;
12443     l_feature_element_id          CZ_UI_PAGE_ELEMENTS.element_id%TYPE;
12444     l_under_root_ui_node          CZ_UI_PAGE_ELEMENTS%ROWTYPE;
12445     l_max_seq_nbr                 NUMBER;
12446 
12447     CURSOR l_ui_bom_tab_cur IS
12448       SELECT * FROM CZ_UI_PAGE_ELEMENTS
12449        WHERE ui_def_id=p_ui_node.ui_def_id AND
12450              parent_element_id=p_ui_node.element_id AND
12451              persistent_node_id=p_model_node.persistent_node_id AND
12452              element_type=G_UI_BOMADDINST_NODE_TYPE AND
12453              deleted_flag NOT IN(G_YES_FLAG);
12454 
12455   BEGIN
12456      --
12457      -- refresh expl ids in UI tables
12458      --
12459      sync_Expl_Ids(p_model_node,p_ui_node);
12460 
12461      IF p_model_node.ps_node_type in(G_BOM_MODEL_TYPE,G_BOM_OPTION_CLASS_TYPE) AND
12462             p_ui_node.element_type IN(G_UI_PAGE_NODE_TYPE,G_UI_BOMADDINST_NODE_TYPE) AND
12463         NVL(p_ui_node.suppress_refresh_flag,G_NO_FLAG)=G_NO_FLAG THEN
12464 
12465               IF p_ui_node.element_type IN(G_UI_PAGE_NODE_TYPE) THEN
12466                 --
12467                 -- check for BOM control associated with the same model node
12468                 -- as UI page
12469                 --
12470                 BEGIN
12471                   OPEN l_ui_bom_tab_cur;
12472 
12473                   LOOP
12474                     FETCH l_ui_bom_tab_cur INTO l_under_root_ui_node;
12475                     EXIT WHEN l_ui_bom_tab_cur%NOTFOUND;
12476 
12477                     IF l_under_root_ui_node.deleted_flag <> G_LIMBO_FLAG AND
12478                        l_under_root_ui_node.ctrl_template_id IS NOT NULL AND
12479                        l_under_root_ui_node.ctrl_template_id <> p_model_node.template_id AND
12480                        NVL(l_under_root_ui_node.suppress_refresh_flag, G_NO_FLAG)=G_NO_FLAG THEN
12481 
12482                        replace_Template_Id(p_ui_node     => l_under_root_ui_node,
12483                                            p_model_node  => p_model_node);
12484                     END IF;
12485 
12486                   END LOOP;
12487 
12488                   IF l_ui_bom_tab_cur%ROWCOUNT=0 THEN
12489                     add_BOM_Node(p_node                        => p_model_node,
12490                                  p_page_id                     => p_ui_node.page_id,
12491                                  p_pagebase_expl_node_id       => p_ui_node.model_ref_expl_id,
12492                                  p_parent_element_id           => p_ui_node.element_id,
12493                                  p_pagebase_persistent_node_id => p_ui_node.pagebase_persistent_node_id);
12494                   END IF;
12495 
12496                   CLOSE l_ui_bom_tab_cur;
12497 
12498                 END;
12499 
12500               ELSE -- else for IF p_ui_node.element_type IN(G_UI_PAGE_NODE_TYPE) THEN
12501 
12502                 IF p_ui_node.ctrl_template_id <> p_model_node.template_id THEN
12503                    replace_Template_Id(p_ui_node     => p_ui_node,
12504                                        p_model_node  => p_model_node);
12505                 END IF;
12506 
12507               END IF;
12508 
12509     END IF;
12510 
12511     IF p_ui_node.pagebase_persistent_node_id=p_ui_node.persistent_node_id THEN
12512 
12513             --
12514             -- check changes of this UI page
12515             --
12516             check_Page_Changes(p_ui_node        => p_ui_node,
12517                                p_node           => p_model_node);
12518 
12519     ELSIF p_ui_node.pagebase_persistent_node_id<>p_ui_node.persistent_node_id AND
12520           p_ui_node.region_persistent_node_id=p_ui_node.persistent_node_id AND
12521           NVL(p_ui_node.suppress_refresh_flag,G_NO_FLAG)=G_NO_FLAG THEN
12522 
12523             --
12524             -- check changes of this reference
12525             --
12526             check_Region_Changes(p_ui_node        => p_ui_node,
12527                                  p_node           => p_model_node);
12528 
12529     ELSIF p_model_node.ps_node_type=G_REFERENCE_TYPE AND
12530                p_model_node.persistent_node_id=p_ui_node.persistent_node_id THEN
12531 
12532             --
12533             -- check changes of this reference
12534             --
12535             check_Reference_Changes(p_ui_node        => p_ui_node,
12536                                     p_node           => p_model_node);
12537 
12538     ELSIF p_model_node.ps_node_type=G_CONNECTOR_TYPE AND
12539                p_model_node.persistent_node_id=p_ui_node.persistent_node_id THEN
12540 
12541             --
12542             -- check changes of this reference
12543             --
12544             check_Connector_Changes(p_ui_node        => p_ui_node,
12545                                     p_node           => p_model_node);
12546 
12547     ELSIF p_model_node.ps_node_type=G_FEATURE_TYPE AND
12548                p_model_node.feature_type=0 AND
12549                p_model_node.template_id <> p_ui_node.ctrl_template_id AND
12550                (g_using_new_UI_refresh OR p_model_node.detailed_type_id<>p_ui_node.element_type) AND
12551                p_model_node.template_id IS NOT NULL AND
12552                p_ui_node.ctrl_template_id IS NOT NULL AND
12553                NVL(p_ui_node.suppress_refresh_flag,G_NO_FLAG)=G_NO_FLAG THEN
12554 
12555        BEGIN
12556 
12557          IF g_using_new_UI_refresh THEN
12558            replace_Template_Id(p_ui_node          => p_ui_node,
12559                                    p_model_node       => p_model_node);
12560          ELSE
12561            SELECT layout_ui_style INTO l_ui_layout_ui_style
12562                  FROM CZ_UI_TEMPLATES
12563                  WHERE template_id=p_ui_node.ctrl_template_id AND
12564                        ui_def_id=p_ui_node.ctrl_template_ui_def_id;
12565 
12566                  SELECT layout_ui_style INTO l_model_layout_ui_style
12567                  FROM CZ_UI_TEMPLATES
12568                  WHERE template_id=p_model_node.template_id AND
12569                        ui_def_id=p_model_node.template_ui_def_id;
12570 
12571                  IF l_ui_layout_ui_style=l_model_layout_ui_style  THEN
12572                    --
12573                    -- replace Feature template
12574                    --
12575                    replace_Template_Id(p_ui_node          => p_ui_node,
12576                                        p_model_node       => p_model_node);
12577                  ELSE
12578 
12579                    BEGIN
12580                      SELECT NVL(MAX(seq_nbr),0)+1 INTO l_max_seq_nbr FROM CZ_UI_PAGE_ELEMENTS
12581                      WHERE ui_def_id=g_UI_Context.ui_def_id AND
12582                            page_id=p_ui_node.page_id AND
12583                            parent_element_id IS NOT NULL AND
12584                            (ctrl_template_id,ctrl_template_ui_def_id) IN
12585                            (SELECT ctrl_template_id,ctrl_template_ui_def_id FROM
12586                             CZ_UI_TEMPLATES WHERE deleted_flag=G_NO_FLAG AND
12587                             layout_ui_style=l_ui_layout_ui_style);
12588                    EXCEPTION
12589                      WHEN OTHERS THEN
12590                        l_max_seq_nbr := 1;
12591                    END;
12592 
12593                    IF l_max_seq_nbr = 1 THEN
12594 
12595                      --
12596                      -- replace Feature template
12597                      --
12598                      replace_Template_Id(p_ui_node          => p_ui_node,
12599                                          p_model_node       => p_model_node);
12600 
12601                    ELSE
12602 
12603                      UPDATE CZ_UI_PAGE_ELEMENTS
12604                         SET deleted_flag=G_MARK_TO_DELETE
12605                       WHERE ui_def_id=g_UI_Context.ui_def_id AND
12606                             page_id=p_ui_node.page_id AND
12607                             element_id=p_ui_node.element_id;
12608 
12609                      UPDATE CZ_UI_PAGES
12610                         SET deleted_flag=G_MARK_TO_REFRESH,
12611                             page_rev_nbr=page_rev_nbr+1
12612                       WHERE page_id=p_ui_node.page_id AND
12613                             ui_def_id=g_UI_Context.ui_def_id;
12614 
12615                       l_feature_element_id := get_Element_Id();
12616 
12617                       INSERT INTO CZ_UI_PAGE_ELEMENTS
12618                       (
12619                      UI_DEF_ID
12620                      ,PAGE_ID
12621                      ,PERSISTENT_NODE_ID
12622                      ,ELEMENT_ID
12623                      ,PARENT_PERSISTENT_NODE_ID
12624                      ,REGION_PERSISTENT_NODE_ID
12625                      ,PAGEBASE_PERSISTENT_NODE_ID
12626                      ,CTRL_TEMPLATE_ID
12627                      ,BASE_PAGE_FLAG
12628                      ,INSTANTIABLE_FLAG
12629                      ,SEQ_NBR
12630                      ,DELETED_FLAG
12631                      ,CTRL_TEMPLATE_UI_DEF_ID
12632                      ,MODEL_REF_EXPL_ID
12633                      ,PARENT_ELEMENT_ID
12634                      ,ELEMENT_TYPE
12635                      ,NAME
12636                      ,ELEMENT_SIGNATURE_ID
12637                      ,SUPPRESS_REFRESH_FLAG
12638                       )
12639                       SELECT
12640                      UI_DEF_ID
12641                      ,PAGE_ID
12642                      ,PERSISTENT_NODE_ID
12643                      ,l_feature_element_id
12644                      ,PARENT_PERSISTENT_NODE_ID
12645                      ,REGION_PERSISTENT_NODE_ID
12646                      ,PAGEBASE_PERSISTENT_NODE_ID
12647                      ,p_model_node.template_id
12648                      ,BASE_PAGE_FLAG
12649                      ,INSTANTIABLE_FLAG
12650                      ,l_max_seq_nbr
12651                      ,G_MARK_TO_ADD
12652                      ,p_model_node.template_ui_def_id
12653                      ,MODEL_REF_EXPL_ID
12654                      ,PARENT_ELEMENT_ID
12655                      ,ELEMENT_TYPE
12656                      ,NAME
12657                      ,ELEMENT_SIGNATURE_ID
12658                      ,SUPPRESS_REFRESH_FLAG
12659                       FROM CZ_UI_PAGE_ELEMENTS
12660                       WHERE ui_def_id=g_UI_Context.ui_def_id AND
12661                             page_id=p_ui_node.page_id AND
12662                             element_id=p_ui_node.element_id;
12663 
12664                       UPDATE CZ_UI_PAGE_ELEMENTS
12665                          SET parent_element_id=l_feature_element_id
12666                        WHERE ui_def_id=g_UI_Context.ui_def_id AND
12667                              page_id=p_ui_node.page_id AND
12668                              parent_element_id=p_ui_node.element_id;
12669 
12670                    END IF; -- end of IF l_max_seq_nbr = 1
12671                 END IF;  -- end of IF l_ui_layout_ui_style=l_model_layout_ui_style
12672               END IF;
12673             END;
12674 
12675          ELSE
12676 
12677             NULL;
12678 
12679     END IF;  -- end of IF p_ui_node.pagebase_persistent_node_id...
12680 
12681     --
12682     -- add a new CX to an existing UI node
12683     -- if there is such CX
12684     --
12685     IF get_CX_Button_Status(p_ui_node)=G_CX_VALID THEN
12686 
12687       add_CX_Button(p_node     => p_model_node,
12688                     p_ui_node  => p_ui_node);
12689     END IF;
12690 
12691   END check_UI_Node_Changes;
12692 
12693   --
12694   -- create new split UI Page
12695   --
12696   FUNCTION clone_UI_Page(p_page_id  IN NUMBER)
12697     RETURN CZ_UI_PAGE_ELEMENTS%ROWTYPE IS
12698 
12699     l_element_id              CZ_UI_PAGE_ELEMENTS.element_id%TYPE;
12700     l_ui_node                 CZ_UI_PAGE_ELEMENTS%ROWTYPE;
12701     l_split_seq_nbr           CZ_UI_PAGES.split_seq_nbr%TYPE;
12702     l_page_id                 CZ_UI_PAGES.page_id%TYPE;
12703     l_page_ref_id             CZ_UI_PAGE_REFS.page_ref_id%TYPE;
12704     l_seq_nbr                 CZ_UI_PAGE_REFS.seq_nbr%TYPE;
12705     l_caption_text_id         NUMBER;
12706     l_caption                 CZ_INTL_TEXTS.text_str%TYPE;
12707 
12708   BEGIN
12709 
12710     --
12711     -- get num of this page in this UI
12712     --
12713    l_split_seq_nbr := get_Last_Split_Page_Nbr(p_page_id) + 1;
12714 
12715 
12716    l_caption := G_UMPERS||G_CAPTION_RULE_TOKENNAME||' ('||TO_CHAR(l_split_seq_nbr)||')';
12717 
12718    l_caption_text_id := allocateId('CZ_INTL_TEXTS_S');
12719 
12720    l_element_id := get_Element_Id();
12721    l_page_id := allocateId('CZ_UI_PAGES_S');
12722 
12723    INSERT INTO CZ_INTL_TEXTS
12724    (
12725    INTL_TEXT_ID
12726    ,TEXT_STR
12727    ,DELETED_FLAG
12728    ,SEEDED_FLAG
12729    ,UI_DEF_ID
12730    ,MODEL_ID
12731    ,UI_PAGE_ID
12732    ,UI_PAGE_ELEMENT_ID
12733     )
12734    VALUES
12735    (
12736    l_caption_text_id
12737    ,l_caption
12738    ,G_NO_FLAG
12739    ,G_NO_FLAG
12740    ,g_UI_Context.ui_def_id
12741    ,g_UI_Context.devl_project_id
12742    ,l_page_id
12743    ,NULL
12744     );
12745 
12746    INSERT INTO CZ_UI_PAGES
12747       (page_id,
12748        ui_def_id,
12749        NAME,
12750        persistent_node_id,
12751        jrad_doc,
12752        page_set_id,
12753        split_seq_nbr,
12754        caption_source,
12755        caption_text_id,
12756        PERSISTENT_CAPTION_TEXT_ID,
12757        pagebase_path,
12758        pagebase_expl_node_id,
12759        page_rev_nbr,
12760        seeded_flag,
12761        DESC_TEXT,
12762        PAGE_STATUS_TEMPLATE_ID,
12763        PAGE_STATUS_TEMPL_UIDEF_ID,
12764        CAPTION_RULE_ID,
12765        OUTER_TEMPLATE_USAGE,
12766        OUTER_PAGE_TEMPLATE_ID,
12767        OUTER_PAGE_TEMPL_UIDEF_ID,
12768        DISPLAY_CONDITION_ID,
12769        DISPLAY_CONDITION_COMP,
12770        DISPLAY_CONDITION_VALUE,
12771        ENABLED_CONDITION_ID,
12772        ENABLED_CONDITION_COMP,
12773        ENABLED_CONDITION_VALUE,
12774        EMPTY_PAGE_FLAG,
12775        SUPPRESS_REFRESH_FLAG,
12776        deleted_flag)
12777    SELECT
12778        l_page_id,
12779        ui_def_id,
12780        name||' ('||TO_CHAR(l_split_seq_nbr)||')',
12781        persistent_node_id,
12782        jrad_doc||'_'||TO_CHAR(l_split_seq_nbr),
12783        page_set_id,
12784        l_split_seq_nbr,
12785        caption_source,
12786        l_caption_text_id,
12787        l_caption_text_id,
12788        pagebase_path,
12789        pagebase_expl_node_id,
12790        1,
12791        seeded_flag,
12792        DESC_TEXT,
12793        PAGE_STATUS_TEMPLATE_ID,
12794        PAGE_STATUS_TEMPL_UIDEF_ID,
12795        CAPTION_RULE_ID,
12796        OUTER_TEMPLATE_USAGE,
12797        OUTER_PAGE_TEMPLATE_ID,
12798        OUTER_PAGE_TEMPL_UIDEF_ID,
12799        DISPLAY_CONDITION_ID,
12800        DISPLAY_CONDITION_COMP,
12801        DISPLAY_CONDITION_VALUE,
12802        ENABLED_CONDITION_ID,
12803        ENABLED_CONDITION_COMP,
12804        ENABLED_CONDITION_VALUE,
12805        EMPTY_PAGE_FLAG,
12806        SUPPRESS_REFRESH_FLAG,
12807        G_MARK_TO_ADD
12808    FROM CZ_UI_PAGES
12809    WHERE ui_def_id=g_UI_Context.ui_def_id AND
12810          page_id=p_page_id;
12811 
12812     SELECT * INTO l_ui_node
12813     FROM CZ_UI_PAGE_ELEMENTS
12814     WHERE ui_def_id=g_UI_Context.ui_def_id AND
12815           page_id=p_page_id AND
12816           parent_element_id IS NULL AND
12817           deleted_flag IN(G_NO_FLAG,G_MARK_TO_ADD,G_MARK_TO_REFRESH);
12818 
12819     l_ui_node.element_id   := l_element_id;
12820     l_ui_node.page_id      := l_page_id;
12821     l_ui_node.name         := l_ui_node.name||' - '||l_element_id;
12822     l_ui_node.deleted_flag := G_MARK_TO_ADD;
12823 
12824     INSERT INTO CZ_UI_PAGE_ELEMENTS
12825       (ui_def_id,
12826        persistent_node_id,
12827        parent_persistent_node_id,
12828        region_persistent_node_id,
12829        pagebase_persistent_node_id,
12830        page_id,
12831        seq_nbr,
12832        ctrl_template_id,
12833        element_id,
12834        parent_element_id,
12835        element_type,
12836        instantiable_flag,
12837        ctrl_template_ui_def_id,
12838        model_ref_expl_id,
12839        base_page_flag,
12840        element_signature_id,
12841        name,
12842        deleted_flag)
12843    VALUES
12844        (l_ui_node.ui_def_id,
12845        l_ui_node.persistent_node_id,
12846        l_ui_node.parent_persistent_node_id,
12847        l_ui_node.region_persistent_node_id,
12848        l_ui_node.pagebase_persistent_node_id,
12849        l_ui_node.page_id,
12850        l_ui_node.seq_nbr,
12851        l_ui_node.ctrl_template_id,
12852        l_ui_node.element_id,
12853        l_ui_node.parent_element_id,
12854        l_ui_node.element_type,
12855        l_ui_node.instantiable_flag,
12856        l_ui_node.ctrl_template_ui_def_id,
12857        l_ui_node.model_ref_expl_id,
12858        l_ui_node.base_page_flag,
12859        l_ui_node.element_signature_id,
12860        l_ui_node.name,
12861        l_ui_node.deleted_flag);
12862 
12863     SELECT NVL(MAX(seq_nbr),0) INTO l_seq_nbr
12864     FROM CZ_UI_PAGE_REFS
12865     WHERE ui_def_id=g_UI_Context.ui_def_id AND
12866           target_persistent_node_id=l_ui_node.persistent_node_id AND
12867           deleted_flag=G_NO_FLAG;
12868 
12869     UPDATE CZ_UI_PAGE_REFS
12870        SET seq_nbr=seq_nbr+1
12871      WHERE ui_def_id=g_UI_Context.ui_def_id AND
12872            parent_page_ref_id = (SELECT parent_page_ref_id
12873                                  FROM CZ_UI_PAGE_REFS
12874                                  WHERE ui_def_id=g_UI_Context.ui_def_id AND
12875                                        target_page_id=p_page_id AND
12876                                        deleted_flag=G_NO_FLAG) AND
12877            seq_nbr > l_seq_nbr AND
12878            deleted_flag=G_NO_FLAG;
12879 
12880     l_seq_nbr := l_seq_nbr + 1;
12881 
12882     l_page_ref_id := allocateId('CZ_UI_PAGE_REFS_S');
12883     INSERT INTO CZ_UI_PAGE_REFS
12884       (ui_def_id,
12885        page_set_id,
12886        page_ref_id,
12887        parent_page_ref_id,
12888        seq_nbr,
12889        node_depth,
12890        condition_id,
12891        NAME,
12892        caption_source,
12893        caption_text_id,
12894        target_persistent_node_id,
12895        target_path,
12896        target_ui_def_id,
12897        target_page_set_id,
12898        target_page_id,
12899        modified_flags,
12900        path_to_prev_page,
12901        path_to_next_page,
12902        page_ref_type,
12903        target_expl_node_id,
12904        deleted_flag)
12905     SELECT
12906        ui_def_id,
12907        page_set_id,
12908        l_page_ref_id,
12909        parent_page_ref_id,
12910        l_seq_nbr,
12911        node_depth,
12912        condition_id,
12913        NAME||' ('||TO_CHAR(l_split_seq_nbr)||')',
12914        caption_source,
12915        l_caption_text_id,
12916        target_persistent_node_id,
12917        target_path,
12918        target_ui_def_id,
12919        target_page_set_id,
12920        l_page_id,
12921        modified_flags,
12922        NULL,
12923        path_to_next_page,
12924        page_ref_type,
12925        target_expl_node_id,
12926        deleted_flag
12927     FROM CZ_UI_PAGE_REFS
12928     WHERE ui_def_id=g_UI_Context.ui_def_id AND
12929           target_page_id=p_page_id AND
12930           deleted_flag=G_NO_FLAG;
12931 
12932     RETURN l_ui_node;
12933 
12934   END clone_UI_Page;
12935 
12936   PROCEDURE collect_UI_Elements
12937   (p_ui_page_node            IN CZ_UI_PAGE_ELEMENTS%ROWTYPE,
12938    p_max_controls_per_page   IN NUMBER,
12939    x_new_pages_tbl           OUT NOCOPY number_tbl_type,
12940    x_elements_tbl            OUT NOCOPY ui_page_elements_tbl_type,
12941    x_new_parent_elements_tbl OUT NOCOPY varchar_tbl_type) IS
12942 
12943     l_ui_page_node         CZ_UI_PAGE_ELEMENTS%ROWTYPE;
12944     l_counter              NUMBER:=0;
12945 
12946   BEGIN
12947 
12948     l_ui_page_node := p_ui_page_node;
12949 
12950     FOR k IN(SELECT page_id,TO_NUMBER(element_id) AS element_id,
12951              TO_NUMBER(parent_element_id) AS parent_element_id,seq_nbr
12952              FROM CZ_UI_PAGE_ELEMENTS
12953              WHERE ui_def_id = p_ui_page_node.ui_def_id AND
12954                    page_id = p_ui_page_node.page_id AND
12955                    parent_element_id IS NOT NULL AND
12956                    element_type <> G_UI_REGION_NODE_TYPE AND
12957                    ctrl_template_id IS NOT NULL
12958                    AND deleted_flag IN(G_MARK_TO_ADD,G_MARK_DO_NOT_REFRESH)
12959           ORDER BY  seq_nbr)
12960     LOOP
12961       --
12962       -- increase counter of nodes on the page ( initial l_counter must be 0 )
12963       --
12964       l_counter:=l_counter+1;
12965       --
12966       -- compare previous page and page created in this loop
12967       --
12968       IF (l_counter > p_max_controls_per_page) THEN
12969         l_ui_page_node := clone_UI_Page(k.page_id);
12970         l_counter := 1;
12971         x_new_pages_tbl(l_ui_page_node.page_id) := l_ui_page_node.pagebase_persistent_node_id;
12972       END IF;
12973 
12974       IF l_ui_page_node.page_id <> p_ui_page_node.page_id THEN
12975         x_elements_tbl(k.element_id) := l_ui_page_node;
12976         IF k.parent_element_id = p_ui_page_node.element_id THEN
12977           x_new_parent_elements_tbl(k.element_id) := l_ui_page_node.element_id;
12978         END IF;
12979       END IF;
12980 
12981     END LOOP;
12982 
12983   END collect_UI_Elements;
12984 
12985   PROCEDURE handle_Direct_Child_Nodes
12986   (p_ui_page_node        IN CZ_UI_PAGE_ELEMENTS%ROWTYPE,
12987    p_elements_tbl        IN OUT NOCOPY ui_page_elements_tbl_type,
12988    p_parent_elements_tbl IN OUT NOCOPY varchar_tbl_type) IS
12989 
12990     l_current_element_id NUMBER;
12991 
12992   BEGIN
12993 
12994     l_current_element_id := p_elements_tbl.First;
12995     LOOP
12996       IF l_current_element_id IS NULL THEN
12997         EXIT;
12998       END IF;
12999 
13000       UPDATE CZ_UI_PAGE_ELEMENTS
13001          SET page_id = p_elements_tbl(l_current_element_id).page_id
13002        WHERE ui_def_id =  p_ui_page_node.ui_def_id AND
13003              page_id = p_ui_page_node.page_id AND
13004              element_id = TO_CHAR(l_current_element_id);
13005 
13006       IF p_parent_elements_tbl.EXISTS(l_current_element_id) THEN
13007         UPDATE CZ_UI_PAGE_ELEMENTS
13008            SET parent_element_id = p_parent_elements_tbl(l_current_element_id)
13009          WHERE ui_def_id =  p_ui_page_node.ui_def_id AND
13010                page_id = p_ui_page_node.page_id AND
13011                element_id = TO_CHAR(l_current_element_id);
13012       END IF;
13013 
13014       UPDATE CZ_UI_ACTIONS
13015          SET source_page_id=p_elements_tbl(l_current_element_id).page_id
13016        WHERE ui_def_id=p_ui_page_node.ui_def_id AND
13017              source_page_id= p_ui_page_node.page_id AND
13018              element_id=TO_CHAR(l_current_element_id);
13019 
13020       l_current_element_id := p_elements_tbl.NEXT(l_current_element_id);
13021     END LOOP;
13022 
13023     l_current_element_id := p_elements_tbl.First;
13024     LOOP
13025       IF l_current_element_id IS NULL THEN
13026         EXIT;
13027       END IF;
13028 
13029       IF p_parent_elements_tbl.EXISTS(l_current_element_id) THEN
13030         UPDATE CZ_UI_PAGE_ELEMENTS
13031            SET parent_element_id = p_parent_elements_tbl(l_current_element_id)
13032          WHERE ui_def_id =  p_ui_page_node.ui_def_id AND
13033                page_id = p_elements_tbl(l_current_element_id).page_id  AND
13034                element_id = TO_CHAR(l_current_element_id);
13035       END IF;
13036 
13037       l_current_element_id := p_elements_tbl.NEXT(l_current_element_id);
13038     END LOOP;
13039 
13040   END handle_Direct_Child_Nodes;
13041 
13042   PROCEDURE collect_Old_Nodes
13043   (
13044   p_ui_def_id                IN NUMBER,
13045   p_new_page_id              IN NUMBER,
13046   x_nested_page_elements_tbl OUT NOCOPY varchar_tbl_type) IS
13047 
13048   BEGIN
13049 
13050     FOR i IN(SELECT DISTINCT parent_element_id FROM CZ_UI_PAGE_ELEMENTS a
13051              WHERE ui_def_id =  p_ui_def_id AND
13052                    page_id = p_new_page_id AND
13053                    parent_element_id IS NOT NULL AND
13054                NOT EXISTS(SELECT NULL FROM CZ_UI_PAGE_ELEMENTS
13055                WHERE  ui_def_id =  p_ui_def_id AND
13056                       page_id = p_new_page_id AND
13057                       element_id=a.parent_element_id))
13058       LOOP
13059         x_nested_page_elements_tbl(x_nested_page_elements_tbl.COUNT+1) := i.parent_element_id;
13060       END LOOP;
13061 
13062   END collect_Old_Nodes;
13063 
13064   PROCEDURE collect_New_Nested_Regions
13065   (p_ui_def_id        IN NUMBER,
13066    p_page_id          IN NUMBER,
13067    p_element_id       IN VARCHAR2,
13068    px_rgn_new_elements_tbl IN OUT NOCOPY varchar_tbl_type,
13069    px_rgn_parent_elements_tbl IN OUT NOCOPY varchar_tbl_type) IS
13070 
13071     l_new_element_id   VARCHAR2(255);
13072     l_num_element_id   NUMBER;
13073 
13074   BEGIN
13075 
13076     FOR i IN(SELECT element_id,parent_element_id,element_type FROM CZ_UI_PAGE_ELEMENTS
13077              START WITH ui_def_id =  p_ui_def_id AND
13078                         page_id= p_page_id AND
13079                         element_id=p_element_id
13080              CONNECT BY PRIOR  ui_def_id =  p_ui_def_id AND
13081                                ui_def_id =  p_ui_def_id AND
13082                      PRIOR page_id= p_page_id AND page_id= p_page_id AND
13083                      PRIOR parent_element_id=element_id)
13084     LOOP
13085       l_num_element_id := TO_NUMBER(i.element_id);
13086       IF i.parent_element_id IS NOT NULL AND i.element_type=G_UI_REGION_NODE_TYPE AND
13087         NOT(px_rgn_new_elements_tbl.EXISTS(l_num_element_id)) THEN
13088         l_new_element_id := get_Element_Id();
13089         px_rgn_new_elements_tbl(l_num_element_id) := l_new_element_id;
13090         px_rgn_parent_elements_tbl(l_num_element_id) := i.parent_element_id;
13091       END IF;
13092     END LOOP;
13093 
13094   END collect_New_Nested_Regions;
13095 
13096 
13097   PROCEDURE reconstruct_Nested_Regions
13098   (
13099   p_ui_def_id     IN NUMBER,
13100   p_page_id       IN NUMBER,
13101   p_new_pages_tbl IN number_tbl_type
13102   ) IS
13103 
13104     l_nested_rgn_elements_tbl  varchar_tbl_type;
13105     l_rgn_subtree_tbl          varchar_tbl_type;
13106     l_parent_elements_tbl      varchar_tbl_type;
13107     l_new_page_id              NUMBER;
13108     l_new_element_id           VARCHAR2(255);
13109     l_new_parent_element_id    VARCHAR2(255);
13110     l_old_element_id           NUMBER;
13111     l_page_root_element_id     VARCHAR2(255);
13112 
13113   BEGIN
13114 
13115     l_new_page_id := p_new_pages_tbl.First;
13116     LOOP
13117       IF l_new_page_id IS NULL THEN
13118         EXIT;
13119       END IF;
13120 
13121       l_nested_rgn_elements_tbl.DELETE;
13122 
13123       SELECT element_id INTO l_page_root_element_id FROM CZ_UI_PAGE_ELEMENTS
13124       WHERE ui_def_id=p_ui_def_id AND
13125             page_id=l_new_page_id AND
13126             parent_element_id IS NULL AND
13127             deleted_flag NOT IN(G_YES_FLAG, G_MARK_TO_DELETE);
13128 
13129       collect_Old_Nodes(p_ui_def_id                => p_ui_def_id,
13130                         p_new_page_id              => l_new_page_id,
13131                         x_nested_page_elements_tbl => l_nested_rgn_elements_tbl);
13132 
13133       IF l_nested_rgn_elements_tbl.COUNT > 0 THEN
13134 
13135         FOR i IN l_nested_rgn_elements_tbl.First..l_nested_rgn_elements_tbl.Last
13136         LOOP
13137           collect_New_Nested_Regions(p_ui_def_id             => p_ui_def_id,
13138                                      p_page_id               => p_page_id,
13139                                      p_element_id            => l_nested_rgn_elements_tbl(i),
13140                                      px_rgn_new_elements_tbl => l_rgn_subtree_tbl,
13141                                      px_rgn_parent_elements_tbl => l_parent_elements_tbl );
13142         END LOOP;
13143 
13144       END IF;
13145 
13146       IF l_rgn_subtree_tbl.COUNT > 0 THEN
13147 
13148         l_old_element_id := l_rgn_subtree_tbl.First;
13149         LOOP
13150           IF l_old_element_id IS NULL THEN
13151             EXIT;
13152           END IF;
13153 
13154           l_new_element_id := l_rgn_subtree_tbl(l_old_element_id);
13155           IF l_rgn_subtree_tbl.EXISTS(TO_NUMBER(l_parent_elements_tbl(l_old_element_id))) THEN
13156             l_new_parent_element_id := l_rgn_subtree_tbl(TO_NUMBER(l_parent_elements_tbl(l_old_element_id)));
13157           ELSE
13158             l_new_parent_element_id := l_page_root_element_id;
13159           END IF;
13160           INSERT INTO CZ_UI_PAGE_ELEMENTS
13161              (UI_DEF_ID
13162              ,PAGE_ID
13163              ,PERSISTENT_NODE_ID
13164              ,ELEMENT_ID
13165              ,PARENT_ELEMENT_ID
13166              ,PARENT_PERSISTENT_NODE_ID
13167              ,REGION_PERSISTENT_NODE_ID
13168              ,PAGEBASE_PERSISTENT_NODE_ID
13169              ,CTRL_TEMPLATE_ID
13170              ,BASE_PAGE_FLAG
13171              ,INSTANTIABLE_FLAG
13172              ,SEQ_NBR
13173              ,DELETED_FLAG
13174              ,CTRL_TEMPLATE_UI_DEF_ID
13175              ,MODEL_REF_EXPL_ID
13176              ,ELEMENT_TYPE
13177              ,NAME
13178              ,ELEMENT_SIGNATURE_ID
13179              ,SUPPRESS_REFRESH_FLAG)
13180            SELECT
13181               UI_DEF_ID
13182              ,l_new_page_id
13183              ,PERSISTENT_NODE_ID
13184              ,l_new_element_id
13185              ,l_new_parent_element_id
13186              ,PARENT_PERSISTENT_NODE_ID
13187              ,REGION_PERSISTENT_NODE_ID
13188              ,pagebase_persistent_node_id
13189              ,CTRL_TEMPLATE_ID
13190              ,BASE_PAGE_FLAG
13191              ,INSTANTIABLE_FLAG
13192              ,SEQ_NBR
13193              ,DELETED_FLAG
13194              ,CTRL_TEMPLATE_UI_DEF_ID
13195              ,MODEL_REF_EXPL_ID
13196              ,ELEMENT_TYPE
13197              ,NAME
13198              ,ELEMENT_SIGNATURE_ID
13199              ,SUPPRESS_REFRESH_FLAG
13200            FROM CZ_UI_PAGE_ELEMENTS
13201            WHERE ui_def_id=p_ui_def_id AND
13202                  page_id=p_page_id AND
13203                  element_id=TO_CHAR(l_old_element_id);
13204 
13205           UPDATE CZ_UI_PAGE_ELEMENTS
13206              SET parent_element_id=l_new_element_id
13207            WHERE ui_def_id=p_ui_def_id AND
13208                  page_id=l_new_page_id AND
13209                  parent_element_id=TO_CHAR(l_old_element_id);
13210 
13211           l_old_element_id := l_rgn_subtree_tbl.NEXT(l_old_element_id);
13212         END LOOP;
13213 
13214       END IF; -- end of  IF l_rgn_subtree_tbl.COUNT > 0 THEN
13215 
13216       l_new_page_id := p_new_pages_tbl.NEXT(l_new_page_id);
13217 
13218     END LOOP; -- end of loop through p_new_pages_tbl
13219 
13220   END reconstruct_Nested_Regions;
13221 
13222   --
13223   -- split a single Page
13224   -- Parameters :
13225   -- p_ui_node - identifies UI node of page
13226   --
13227   PROCEDURE split_Page(p_ui_page_node          IN CZ_UI_PAGE_ELEMENTS%ROWTYPE,
13228                        p_max_controls_per_page IN NUMBER ) IS
13229 
13230     l_elements_tbl              ui_page_elements_tbl_type;
13231     l_new_pages_tbl             number_tbl_type;
13232     l_parent_elements_tbl       varchar_tbl_type;
13233 
13234   BEGIN
13235 
13236     IF p_ui_page_node.suppress_refresh_flag=G_YES_FLAG THEN
13237       RETURN;
13238     END IF;
13239 
13240     SAVEPOINT split_Page_Point;
13241 
13242     collect_UI_Elements(p_ui_page_node            => p_ui_page_node,
13243                         p_max_controls_per_page   => p_max_controls_per_page,
13244                         x_new_pages_tbl           => l_new_pages_tbl,
13245                         x_elements_tbl            => l_elements_tbl,
13246                         x_new_parent_elements_tbl => l_parent_elements_tbl);
13247 
13248     handle_Direct_Child_Nodes(p_ui_page_node        => p_ui_page_node,
13249                               p_elements_tbl        => l_elements_tbl,
13250                               p_parent_elements_tbl => l_parent_elements_tbl);
13251 
13252     reconstruct_Nested_Regions(p_ui_def_id     => p_ui_page_node.ui_def_id,
13253                                p_page_id       => p_ui_page_node.page_id,
13254                                p_new_pages_tbl => l_new_pages_tbl);
13255   EXCEPTION
13256     WHEN OTHERS THEN
13257          ROLLBACK TO split_Page_Point;
13258          DEBUG('split_Page() : fatal error "'||SQLERRM||'"');
13259   END split_Page;
13260 
13261   --
13262   -- split UI pages if they must be split
13263   --
13264   PROCEDURE split_Pages IS
13265 
13266     l_num_if_roots              NUMBER;
13267     l_target_persistent_node_id NUMBER;
13268     l_page_set_id               NUMBER;
13269     l_page_set_type             NUMBER;
13270     l_page_ref_id               NUMBER;
13271     l_max_controls_per_page     NUMBER;
13272 
13273   BEGIN
13274 
13275     IF g_UI_Context.control_layout IN(1,2) THEN
13276       l_max_controls_per_page := g_UI_CONTEXT.PAGIN_MAXCONTROLS*(g_UI_Context.control_layout+1);
13277     ELSE
13278       l_max_controls_per_page := g_UI_CONTEXT.PAGIN_MAXCONTROLS;
13279     END IF;
13280 
13281     --
13282     -- split UI Pages
13283     --
13284     FOR i IN (SELECT *
13285                 FROM CZ_UI_PAGE_ELEMENTS
13286                WHERE ui_def_id = g_UI_Context.ui_def_id AND
13287                      parent_element_id IS NULL AND
13288                      persistent_node_id=pagebase_persistent_node_id AND
13289                      NVL(suppress_refresh_flag, G_NO_FLAG) = G_NO_FLAG AND
13290                      deleted_flag IN (G_MARK_TO_ADD))
13291     LOOP
13292       split_Page(i, l_max_controls_per_page);
13293     END LOOP;
13294 
13295     IF g_UI_Context.PRIMARY_NAVIGATION=G_MODEL_TREE_MENU THEN
13296       SELECT COUNT(*) INTO l_num_if_roots FROM CZ_UI_PAGE_REFS
13297       WHERE ui_def_id=g_UI_Context.ui_def_id AND parent_page_ref_id IS NULL
13298             AND target_persistent_node_id=(SELECT persistent_node_id FROM CZ_PS_NODES
13299             WHERE devl_project_id=g_UI_Context.devl_project_id AND parent_id IS NULL AND
13300             deleted_flag=G_NO_FLAG) AND deleted_flag=G_NO_FLAG;
13301      IF l_num_if_roots > 1 THEN
13302 
13303         SELECT target_persistent_node_id,page_set_id,page_ref_type
13304           INTO l_target_persistent_node_id,l_page_set_id,l_page_set_type
13305           FROM CZ_UI_PAGE_REFS
13306           WHERE ui_def_id=g_UI_Context.ui_def_id AND parent_page_ref_id IS NULL
13307                AND target_persistent_node_id=(SELECT persistent_node_id FROM CZ_PS_NODES
13308                WHERE devl_project_id=g_UI_Context.devl_project_id AND parent_id IS NULL AND
13309                deleted_flag=G_NO_FLAG) AND deleted_flag=G_NO_FLAG AND rownum<2;
13310 
13311         l_page_ref_id := allocateId('CZ_UI_PAGE_REFS_S');
13312 
13313     INSERT INTO CZ_UI_PAGE_REFS
13314       (ui_def_id,
13315        page_set_id,
13316        page_ref_id,
13317        parent_page_ref_id,
13318        seq_nbr,
13319        node_depth,
13320        condition_id,
13321        NAME,
13322        caption_source,
13323        target_persistent_node_id,
13324        target_path,
13325        target_ui_def_id,
13326        target_page_set_id,
13327        target_page_id,
13328        modified_flags,
13329        path_to_prev_page,
13330        path_to_next_page,
13331        page_ref_type,
13332        target_expl_node_id,
13333        caption_rule_id,
13334        deleted_flag)
13335     VALUES
13336       (g_UI_Context.ui_def_id,
13337        l_page_set_id,
13338        l_page_ref_id,
13339        NULL,
13340        0,
13341        0,
13342        NULL,
13343        'Root',
13344        G_DEFAULT_CAPTION_RULE_ID,
13345         l_target_persistent_node_id,
13346        NULL,
13347        NULL,
13348        NULL,
13349        NULL,
13350        0,
13351        NULL,
13352        NULL,
13353        l_page_set_type,
13354        NULL,
13355        NULL,
13356        G_NO_FLAG);
13357 
13358       UPDATE CZ_UI_PAGE_REFS
13359          SET parent_page_ref_id=l_page_ref_id
13360          WHERE ui_def_id=g_UI_Context.ui_def_id AND parent_page_ref_id IS NULL AND
13361             target_persistent_node_id=(SELECT persistent_node_id FROM CZ_PS_NODES
13362             WHERE devl_project_id=g_UI_Context.devl_project_id AND parent_id IS NULL AND
13363             deleted_flag=G_NO_FLAG) AND deleted_flag=G_NO_FLAG;
13364 
13365      END IF;
13366     END IF;
13367 
13368   END split_Pages;
13369 
13370   --
13371   -- reorder UI elements  on UI page in case of Single Page
13372   --
13373   PROCEDURE set_UI_Page_Elements_Order(p_page_id IN NUMBER) IS
13374     l_counter  NUMBER:=0;
13375 
13376     PROCEDURE set_UI_Order_(p_element_id IN VARCHAR2) IS
13377     BEGIN
13378        FOR i IN(SELECT element_id FROM CZ_UI_PAGE_ELEMENTS
13379                 WHERE ui_def_id=g_UI_Context.ui_def_id AND
13380                       page_id=p_page_id AND
13381                       parent_element_id=p_element_id AND
13382                       deleted_flag=G_NO_FLAG ORDER BY seq_nbr)
13383        LOOP
13384           l_counter := l_counter + 1;
13385           UPDATE CZ_UI_PAGE_ELEMENTS
13386              SET seq_nbr = l_counter
13387            WHERE ui_def_id=g_UI_Context.ui_def_id AND
13388                  element_id=i.element_id;
13389            set_UI_Order_(i.element_id);
13390        END LOOP;
13391     END set_UI_Order_;
13392 
13393   BEGIN
13394      FOR i IN(SELECT element_id FROM CZ_UI_PAGE_ELEMENTS
13395               WHERE ui_def_id=g_UI_Context.ui_def_id AND
13396                     page_id=p_page_id AND
13397                     parent_element_id IS NULL AND
13398                     deleted_flag=G_NO_FLAG ORDER BY seq_nbr)
13399      LOOP
13400        set_UI_Order_(i.element_id);
13401      END LOOP;
13402   END set_UI_Page_Elements_Order;
13403 
13404   --
13405   -- set ordering for UI elements on UI pages
13406   --
13407   PROCEDURE handle_UI_Page_Elements_Order IS
13408   BEGIN
13409     FOR i IN(SELECT page_id FROM CZ_UI_PAGES a
13410              WHERE ui_def_id=g_UI_Context.ui_def_id AND
13411                    page_set_id IN
13412                    (SELECT page_set_id FROM CZ_UI_PAGE_SETS
13413                     WHERE ui_def_id=g_UI_Context.ui_def_id AND
13414                           page_set_id=a.page_set_id AND
13415                           page_set_type=G_SINGLE_PAGE AND
13416                           deleted_flag=G_NO_FLAG) AND
13417                     NVL(suppress_refresh_flag, G_NO_FLAG)=G_NO_FLAG AND
13418                    deleted_flag=G_NO_FLAG)
13419     LOOP
13420       set_UI_Page_Elements_Order(i.page_id);
13421     END LOOP;
13422   END handle_UI_Page_Elements_Order;
13423 
13424   --
13425   -- reorder UI elements  on UI page in case of Single Page
13426   --
13427   PROCEDURE handle_Page_Flows IS
13428 
13429     l_xmldoc             xmldom.DOMDocument;
13430     l_counter            NUMBER:=0;
13431     l_seq_nbr            NUMBER;
13432     l_show_train         BOOLEAN := FALSE;
13433     l_target_path        CZ_UI_PAGE_REFS.target_path%TYPE;
13434     l_page_ref_id        NUMBER;
13435 
13436     PROCEDURE set_Page_Flow_(p_page_ref_id IN VARCHAR2) IS
13437     BEGIN
13438        FOR i IN(SELECT page_ref_id,target_page_id,empty_page_flag,
13439                         NVL(modified_flags,0) AS modified_flags FROM CZ_UI_PAGE_REFS
13440                 WHERE ui_def_id=g_UI_Context.ui_def_id AND
13441                       parent_page_ref_id=p_page_ref_id AND
13442                       target_page_id IN
13443                       (SELECT page_id FROM CZ_UI_PAGES
13444                        WHERE ui_def_id=g_UI_Context.ui_def_id AND
13445                              deleted_flag IN(G_NO_FLAG,G_MARK_TO_ADD,
13446                              G_MARK_TO_REFRESH))
13447                       AND
13448                       deleted_flag=G_NO_FLAG ORDER BY seq_nbr)
13449        LOOP
13450           l_counter := l_counter + 1;
13451 
13452           IF i.modified_flags = 0 THEN
13453             UPDATE CZ_UI_PAGE_REFS
13454                SET seq_nbr = l_counter
13455              WHERE ui_def_id=g_UI_Context.ui_def_id AND
13456                    page_ref_id=i.page_ref_id;
13457           END IF;
13458 
13459           set_Page_Flow_(i.page_ref_id);
13460        END LOOP;
13461     END set_Page_Flow_;
13462 
13463   BEGIN
13464 
13465     FOR n IN(SELECT page_set_id
13466                FROM CZ_UI_PAGE_SETS
13467               WHERE ui_def_id=g_UI_Context.ui_def_id AND
13468                     page_set_type IN(G_PAGE_FLOW,G_SUBTABS) AND
13469                     deleted_flag=G_NO_FLAG)
13470     LOOP
13471       l_counter := 0;
13472       FOR m IN(SELECT page_ref_id,seq_nbr,target_page_id,empty_page_flag,
13473                       NVL(modified_flags,0) AS MODIFIED_FLAGS FROM CZ_UI_PAGE_REFS
13474                WHERE ui_def_id=g_UI_Context.ui_def_id AND
13475                      parent_page_ref_id IS NULL AND
13476                      page_set_id=n.page_set_id AND
13477                      target_page_id IN
13478                      (SELECT page_id FROM CZ_UI_PAGES
13479                       WHERE ui_def_id=g_UI_Context.ui_def_id AND
13480                             page_set_id=n.page_set_id AND
13481                             deleted_flag IN(G_MARK_TO_ADD,G_MARK_TO_REFRESH,
13482                             G_NO_FLAG)) AND
13483                      deleted_flag=G_NO_FLAG ORDER BY seq_nbr)
13484       LOOP
13485         -- Find the first unmodifid page ref. This is basically the first page ref
13486         -- generated by UiGen. Once we have this, we recursively set the seq_nbrs
13487         -- by traversing the page_refs structure in depth first order.
13488         IF m.MODIFIED_FLAGS = 0 THEN
13489           IF l_counter=0 THEN
13490             l_page_ref_id := m.page_ref_id;
13491           END IF;
13492         END IF;
13493         l_counter := l_counter + 1;
13494       END LOOP; -- loop with m index
13495 
13496       set_Page_Flow_(l_page_ref_id);
13497 
13498     END LOOP; -- loop with n index
13499 
13500 
13501     FOR n IN(SELECT page_set_id,persistent_node_id,pagebase_expl_node_id
13502                FROM CZ_UI_PAGE_SETS
13503               WHERE ui_def_id=g_UI_Context.ui_def_id AND
13504                     deleted_flag=G_NO_FLAG)
13505     LOOP
13506 
13507       FOR m IN(SELECT page_ref_id,seq_nbr,target_page_id,empty_page_flag,
13508                       target_persistent_node_id, target_expl_node_id
13509                FROM CZ_UI_PAGE_REFS
13510                WHERE ui_def_id=g_UI_Context.ui_def_id AND
13511                      parent_page_ref_id IS NULL AND
13512                      page_set_id=n.page_set_id AND
13513                      target_page_id IN
13514                      (SELECT page_id FROM CZ_UI_PAGES
13515                       WHERE ui_def_id=g_UI_Context.ui_def_id AND
13516                             page_set_id=n.page_set_id AND
13517                             deleted_flag IN(G_MARK_TO_ADD,G_MARK_TO_REFRESH,
13518                             G_NO_FLAG)) AND
13519                      deleted_flag=G_NO_FLAG)
13520       LOOP
13521 
13522         l_target_path := CZ_DEVELOPER_UTILS_PVT.runtime_relative_path(p_base_expl_id => n.pagebase_expl_node_id,
13523                                                      p_base_pers_id => n.persistent_node_id,
13524                                                      p_node_expl_id => m.target_expl_node_id,
13525                                                      p_node_pers_id => m.target_persistent_node_id);
13526         IF l_target_path IS NULL THEN
13527            l_target_path := '.';
13528         END IF;
13529 
13530         UPDATE CZ_UI_PAGE_REFS
13531            SET target_path=l_target_path
13532          WHERE ui_def_id=g_UI_Context.ui_def_id AND
13533                page_set_id=n.page_set_id AND
13534                target_persistent_node_id=m.target_persistent_node_id AND
13535                target_path<>l_target_path AND
13536                deleted_flag=G_NO_FLAG;
13537       END LOOP;
13538 
13539     END LOOP;
13540   END handle_Page_Flows;
13541 
13542   --
13543   -- get child UI Nodes
13544   --
13545   PROCEDURE get_Child_UI_Nodes
13546   (
13547   p_parent_ui_node        IN CZ_UI_PAGE_ELEMENTS%ROWTYPE,
13548   p_child_nodes_tbl       IN OUT NOCOPY model_nodes_tbl_type,
13549   x_ui_nodes_tbl          OUT NOCOPY ui_page_elements_tbl_type,
13550   p_suppress_refresh_flag IN VARCHAR2
13551   ) IS
13552     l_delete_in_model BOOLEAN;
13553     l_ps_node_type    NUMBER;
13554   BEGIN
13555 
13556     IF p_parent_ui_node.parent_persistent_node_id IS NULL AND
13557        p_parent_ui_node.parent_element_id IS NULL AND
13558            NVL(p_suppress_refresh_flag,G_NO_FLAG)=G_NO_FLAG THEN
13559 
13560       IF get_CX_Button_Status(p_parent_ui_node)=G_CX_VALID THEN
13561 
13562         add_CX_Button(p_node     => get_Model_Node_By_Persist_Id(p_parent_ui_node.persistent_node_id,
13563                                                                  g_UI_Context.devl_project_id),
13564                       p_ui_node  => p_parent_ui_node);
13565 
13566       END IF;
13567 
13568     END IF;
13569 
13570     FOR i IN (SELECT *
13571                 FROM CZ_UI_PAGE_ELEMENTS
13572                WHERE ui_def_id = p_parent_ui_node.ui_def_id AND
13573                      page_id=p_parent_ui_node.page_id AND
13574                      parent_element_id=p_parent_ui_node.element_id AND
13575                      deleted_flag IN (G_NO_FLAG,
13576                                       G_MARK_TO_ADD,
13577                                       G_MARK_TO_REFRESH,
13578                                       G_MARK_TO_DELETE))
13579     LOOP
13580       IF  i.element_type=G_UI_CX_BUTTON_NODE_TYPE THEN
13581         BEGIN
13582           l_ps_node_type := NULL;
13583           SELECT ps_node_type INTO l_ps_node_type FROM CZ_PS_NODES
13584           WHERE devl_project_id=g_UI_Context.devl_project_id AND
13585                 persistent_node_id=i.persistent_node_id;
13586         EXCEPTION
13587           WHEN NO_DATA_FOUND THEN
13588              NULL;
13589         END;
13590       END IF;
13591 
13592       l_delete_in_model := TRUE;
13593       FOR h IN(SELECT NULL FROM CZ_PS_NODES
13594                WHERE devl_project_id=g_UI_Context.devl_project_id AND
13595                      persistent_node_id=i.persistent_node_id AND
13596                      deleted_flag=G_NO_FLAG)
13597       LOOP
13598         l_delete_in_model := FALSE;
13599       END LOOP;
13600 
13601       IF NVL(i.element_type,0) NOT IN(G_UI_BOMADDINST_NODE_TYPE,
13602                                       G_UI_NONBOMADDINST_NODE_TYPE,
13603                                       G_UI_PAGEDRILLDOWN_NODE_TYPE,
13604                                       G_UI_CX_BUTTON_NODE_TYPE)
13605          OR (is_UI_Reference(i) AND NVL(i.element_type,0)<>G_UI_CX_BUTTON_NODE_TYPE) THEN
13606         IF i.persistent_node_id IS NOT NULL THEN
13607           x_ui_nodes_tbl(i.persistent_node_id) := i;
13608         END IF;
13609 
13610       END IF;
13611 
13612       IF NOT(p_child_nodes_tbl.EXISTS(i.persistent_node_id))
13613          AND i.persistent_node_id<>p_parent_ui_node.persistent_node_id AND
13614          NOT( NVL(i.element_type,0)=G_UI_CX_BUTTON_NODE_TYPE AND l_ps_node_type IN(G_BOM_STANDART_ITEM_TYPE,G_OPTION_TYPE))
13615            THEN
13616 
13617          IF i.pagebase_persistent_node_id=i.persistent_node_id THEN -- UI page
13618             --
13619             -- delete UI page or deassociate UI page from model nodes
13620             --
13621             delete_UI_Page(i);
13622 
13623          ELSIF i.region_persistent_node_id=i.persistent_node_id AND
13624                i.pagebase_persistent_node_id<>i.persistent_node_id THEN -- UI region
13625             --
13626             -- delete UI region or deassociate UI region from model nodes
13627             --
13628             delete_UI_Region(i);
13629 
13630          ELSE -- regular UI element
13631             --
13632             -- delete UI element or deassociate UI element from model nodes
13633             --
13634             delete_UI_Element(i, p_suppress_refresh_flag, l_delete_in_model);
13635 
13636          END IF;
13637       END IF;
13638 
13639       IF i.deleted_flag=G_MARK_TO_DELETE THEN
13640          p_child_nodes_tbl.DELETE(i.persistent_node_id);
13641       END IF;
13642 
13643     END LOOP;
13644 
13645   END get_Child_UI_Nodes;
13646 
13647   --
13648   -- delete child UI nodes
13649   --
13650   PROCEDURE delete_UI_Nodes
13651   (
13652   p_nodes_tbl             OUT NOCOPY model_nodes_tbl_type,
13653   px_ui_nodes_tbl         IN OUT NOCOPY ui_page_elements_tbl_type,
13654   p_suppress_refresh_flag IN VARCHAR2
13655   ) IS
13656 
13657     l_current_ui_index  NUMBER;
13658     l_current_ui_node   CZ_UI_PAGE_ELEMENTS%ROWTYPE;
13659 
13660   BEGIN
13661 
13662 
13663     IF px_ui_nodes_tbl.COUNT=0 THEN
13664       RETURN;
13665     END IF;
13666 
13667     l_current_ui_index := px_ui_nodes_tbl.First;
13668     LOOP
13669 
13670       IF l_current_ui_index IS NULL THEN
13671         EXIT;
13672       END IF;
13673 
13674       l_current_ui_node := px_ui_nodes_tbl(l_current_ui_index);
13675 
13676       IF l_current_ui_node.persistent_node_id IS NOT NULL AND
13677          NOT(p_nodes_tbl.EXISTS(l_current_ui_node.persistent_node_id)) THEN
13678 
13679         IF l_current_ui_node.pagebase_persistent_node_id=l_current_ui_node.persistent_node_id THEN -- UI page
13680           --
13681           -- delete UI page or deassociate UI page from model nodes
13682           --
13683           delete_UI_Page(l_current_ui_node);
13684 
13685         ELSIF l_current_ui_node.pagebase_persistent_node_id<>l_current_ui_node.persistent_node_id AND
13686               l_current_ui_node.region_persistent_node_id=l_current_ui_node.persistent_node_id THEN -- UI region
13687           --
13688           -- delete UI region or deassociate UI region from model nodes
13689           --
13690           delete_UI_Region(l_current_ui_node);
13691 
13692         ELSE -- regular UI element
13693           --
13694           -- delete UI element or deassociate UI element from model nodes
13695           --
13696           delete_UI_Element(l_current_ui_node, p_suppress_refresh_flag);
13697 
13698          END IF;
13699 
13700       END IF;
13701 
13702       IF l_current_ui_node.deleted_flag=G_MARK_TO_DELETE THEN
13703         px_ui_nodes_tbl.DELETE(l_current_ui_node.persistent_node_id);
13704       END IF;
13705 
13706       l_current_ui_index := px_ui_nodes_tbl.NEXT(l_current_ui_index);
13707     END LOOP;
13708 
13709   END delete_UI_Nodes;
13710 
13711   PROCEDURE exist_On_Split_Pages(p_current_model_node        IN  CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE, -->>>
13712                                  p_parent_ui_node            IN  CZ_UI_PAGE_ELEMENTS%ROWTYPE,
13713                                  px_page_split_seq_nbr       OUT NOCOPY NUMBER,
13714                                  l_exist_on_split_pages_flag OUT NOCOPY VARCHAR2) IS
13715 
13716     l_page_persistent_node_id NUMBER;
13717     l_flag                    VARCHAR2(1);
13718 
13719   BEGIN
13720 
13721     l_exist_on_split_pages_flag := G_NO_FLAG;
13722 
13723     SELECT persistent_node_id,split_seq_nbr
13724       INTO l_page_persistent_node_id, px_page_split_seq_nbr FROM CZ_UI_PAGES
13725      WHERE page_id=p_parent_ui_node.page_id AND ui_def_id=g_UI_Context.ui_def_id;
13726 
13727     IF px_page_split_seq_nbr=1 THEN
13728       SELECT G_YES_FLAG INTO l_exist_on_split_pages_flag FROM dual
13729       WHERE EXISTS
13730       (SELECT NULL FROM CZ_UI_PAGE_ELEMENTS
13731        WHERE ui_def_id=g_UI_Context.ui_def_id AND page_id IN(SELECT page_id FROM CZ_UI_PAGES
13732                       WHERE ui_def_id=g_UI_Context.ui_def_id AND persistent_node_id=l_page_persistent_node_id AND
13733                       split_seq_nbr>1 AND deleted_flag NOT IN(G_YES_FLAG)) AND
13734                       persistent_node_id=p_current_model_node.persistent_node_id AND
13735                       deleted_flag NOT IN(G_YES_FLAG));
13736     ELSIF px_page_split_seq_nbr>1 THEN
13737       SELECT G_YES_FLAG INTO l_exist_on_split_pages_flag FROM dual
13738       WHERE EXISTS
13739       (SELECT NULL FROM CZ_UI_PAGE_ELEMENTS
13740        WHERE ui_def_id=g_UI_Context.ui_def_id AND page_id IN(SELECT page_id FROM CZ_UI_PAGES
13741                       WHERE ui_def_id=g_UI_Context.ui_def_id AND persistent_node_id=l_page_persistent_node_id AND
13742                       split_seq_nbr<>px_page_split_seq_nbr AND deleted_flag NOT IN(G_YES_FLAG)) AND
13743                       persistent_node_id=p_current_model_node.persistent_node_id AND
13744                       deleted_flag NOT IN(G_YES_FLAG));
13745     END IF;
13746 
13747   EXCEPTION
13748     WHEN NO_DATA_FOUND THEN
13749       l_exist_on_split_pages_flag := G_NO_FLAG;
13750   END exist_On_Split_Pages;
13751 
13752   --
13753   -- refresh given UI element recursively
13754   --
13755   PROCEDURE refresh_UI_Subtree(p_element_id            IN VARCHAR2,
13756                                p_page_id               IN NUMBER,
13757                                p_suppress_refresh_flag IN VARCHAR2 DEFAULT NULL) IS
13758 
13759     l_nodes_tbl                   model_nodes_tbl_type;
13760     l_seq_nodes_tbl               ui_page_el_int_tbl_type; -- fix for bug 6837809 : skudryav 28-Mar-2008
13761     l_non_del_child_nodes_tbl     model_nodes_tbl_type;
13762     l_ui_nodes_tbl                ui_page_elements_tbl_type;
13763     l_next_level_ui_pages_tbl     ui_page_elements_tbl_type;
13764     l_next_level_ui_page_idx      VARCHAR2(15);
13765     TYPE number_tbl_type        IS TABLE OF NUMBER INDEX BY BINARY_INTEGER;
13766     l_element_id_tbl              varchar_tbl_type;
13767     l_page_id_tbl                 number_tbl_type;
13768     l_suppress_refresh_flag_tbl   varchar_tbl_type;
13769 
13770     l_ps_node                     CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE;
13771     l_ui_node                     CZ_UI_PAGE_ELEMENTS%ROWTYPE;
13772     l_new_ui_node                 CZ_UI_PAGE_ELEMENTS%ROWTYPE;
13773     l_suppress_refresh_flag       CZ_UI_PAGE_ELEMENTS.suppress_refresh_flag%TYPE;
13774     l_current_model_node          CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE;
13775     l_seq_nbr                     NUMBER;
13776     l_max_split_nbr               NUMBER;
13777     l_page_split_seq_nbr          NUMBER;
13778     l_exist_on_split_pages_flag   VARCHAR2(1);
13779 
13780   BEGIN
13781     --
13782     -- get UI data of current UI element
13783     --
13784     l_ui_node := get_UI_Element(p_element_id,p_page_id);
13785 
13786     IF l_ui_node.persistent_node_id IS NULL THEN
13787       GOTO NEXT_LEVEL;
13788     END IF;
13789 
13790     --
13791     -- get ps_node_id of curren model node ( <-> model node associated with the current  UI element )
13792     --
13793     l_ps_node := get_Model_Node_By_Persist_Id(l_ui_node.persistent_node_id,
13794                                               g_UI_Context.devl_project_id);
13795 
13796     IF l_ps_node.deleted_flag=G_YES_FLAG OR l_ps_node.ps_node_id IS NULL OR
13797        l_ps_node.ui_omit=G_YES_FLAG THEN
13798          IF l_ui_node.pagebase_persistent_node_id=l_ui_node.persistent_node_id THEN -- UI page
13799             --
13800             -- delete UI page or deassociate UI page from model nodes
13801             --
13802             delete_UI_Page(l_ui_node);
13803 
13804          ELSIF l_ui_node.region_persistent_node_id=l_ui_node.persistent_node_id AND
13805                l_ui_node.pagebase_persistent_node_id<>l_ui_node.persistent_node_id THEN -- UI region
13806             --
13807             -- delete UI region or deassociate UI region from model nodes
13808             --
13809             delete_UI_Region(l_ui_node);
13810 
13811          ELSE -- regular UI element
13812             --
13813             -- delete UI element or deassociate UI element from model nodes
13814             --
13815             delete_UI_Element(l_ui_node,p_suppress_refresh_flag, TRUE);
13816 
13817          END IF;
13818          RETURN;
13819     END IF;
13820 
13821     --
13822     -- get child nodes of current model node
13823     --
13824     get_Child_Nodes(l_ps_node.ps_node_id,
13825                     g_UI_Context.show_all_nodes_flag,
13826                     l_seq_nodes_tbl,
13827                     l_nodes_tbl,
13828                     l_non_del_child_nodes_tbl);
13829 
13830     --
13831     -- set suppress_refresh_flag flag for current UI element
13832     --
13833     IF g_UI_Context.suppress_refresh_flag=G_YES_FLAG THEN
13834       l_suppress_refresh_flag := G_YES_FLAG;
13835     ELSE
13836       IF p_suppress_refresh_flag IS NULL THEN
13837          l_suppress_refresh_flag := l_ui_node.suppress_refresh_flag;
13838       ELSE
13839          l_suppress_refresh_flag := p_suppress_refresh_flag;
13840       END IF;
13841     END IF;
13842 
13843     --
13844     -- get child nodes of UI node l_ui_node
13845     --
13846     get_Child_UI_Nodes(p_parent_ui_node        => l_ui_node,
13847                        p_child_nodes_tbl       => l_nodes_tbl,
13848                        x_ui_nodes_tbl          => l_ui_nodes_tbl,
13849                        p_suppress_refresh_flag => l_suppress_refresh_flag);
13850 
13851     --
13852     -- check root of subtree
13853     --
13854     IF l_ui_node.parent_element_id IS NULL THEN
13855       check_UI_Node_Changes(l_ui_node, l_ps_node);
13856     END IF;
13857 
13858     l_seq_nbr := l_seq_nodes_tbl.First;
13859     LOOP
13860 
13861       IF l_seq_nbr IS NULL THEN
13862          EXIT;
13863       END IF;
13864 
13865       l_current_model_node := l_seq_nodes_tbl(l_seq_nbr);
13866 
13867       -- node does not exist in UI on the same level as in Model tree
13868       IF NOT(l_ui_nodes_tbl.EXISTS(l_current_model_node.persistent_node_id)) THEN
13869 
13870         l_max_split_nbr := get_Last_Split_Page_Nbr(p_page_id);
13871 
13872         IF (l_max_split_nbr > 1) THEN -- case when page was split
13873 
13874           exist_On_Split_Pages(l_current_model_node, l_ui_node,
13875                                l_page_split_seq_nbr, l_exist_on_split_pages_flag);
13876 
13877           IF l_exist_on_split_pages_flag=G_NO_FLAG AND
13878              l_page_split_seq_nbr=l_max_split_nbr THEN
13879             --
13880             -- add new UI Node
13881             --
13882             add_New_UI_Node(p_ui_node               => l_ui_node,
13883                             p_model_node            => l_current_model_node,
13884                             p_suppress_refresh_flag => l_suppress_refresh_flag,
13885                             x_new_ui_pages_tbl      => l_next_level_ui_pages_tbl,
13886                             x_new_ui_node           => l_new_ui_node);
13887           END IF;
13888         ELSE
13889           --
13890           -- add new UI Node
13891           --
13892           add_New_UI_Node(p_ui_node               => l_ui_node,
13893                           p_model_node            => l_current_model_node,
13894                           p_suppress_refresh_flag => l_suppress_refresh_flag,
13895                           x_new_ui_pages_tbl      => l_next_level_ui_pages_tbl,
13896                           x_new_ui_node           => l_new_ui_node);
13897         END IF;
13898 
13899       ELSE  -- UI element exists ,but associated model node was changed
13900          --
13901          -- check UI node changes
13902          --
13903          check_UI_Node_Changes(l_ui_nodes_tbl(l_current_model_node.persistent_node_id), l_current_model_node);
13904 
13905       END IF; -- end of IF NOT(l_nodes_tbl.EXISTS(i.persistent_node_id))
13906 
13907       l_seq_nbr := l_seq_nodes_tbl.NEXT(l_seq_nbr);
13908 
13909     END LOOP;
13910 
13911     << NEXT_LEVEL >>
13912 
13913     l_element_id_tbl.DELETE;
13914     l_page_id_tbl.DELETE;
13915     l_suppress_refresh_flag_tbl.DELETE;
13916 
13917     --
13918     -- handle next level of UI tree ( recursion )
13919     --
13920     SELECT element_id, page_id, suppress_refresh_flag
13921     BULK COLLECT INTO l_element_id_tbl, l_page_id_tbl, l_suppress_refresh_flag_tbl
13922     FROM CZ_UI_PAGE_ELEMENTS
13923     WHERE ui_def_id = g_UI_Context.ui_def_id AND
13924           page_id=p_page_id AND
13925           parent_element_id = l_ui_node.element_id AND
13926           deleted_flag IN(G_NO_FLAG, G_MARK_TO_ADD, G_MARK_TO_REFRESH) AND
13927           (element_type IN(G_UI_PAGE_NODE_TYPE,G_UI_REGION_NODE_TYPE));
13928 
13929     IF l_element_id_tbl.COUNT > 0 THEN
13930       FOR k IN l_element_id_tbl.First..l_element_id_tbl.Last
13931       LOOP
13932         IF g_UI_Context.suppress_refresh_flag=G_YES_FLAG THEN
13933           l_suppress_refresh_flag := G_YES_FLAG;
13934         ELSE
13935           l_suppress_refresh_flag := NVL(l_suppress_refresh_flag_tbl(k),l_suppress_refresh_flag);
13936         END IF;
13937 
13938         refresh_UI_Subtree(p_element_id            => l_element_id_tbl(k),
13939                            p_page_id               => l_page_id_tbl(k),
13940                            p_suppress_refresh_flag => l_suppress_refresh_flag);
13941 
13942       END LOOP;
13943     END IF;
13944     --kdande; Bug 6875560; 20-Mar-2008; Modified the PLSQL table FOR LOOP to
13945     --simple LOOP to get the indexes as the index is a VARCHAR2 column
13946     IF l_next_level_ui_pages_tbl.COUNT > 0 THEN
13947       l_next_level_ui_page_idx := l_next_level_ui_pages_tbl.FIRST;
13948       LOOP
13949         EXIT WHEN l_next_level_ui_page_idx IS NULL;
13950         IF g_UI_Context.suppress_refresh_flag=G_YES_FLAG THEN
13951           l_suppress_refresh_flag := G_YES_FLAG;
13952         ELSE
13953           l_suppress_refresh_flag := NVL(l_next_level_ui_pages_tbl(l_next_level_ui_page_idx).suppress_refresh_flag,l_suppress_refresh_flag);
13954         END IF;
13955         refresh_UI_Subtree(p_element_id            => l_next_level_ui_pages_tbl(l_next_level_ui_page_idx).element_id,
13956                            p_page_id               => l_next_level_ui_pages_tbl(l_next_level_ui_page_idx).page_id,
13957                            p_suppress_refresh_flag => l_suppress_refresh_flag);
13958 	l_next_level_ui_page_idx := l_next_level_ui_pages_tbl.NEXT(l_next_level_ui_page_idx);
13959       END LOOP;
13960     END IF;
13961 
13962   END refresh_UI_Subtree;
13963 
13964   --
13965   -- return TRUE if UI page with page_id=p_page_id is empty
13966   -- else return FALSE
13967   --
13968   FUNCTION is_Empty_Page(p_page_id IN NUMBER)
13969     RETURN BOOLEAN IS
13970     l_flag VARCHAR2(1);
13971   BEGIN
13972     SELECT G_YES_FLAG INTO l_flag
13973       FROM CZ_UI_PAGE_ELEMENTS
13974      WHERE ui_def_id=g_UI_Context.ui_def_id AND
13975            page_id=p_page_id AND
13976            parent_element_id IS NOT NULL AND
13977            deleted_flag NOT IN(G_YES_FLAG,G_MARK_TO_DELETE) AND
13978            rownum<2;
13979     RETURN FALSE;
13980   EXCEPTION
13981     WHEN NO_DATA_FOUND THEN
13982       RETURN TRUE;
13983   END is_Empty_Page;
13984 
13985   --
13986   -- perform a special handling for empty UI pages :
13987   -- set CZ_UI_PAGE_REF.target_page_id=NULL for those UI pages
13988   -- which are empty UI pages
13989   --
13990   PROCEDURE handle_Empty_Pages IS
13991 
13992     l_empty_page           BOOLEAN;
13993 
13994   BEGIN
13995 
13996     --
13997     -- exlude from UI Page Refs those UI pages
13998     -- which have no UI content in it
13999     --
14000     FOR i IN(SELECT page_ref_id,
14001                     target_page_id,target_persistent_node_id,
14002                     NVL(empty_page_flag,G_NO_FLAG) AS empty_page_flag FROM CZ_UI_PAGE_REFS
14003              WHERE ui_def_id=g_UI_Context.ui_def_id AND deleted_flag=G_NO_FLAG AND
14004                    target_page_id IN(SELECT page_id FROM CZ_UI_PAGES
14005                    WHERE ui_def_id=g_UI_Context.ui_def_id AND
14006                          NVL(suppress_refresh_flag, G_NO_FLAG)=G_NO_FLAG AND
14007                          deleted_flag IN(G_NO_FLAG,G_MARK_TO_REFRESH,G_MARK_TO_ADD) ))
14008      LOOP
14009 
14010        -- check page - is it empty or no ?
14011        l_empty_page := is_Empty_Page(i.target_page_id);
14012 
14013        IF NVL(i.empty_page_flag,G_NO_FLAG)=G_NO_FLAG AND l_empty_page THEN
14014 
14015           UPDATE CZ_UI_PAGE_REFS
14016              SET empty_page_flag=G_YES_FLAG
14017            WHERE ui_def_id=g_UI_Context.ui_def_id AND
14018                  page_ref_id=i.page_ref_id AND NVL(modified_flags,0)=0;
14019 
14020           IF SQL%ROWCOUNT>0 THEN
14021             UPDATE CZ_UI_PAGES
14022                SET empty_page_flag=G_YES_FLAG
14023              WHERE page_id=i.target_page_id AND
14024                    ui_def_id=g_UI_Context.ui_def_id;
14025           END IF;
14026 
14027       ELSIF  i.empty_page_flag=G_YES_FLAG AND l_empty_page=FALSE THEN
14028 
14029           UPDATE CZ_UI_PAGE_REFS
14030              SET empty_page_flag=G_NO_FLAG
14031            WHERE ui_def_id=g_UI_Context.ui_def_id AND
14032                  page_ref_id=i.page_ref_id AND NVL(modified_flags,0)=0;
14033 
14034           IF SQL%ROWCOUNT>0 THEN
14035             UPDATE CZ_UI_PAGES
14036                SET empty_page_flag=G_NO_FLAG
14037              WHERE page_id=i.target_page_id AND
14038                    ui_def_id=g_UI_Context.ui_def_id;
14039           END IF;
14040 
14041        END IF;
14042 
14043      END LOOP;
14044 
14045   END handle_Empty_Pages;
14046 
14047   PROCEDURE set_SLMenu_Order(p_page_set_id IN NUMBER) IS
14048 
14049     l_counter       NUMBER:=0;
14050     l_split_seq_nbr NUMBER;
14051 
14052     PROCEDURE set_Page_Ref_Order_(p_page_ref_id IN VARCHAR2) IS
14053     BEGIN
14054        FOR i IN(SELECT page_ref_id FROM CZ_UI_PAGE_REFS a
14055                 WHERE ui_def_id=g_UI_Context.ui_def_id AND
14056                       parent_page_ref_id=p_page_ref_id AND
14057                       EXISTS
14058                       (SELECT NULL FROM CZ_UI_PAGES
14059                        WHERE page_id=a.target_page_id AND ui_def_id=g_UI_Context.ui_def_id) AND
14060                       deleted_flag IN(G_MARK_TO_ADD,G_MARK_TO_REFRESH,G_NO_FLAG) ORDER BY seq_nbr)
14061        LOOP
14062          l_counter := l_counter + 1;
14063          UPDATE CZ_UI_PAGE_REFS
14064             SET seq_nbr = l_counter
14065           WHERE ui_def_id=g_UI_Context.ui_def_id AND
14066                 page_ref_id=i.page_ref_id;
14067           set_Page_Ref_Order_(i.page_ref_id);
14068        END LOOP;
14069     END set_Page_Ref_Order_;
14070 
14071   BEGIN
14072     FOR i IN(SELECT page_ref_id,target_page_id,target_persistent_node_id FROM CZ_UI_PAGE_REFS
14073              WHERE ui_def_id=g_UI_Context.ui_def_id AND
14074                    page_set_id=p_page_set_id AND
14075                    parent_page_ref_id IS NULL AND
14076                    deleted_flag=G_NO_FLAG)
14077     LOOP
14078       SELECT NVL(split_seq_nbr,1) INTO l_split_seq_nbr
14079       FROM CZ_UI_PAGES
14080       WHERE page_id=i.target_page_id AND
14081             ui_def_id=g_UI_Context.ui_def_id;
14082 
14083       IF l_split_seq_nbr > 1 THEN
14084         UPDATE CZ_UI_PAGE_REFS
14085            SET seq_nbr = l_split_seq_nbr
14086          WHERE ui_def_id=g_UI_Context.ui_def_id AND
14087                page_ref_id=i.page_ref_id;
14088         l_counter := l_split_seq_nbr;
14089       ELSE
14090         UPDATE CZ_UI_PAGE_REFS
14091            SET seq_nbr = 1
14092          WHERE ui_def_id=g_UI_Context.ui_def_id AND
14093                page_ref_id=i.page_ref_id;
14094         SELECT MAX(split_seq_nbr) INTO l_counter FROM CZ_UI_PAGES
14095         WHERE ui_def_id=g_UI_Context.ui_def_id AND
14096               persistent_node_id=i.target_persistent_node_id AND
14097               deleted_flag IN (G_MARK_TO_ADD,G_MARK_TO_REFRESH,G_NO_FLAG);
14098       END IF;
14099 
14100       set_Page_Ref_Order_(i.page_ref_id);
14101     END LOOP;
14102   END set_SLMenu_Order;
14103 
14104   --
14105   -- set ordering for UI elements on UI pages
14106   --
14107   PROCEDURE handle_SLMenu_Order IS
14108   BEGIN
14109     FOR i IN(SELECT page_set_id FROM CZ_UI_PAGE_SETS
14110              WHERE ui_def_id=g_UI_Context.ui_def_id AND
14111                    page_set_type=G_SINGLE_LEVEL_MENU AND
14112                    deleted_flag=G_NO_FLAG)
14113     LOOP
14114       set_SLMenu_Order(i.page_set_id);
14115     END LOOP;
14116   END handle_SLMenu_Order;
14117 
14118   PROCEDURE  check_Boundaries IS
14119     l_node_is_reachable NUMBER := -1;
14120     l_has_unreach       BOOLEAN := FALSE;
14121   BEGIN
14122     FOR i IN(SELECT page_id,pagebase_expl_node_id FROM CZ_UI_PAGES
14123              WHERE ui_def_id=g_UI_Context.ui_def_id AND
14124                    deleted_flag NOT IN(G_LIMBO_FLAG,G_MARK_TO_DELETE,G_YES_FLAG))
14125     LOOP
14126       FOR k IN(SELECT element_id,persistent_node_id,model_ref_expl_id,name
14127                  FROM CZ_UI_PAGE_ELEMENTS
14128                 WHERE ui_def_id=g_UI_Context.ui_def_id AND
14129                       page_id=i.page_id AND
14130                       deleted_flag NOT IN(G_LIMBO_FLAG,G_MARK_TO_DELETE,G_YES_FLAG))
14131       LOOP
14132         BEGIN
14133           l_node_is_reachable :=CZ_DEVELOPER_UTILS_PVT.in_boundary(i.pagebase_expl_node_id,
14134                                                                    k.model_ref_expl_id,
14135                                                                    k.persistent_node_id);
14136           IF l_node_is_reachable=0 THEN
14137              l_has_unreach := TRUE;
14138              add_Error_Message(p_message_name => 'CZDEV_UI_ERR_VIR_BDR_BIND',
14139                                p_token_name   => 'PICKEDNODENAME',
14140                                p_token_value  => k.name,
14141                                p_fatal_error  => TRUE);
14142           END IF;
14143         EXCEPTION
14144           WHEN OTHERS THEN
14145              NULL;
14146         END;
14147       END LOOP;
14148     END LOOP;
14149 
14150     IF l_has_unreach THEN
14151       RAISE UNREACH_UI_NODE;
14152     END IF;
14153   END check_Boundaries;
14154 
14155 
14156     -- Gets the UI Node for the parent of this PsNode
14157     --
14158     PROCEDURE get_parent_ui_node(p_ps_node IN CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE,
14159                                  p_ord_siblings IN  model_nodes_tbl_type,
14160                                  p_ps_node_index IN NUMBER,
14161                                  x_parent_ui_node OUT NOCOPY CZ_UI_PAGE_ELEMENTS%ROWTYPE,
14162                                  x_insert_index OUT NOCOPY NUMBER,
14163                                  x_refresh_enabled_parent_found OUT NOCOPY BOOLEAN,
14164                                  x_atleast_one_parent_found OUT NOCOPY BOOLEAN) IS
14165 
14166       l_parent_ps_node          CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE;
14167       l_predecessor             CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE;
14168       l_successor               CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE;
14169       l_pred_persistent_node_id NUMBER := NULL;
14170       l_succ_persistent_node_id NUMBER := NULL;
14171       l_parent_ui_node          CZ_UI_PAGE_ELEMENTS%ROWTYPE;
14172       l_parent_element_id       NUMBER;
14173       l_page_id                 NUMBER;
14174       l_added                   BOOLEAN;
14175 
14176     BEGIN
14177 
14178       l_parent_ps_node := get_Model_Node( p_ps_node.parent_id );
14179 
14180       DEBUG('asp:Find parent ' || p_ps_node_index || 'siblings count = ' || p_ord_siblings.COUNT);
14181 
14182       l_added := FALSE;
14183 
14184       IF p_ps_node_index > 1 THEN
14185         l_predecessor := p_ord_siblings(p_ps_node_index-1);
14186         l_pred_persistent_node_id := l_predecessor.persistent_node_id;
14187       END IF;
14188 
14189       IF p_ps_node_index > 0 AND p_ps_node_index < p_ord_siblings.COUNT THEN
14190         FOR i in p_ps_node_index+1..p_ord_siblings.COUNT
14191         LOOP
14192           IF p_ord_siblings(i).deleted_flag = G_NO_FLAG AND p_ord_siblings(i).creation_date < g_UI_Context.ui_timestamp_refresh THEN
14193             l_successor := p_ord_siblings(i);
14194             l_succ_persistent_node_id := l_successor.persistent_node_id;
14195             EXIT;
14196           END IF;
14197         END LOOP;
14198       END IF;
14199 
14200       x_refresh_enabled_parent_found := FALSE;
14201       x_atleast_one_parent_found := FALSE;
14202 
14203       -- First find all regions that are bound to the parent of this PS Node and
14204       -- contain the predecessor and successor of this node.
14205 
14206       IF l_pred_persistent_node_id IS NOT NULL AND l_succ_persistent_node_id IS NOT NULL THEN
14207         FOR i IN (SELECT *
14208                   FROM CZ_UI_PAGE_ELEMENTS pe1
14209                   WHERE ui_def_Id = g_UI_Context.ui_def_id
14210                   AND region_persistent_node_id = l_parent_ps_node.persistent_node_id
14211                   AND persistent_node_id = l_pred_persistent_node_id
14212                   AND deleted_flag IN (G_NO_FLAG, G_MARK_TO_ADD, G_MARK_TO_REFRESH)
14213                   AND parent_element_id IS NOT NULL
14214                   AND EXISTS ( SELECT 1
14215                                FROM CZ_UI_PAGE_ELEMENTS pe2
14216                                WHERE ui_def_Id = g_UI_Context.ui_def_id
14217                                AND pe2.page_id = pe1.page_id
14218                                AND pe2.parent_element_id = pe1.parent_element_id
14219                                AND pe2.persistent_node_id = l_succ_persistent_node_id
14220                                AND pe2.seq_nbr = pe1.seq_nbr + 1
14221                                AND deleted_flag = G_NO_FLAG
14222                  ))
14223         LOOP
14224 
14225           DEBUG('asp:Found parent with both siblings ' || i.parent_element_id);
14226           x_parent_ui_node := get_UI_Element(i.parent_element_id, i.page_id);
14227           x_atleast_one_parent_found := TRUE;
14228           IF NOT disabled_for_refresh(x_parent_ui_node) THEN
14229             x_insert_index := i.seq_nbr + 1;
14230             x_refresh_enabled_parent_found := TRUE;
14231             EXIT;
14232           END IF;
14233         END LOOP;
14234       END IF;
14235 
14236       -- Now find all regions that are bound to the parent of this PS Node and contain
14237       -- the predecessor of this node
14238 
14239 
14240       IF l_pred_persistent_node_id IS NOT NULL AND NOT x_refresh_enabled_parent_found THEN
14241         FOR i IN (SELECT *
14242                   FROM CZ_UI_PAGE_ELEMENTS pe1
14243                   WHERE ui_def_Id = g_UI_Context.ui_def_id
14244                   AND region_persistent_node_id = l_parent_ps_node.persistent_node_id
14245                   AND persistent_node_id = l_pred_persistent_node_id
14246                   AND deleted_flag IN (G_NO_FLAG, G_MARK_TO_ADD, G_MARK_TO_REFRESH)
14247                   AND parent_element_id IS NOT NULL)
14248         LOOP
14249           DEBUG('asp:Found parent with predecessor ' || i.parent_element_id || ' page_id ' || i.page_id);
14250           x_parent_ui_node := get_UI_Element(i.parent_element_id, i.page_id);
14251           x_atleast_one_parent_found := TRUE;
14252           IF NOT disabled_for_refresh(x_parent_ui_node) THEN
14253             x_insert_index := i.seq_nbr + 1;
14254             x_refresh_enabled_parent_found := TRUE;
14255             EXIT;
14256           END IF;
14257         END LOOP;
14258       END IF;
14259 
14260 
14261       -- Now find all regions that are bound to the parent of this PS Node and contain the
14262       -- successor od this node
14263 
14264       IF l_succ_persistent_node_id IS NOT NULL AND NOT x_refresh_enabled_parent_found THEN
14265 
14266         FOR i IN (SELECT *
14267                   FROM CZ_UI_PAGE_ELEMENTS pe1
14268                   WHERE ui_def_Id = g_UI_Context.ui_def_id
14269                   AND region_persistent_node_id = l_parent_ps_node.persistent_node_id
14270                   AND persistent_node_id = l_succ_persistent_node_id
14271                   AND deleted_flag = G_NO_FLAG
14272                   AND parent_element_id IS NOT NULL)
14273         LOOP
14274           DEBUG('asp:Found parent with successor ' || i.parent_element_id || ' i.seq_nbr = ' || i.seq_nbr);
14275           x_parent_ui_node := get_UI_Element(i.parent_element_id, i.page_id);
14276           x_atleast_one_parent_found := TRUE;
14277           IF NOT disabled_for_refresh(x_parent_ui_node) THEN
14278             x_insert_index := i.seq_nbr;
14279             x_refresh_enabled_parent_found := TRUE;
14280             EXIT;
14281           END IF;
14282         END LOOP;
14283 
14284       END IF;
14285 
14286 
14287       -- we still haven't managed to add UI for the node. We will now look for a region
14288       -- containing the max number of siblings of this node
14289 
14290       IF NOT x_refresh_enabled_parent_found THEN
14291 
14292         l_parent_element_id := NULL;
14293         l_page_id := NULL;
14294 
14295         FOR i IN (SELECT parent_element_id, page_id, count(parent_element_id) max_count
14296                   FROM CZ_UI_PAGE_ELEMENTS pe
14297                   WHERE ui_def_Id = g_UI_Context.ui_def_id
14298                   AND parent_persistent_node_id = l_parent_ps_node.persistent_node_id
14299                   AND pagebase_persistent_node_id <> persistent_node_id
14300                   AND deleted_flag IN (G_NO_FLAG, G_MARK_TO_ADD, G_MARK_TO_REFRESH)
14301                   AND parent_element_id IS NOT NULL
14302                   AND NOT (p_ps_node.ps_node_type <> G_BOM_OPTION_CLASS_TYPE
14303                            AND ((SELECT NVL(ps_node_type,G_UNDEFINED_DATA_TYPE)
14304                                FROM CZ_PS_NODES
14305                                WHERE devl_project_id = p_ps_node.devl_project_id
14306                                  AND persistent_node_id = pe.persistent_node_id) = G_BOM_OPTION_CLASS_TYPE))
14307                   GROUP BY parent_element_id, page_id
14308                   ORDER BY count(parent_element_id) DESC)
14309         LOOP
14310           DEBUG('asp:Found parent with max siblings ' || i.parent_element_id || ', page_id ' || i.page_id);
14311           x_parent_ui_node := get_UI_Element(i.parent_element_id, i.page_id);
14312           DEBUG('asp:Got the parent node ');
14313           x_atleast_one_parent_found := TRUE;
14314           IF NOT disabled_for_refresh(x_parent_ui_node) THEN
14315             x_insert_index := -1;
14316             x_refresh_enabled_parent_found := TRUE;
14317             EXIT;
14318           END IF;
14319         END LOOP;
14320 
14321       --DEBUG('asp:Before finding region bound to parent node ');
14322 
14323       END IF;
14324 
14325       IF NOT x_refresh_enabled_parent_found THEN
14326 
14327         FOR j IN (SELECT *
14328                   FROM CZ_UI_PAGE_ELEMENTS
14329                   WHERE ui_def_id = g_UI_Context.ui_def_id AND
14330                   persistent_node_Id = l_parent_ps_node.persistent_node_id AND
14331                   deleted_flag IN(G_NO_FLAG, G_MARK_TO_ADD, G_MARK_TO_REFRESH) AND
14332                   element_type IN(G_UI_PAGE_NODE_TYPE,G_UI_REGION_NODE_TYPE))
14333         LOOP
14334           DEBUG('asp:Found parent with no siblings ' || j.element_id);
14335           x_parent_ui_node := get_UI_Element(j.element_id, j.page_id);
14336           x_atleast_one_parent_found := TRUE;
14337           IF NOT disabled_for_refresh(x_parent_ui_node) THEN
14338             x_insert_index := -1;
14339             x_refresh_enabled_parent_found := TRUE;
14340             EXIT;
14341           END IF;
14342         END LOOP;
14343       END IF;
14344     END get_parent_ui_node;
14345 
14346 
14347     -- Determines if UI should be added for this ps node.
14348     -- Determines the place (l_parent_ui_node) under which to
14349     -- add UI for this node and add the UI if required
14350 
14351     PROCEDURE add_ui_for_node(p_ps_node IN CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE,
14352                               p_ord_siblings IN  model_nodes_tbl_type,
14353                               p_ps_node_index IN NUMBER DEFAULT NULL,
14354                               x_ui_node OUT NOCOPY CZ_UI_PAGE_ELEMENTS%ROWTYPE) IS
14355 
14356     l_parent_ps_node              CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE;
14357     l_parent_ui_node              CZ_UI_PAGE_ELEMENTS%ROWTYPE;
14358     l_temp_ui_node                CZ_UI_PAGE_ELEMENTS%ROWTYPE;
14359     l_next_level_ui_pages_tbl     ui_page_elements_tbl_type;
14360     l_insert_index                NUMBER;
14361     l_suppress_refresh_flag       CZ_UI_PAGE_ELEMENTS.suppress_refresh_flag%TYPE;
14362     l_parent_node_found           BOOLEAN;
14363     l_atleast_one_parent_found    BOOLEAN;
14364     l_nodes_tbl                   model_nodes_tbl_type;
14365     l_seq_nodes_tbl               ui_page_el_int_tbl_type; -- fix for bug 6837809 : skudryav 28-Mar-2008
14366     l_non_del_child_nodes_tbl     model_nodes_tbl_type;
14367 
14368     BEGIN
14369 
14370       l_parent_node_found := FALSE;
14371 
14372       IF p_ps_node.parent_id IS NOT NULL THEN
14373         -- Find the parent under which to add UI for this node
14374         get_parent_ui_node(p_ps_node,
14375                            p_ord_siblings,
14376                            p_ps_node_index,
14377                            l_parent_ui_node,
14378                            l_insert_index,
14379                            l_parent_node_found,
14380                            l_atleast_one_parent_found);
14381       END IF;
14382 
14383 
14384       IF l_parent_node_found OR p_ps_node.parent_id IS NULL THEN
14385           add_New_UI_Node(p_ui_node               => l_parent_ui_node,
14386                           p_insert_index          => l_insert_index,
14387                           p_model_node            => p_ps_node,
14388                           p_suppress_refresh_flag => G_NO_FLAG,
14389                           x_new_ui_pages_tbl      => l_next_level_ui_pages_tbl,
14390                           x_new_ui_node           => x_ui_node);
14391 
14392       ELSIF NOT l_atleast_one_parent_found THEN
14393 
14394         -- We did not find any parent node. So the parent was probably deleted
14395         -- Lets try and add the parent back and then add UI for this node.
14396         -- add_ui_for_ancestors_recursively(p_ps_node, l_new_ui_node);
14397 
14398         l_parent_ps_node := get_Model_Node( p_ps_node.parent_id );
14399 
14400 
14401         get_Child_Nodes(l_parent_ps_node.parent_id,
14402                         G_YES_FLAG,  -- get all the nodes
14403                         l_seq_nodes_tbl,
14404                         l_nodes_tbl,
14405                         l_non_del_child_nodes_tbl,
14406                         G_YES_FLAG);
14407 
14408         add_ui_for_node(l_parent_ps_node,
14409                         l_non_del_child_nodes_tbl,
14410                         l_parent_ps_node.tree_seq,
14411                         x_ui_node);
14412 
14413         IF x_ui_node.element_id IS NOT NULL THEN
14414 
14415           l_temp_ui_node := x_ui_node;
14416 
14417           add_New_UI_Node(p_ui_node               => l_temp_ui_node,
14418                           p_insert_index          => -1,
14419                           p_model_node            => p_ps_node,
14420                           p_suppress_refresh_flag => G_NO_FLAG,
14421                           x_new_ui_pages_tbl      => l_next_level_ui_pages_tbl,
14422                           x_new_ui_node           => x_ui_node);
14423         END IF;
14424 
14425       ELSE
14426         -- We found atleast one parent. It was probably disabled for refresh
14427         -- So we will not add any content for the new node
14428         NULL;
14429 
14430       END IF;
14431 
14432     END add_ui_for_node;
14433 
14434 
14435     PROCEDURE propogate_ps_node_remove(p_ps_node IN CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE) IS
14436 
14437       l_new_parent_persistent_id    NUMBER;
14438       l_parent_ps_node              CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE;
14439 
14440       l_parent_ui_node              CZ_UI_PAGE_ELEMENTS%ROWTYPE;
14441       l_insert_index                NUMBER;
14442       l_suppress_refresh_flag       CZ_UI_PAGE_ELEMENTS.suppress_refresh_flag%TYPE;
14443       l_parent_node_found           BOOLEAN;
14444 
14445     BEGIN
14446 
14447       l_parent_ps_node := get_Model_Node( p_ps_node.parent_id );
14448 
14449       --DEBUG('asp:Deleting UI for ps node ' || p_ps_node.name);
14450 
14451     FOR i IN (SELECT *
14452                 FROM CZ_UI_PAGE_ELEMENTS pe
14453                 WHERE ui_def_Id = g_UI_Context.ui_def_id
14454                 AND persistent_node_id = p_ps_node.persistent_node_id
14455                 AND deleted_flag = G_NO_FLAG)
14456       LOOP
14457         IF i.pagebase_persistent_node_id=i.persistent_node_id THEN -- UI page
14458               --
14459               -- delete UI page or deassociate UI page from model nodes
14460               --
14461               delete_UI_Page(i);
14462 
14463         ELSIF i.region_persistent_node_id=i.persistent_node_id AND
14464 
14465           i.pagebase_persistent_node_id<>i.persistent_node_id THEN -- UI region
14466               --
14467               -- delete UI region or deassociate UI region from model nodes
14468               --
14469               delete_UI_Region(i);
14470 
14471         ELSE -- regular UI element
14472               --
14473               -- delete UI element or deassociate UI element from model nodes
14474               --
14475         l_suppress_refresh_flag := G_NO_FLAG;
14476 
14477         IF disabled_for_refresh(i) THEN
14478           l_suppress_refresh_flag := G_YES_FLAG;
14479         END IF;
14480 
14481         --DEBUG('asp:Delete element ' || i.element_id);
14482               delete_UI_Element(i, l_suppress_refresh_flag, TRUE);
14483 
14484         END IF;
14485 
14486     END LOOP;
14487     END;
14488 
14489 
14490     PROCEDURE propogate_ps_node_move(p_ps_node IN CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE,
14491                                      p_ord_siblings IN  model_nodes_tbl_type,
14492                                      p_ps_node_index IN NUMBER DEFAULT NULL,
14493                                      x_model_ref_expl_id_changed OUT NOCOPY VARCHAR2) IS
14494 
14495       l_new_parent_persistent_id    NUMBER;
14496       l_parent_ps_node              CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE;
14497 
14498       l_parent_ui_node              CZ_UI_PAGE_ELEMENTS%ROWTYPE;
14499       l_insert_index                NUMBER;
14500       l_suppress_refresh_flag       CZ_UI_PAGE_ELEMENTS.suppress_refresh_flag%TYPE;
14501       l_parent_node_found           BOOLEAN;
14502       l_diff                        NUMBER;
14503       l_max_prev_seq_nbr            NUMBER;
14504       l_max_src_seq_nbr             NUMBER;
14505       l_src_range                   NUMBER;
14506       l_atleast_one_parent_found    BOOLEAN;
14507       l_parent_page_ref_id          CZ_UI_PAGE_REFS.page_ref_id%TYPE;
14508       l_pagebase_expl_node_id       CZ_UI_PAGES.pagebase_expl_node_id%TYPE;
14509       l_node_is_reachable           NUMBER := -1;
14510       l_model_ref_expl_id           NUMBER;
14511       l_count                       NUMBER;
14512 
14513     BEGIN
14514 
14515       x_model_ref_expl_id_changed := 'U';  -- Unknown
14516 
14517       l_parent_ps_node := get_Model_Node( p_ps_node.parent_id );
14518 
14519       IF p_ps_node.ps_node_type = G_REFERENCE_TYPE AND
14520           g_UI_Context.primary_navigation = G_MODEL_TREE_MENU AND
14521            g_UI_Context.page_set_id IS NOT NULL THEN
14522 
14523         -- This is a reference node and it has been moved. Reference nodes will not have pages
14524         -- in this UI which are in the tree. So have to deal with page_refs for references
14525         -- explicitly
14526         FOR i in (SELECT *
14527                   FROM CZ_UI_PAGE_REFS
14528                   WHERE ui_def_id = g_UI_Context.ui_def_id
14529                   AND page_set_id = g_UI_Context.page_set_id
14530                   AND target_ui_def_id IS NOT NULL
14531                   AND target_persistent_node_id = p_ps_node.persistent_node_id)
14532         LOOP
14533           move_page_ref(i.page_set_id, i.page_ref_id, p_ps_node, l_parent_page_ref_id);
14534           replace_page_ref_target_path(p_ps_node);
14535         END LOOP;
14536 
14537       END IF;
14538 
14539       FOR i IN (SELECT *
14540                 FROM CZ_UI_PAGE_ELEMENTS pe
14541                 WHERE ui_def_Id = g_UI_Context.ui_def_id
14542                 AND persistent_node_id = p_ps_node.persistent_node_id
14543                 AND region_persistent_node_id <> l_parent_ps_node.persistent_node_id
14544                 AND deleted_flag IN (G_NO_FLAG, G_MARK_TO_DELETE))
14545       LOOP
14546 
14547         l_model_ref_expl_id := get_Expl_Id(p_model_id     => p_ps_node.devl_project_id,
14548                                            p_ps_node_id   => p_ps_node.ps_node_id,
14549                                            p_component_id => p_ps_node.component_id,
14550                                            p_ps_node_type => p_ps_node.ps_node_type);
14551 
14552         -- This piece of code determines if the model_ref_expl_id of this page_element is
14553         -- different from the current explosion_id of the PS Node. If information is then
14554         -- used later to fix the explosion_ids
14555         IF x_model_ref_expl_id_changed <> G_YES_FLAG THEN
14556           IF i.model_ref_expl_id <> l_model_ref_expl_id THEN
14557             x_model_ref_expl_id_changed := G_YES_FLAG;
14558           ELSE
14559             x_model_ref_expl_id_changed := G_NO_FLAG;
14560           END IF;
14561         END IF;
14562 
14563         -- Developer writes element_type 521 (UI Region) for the root_region of a user created page
14564         -- UI Gen/ Refresh writes element_type 520 (UI Page) for the same region. So we cannot reply only
14565         -- on element_type to determine if the page element is for the root region of the page
14566         -- Hence we check for parent_element_id also
14567         IF ( (i.element_type IS NOT NULL AND i.element_type = G_UI_PAGE_NODE_TYPE) OR i.parent_element_id IS NULL ) THEN
14568 
14569           -- If the node is a page node then we dont try to move the node to another page
14570           -- but we do have to fix the path of the page and the associated page ref
14571 
14572           move_page_ref(i, p_ps_node, l_parent_page_ref_id);
14573           replace_page_ref_target_path(i, p_ps_node);
14574 
14575 
14576         ELSE
14577           --DEBUG('asp:Found UI for moved PS node ' || p_ps_node.name || ', element_id ' || i.element_id);
14578           -- Determine if this needs to be moved
14579 
14580           l_parent_node_found := FALSE;
14581 
14582           -- Find the parent under which to add UI for this node
14583           get_parent_ui_node(p_ps_node,
14584                              p_ord_siblings,
14585                              p_ps_node_index,
14586                              l_parent_ui_node,
14587                              l_insert_index,
14588                              l_parent_node_found,
14589                              l_atleast_one_parent_found);
14590 
14591           IF l_parent_node_found THEN
14592 
14593             g_tgt_pg_to_src_pg_map(l_parent_ui_node.page_id)(TO_NUMBER(i.element_id)) := i.page_id;
14594             g_elements_to_move(i.page_id)(TO_NUMBER(i.element_id)) := TO_NUMBER(i.element_id);
14595 
14596             IF l_insert_index > 0 THEN
14597               l_max_prev_seq_nbr := l_insert_index-1;
14598             ELSE
14599               SELECT NVL(MAX(seq_nbr),0) INTO l_max_prev_seq_nbr FROM CZ_UI_PAGE_ELEMENTS
14600               START WITH ui_def_id=g_UI_Context.ui_def_id AND
14601                      page_id=l_parent_ui_node.page_id AND
14602                      element_id=l_parent_ui_node.element_id AND
14603                      deleted_flag NOT IN (G_YES_FLAG, G_LIMBO_FLAG)
14604               CONNECT BY PRIOR ui_def_id=g_UI_Context.ui_def_id AND
14605                   ui_def_id=g_UI_Context.ui_def_id AND PRIOR page_id= l_parent_ui_node.page_id AND
14606                   page_id=l_parent_ui_node.page_id AND PRIOR element_id=parent_element_id AND
14607                   PRIOR deleted_flag NOT IN (G_YES_FLAG, G_LIMBO_FLAG) AND
14608                   deleted_flag NOT IN (G_YES_FLAG, G_LIMBO_FLAG);
14609 
14610                   l_insert_index  := l_max_prev_seq_nbr + 1;
14611             END IF;
14612 
14613             SELECT NVL(MAX(seq_nbr),0), NVL(COUNT(seq_nbr), 0) INTO l_max_src_seq_nbr, l_count  FROM CZ_UI_PAGE_ELEMENTS
14614             START WITH ui_def_id=g_UI_Context.ui_def_id AND
14615                        page_id=i.page_id AND
14616                        element_id=i.element_id AND
14617                        deleted_flag NOT IN (G_YES_FLAG, G_LIMBO_FLAG)
14618             CONNECT BY PRIOR ui_def_id=g_UI_Context.ui_def_id AND
14619                     ui_def_id=g_UI_Context.ui_def_id AND PRIOR page_id= i.page_id
14620                     AND page_id=i.page_id AND PRIOR element_id=parent_element_id AND
14621                     PRIOR deleted_flag NOT IN (G_YES_FLAG, G_LIMBO_FLAG) AND
14622                     deleted_flag NOT IN (G_YES_FLAG, G_LIMBO_FLAG);
14623 
14624             l_src_range := l_max_src_seq_nbr - i.seq_nbr + 1;
14625 
14626             -- move the elements after the insert point by adding the range value computed above
14627             UPDATE CZ_UI_PAGE_ELEMENTS
14628             SET seq_nbr=seq_nbr+l_src_range
14629             WHERE ui_def_id=g_UI_Context.ui_def_id AND
14630                   page_id=l_parent_ui_node.page_id AND
14631                   seq_nbr>l_max_prev_seq_nbr AND
14632                   deleted_flag NOT IN (G_YES_FLAG, G_LIMBO_FLAG);
14633 
14634             l_diff := l_insert_index - i.seq_nbr;
14635 
14636             UPDATE CZ_UI_PAGE_ELEMENTS
14637             SET seq_nbr=seq_nbr + l_diff,
14638                 page_id=l_parent_ui_node.page_id,
14639                 pagebase_persistent_node_id=l_parent_ui_node.pagebase_persistent_node_id,
14640                 deleted_flag=DECODE(deleted_flag, G_MARK_TO_DELETE, G_NO_FLAG, deleted_flag)
14641             WHERE ui_def_id=g_UI_Context.ui_def_id AND
14642                   page_id=i.page_id AND
14643                   seq_nbr >= i.seq_nbr AND
14644                   seq_nbr <= l_max_src_seq_nbr AND
14645                   deleted_flag NOT IN(G_YES_FLAG, G_LIMBO_FLAG);
14646 
14647             IF i.deleted_flag <> G_MARK_TO_DELETE THEN
14648               UPDATE CZ_UI_PAGE_ELEMENTS
14649               SET seq_nbr=seq_nbr - l_count
14650               WHERE ui_def_id=g_UI_Context.ui_def_id AND
14651                     page_id=i.page_id AND
14652                     seq_nbr > l_max_src_seq_nbr AND
14653                     deleted_flag NOT IN(G_YES_FLAG, G_LIMBO_FLAG);
14654             END IF;
14655 
14656             UPDATE CZ_UI_PAGE_ELEMENTS
14657             SET parent_element_id = l_parent_ui_node.element_id,
14658                 parent_persistent_node_id = l_parent_ps_node.persistent_node_id,
14659                 region_persistent_node_id = l_parent_ui_node.persistent_node_id,
14660                 deleted_flag = G_MARK_TO_MOVE
14661             WHERE ui_def_id = i.ui_def_id AND
14662                  page_Id = l_parent_ui_node.page_Id AND
14663                  element_id = i.element_id;
14664 
14665 
14666             mark_UI_Page_As_Refreshed(l_parent_ui_node.page_id, l_parent_ui_node.ui_def_id);
14667 
14668             -- update the page_rev_nbr of the other (source) page
14669             UPDATE CZ_UI_PAGES
14670               SET page_rev_nbr=page_rev_nbr+1
14671               WHERE page_id=i.page_id AND ui_def_id=i.ui_def_id;
14672 
14673           ELSE -- If parent_node not found
14674             -- We cannot move this node to another region since we have not found any such
14675             -- region which can hold this node
14676             -- So we will try and keep this node where it is. We will however have to
14677             -- update the model_path of this control and all controls under it.
14678             -- So lets just mark this node for refresh and let the second pass do the model_path
14679             -- update
14680 
14681 
14682 
14683             SELECT pagebase_expl_node_id INTO l_pagebase_expl_node_id
14684               FROM CZ_UI_PAGES
14685              WHERE ui_def_id=g_UI_Context.ui_def_id
14686                AND page_id = i.page_id
14687                AND deleted_flag NOT IN(G_LIMBO_FLAG,G_MARK_TO_DELETE,G_YES_FLAG);
14688 
14689 
14690             DEBUG('asp: calling in_boundary l_pagebase_expl_node_id: ' || l_pagebase_expl_node_id || ', l_model_ref_expl_id: ' || l_model_ref_expl_id || ', i.persistent_node_id' || i.persistent_node_id);
14691 
14692             l_node_is_reachable :=CZ_DEVELOPER_UTILS_PVT.in_boundary(l_pagebase_expl_node_id,
14693                                                                      l_model_ref_expl_id,
14694                                                                      i.persistent_node_id);
14695 
14696             DEBUG('asp: l_node_is_reachable = ' || l_node_is_reachable);
14697 
14698             IF l_node_is_reachable=0 THEN
14699               -- The PS node associated to this control is not reachable from the current page
14700               -- So we have to disassociate this UI controls from the PS Node
14701 
14702               DEBUG('asp: Cannot move UI for ' || p_ps_node.name || '. Disassociating from PS Node');
14703 
14704               UPDATE CZ_UI_PAGE_ELEMENTS
14705                  SET deleted_flag = G_MARK_TO_DEASSOCIATE,
14706                      persistent_node_id = 0
14707                WHERE ui_def_id = i.ui_def_id
14708                  AND page_id = i.page_id
14709                  AND element_id IN
14710                     (SELECT element_id FROM CZ_UI_PAGE_ELEMENTS
14711                      START WITH ui_def_id=i.ui_def_id
14712                      AND page_id=i.page_id
14713                      AND element_id=i.element_id
14714                      CONNECT BY PRIOR ui_def_id=i.ui_def_id AND
14715                      page_id = i.page_id AND
14716                      PRIOR element_id=parent_element_id AND
14717                         deleted_flag IN (G_NO_FLAG, G_MARK_TO_ADD, G_MARK_TO_REFRESH,G_MARK_TO_MOVE));
14718             ELSE
14719               -- Mark the node for G_MARK_TO_REFRESH so that the second pass will
14720               -- change the model_path. This may not be necessary. Marking the page for
14721               -- refresh might be enough.
14722 
14723               DEBUG('asp: Cannot move UI for ' || p_ps_node.name || '. Marking it for refresh');
14724 
14725               UPDATE CZ_UI_PAGE_ELEMENTS
14726                  SET deleted_flag = G_MARK_TO_REFRESH
14727                WHERE ui_def_id = i.ui_def_id
14728                  AND page_id = i.page_id
14729                  AND element_id = i.element_id
14730                  AND deleted_flag IN (G_NO_FLAG, G_MARK_TO_REFRESH);
14731             END IF;
14732 
14733             mark_UI_Page_As_Refreshed(i.page_id, i.ui_def_id);
14734 
14735           END IF;
14736         END IF;
14737       END LOOP;
14738     END propogate_ps_node_move;
14739 
14740     PROCEDURE propogate_ps_node_type_changes(p_ps_node IN CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE,
14741                                              x_model_ref_expl_id_changed OUT NOCOPY VARCHAR) IS
14742 
14743     l_ui_node              CZ_UI_PAGE_ELEMENTS%ROWTYPE;
14744     l_model_ref_expl_id    NUMBER;
14745 
14746     BEGIN
14747 
14748       x_model_ref_expl_id_changed := 'U'; -- Unknown
14749 
14750       l_model_ref_expl_id := get_Expl_Id(p_model_id     => p_ps_node.devl_project_id,
14751                                          p_ps_node_id   => p_ps_node.ps_node_id,
14752                                          p_component_id => p_ps_node.component_id,
14753                                          p_ps_node_type => p_ps_node.ps_node_type);
14754       FOR i IN (SELECT *
14755                 FROM CZ_UI_PAGE_ELEMENTS pe
14756                 WHERE ui_def_Id = g_UI_Context.ui_def_id
14757                 AND persistent_node_id = p_ps_node.persistent_node_id
14758                 AND deleted_flag IN (G_NO_FLAG, G_MARK_TO_MOVE))
14759       LOOP
14760 
14761 
14762         -- This piece of code determines if the model_ref_expl_id of this page_element is
14763         -- different from the current explosion_id of the PS Node. If information is then
14764         -- used later to fix the explosion_ids
14765         IF x_model_ref_expl_id_changed <> G_YES_FLAG THEN
14766           IF i.model_ref_expl_id <> l_model_ref_expl_id THEN
14767             x_model_ref_expl_id_changed := G_YES_FLAG;
14768           ELSE
14769             x_model_ref_expl_id_changed := G_NO_FLAG;
14770           END IF;
14771         END IF;
14772 
14773         l_ui_node := get_UI_Element(i.element_id, i.page_id);
14774         check_UI_Node_Changes(l_ui_node, p_ps_node);
14775 
14776       END LOOP;
14777 
14778     END propogate_ps_node_type_changes;
14779 
14780 
14781     FUNCTION ui_node_exits(p_ps_node IN CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE) RETURN BOOLEAN IS
14782 
14783     l_element_id  CZ_UI_PAGE_ELEMENTS.element_id%TYPE;
14784 
14785     BEGIN
14786 
14787       SELECT element_id into l_element_id FROM CZ_UI_PAGE_ELEMENTS
14788                     WHERE ui_def_id=g_UI_Context.ui_def_id
14789             AND persistent_node_id=p_ps_node.persistent_node_id
14790             AND deleted_flag=G_NO_FLAG and rownum < 2;
14791       -- need to return the element_id instead
14792       RETURN TRUE;
14793     EXCEPTION
14794       WHEN NO_DATA_FOUND THEN
14795         RETURN FALSE;
14796 
14797     END ui_node_exits;
14798 
14799     PROCEDURE reorder_tree_node(p_ps_node IN CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE) IS
14800 
14801       l_page_set_id   CZ_UI_PAGE_SETS.page_set_id%TYPE;
14802       l_page_ref      CZ_UI_PAGE_REFS%ROWTYPE;
14803 
14804       l_old_seq_nbr   NUMBER;
14805       l_new_seq_nbr   NUMBER;
14806       l_count         NUMBER;
14807       l_diff          NUMBER;
14808       l_range_min     NUMBER;
14809       l_range_max     NUMBER;
14810 
14811     BEGIN
14812 
14813       IF g_UI_Context.primary_navigation = G_MODEL_TREE_MENU THEN
14814         l_page_set_id := g_UI_Context.page_set_id;
14815 
14816         BEGIN
14817 
14818           SELECT min(seq_nbr), count(*) INTO l_old_seq_nbr, l_count
14819           FROM CZ_UI_PAGE_REFS
14820           WHERE ui_def_id = g_UI_Context.ui_def_id
14821           AND page_set_id = l_page_set_id
14822           AND target_persistent_node_id = p_ps_node.persistent_node_id
14823           AND deleted_flag = G_NO_FLAG;
14824 
14825           SELECT * INTO l_page_ref
14826           FROM CZ_UI_PAGE_REFS
14827           WHERE ui_def_id = g_UI_Context.ui_def_id
14828           AND page_set_id = l_page_set_id
14829           AND target_persistent_node_id = p_ps_node.persistent_node_id
14830           AND deleted_flag = G_NO_FLAG
14831           AND seq_nbr = l_old_seq_nbr
14832           AND rownum < 2;
14833 
14834           l_new_seq_nbr := get_new_page_ref_seq(p_ps_node, l_page_ref.page_set_id, l_page_ref.parent_page_ref_id);
14835 
14836           --DEBUG('asp: reordering tree node ' || p_ps_node.name || ', new seq is ' || l_new_seq_nbr);
14837 
14838           IF l_new_seq_nbr = l_old_seq_nbr THEN
14839             --DEBUG('asp: new seq_nbr same as old one');
14840             RETURN;
14841           END IF;
14842 
14843           IF l_new_seq_nbr > l_old_seq_nbr THEN
14844             l_range_max := l_new_seq_nbr - 1;
14845             l_range_min := l_old_seq_nbr + l_count;
14846             l_new_seq_nbr := l_new_seq_nbr - l_count;
14847           ELSE
14848             l_count := -l_count;
14849             l_range_min := l_new_seq_nbr;
14850             l_range_max := l_old_seq_nbr -1;
14851           END IF;
14852 
14853           --DEBUG('asp: l_range_min: ' || l_range_min || ', l_range_max ' || l_range_max);
14854 
14855           UPDATE CZ_UI_PAGE_REFS
14856           SET seq_nbr = seq_nbr - l_count
14857           WHERE ui_def_id = g_UI_Context.ui_def_id
14858           AND page_set_id = l_page_set_id
14859           AND parent_page_ref_id = l_page_ref.parent_page_ref_id
14860           AND target_persistent_node_id <> p_ps_node.persistent_node_id
14861           AND deleted_flag = G_NO_FLAG
14862           AND seq_nbr between l_range_min and l_range_max;
14863 
14864           l_diff := l_new_seq_nbr - l_old_seq_nbr;
14865 
14866           UPDATE CZ_UI_PAGE_REFS
14867           SET seq_nbr = seq_nbr + l_diff
14868           WHERE ui_def_id = g_UI_Context.ui_def_id
14869           AND page_set_id = l_page_set_id
14870           AND parent_page_ref_id = l_page_ref.parent_page_ref_id
14871           AND target_persistent_node_id = p_ps_node.persistent_node_id
14872           AND deleted_flag = G_NO_FLAG;
14873 
14874         EXCEPTION
14875           WHEN NO_DATA_FOUND THEN
14876             NULL;
14877         END;
14878 
14879       END IF;
14880 
14881     END reorder_tree_node;
14882 
14883     PROCEDURE fix_model_ref_expl_ids(p_ps_node IN CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE,
14884                                      x_model_ref_expl_changed OUT NOCOPY VARCHAR2) IS
14885       l_model_ref_expl_id NUMBER;
14886 
14887     BEGIN
14888 
14889 
14890       x_model_ref_expl_changed := 'U';
14891 
14892       l_model_ref_expl_id := get_Expl_Id(p_model_id     => p_ps_node.devl_project_id,
14893                                          p_ps_node_id   => p_ps_node.ps_node_id,
14894                                          p_component_id => p_ps_node.component_id,
14895                                          p_ps_node_type => p_ps_node.ps_node_type);
14896 
14897       FOR i in (SELECT *
14898                   FROM CZ_UI_PAGE_ELEMENTS
14899                  WHERE ui_def_id = g_UI_Context.ui_def_id
14900                    AND persistent_node_id = p_ps_node.persistent_node_id
14901                    AND deleted_flag NOT IN (G_YES_FLAG, G_LIMBO_FLAG))
14902       LOOP
14903 
14904         IF x_model_ref_expl_changed <> G_YES_FLAG THEN
14905           IF i.model_ref_expl_id <> l_model_ref_expl_id THEN
14906             x_model_ref_expl_changed := G_YES_FLAG;
14907           ELSE
14908             x_model_ref_expl_changed := G_NO_FLAG;
14909           END IF;
14910         END IF;
14911 
14912         sync_expl_ids(p_ps_node, i, l_model_ref_expl_id);
14913 
14914       END LOOP;
14915 
14916       IF x_model_ref_expl_changed = 'U' THEN
14917         x_model_ref_expl_changed := G_YES_FLAG;
14918       END IF;
14919 
14920     END fix_model_ref_expl_ids;
14921 
14922     PROCEDURE propogate_changes_to_UI(p_ps_node IN CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE,
14923                                       p_ord_siblings IN  model_nodes_tbl_type,
14924                                       p_ps_node_index IN NUMBER DEFAULT NULL,
14925                                       p_add_remove_flag IN VARCHAR2 DEFAULT G_EXISTS_FLAG,
14926                                       p_add_remove_timestamp IN DATE DEFAULT NULL,
14927                                       p_ancestor_moved IN BOOLEAN DEFAULT FALSE,
14928                                       p_model_ref_expl_changed IN VARCHAR2) IS
14929 
14930       l_added_ui                    BOOLEAN;
14931       l_removed_ui                  BOOLEAN;
14932 
14933       l_ps_node                     CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE;
14934       l_nodes_tbl                   model_nodes_tbl_type;
14935       l_seq_nodes_tbl               ui_page_el_int_tbl_type; -- fix for bug 6837809 : skudryav 28-Mar-2008
14936       l_non_del_child_nodes_tbl     model_nodes_tbl_type;
14937       l_new_ui_node                 CZ_UI_PAGE_ELEMENTS%ROWTYPE;
14938 
14939       l_timestamp_add               DATE;
14940       l_timestamp_remove            DATE;
14941       l_add_remove_flag             VARCHAR2(1);
14942       l_add_remove_timestamp        DATE;
14943       l_ps_node_index               NUMBER;
14944       l_moved_flag                  BOOLEAN;
14945       l_model_ref_expl_changed1     VARCHAR2(1) := 'U';
14946       l_model_ref_expl_changed2     VARCHAR2(1) := 'U';
14947       l_check_for_bom_table         BOOLEAN;
14948 
14949       l_bom_table_id                CZ_UI_PAGE_ELEMENTS.element_id%TYPE;
14950       l_page_id                     NUMBER;
14951 
14952       l_bom_parent_element          CZ_UI_PAGE_ELEMENTS.element_id%TYPE;
14953       l_suppress_refresh_flag       CZ_UI_PAGE_ELEMENTS.suppress_refresh_flag%TYPE;
14954 
14955     BEGIN
14956 
14957       l_added_ui := FALSE;
14958       l_removed_ui := FALSE;
14959 
14960       l_add_remove_flag := G_EXISTS_FLAG;
14961       l_add_remove_timestamp := p_add_remove_timestamp;
14962 
14963       l_timestamp_add := NVL(p_ps_node.UI_TIMESTAMP_ADD, g_UI_Context.UI_TIMESTAMP_REFRESH);
14964       l_timestamp_remove := NVL(p_ps_node.UI_TIMESTAMP_REMOVE, g_UI_Context.UI_TIMESTAMP_REFRESH);
14965 
14966       IF p_add_remove_flag = G_ADDED_FLAG THEN
14967         IF p_add_remove_timestamp > l_timestamp_add THEN
14968           l_timestamp_add := p_add_remove_timestamp;
14969         END IF;
14970       ELSIF p_add_remove_flag = G_REMOVED_FLAG THEN
14971         IF p_add_remove_timestamp > l_timestamp_remove THEN
14972           l_timestamp_remove := p_add_remove_timestamp;
14973         END IF;
14974       END IF;
14975 
14976       IF l_timestamp_add > g_UI_Context.UI_TIMESTAMP_REFRESH
14977          OR l_timestamp_remove > g_UI_Context.UI_TIMESTAMP_REFRESH THEN
14978 
14979            --DEBUG('asp:Handling PS Node ' || p_ps_node.name);
14980            --DEBUG('asp:asp:UI_TIMESTAMP_ADD ' || p_ps_node.UI_TIMESTAMP_ADD);
14981            --DEBUG('asp:UI_TIMESTAMP_REMOVE ' || p_ps_node.UI_TIMESTAMP_REMOVE);
14982            --DEBUG('asp:UI_TIMESTAMP_MOVE ' || p_ps_node.UI_TIMESTAMP_MOVE);
14983            --DEBUG('asp:UI_TIMESTAMP_CHANGETYPE ' || p_ps_node.UI_TIMESTAMP_CHANGETYPE);
14984            --DEBUG('asp:');
14985 
14986           IF l_timestamp_add > l_timestamp_remove
14987             AND p_ps_node.ui_omit <> G_YES_FLAG
14988             AND p_ps_node.deleted_flag = G_NO_FLAG THEN
14989             -- We need to add UI for this if not already present
14990             IF NOT ui_node_exits( p_ps_node ) THEN
14991               add_ui_for_node(p_ps_node, p_ord_siblings, p_ps_node_index, l_new_ui_node);
14992               l_add_remove_flag := G_ADDED_FLAG;
14993               l_add_remove_timestamp := l_timestamp_add;
14994               l_added_ui := TRUE;
14995             END IF;
14996          ELSE
14997            IF l_timestamp_remove > l_timestamp_add THEN
14998              -- We need to delete UI structure for this if present
14999              IF ui_node_exits( p_ps_node ) THEN
15000                propogate_ps_node_remove(p_ps_node);
15001                l_add_remove_flag := G_REMOVED_FLAG;
15002                l_add_remove_timestamp := l_timestamp_remove;
15003                l_removed_ui := TRUE;
15004              END IF;
15005            END IF;
15006          END IF;
15007 
15008       END IF; -- end of (ADD, REMOVE) > REFRESH
15009 
15010       -- If the UI was added, in the above code, then it would have been added in the
15011       -- a place according to the latest position of the model node and with a template
15012       -- compatible with the latest type of the model node. Hence we dont need to process
15013       -- for move or changetype events
15014       -- If the UI was deleted in the above code, there there is nothing to move or
15015       -- change type of
15016       IF p_ps_node.deleted_flag = G_NO_FLAG AND NOT ( l_added_ui OR l_removed_ui ) THEN
15017 
15018         IF NVL(p_ps_node.UI_TIMESTAMP_MOVE, g_UI_Context.UI_TIMESTAMP_REFRESH) > g_UI_Context.UI_TIMESTAMP_REFRESH THEN
15019           propogate_ps_node_move( p_ps_node, p_ord_siblings, p_ps_node_index, l_model_ref_expl_changed1 );
15020           l_moved_flag := TRUE;
15021         ELSE
15022           IF p_ancestor_moved THEN
15023             l_moved_flag := TRUE;
15024             replace_page_ref_target_path( p_ps_node );
15025           END IF;
15026           IF NVL(p_ps_node.UI_TIMESTAMP_REORDER, g_UI_Context.UI_TIMESTAMP_REFRESH) > g_UI_Context.UI_TIMESTAMP_REFRESH THEN
15027             reorder_tree_node(p_ps_node);
15028           END IF;
15029         END IF;
15030 
15031         IF NVL(p_ps_node.UI_TIMESTAMP_CHANGETYPE, g_UI_Context.UI_TIMESTAMP_REFRESH) > g_UI_Context.UI_TIMESTAMP_REFRESH THEN
15032           propogate_ps_node_type_changes( p_ps_node, l_model_ref_expl_changed2);
15033         END IF;
15034 
15035         IF l_model_ref_expl_changed1 = G_YES_FLAG OR
15036            l_model_ref_expl_changed2 = G_YES_FLAG OR
15037           (l_model_ref_expl_changed1 = 'U' AND l_model_ref_expl_changed2 = 'U' AND p_model_ref_expl_changed = G_YES_FLAG) THEN
15038 
15039             fix_model_ref_expl_ids(p_ps_node, l_model_ref_expl_changed1);
15040         ELSE
15041           l_model_ref_expl_changed1 := G_NO_FLAG;
15042         END IF;
15043       END IF;
15044 
15045       get_Child_Nodes(p_ps_node.ps_node_id,
15046                       G_YES_FLAG,  -- get all the nodes
15047                       l_seq_nodes_tbl,
15048                       l_nodes_tbl,
15049                       l_non_del_child_nodes_tbl,
15050                       G_YES_FLAG);
15051 
15052     --DEBUG('asp:Child count ' || l_seq_nodes_tbl.COUNT);
15053     IF l_seq_nodes_tbl.COUNT > 0 THEN
15054         l_ps_node_index := 0;
15055 
15056         l_check_for_bom_table := FALSE;
15057         -- If the parent node passed in to this procedure, is an BOM OC or a BOM Model
15058         -- and we did not add or remove a UI element for this BOM in this session
15059         -- then we need to check if any if a table for this OC/Model needs to be there in the UI
15060         -- based on new/ deleted Std items/ OCs
15061         IF (l_add_remove_flag = G_EXISTS_FLAG AND (p_ps_node.ps_node_type = G_BOM_OPTION_CLASS_TYPE OR
15062                  p_ps_node.ps_node_type = G_BOM_MODEL_TYPE) ) THEN
15063 
15064           l_check_for_bom_table := TRUE;
15065 
15066           BEGIN
15067             SELECT element_id, page_Id INTO l_bom_table_id, l_page_id
15068               FROM cz_ui_page_elements
15069              WHERE ui_def_Id = g_UI_Context.ui_def_id
15070                AND persistent_node_id = p_ps_node.persistent_node_id
15071                AND deleted_flag IN (G_NO_FLAG, G_MARK_TO_REFRESH)
15072                AND element_type = G_UI_BOMADDINST_NODE_TYPE
15073                AND rownum < 2;
15074           EXCEPTION
15075             WHEN NO_DATA_FOUND THEN
15076               l_bom_table_id := NULL;
15077           END;
15078         END IF;
15079 
15080         FOR i IN 1..l_seq_nodes_tbl.COUNT
15081         LOOP
15082           l_ps_node := l_seq_nodes_tbl(i);
15083           IF l_ps_node.deleted_flag = G_NO_FLAG THEN
15084             l_ps_node_index := l_ps_node_index + 1;
15085           END IF;
15086           IF( l_check_for_bom_table ) THEN
15087 
15088               -- We need to process Standard Items because we may need to add/ delete a BOM table
15089               -- if a Standard Item was added/ removed
15090               -- We go to add the table only when we have not made the decision based on a prior Standard Item/ Option Class
15091               -- or BOM Reference under this BOM. We also skip addition/ removal of the table if
15092               -- l_add_remove_flag = G_EXISTS_FLAG which implies that the BOM table for the parent was not added or removed
15093               -- in this refresh session. The G_EXISTS_FLAG is slightly misleading in the sense that it gives one the impression
15094               -- that UI Node for the Model node exists. G_EXISTS_FLAG simply means that the UI for the Model node was neither added
15095               -- nor removed during this refresh session
15096               IF( l_bom_table_id IS NOT NULL ) THEN
15097 
15098                 IF( NVL(l_ps_node.UI_TIMESTAMP_REMOVE, g_UI_Context.UI_TIMESTAMP_REFRESH) > g_UI_Context.UI_TIMESTAMP_REFRESH) THEN
15099 
15100                   -- mark the flag so that we dont do the same for other children
15101                   l_check_for_bom_table := FALSE;
15102 
15103                   IF NOT(contains_BOM_Nodes(p_ps_node.ps_node_id)) THEN
15104                       UPDATE CZ_UI_PAGE_ELEMENTS
15105                          SET deleted_flag=G_MARK_TO_DELETE
15106                        WHERE ui_def_id=g_UI_Context.ui_def_id
15107                          AND page_id = l_page_id
15108                          AND element_Id = l_bom_table_id;
15109 
15110                       mark_UI_Page_As_Refreshed(l_page_id, g_UI_Context.ui_def_id);
15111 
15112                   END IF;
15113                 END IF;
15114               ELSE
15115                 IF( NVL(l_ps_node.UI_TIMESTAMP_ADD, g_UI_Context.UI_TIMESTAMP_REFRESH) > g_UI_Context.UI_TIMESTAMP_REFRESH) THEN
15116                   IF (contains_BOM_Nodes(p_ps_node.ps_node_id)) THEN
15117                     --
15118                     -- Add bom table here
15119                     --
15120                     FOR m IN(SELECT page_id, pagebase_expl_node_id FROM CZ_UI_PAGES
15121                               WHERE ui_def_id=g_UI_Context.ui_def_id AND
15122                                     deleted_flag IN(G_NO_FLAG, G_MARK_TO_REFRESH)  AND
15123                                     persistent_node_id = p_ps_node.persistent_node_id)
15124                     LOOP
15125                       SELECT element_id, suppress_refresh_flag
15126                         INTO l_bom_parent_element, l_suppress_refresh_flag
15127                         FROM CZ_UI_PAGE_ELEMENTS
15128                        WHERE ui_def_id=g_UI_Context.ui_def_id AND page_id=m.page_id AND
15129                              parent_element_id IS NULL AND persistent_node_id=p_ps_node.persistent_node_id AND
15130                              pagebase_persistent_node_id=region_persistent_node_id AND
15131                              pagebase_persistent_node_id=p_ps_node.persistent_node_id AND
15132                              deleted_flag=G_NO_FLAG;
15133 
15134                       IF NVL(l_suppress_refresh_flag, G_NO_FLAG)=G_NO_FLAG THEN
15135                         add_BOM_Node
15136                          (p_node                        => p_ps_node,
15137                           p_page_id                     => m.page_id,
15138                           p_pagebase_expl_node_id       => m.pagebase_expl_node_id,
15139                           p_parent_element_id           => l_bom_parent_element,
15140                           p_pagebase_persistent_node_id => p_ps_node.persistent_node_id,
15141                           p_check_child_bom_nodes       => G_NO_FLAG );
15142                       END IF;
15143                     END LOOP;
15144 
15145                     -- mark the flag so that we dont do the same for other children
15146                     l_check_for_bom_table := FALSE;
15147                   END IF;
15148                 END IF;
15149               END IF;
15150           END IF;
15151 
15152           IF l_ps_node.ps_node_type NOT IN (G_OPTION_TYPE, G_BOM_STANDART_ITEM_TYPE) THEN
15153             propogate_changes_to_UI(l_ps_node, l_non_del_child_nodes_tbl, l_ps_node_index, l_add_remove_flag, l_add_remove_timestamp, l_moved_flag, l_model_ref_expl_changed1);
15154           END IF;
15155         END LOOP;
15156     END IF;
15157 
15158     END propogate_changes_to_UI;
15159 
15160 
15161     PROCEDURE refresh_UI_new(p_ui_timestamp_refresh IN DATE) IS
15162 
15163       l_root_persistent_node_id     NUMBER;
15164       l_nodes_tbl                   model_nodes_tbl_type;
15165       l_seq_nodes_tbl               ui_page_el_int_tbl_type; -- fix for bug 6837809 : skudryav 28-Mar-2008
15166       l_non_del_child_nodes_tbl     model_nodes_tbl_type;
15167       l_ui_nodes_tbl                ui_page_elements_tbl_type;
15168       l_next_level_ui_pages_tbl     ui_page_elements_tbl_type;
15169 
15170       l_ps_node                     CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE;
15171       l_empty_siblings_tbl          model_nodes_tbl_type;
15172 
15173     BEGIN
15174 
15175       -- start with the root of the model
15176       l_root_persistent_node_id := get_Root_Persistent_Node_Id();
15177       l_ps_node := get_Model_Node_By_Persist_Id(l_root_persistent_node_id,
15178                                                 g_UI_Context.devl_project_id);
15179 
15180       get_Child_Nodes(l_ps_node.ps_node_id,
15181                       G_YES_FLAG,  -- get all the nodes
15182                       l_seq_nodes_tbl,
15183                       l_nodes_tbl,
15184                       l_non_del_child_nodes_tbl,
15185                       G_YES_FLAG);
15186 
15187     --DEBUG('asp:Last UI Refresh done at ' || p_ui_timestamp_refresh);
15188       propogate_changes_to_UI(l_ps_node, l_empty_siblings_tbl, -1, G_EXISTS_FLAG, p_ui_timestamp_refresh, FALSE, G_NO_FLAG);
15189 
15190 
15191   END refresh_UI_new;
15192 
15193   --
15194   -- check for UI nodes which have AMNs from referenced models
15195   -- and if there are some such UI nodes then mark corresponding UI pages
15196   -- as MARK_TO_REFRESH
15197   --
15198   PROCEDURE check_Ref_AMNs IS
15199   BEGIN
15200 
15201     FOR upg IN(SELECT page_id,pagebase_expl_node_id,persistent_node_id FROM CZ_UI_PAGES
15202                 WHERE ui_def_id=g_UI_Context.ui_def_id AND
15203                       deleted_flag IN(G_MARK_TO_ADD, G_MARK_TO_REFRESH, G_NO_FLAG))
15204     LOOP
15205       FOR upgel IN(SELECT element_id,
15206                           model_ref_expl_id,persistent_node_id FROM CZ_UI_PAGE_ELEMENTS
15207                     WHERE ui_def_id=g_UI_Context.ui_def_id AND
15208                           page_id=upg.page_id AND
15209                           persistent_node_id IN
15210                           (SELECT psnode.persistent_node_id FROM CZ_PS_NODES psnode
15211                             WHERE psnode.devl_project_id IN
15212                                  (SELECT refexpl.component_id FROM CZ_MODEL_REF_EXPLS refexpl
15213                                    WHERE refexpl.model_id=g_UI_Context.devl_project_id AND
15214                                          refexpl.ps_node_type=G_REFERENCE_TYPE AND refexpl.deleted_flag='0') AND
15215                                  psnode.deleted_flag='0'
15216                                  AND psnode.ui_timestamp_move > NVL(g_UI_Context.ui_timestamp_refresh, g_UI_Context.creation_date)
15217                           )
15218                   )
15219       LOOP
15220         UPDATE CZ_UI_PAGES
15221            SET deleted_flag=G_MARK_TO_REFRESH
15222          WHERE ui_def_id=g_UI_Context.ui_def_id AND
15223                page_id=upg.page_id AND deleted_flag='0';
15224       END LOOP;
15225     END LOOP;
15226 
15227   END check_Ref_AMNs;
15228 
15229   --
15230   -- populate UI tables
15231   --
15232   PROCEDURE populate_UI_Structures IS
15233     l_num_if_roots              NUMBER;
15234     l_target_persistent_node_id NUMBER;
15235     l_page_set_id               NUMBER;
15236     l_page_set_type             NUMBER;
15237     l_page_ref_id               NUMBER;
15238     l_ui_timestamp_refresh      DATE;
15239   BEGIN
15240 
15241     IF NVL(g_UI_Context.suppress_refresh_flag, G_NO_FLAG)=G_YES_FLAG THEN
15242       RETURN;
15243     END IF;
15244 /*
15245     FOR i IN(SELECT ps_node_id FROM CZ_PS_NODES a
15246              WHERE devl_project_id=g_UI_Context.devl_project_id AND
15247                    ps_node_type IN(258,259,436,437) AND
15248                    deleted_flag=G_YES_FLAG AND EXISTS(SELECT NULL
15249                    FROM CZ_UI_PAGE_ELEMENTS WHERE ui_def_id=g_UI_Context.ui_def_id AND
15250                    persistent_node_id=a.persistent_node_id AND deleted_flag=G_NO_FLAG))
15251     LOOP
15252       UPDATE CZ_PS_NODES
15253          SET deleted_flag=G_YES_FLAG
15254        WHERE ps_node_id IN
15255        (SELECT ps_node_id FROM CZ_PS_NODES
15256         START WITH ps_node_id=i.ps_node_id
15257         CONNECT BY PRIOR ps_node_id=parent_id);
15258     END LOOP;
15259 
15260     FOR i IN(SELECT ps_node_id FROM CZ_PS_NODES a
15261              WHERE devl_project_id=g_UI_Context.devl_project_id AND
15262                    ps_node_type IN(258,259,436,437) AND  ui_omit=G_YES_FLAG AND
15263                    deleted_flag=G_NO_FLAG AND EXISTS(SELECT NULL
15264                    FROM CZ_UI_PAGE_ELEMENTS WHERE ui_def_id=g_UI_Context.ui_def_id AND
15265                    persistent_node_id=a.persistent_node_id AND deleted_flag=G_NO_FLAG))
15266     LOOP
15267       UPDATE CZ_PS_NODES
15268          SET deleted_flag=G_YES_FLAG
15269        WHERE ps_node_id IN
15270        (SELECT ps_node_id FROM CZ_PS_NODES
15271         START WITH ps_node_id=i.ps_node_id
15272         CONNECT BY PRIOR ps_node_id=parent_id);
15273     END LOOP;
15274 */
15275     --
15276     -- refresh all UI elements associated with root of model tree
15277     --
15278     l_ui_timestamp_refresh := g_UI_Context.UI_TIMESTAMP_REFRESH;
15279 
15280     g_using_new_UI_refresh := FALSE;
15281 
15282     IF l_ui_timestamp_refresh IS NULL THEN
15283 
15284       FOR i IN (SELECT ui_def_id, element_id,page_id, suppress_refresh_flag
15285                   FROM CZ_UI_PAGE_ELEMENTS
15286                   WHERE ui_def_id = g_UI_Context.ui_def_id AND
15287                         parent_element_id IS NULL AND
15288                         deleted_flag IN (G_NO_FLAG, G_MARK_TO_ADD, G_MARK_TO_REFRESH))
15289       LOOP
15290 
15291         refresh_UI_Subtree(p_element_id            => i.element_id,
15292                            p_page_id               => i.page_id,
15293                            p_suppress_refresh_flag => i.suppress_refresh_flag);
15294       END LOOP;
15295       handle_CXs_For_nonUINodes();
15296     ELSE
15297       g_using_new_UI_refresh := TRUE;
15298       refresh_UI_new(l_ui_timestamp_refresh);
15299       handle_CXs();
15300     END IF;
15301 
15302     handle_Deleted_Nodes(g_UI_Context.ui_def_id);
15303 
15304     -- set correct order for UI elements
15305     handle_UI_Page_Elements_Order();
15306 
15307     -- split UI Pages
15308     split_Pages();
15309 
15310     -- handle empty UI Pages
15311     handle_Empty_Pages();
15312 
15313     -- set data for Page Sets
15314     handle_Page_Flows();
15315 
15316     handle_SLMenu_Order();
15317 
15318     IF g_check_boundaries_tbl.EXISTS(g_UI_Context.ui_def_id) THEN
15319       check_Boundaries();
15320     END IF;
15321 
15322     check_Ref_AMNs();
15323   END populate_UI_Structures;
15324 
15325 
15326   PROCEDURE backup_nodes_to_move(p_page_id   IN NUMBER) IS
15327 
15328     l_node_ids_table number_tbl_type;
15329     l_id             NUMBER;
15330     l_parent_node    xmldom.DOMNode;
15331     l_node           xmldom.DOMNode;
15332 
15333   BEGIN
15334 
15335     IF g_elements_to_move.EXISTS(p_page_Id) THEN
15336       l_node_ids_table := g_elements_to_move(p_page_Id);
15337       IF l_node_ids_table.COUNT > 0 THEN
15338         l_id := l_node_ids_table.FIRST;
15339         WHILE l_id IS NOT NULL
15340         LOOP
15341           DEBUG('asp: Backing up nested element_id ' || l_id || ' on page ' || l_node_ids_table(l_id));
15342           IF g_dom_elements_tbl.EXISTS(l_id) THEN
15343             l_node := g_dom_elements_tbl(l_id);
15344             g_dom_elements_to_move(l_id) := l_node;
15345             l_parent_node:=xmldom.getParentNode(l_node);
15346             l_node:=xmldom.removeChild(l_parent_node, l_node);
15347           END IF;
15348           -- ELSE the node has already been moved
15349           l_id := l_node_ids_table.NEXT(l_id);
15350         END LOOP;
15351       END IF;
15352     END IF;
15353 
15354   END backup_nodes_to_move;
15355 
15356   --
15357   -- delete UI XML elements from UI page
15358   --
15359   PROCEDURE delete_UIXML_Elements(p_page_id   IN NUMBER,
15360                                   p_xml_doc      xmldom.DOMDocument) IS
15361 
15362     l_deleted_nodes_tbl     varchar2_tbl_type;
15363     l_node                  xmldom.DOMNode;
15364     l_out_node              xmldom.DOMNode;
15365     l_parent_node           xmldom.DOMNode;
15366     l_nodeslist             xmldom.DOMNodeList;
15367     l_length                NUMBER;
15368     l_element_id            VARCHAR2(255);
15369     l_deleted_nodes_exist      BOOLEAN := FALSE;
15370     l_deassociated_nodes_exist BOOLEAN := FALSE;
15371 
15372   BEGIN
15373 
15374     backup_nodes_to_move(p_page_id);
15375     FOR i IN(SELECT element_id,deleted_flag FROM CZ_UI_PAGE_ELEMENTS
15376              WHERE ui_def_id= g_UI_Context.ui_def_id AND
15377                    page_id=p_page_id AND
15378                    deleted_flag IN(G_MARK_TO_DELETE,G_MARK_TO_DEASSOCIATE))
15379     LOOP
15380       BEGIN
15381         l_deleted_nodes_tbl(i.element_id) := i.deleted_flag;
15382       EXCEPTION
15383         WHEN OTHERS THEN
15384           NULL;
15385       END;
15386     END LOOP;
15387 
15388     --
15389     -- here we don't need to know about hierachy of nodes
15390     -- so we just need to get list of all nodes of XML subtree
15391     --
15392     l_nodeslist := xmldom.getElementsByTagName(p_xml_doc, '*');
15393     l_length    := xmldom.getLength(l_nodeslist);
15394 
15395     --
15396     -- delete XML elements
15397     --
15398     FOR i IN 0..l_length-1
15399     LOOP
15400         l_node := xmldom.item(l_nodeslist, i);
15401         l_element_id := get_Attribute_Value(l_node, G_ID_ATTRIBUTE);
15402         BEGIN
15403           IF l_deleted_nodes_tbl.EXISTS(l_element_id) THEN
15404 
15405              IF l_deleted_nodes_tbl(l_element_id)=G_MARK_TO_DELETE THEN
15406                l_parent_node:=xmldom.getParentNode(l_node);
15407                l_out_node:=xmldom.removeChild(l_parent_node,l_node);
15408                l_deleted_nodes_exist := TRUE;
15409              ELSE -- deassociate this node
15410                set_Attribute(l_node, G_USER_ATTRIBUTE1_NAME, 'model_path=*');
15411                set_Attribute(l_node, G_USER_ATTRIBUTE2_NAME, '0');
15412                l_deassociated_nodes_exist := TRUE;
15413              END IF;
15414           END IF;
15415         EXCEPTION
15416           WHEN OTHERS THEN
15417                NULL;
15418         END;
15419     END LOOP;
15420 
15421     --
15422     -- mark elements as already deleted,
15423     -- update revision of deleted UI page
15424     --
15425     IF l_deleted_nodes_exist THEN
15426 
15427       refresh_UI_Node_Marks(p_page_id => p_page_id,
15428                             p_hmode   => G_DELETE_ELEMENTS);
15429     END IF;
15430 
15431     IF l_deassociated_nodes_exist THEN
15432       UPDATE CZ_UI_PAGE_ELEMENTS
15433          SET deleted_flag=G_NO_FLAG
15434        WHERE ui_def_id=g_UI_Context.ui_def_id AND
15435              page_id=p_page_id AND
15436              deleted_flag=G_MARK_TO_DEASSOCIATE;
15437       IF SQL%ROWCOUNT>0 THEN
15438         UPDATE CZ_UI_PAGES
15439            SET page_rev_nbr=page_rev_nbr+1
15440          WHERE page_id=p_page_id AND
15441                ui_def_id=g_UI_Context.ui_def_id;
15442       END IF;
15443     END IF;
15444   END delete_UIXML_Elements;
15445 
15446   --
15447   -- delete UI XML page
15448   --
15449   PROCEDURE delete_UIXML_Page(p_page_id   IN NUMBER,
15450                               p_jrad_doc  IN VARCHAR2) IS
15451 
15452     l_subtree_doc           xmldom.DOMDocument;
15453 
15454   BEGIN
15455     BEGIN
15456       IF g_elements_to_move.EXISTS(p_page_Id) THEN
15457         l_subtree_doc := parse_JRAD_Document(p_jrad_doc);
15458 
15459         IF xmldom.isNull(l_subtree_doc) THEN
15460            add_Error_Message(p_message_name => 'CZ_WRONG_UI_TEMPLATE',
15461                              p_token_name   => 'UI_TEMPLATE',
15462                              p_token_value  => p_jrad_doc,
15463                              p_fatal_error  => TRUE);
15464            RAISE WRONG_UI_TEMPLATE;
15465         END IF;
15466 
15467         init_Page_View_Counters(l_subtree_doc);
15468         backup_nodes_to_move(p_page_Id);
15469       ELSE
15470         l_subtree_doc := parse_JRAD_Document(p_jrad_doc);
15471         IF xmldom.isNull(l_subtree_doc) THEN
15472            add_Error_Message(p_message_name => 'CZ_WRONG_UI_TEMPLATE',
15473                              p_token_name   => 'UI_TEMPLATE',
15474                              p_token_value  => p_jrad_doc,
15475                              p_fatal_error  => TRUE);
15476            RAISE WRONG_UI_TEMPLATE;
15477         ELSE
15478           UPDATE CZ_UI_PAGE_ELEMENTS
15479              SET deleted_flag=G_MARK_TO_DELETE
15480            WHERE ui_def_id=g_UI_Context.ui_def_id AND
15481                  page_id=p_page_id AND
15482                  deleted_flag NOT IN(G_MARK_TO_DELETE,G_YES_FLAG);
15483         END IF;
15484         init_Page_View_Counters(l_subtree_doc);
15485       END IF;
15486 
15487       --
15488       -- delete JRAD XML elements that marked to be deleted
15489       --
15490       delete_UIXML_Elements(p_page_id   => p_page_id,
15491                             p_xml_doc   => l_subtree_doc);
15492 
15493     EXCEPTION
15494       WHEN OTHERS THEN
15495         DEBUG('delete_UIXML_Page() : '||SQLERRM);
15496     END;
15497 
15498     BEGIN
15499       jdr_docbuilder.deleteDocument(p_jrad_doc);
15500     EXCEPTION
15501       WHEN OTHERS THEN
15502         DEBUG('delete_UIXML_Page() : '||SQLERRM);
15503     END;
15504 
15505     --
15506     -- mark elements and page as already deleted,
15507     --
15508     refresh_UI_Node_Marks(p_page_id => p_page_id,
15509                           p_hmode   => G_DELETE_PAGE);
15510 
15511   END delete_UIXML_Page;
15512 
15513   --
15514   -- refresh CXs on UI Page
15515   --
15516   PROCEDURE refresh_CXs_On_UI_Page
15517   (p_ui_page_id     NUMBER,
15518    p_subtree_doc    xmldom.DOMDocument) IS
15519 
15520     l_node                  xmldom.DOMNode;
15521     l_parent_node           xmldom.DOMNode;
15522     l_out_node              xmldom.DOMNode;
15523     l_nodeslist             xmldom.DOMNodeList;
15524     l_length                NUMBER;
15525     l_element_id            NUMBER;
15526     l_attribute_value       VARCHAR2(32000);
15527     l_cx_elements_tbl       varchar_tbl_type;
15528     l_suppress_refresh_tbl  varchar_tbl_type;
15529     l_suppress_el_flag_tbl  varchar_tbl_type;
15530     l_delete_node           BOOLEAN := FALSE;
15531     l_deassociate_cx        BOOLEAN := FALSE;
15532     l_suppress_refresh_flag CZ_UI_PAGE_ELEMENTS.suppress_refresh_flag%TYPE;
15533 
15534   BEGIN
15535     FOR i IN(SELECT * FROM CZ_UI_PAGE_ELEMENTS
15536              WHERE ui_def_id=g_UI_Context.ui_def_id AND
15537                    page_id=p_ui_page_id AND
15538                    element_type=G_UI_CX_BUTTON_NODE_TYPE AND
15539                    deleted_flag IN(G_NO_FLAG, G_MARK_TO_REFRESH))
15540     LOOP
15541        l_element_id := TO_NUMBER(i.element_id);
15542        l_cx_elements_tbl(l_element_id) := get_CX_Button_Status(i);
15543        l_suppress_el_flag_tbl(l_element_id) := NVL(i.suppress_refresh_flag, G_NO_FLAG);
15544        -- check suppress_refresh_flag of its container
15545        l_suppress_refresh_flag := G_NO_FLAG;
15546        IF i.parent_element_id IS NOT NULL THEN
15547          BEGIN
15548            SELECT NVL(suppress_refresh_flag,G_NO_FLAG) INTO l_suppress_refresh_flag
15549              FROM CZ_UI_PAGE_ELEMENTS
15550             WHERE ui_def_id=g_UI_Context.ui_def_id AND
15551                   page_id=p_ui_page_id AND
15552                   element_id=i.parent_element_id;
15553          END;
15554        END IF;
15555        l_suppress_refresh_tbl(l_element_id) := l_suppress_refresh_flag;
15556     END LOOP;
15557 
15558     --
15559     -- here we don't need to know about hierachy of nodes
15560     -- so we just need to get list of all nodes of XML subtree
15561     --
15562     l_nodeslist := xmldom.getElementsByTagName(p_subtree_doc, '*');
15563     l_length    := xmldom.getLength(l_nodeslist);
15564 
15565     l_node := xmldom.makeNode(xmldom.getDocumentElement(p_subtree_doc));
15566 
15567     --
15568     -- scan subtree and substitute macros "%" to real values
15569     --
15570     FOR i IN 0 .. l_length - 1
15571     LOOP
15572       l_delete_node     := FALSE;
15573       l_deassociate_cx  := FALSE;
15574       l_node            := xmldom.item(l_nodeslist, i);
15575       l_attribute_value := get_Attribute_Value(l_node, G_ID_ATTRIBUTE );
15576       l_element_id := NULL;
15577       BEGIN
15578         l_element_id := TO_NUMBER(l_attribute_value);
15579         IF l_cx_elements_tbl.EXISTS(l_element_id) THEN
15580 
15581           IF l_cx_elements_tbl(l_element_id) IN (G_CX_VALID) AND
15582              l_suppress_refresh_tbl(l_element_id)=G_NO_FLAG AND
15583              l_suppress_el_flag_tbl(l_element_id)=G_NO_FLAG THEN
15584              set_Attribute(xmldom.makeElement(l_node), 'rendered', 'true');
15585           ELSIF l_cx_elements_tbl(l_element_id) IN (G_CX_INVALID) AND
15586              l_suppress_refresh_tbl(l_element_id)=G_NO_FLAG  AND
15587              l_suppress_el_flag_tbl(l_element_id)=G_NO_FLAG THEN
15588              set_Attribute(xmldom.makeElement(l_node), 'rendered', 'false');
15589           ELSIF l_cx_elements_tbl(l_element_id) IN (G_CX_MUST_BE_DELETED) THEN
15590              l_delete_node := TRUE;
15591              IF  l_suppress_refresh_tbl(l_element_id)=G_YES_FLAG  OR
15592                  l_suppress_el_flag_tbl(l_element_id)=G_YES_FLAG THEN
15593                l_deassociate_cx := TRUE;
15594              END IF;
15595           END IF;
15596         END IF;
15597       EXCEPTION
15598         WHEN OTHERS THEN
15599           NULL;
15600       END;
15601 
15602       IF l_delete_node THEN
15603         IF l_deassociate_cx THEN
15604           set_Attribute(l_node, G_USER_ATTRIBUTE1_NAME, 'model_path=*');
15605           set_Attribute(l_node, G_USER_ATTRIBUTE2_NAME, '0');
15606 
15607           UPDATE CZ_UI_PAGE_ELEMENTS
15608              SET persistent_node_id=0
15609            WHERE ui_def_id=g_UI_Context.ui_def_id AND
15610                  page_id=p_ui_page_id AND
15611                  element_id=l_attribute_value;
15612         ELSE
15613           l_parent_node:=xmldom.getParentNode(l_node);
15614           l_out_node:=xmldom.removeChild(l_parent_node,l_node);
15615           UPDATE CZ_UI_PAGE_ELEMENTS
15616              SET deleted_flag=G_YES_FLAG
15617            WHERE ui_def_id=g_UI_Context.ui_def_id AND
15618                  page_id=p_ui_page_id AND
15619                  element_id=l_attribute_value;
15620         END IF;
15621       END IF;
15622 
15623     END LOOP;
15624 
15625     UPDATE CZ_UI_PAGES
15626        SET page_rev_nbr=page_rev_nbr+1
15627     WHERE ui_def_id=g_UI_Context.ui_def_id AND
15628           page_id=p_ui_page_id;
15629 
15630   END refresh_CXs_On_UI_Page;
15631 
15632   --
15633   -- populate cache of xml nodes for a given XML page
15634   --
15635   PROCEDURE cache_UI_Page(p_xml_doc  xmldom.DOMDocument) IS
15636     l_node            xmldom.DOMNode;
15637     l_nodeslist       xmldom.DOMNodeList;
15638     l_empty_xml_node  xmldom.DOMNode;
15639     l_length          NUMBER;
15640     l_attribute_value VARCHAR2(32000);
15641 
15642   BEGIN
15643 
15644     g_page_elements_tbl.DELETE;
15645 
15646     l_nodeslist := xmldom.getElementsByTagName(p_xml_doc, '*');
15647     l_length    := xmldom.getLength(l_nodeslist);
15648 
15649     l_node := xmldom.makeNode(xmldom.getDocumentElement(p_xml_doc));
15650 
15651     l_attribute_value := get_Attribute_Value(l_node, G_ID_ATTRIBUTE);
15652 
15653     IF l_attribute_value IS NOT NULL THEN
15654       g_page_elements_tbl(l_attribute_value) := l_node;
15655     END IF;
15656 
15657     FOR i IN 0 .. l_length - 1
15658     LOOP
15659       l_node := xmldom.item(l_nodeslist, i);
15660 
15661       l_attribute_value := get_Attribute_Value(l_node, G_ID_ATTRIBUTE);
15662 
15663       IF l_attribute_value IS NOT NULL THEN
15664         g_page_elements_tbl(l_attribute_value) := l_node;
15665       END IF;
15666 
15667     END LOOP;
15668 
15669   END cache_UI_Page;
15670 
15671   --
15672   -- refresh UI XML page
15673   --
15674   PROCEDURE refresh_UIXML_Page(p_page_id IN NUMBER) IS
15675 
15676     l_subtree_doc           xmldom.DOMDocument;
15677     l_xml_root_node         xmldom.DOMNode;
15678     l_xml_uicontent_node    xmldom.DOMNode;
15679     l_xml_node_to_refresh   xmldom.DOMNode;
15680     l_page_ui_node          CZ_UI_PAGE_ELEMENTS%ROWTYPE;
15681     l_jrad_doc              CZ_UI_TEMPLATES.jrad_doc%TYPE;
15682     l_col_number            NUMBER := 0;
15683 
15684     PROCEDURE create_Next_XML_Level(p_ui_node               CZ_UI_PAGE_ELEMENTS%ROWTYPE,
15685                                     p_parent_xml_node    xmldom.DOMNode) IS
15686 
15687       l_new_xml_node         xmldom.DOMNode;
15688       l_new_opt_xml_node     xmldom.DOMNode;
15689       l_xml_node_to_replace  xmldom.DOMNode;
15690       l_opt_model_node       CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE;
15691       l_element_type         NUMBER;
15692 
15693     BEGIN
15694       --
15695       -- get child UI nodes
15696       --
15697       FOR i IN (SELECT *
15698                   FROM CZ_UI_PAGE_ELEMENTS a
15699                  WHERE ui_def_id =  g_UI_Context.ui_def_id AND
15700                        page_id = p_page_id AND
15701                        parent_element_id = p_ui_node.element_id
15702                        -- parent_persistent_node_id = p_ui_node.persistent_node_id
15703                  ORDER BY seq_nbr)
15704       LOOP
15705         IF i.deleted_flag IN(G_MARK_TO_ADD,G_MARK_DO_NOT_REFRESH) THEN
15706           IF p_ui_node.element_type IN(G_UI_PAGE_NODE_TYPE,G_UI_REGION_NODE_TYPE) AND
15707              NOT(NVL(p_ui_node.instantiable_flag, G_MANDATORY_INST_TYPE) IN(G_OPTIONAL_INST_TYPE,G_MINMAX_INST_TYPE) AND
15708                  p_ui_node.element_type=G_UI_REGION_NODE_TYPE) THEN
15709 
15710             IF i.element_type=G_UI_REGION_NODE_TYPE THEN -- this a region
15711 
15712               --
15713               -- create new JRAD region
15714               --
15715               l_new_xml_node := create_UIXML_Region(p_ui_node         => i,
15716                                                     p_parent_xml_node => p_parent_xml_node);
15717 
15718             ELSE -- this is regular UI element
15719 
15720               --
15721               -- create new JRAD element
15722               --
15723               l_new_xml_node := create_UIXML_Element(p_ui_node         => i,
15724                                                      p_parent_xml_node => p_parent_xml_node);
15725 
15726             END IF; -- end of  IF i.element_type=G_UI_REGION_NODE_TYPE ...
15727 
15728           ELSE -- p_ui_node is not a UI container
15729             -- CXs can be attached to Options/BOM Standart Items
15730             IF i.element_type=G_UI_CX_BUTTON_NODE_TYPE THEN
15731               l_opt_model_node := get_Model_Node_By_Persist_Id(i.persistent_node_id, g_UI_Context.devl_project_id);
15732               IF l_opt_model_node.ps_node_type IN(G_OPTION_TYPE) THEN
15733                 l_new_xml_node := create_UIXML_Element(p_ui_node         => i,
15734                                                        p_parent_xml_node => xmldom.getParentNode(p_parent_xml_node));
15735 
15736               END IF;
15737             END IF;
15738           END IF; -- end of IF p_ui_node.element_type IN(G_UI_PAGE_NODE_TYPE,G_UI_REGION_NODE_TYPE) ...
15739 
15740        ELSIF i.deleted_flag IN(G_MARK_TO_REFRESH) THEN
15741 
15742           l_xml_node_to_replace := find_XML_Node_By_Attribute(p_subtree_doc     => l_subtree_doc ,
15743                                                               p_attribute_name  => G_ID_ATTRIBUTE,
15744                                                               p_attribute_value => i.element_id);
15745 
15746           IF NOT(xmldom.isNull(l_xml_node_to_replace)) THEN
15747 
15748             --
15749             -- create new JRAD element
15750             --
15751             l_new_xml_node := replace_UIXML_Element(p_ui_node             => i,
15752                                                     p_parent_xml_node     => p_parent_xml_node,
15753                                                     p_xml_node_to_replace => l_xml_node_to_replace);
15754           END IF;
15755 
15756        ELSIF i.deleted_flag = G_MARK_TO_MOVE THEN
15757          l_new_xml_node := move_XML_Node(p_ui_node         => i,
15758                                          p_parent_xml_node => p_parent_xml_node);
15759 
15760        ELSIF i.deleted_flag IN(G_YES_FLAG, G_LIMBO_FLAG) THEN
15761          NULL; -- do not refresh deleted UI nodes
15762 
15763        ELSE
15764          l_new_xml_node := find_XML_Node_By_Attribute(p_subtree_doc     => l_subtree_doc ,
15765                                                      p_attribute_name  => G_ID_ATTRIBUTE,
15766                                                      p_attribute_value => i.element_id);
15767        END IF;
15768 
15769        create_Next_XML_Level(i, l_new_xml_node);
15770 
15771       END LOOP;
15772 
15773     END create_Next_XML_Level;
15774 
15775     PROCEDURE refresh_UI_Node(p_page_ui_node    CZ_UI_PAGE_ELEMENTS%ROWTYPE,
15776                               p_xml_parent_node xmldom.DOMNode) IS
15777 
15778       l_xml_node_to_replace xmldom.DOMNode;
15779       l_new_xml_node         xmldom.DOMNode;
15780 
15781     BEGIN
15782 
15783       FOR i IN(SELECT * FROM CZ_UI_PAGE_ELEMENTS
15784                 WHERE ui_def_id=p_page_ui_node.ui_def_id
15785                       AND parent_element_id=p_page_ui_node.element_id
15786                       AND persistent_node_id=p_page_ui_node.persistent_node_id
15787                       AND (element_type IS NULL OR element_type <> G_UI_CX_BUTTON_NODE_TYPE)
15788                       AND deleted_flag IN(G_MARK_TO_ADD,G_MARK_TO_REFRESH))
15789       LOOP
15790         IF i.deleted_flag=G_MARK_TO_REFRESH THEN
15791           BEGIN
15792             l_xml_node_to_replace := find_XML_Node_By_Attribute(p_subtree_doc     => l_subtree_doc,
15793                                                                 p_attribute_name  => G_ID_ATTRIBUTE,
15794                                                                 p_attribute_value => i.element_id);
15795 
15796 
15797             IF NOT(xmldom.isNull(l_xml_node_to_replace)) THEN
15798                --
15799                -- create new JRAD element
15800                --
15801                l_xml_uicontent_node := replace_UIXML_Element(p_ui_node             => i,
15802                                                              p_parent_xml_node     => p_xml_parent_node,
15803                                                              p_xml_node_to_replace => l_xml_node_to_replace);
15804             END IF;
15805 
15806            EXCEPTION
15807             WHEN OTHERS THEN
15808               --
15809               -- this is not critical error message
15810               --
15811               DEBUG('refresh_UIXML_Page() : '||SQLERRM);
15812               RAISE;
15813           END;
15814 
15815          END IF;
15816       END LOOP;
15817     END refresh_UI_Node;
15818 
15819   BEGIN
15820 
15821     -- first delete the cache of dom elements
15822   g_dom_elements_tbl.DELETE;
15823 
15824     SELECT *
15825       INTO l_page_ui_node
15826       FROM CZ_UI_PAGE_ELEMENTS
15827      WHERE ui_def_id =  g_UI_Context.ui_def_id AND
15828            page_id = p_page_id AND
15829            parent_element_id IS NULL AND
15830            -- element_type=G_UI_PAGE_NODE_TYPE AND
15831            deleted_flag IN(G_NO_FLAG, G_MARK_TO_ADD, G_MARK_TO_REFRESH);
15832 
15833     IF l_page_ui_node.ctrl_template_id IN(G_2COLS_CONTAINER_TEMPLATE_ID,
15834                                           G_3COLS_CONTAINER_TEMPLATE_ID) THEN
15835 
15836       IF l_page_ui_node.ctrl_template_id = G_2COLS_CONTAINER_TEMPLATE_ID THEN
15837         IF g_Num_Elements_On_Page <= g_Elements_Per_Column THEN
15838           l_col_number := 1;
15839         ELSE
15840           l_col_number :=2;
15841         END IF;
15842       END IF;
15843 
15844       IF l_page_ui_node.ctrl_template_id = G_3COLS_CONTAINER_TEMPLATE_ID THEN
15845         IF g_Num_Elements_On_Page <= g_Elements_Per_Column THEN
15846           l_col_number := 1;
15847         ELSIF g_Num_Elements_On_Page > g_Elements_Per_Column AND
15848               g_Num_Elements_On_Page <= 2*g_Elements_Per_Column THEN
15849           l_col_number := 2;
15850         ELSE
15851           l_col_number := 3;
15852         END IF;
15853       END IF;
15854     ELSE
15855       l_col_number := 0;
15856     END IF;
15857 
15858     SELECT jrad_doc INTO l_jrad_doc
15859       FROM CZ_UI_PAGES
15860      WHERE ui_def_id= g_UI_Context.ui_def_id AND
15861            page_id=p_page_id;
15862 
15863     --
15864     -- parse document(template) which is going to be nested element
15865     --
15866     l_subtree_doc := parse_JRAD_Document(l_jrad_doc);
15867 
15868     --
15869     -- cache xml nodes of this UI page
15870     --
15871     cache_UI_Page(l_subtree_doc);
15872 
15873     IF xmldom.isNull(l_subtree_doc) THEN
15874        add_Error_Message(p_message_name => 'CZ_WRONG_UI_TEMPLATE',
15875                          p_token_name   => 'UI_TEMPLATE',
15876                          p_token_value  => l_jrad_doc,
15877                          p_fatal_error  => TRUE);
15878        RAISE WRONG_UI_TEMPLATE;
15879     END IF;
15880 
15881     init_Page_View_Counters(l_subtree_doc);
15882 
15883     --
15884     -- delete JRAD XML elements that marked to be deleted
15885     --
15886     delete_UIXML_Elements(p_page_id   => p_page_id,
15887                           p_xml_doc   => l_subtree_doc);
15888 
15889     --
15890     -- get subdocument's root node
15891     --
15892     l_xml_root_node := xmldom.makeNode(xmldom.getDocumentElement(l_subtree_doc));
15893 
15894     IF l_col_number = 0 THEN
15895       l_xml_uicontent_node := getUIContents(l_xml_root_node);
15896     ELSE
15897       l_xml_uicontent_node := get_Col_UIContents(l_xml_root_node, l_col_number);
15898     END IF;
15899 
15900     refresh_UI_Node(l_page_ui_node, l_xml_uicontent_node);
15901 
15902     create_Next_XML_Level(l_page_ui_node,
15903                           l_xml_uicontent_node);
15904     --
15905     -- refresh CXs on the current UI page
15906     --
15907     refresh_CXs_On_UI_Page(p_ui_page_id   => p_page_id ,
15908                            p_subtree_doc  => l_subtree_doc);
15909 
15910     refresh_All_Model_Paths(l_subtree_doc, p_page_id);
15911 
15912     --
15913     -- save XML page in JRAD repository
15914     --
15915     Save_Document(l_subtree_doc, l_jrad_doc);
15916 
15917     --
15918     -- mark elements and page as already refreshed
15919     --
15920     refresh_UI_Node_Marks(p_page_id => p_page_id,
15921                           p_hmode   => G_REFRESH_PAGE);
15922 
15923   END refresh_UIXML_Page;
15924 
15925   --
15926   -- create UI XML page
15927   --
15928   PROCEDURE create_UIXML_Page(p_page_id   IN NUMBER,
15929                               p_jrad_doc  IN VARCHAR2) IS
15930 
15931     l_subtree_doc        xmldom.DOMDocument;
15932     l_xml_root_node      xmldom.DOMNode;
15933     l_xml_uicontent_node xmldom.DOMNode;
15934     l_page_ui_node       CZ_UI_PAGE_ELEMENTS%ROWTYPE;
15935     l_jrad_doc           CZ_UI_TEMPLATES.jrad_doc%TYPE;
15936     l_sub_element_id     CZ_UI_PAGE_ELEMENTS.element_id%TYPE;
15937     l_curr_element_id    CZ_UI_PAGE_ELEMENTS.element_id%TYPE;
15938     l_child_nodes_tbl    xmldom.DOMNodeList;
15939     l_xml_node           xmldom.DOMNode;
15940     l_length             NUMBER;
15941     l_col_number         NUMBER;
15942 
15943     PROCEDURE create_Next_XML_Level(p_element_id         NUMBER,
15944                                     p_parent_xml_node    xmldom.DOMNode) IS
15945       l_new_xml_node  xmldom.DOMNode;
15946     BEGIN
15947 
15948       --
15949       -- get child UI nodes
15950       --
15951       FOR i IN (SELECT *
15952                   FROM CZ_UI_PAGE_ELEMENTS
15953                  WHERE ui_def_id =  g_UI_Context.ui_def_id AND
15954                        page_id = p_page_id AND
15955                        parent_element_id = p_element_id AND
15956                        ctrl_template_id IS NOT NULL AND
15957                        deleted_flag IN(G_MARK_TO_ADD,G_MARK_DO_NOT_REFRESH,G_MARK_TO_MOVE)
15958                  ORDER BY seq_nbr)
15959       LOOP
15960         IF i.deleted_Flag = G_MARK_TO_MOVE THEN
15961           l_new_xml_node := move_XML_Node(p_ui_node         => i,
15962                                           p_parent_xml_node => p_parent_xml_node);
15963         ELSE
15964           IF i.element_type=G_UI_REGION_NODE_TYPE THEN -- this a region
15965 
15966             IF g_UI_Context.control_layout=1 THEN
15967               IF i.seq_nbr <= g_Elements_Per_Column THEN
15968                 l_col_number := 1;
15969               ELSE
15970                 l_col_number := 2;
15971               END IF;
15972             END IF;
15973 
15974             IF g_UI_Context.control_layout=2 THEN
15975               IF i.seq_nbr <= g_Elements_Per_Column THEN
15976                 l_col_number := 1;
15977               ELSIF i.seq_nbr > g_Elements_Per_Column AND
15978                     i.seq_nbr <= 2*g_Elements_Per_Column THEN
15979                 l_col_number := 2;
15980               ELSE
15981                 l_col_number := 3;
15982               END IF;
15983             END IF;
15984 
15985             IF i.parent_element_id=l_page_ui_node.element_id AND l_col_number>1 THEN
15986               l_new_xml_node := create_UIXML_Region(p_ui_node         => i,
15987                                                     p_parent_xml_node => get_Col_UIContents(l_xml_root_node, l_col_number));
15988             ELSE
15989               l_new_xml_node := create_UIXML_Region(p_ui_node         => i,
15990                                                     p_parent_xml_node => p_parent_xml_node);
15991             END IF;
15992 
15993           ELSE -- this is regular UI element
15994 
15995             IF g_UI_Context.control_layout=1 THEN
15996               IF i.seq_nbr <= g_Elements_Per_Column THEN
15997                 l_col_number := 1;
15998               ELSE
15999                 l_col_number :=2;
16000               END IF;
16001             END IF;
16002 
16003             IF g_UI_Context.control_layout=2 THEN
16004               IF i.seq_nbr <= g_Elements_Per_Column THEN
16005                 l_col_number := 1;
16006               ELSIF i.seq_nbr > g_Elements_Per_Column AND
16007                     i.seq_nbr <= 2*g_Elements_Per_Column THEN
16008                 l_col_number := 2;
16009               ELSE
16010                 l_col_number := 3;
16011               END IF;
16012             END IF;
16013 
16014              IF i.parent_element_id=l_page_ui_node.element_id AND l_col_number>1 THEN
16015 
16016                l_new_xml_node := create_UIXML_Element(p_ui_node         => i,
16017                                                       p_parent_xml_node => get_Col_UIContents(l_xml_root_node, l_col_number));
16018              ELSE
16019 
16020                l_new_xml_node := create_UIXML_Element(p_ui_node         => i,
16021                                                       p_parent_xml_node => p_parent_xml_node);
16022              END IF;
16023           END IF;
16024         END IF;
16025 
16026         create_Next_XML_Level(i.element_id, l_new_xml_node);
16027 
16028       END LOOP;
16029 
16030     END create_Next_XML_Level;
16031 
16032   BEGIN
16033 
16034     init_Page_View_Counters();
16035 
16036     l_col_number := 0;
16037 
16038     IF g_UI_Context.control_layout IN(1,2) THEN
16039       l_col_number := 1;
16040     END IF;
16041 
16042     SELECT *
16043       INTO l_page_ui_node
16044       FROM CZ_UI_PAGE_ELEMENTS
16045      WHERE ui_def_id =  g_UI_Context.ui_def_id AND
16046            page_id = p_page_id AND
16047            persistent_node_id = pagebase_persistent_node_id AND
16048            parent_element_id IS NULL AND
16049            element_type=G_UI_PAGE_NODE_TYPE AND
16050            deleted_flag = G_MARK_TO_ADD;
16051 
16052     l_jrad_doc := get_JRAD_Name(p_template_id => l_page_ui_node.ctrl_template_id);
16053 
16054     --
16055     -- parse document(template) which is going to be nested element
16056     --
16057     l_subtree_doc := parse_JRAD_Document(l_jrad_doc);
16058 
16059     IF xmldom.isNull(l_subtree_doc) THEN
16060       add_Error_Message(p_message_name => 'CZ_WRONG_UI_TEMPLATE',
16061                         p_token_name   => 'UI_TEMPLATE',
16062                         p_token_value  => l_jrad_doc,
16063                         p_fatal_error  => TRUE);
16064        RAISE WRONG_UI_TEMPLATE;
16065     END IF;
16066 
16067     --
16068     -- get subdocument's root node
16069     --
16070     l_xml_root_node := xmldom.makeNode(xmldom.getDocumentElement(l_subtree_doc));
16071 
16072     --
16073     -- remove common attributes of container and subtree
16074     --
16075     remove_TopLevel_Attributes(l_xml_root_node);
16076 
16077     --
16078     -- set Attributes for this subtree = Template
16079     --
16080     set_Template_Attributes(p_xml_root_node => l_xml_root_node,
16081                             p_ui_node       => l_page_ui_node);
16082 
16083     IF g_UI_Context.control_layout=0 THEN
16084       l_xml_uicontent_node := getUIContents(l_xml_root_node);
16085     ELSE
16086       l_xml_uicontent_node := get_Col_UIContents(l_xml_root_node, 1);
16087     END IF;
16088 
16089     l_child_nodes_tbl := xmldom.getElementsByTagName(l_subtree_doc, '*');
16090 
16091     --
16092     -- we need to get length of array of child nodes
16093     -- to go through the array in loop
16094     --
16095     l_length := xmldom.getLength(l_child_nodes_tbl);
16096     FOR k IN 0..l_length-1
16097     LOOP
16098       l_xml_node := xmldom.item(l_child_nodes_tbl, k);
16099 
16100       l_curr_element_id := get_Attribute_Value(l_xml_node,
16101                                                G_ID_ATTRIBUTE);
16102       IF l_curr_element_id IS NOT NULL AND k > 0 THEN
16103         l_sub_element_id := get_Element_Id();
16104 
16105         --
16106         -- set JRAD id of element
16107         --
16108         set_Attribute(l_xml_node,
16109                     G_ID_ATTRIBUTE,
16110                     REPLACE(REPLACE(l_curr_element_id||'_'||l_sub_element_id,'_czt','_czn'),'_czc','_czn'));
16111        END IF;
16112     END LOOP;
16113 
16114     create_Next_XML_Level(l_page_ui_node.element_id,
16115                           l_xml_uicontent_node);
16116 
16117     --
16118     -- save XML page in JRAD repository
16119     --
16120     Save_Document(l_subtree_doc, p_jrad_doc);
16121 
16122     --
16123     -- update page status and page_rev_nbr
16124     -- page_rev_nbr=1 because this is first creation
16125     -- mark elements and page as already refreshed
16126     --
16127     refresh_UI_Node_Marks(p_page_id => p_page_id,
16128                           p_hmode   => G_NEW_PAGE);
16129 
16130   END create_UIXML_Page;
16131 
16132   --
16133   -- handle UI XML pages of given UI
16134   -- handle_JRAD_Pages() is called from procedure construct_Single_UI()
16135   --
16136   PROCEDURE handle_JRAD_Page(p_page_id       IN NUMBER,
16137                              p_page_jrad_doc IN VARCHAR2,
16138                              p_page_status   IN VARCHAR2) IS
16139 
16140     l_num_elements_on_page NUMBER;
16141 
16142   BEGIN
16143 
16144     IF g_UI_Context.control_layout IN(1,2) THEN
16145       SELECT COUNT(element_id) INTO g_Num_Elements_On_Page
16146       FROM CZ_UI_PAGE_ELEMENTS
16147       WHERE ui_def_id=g_UI_Context.ui_def_id AND
16148             page_id=p_page_id AND
16149             (element_type IS NULL OR ctrl_template_id IS NOT NULL) AND
16150             deleted_flag NOT IN(G_YES_FLAG,G_MARK_TO_DELETE);
16151      g_Elements_Per_Column := FLOOR(g_Num_Elements_On_Page/(g_UI_Context.control_layout+1));
16152     END IF;
16153 
16154     --
16155     -- delete JRAD document associated with the page
16156     --
16157     IF p_page_status = G_MARK_TO_DELETE THEN
16158       delete_UIXML_Page(p_page_id, p_page_jrad_doc);
16159     END IF;
16160 
16161     --
16162     -- create JRAD page
16163     --
16164     IF p_page_status = G_MARK_TO_ADD THEN
16165       create_UIXML_Page(p_page_id, p_page_jrad_doc);
16166       --
16167       -- translate the current JRAD page
16168       --
16169       translate_JRAD_Doc(p_page_jrad_doc);
16170     END IF;
16171 
16172     --
16173     -- refresh JRAD page
16174     --
16175     IF p_page_status = G_MARK_TO_REFRESH THEN
16176 
16177       refresh_UIXML_Page(p_page_id);
16178       --
16179       -- translate the current JRAD page
16180       --
16181       translate_JRAD_Doc(p_page_jrad_doc);
16182     END IF;
16183 
16184   END handle_JRAD_Page;
16185 
16186   --
16187   -- handle UI XML pages of given UI
16188   -- handle_JRAD_Pages() is called from procedure construct_Single_UI()
16189   --
16190   PROCEDURE handle_JRAD_Pages IS
16191   BEGIN
16192     FOR i IN (SELECT page_id, jrad_doc, deleted_flag
16193                 FROM CZ_UI_PAGES
16194                WHERE ui_def_id = g_UI_Context.ui_def_id AND
16195                      deleted_flag <> G_YES_FLAG)
16196     LOOP
16197       IF i.deleted_flag IN(G_MARK_TO_DELETE,G_MARK_TO_ADD,
16198                            G_MARK_TO_REFRESH,G_MARK_TO_DEASSOCIATE) THEN
16199         --
16200         -- handle the current JRAD page
16201         --
16202         handle_JRAD_Page(p_page_id       => i.page_id,
16203                          p_page_jrad_doc => i.jrad_doc,
16204                          p_page_status   => i.deleted_flag);
16205       ELSE
16206         FOR n IN(SELECT G_YES_FLAG FROM CZ_UI_PAGE_ELEMENTS
16207                  WHERE ui_def_id=g_UI_Context.ui_def_id AND page_id=i.page_id AND
16208                        element_type=G_UI_CX_BUTTON_NODE_TYPE AND
16209                        deleted_flag=G_NO_FLAG AND rownum<2)
16210         LOOP
16211           --
16212           -- handle the current JRAD page
16213           --
16214           handle_JRAD_Page(p_page_id       => i.page_id,
16215                            p_page_jrad_doc => i.jrad_doc,
16216                            p_page_status   => G_MARK_TO_REFRESH);
16217 
16218          END LOOP;
16219       END IF;
16220     END LOOP;
16221   END handle_JRAD_Pages;
16222 
16223   -- Check if a PIR's target page reachable
16224   -- p_pagebase_expl_id,p_node_expl_id and p_node_persistent_id are a PIR element's
16225   -- pagebase_expl_id, model_ref_expl_id and persistent_node_id
16226   -- p_ui_def_id parent ui if the PIR's AMN is the child model's root node, child ui otherwise
16227   FUNCTION target_page_reachable(p_pagebase_expl_id IN NUMBER,
16228                                  p_node_expl_id IN NUMBER,
16229                                  p_node_persistent_id IN NUMBER,
16230                                  p_ui_def_id IN NUMBER)
16231       RETURN BOOLEAN
16232   IS
16233     l_instantiable_flag cz_ps_nodes.INSTANTIABLE_FLAG%TYPE;
16234   BEGIN
16235     IF CZ_DEVELOPER_UTILS_PVT.in_boundary
16236           (p_pagebase_expl_id, p_node_expl_id, p_node_persistent_id) = 0 THEN
16237       RETURN FALSE;
16238     ELSE
16239       SELECT instantiable_flag INTO l_instantiable_flag
16240       FROM cz_ps_nodes
16241       WHERE devl_project_id = (SELECT devl_project_id FROM cz_ui_defs
16242                                WHERE ui_def_id = p_ui_def_id) AND
16243                                      persistent_node_id = p_node_persistent_id;
16244       RETURN (l_instantiable_flag IS NULL OR
16245               l_instantiable_flag NOT IN (G_OPTIONAL_INST_TYPE, G_MINMAX_INST_TYPE));
16246     END IF;
16247   END target_page_reachable;
16248 
16249   FUNCTION get_page_name(p_ui_def_id IN NUMBER, p_page_id IN NUMBER)
16250         RETURN VARCHAR2
16251   IS
16252     l_name CZ_UI_PAGES.NAME%TYPE;
16253   BEGIN
16254     SELECT NVL(name, to_char(page_id)) INTO l_name
16255     FROM cz_ui_pages
16256     WHERE ui_def_id = p_ui_def_id AND page_id = p_page_id;
16257     RETURN l_name;
16258   END get_page_name;
16259 
16260   PROCEDURE handle_page_include_regions
16261   IS
16262     l_ui_def_map             number_tbl_type;
16263     l_ui_def_id              NUMBER;
16264     l_pagebase_expl_id       NUMBER;
16265     l_xmldoc                 xmldom.DOMDocument;
16266     l_dom_node               xmldom.DOMNode;
16267     l_current_relative_path  VARCHAR2(32000);
16268     l_new_relative_path      VARCHAR2(32000);
16269     l_flag                   INTEGER;
16270     l_resave_doc_flag        INTEGER;
16271     l_target_persistent_node_id  NUMBER;
16272 
16273     FUNCTION get_ui_name(p_ui_def_id IN NUMBER)
16274         RETURN VARCHAR2 IS
16275       l_name CZ_UI_DEFS.NAME%TYPE;
16276     BEGIN
16277       SELECT name INTO l_name
16278       FROM cz_ui_defs
16279       WHERE ui_def_id = p_ui_def_id;
16280       RETURN l_name;
16281     END;
16282 
16283     FUNCTION get_model_name(p_ui_def_id IN NUMBER)
16284         RETURN VARCHAR2 IS
16285       l_name CZ_DEVL_PROJECTS.NAME%TYPE;
16286     BEGIN
16287       SELECT name INTO l_name
16288       FROM cz_devl_projects
16289       WHERE devl_project_id = (SELECT devl_project_id FROM cz_ui_defs
16290                                WHERE ui_def_id = p_ui_def_id);
16291       RETURN l_name;
16292     END;
16293 
16294     PROCEDURE remove_target_page(p_ui_def_id IN NUMBER
16295                                 ,p_page_id IN NUMBER
16296                                 ,p_element_id IN VARCHAR2)
16297     IS
16298     BEGIN
16299       UPDATE CZ_UI_PAGE_ELEMENTS
16300          SET target_page_ui_def_id = NULL, target_page_id = NULL
16301        WHERE ui_def_id = p_ui_def_id AND
16302              page_id = p_page_id AND element_id = p_element_id;
16303 
16304       UPDATE CZ_UI_PAGES
16305          SET page_rev_nbr = page_rev_nbr + 1
16306        WHERE ui_def_id = p_ui_def_id AND page_id = p_page_id;
16307     END remove_target_page;
16308 
16309   BEGIN
16310 
16311     --
16312     -- Find all Page Include Regions of current UI
16313     --
16314     FOR i IN (SELECT page_id, element_id, target_page_ui_def_id, target_page_id,
16315                      model_ref_expl_id, persistent_node_id, name
16316               FROM CZ_UI_PAGE_ELEMENTS
16317               WHERE ui_def_id = g_UI_Context.ui_def_id AND
16318                     element_signature_id = G_PAGE_INCL_REGION_SIGNATURE AND
16319                     target_page_ui_def_id IS NOT NULL AND target_page_id IS NOT NULL AND
16320                     deleted_flag = G_NO_FLAG)
16321     LOOP
16322       -- target page exists ?
16323       l_target_persistent_node_id := NULL;
16324       BEGIN
16325         SELECT persistent_node_id INTO l_target_persistent_node_id
16326         FROM   cz_ui_pages
16327         WHERE  ui_def_id = i.target_page_ui_def_id AND
16328                page_id = i.target_page_id AND deleted_flag = G_NO_FLAG;
16329       EXCEPTION
16330         -- target page not exist
16331         WHEN NO_DATA_FOUND THEN
16332           -- l_target_persistent_node_id := NULL;
16333           remove_target_page(g_UI_Context.ui_def_id, i.page_id, i.element_id);
16334           add_Error_Message(p_message_name => 'CZ_UIGEN_TARGET_PAGE_NOT_EXIST',
16335                             p_token_name1  => 'REGION_NAME',
16336                             p_token_value1 => NVL(i.NAME, i.element_id),
16337                             p_token_name2  => 'PAGE_NAME',
16338                             p_token_value2 => get_page_name(g_UI_Context.ui_def_id,i.page_id),
16339                             p_fatal_error  => FALSE);
16340       END;
16341 
16342       -- target page exists. is it reachable ?
16343       IF l_target_persistent_node_id IS NOT NULL THEN
16344         SELECT  pagebase_expl_node_id INTO l_pagebase_expl_id
16345         FROM   cz_ui_pages
16346         WHERE  ui_def_id = g_UI_Context.ui_def_id AND
16347                page_id = i.page_id;
16348 
16349         IF i.persistent_node_id = l_target_persistent_node_id THEN
16350           l_ui_def_id := i.target_page_ui_def_id;
16351         ELSE
16352           l_ui_def_id := g_UI_Context.ui_def_id; -- AMN is the root node of child model
16353         END IF;
16354 
16355         IF NOT target_page_reachable(l_pagebase_expl_id,
16356                                      i.model_ref_expl_id,
16357                                      i.persistent_node_id,
16358                                      l_ui_def_id) THEN
16359           remove_target_page(g_UI_Context.ui_def_id, i.page_id, i.element_id);
16360           add_Error_Message(p_message_name => 'CZ_UIGEN_TARGET_PAGE_REACH',
16361                             p_token_name1  => 'REGION_NAME',
16362                             p_token_value1 => NVL(i.NAME, i.element_id),
16363                             p_token_name2  => 'PAGE_NAME',
16364                             p_token_value2 => get_page_name(g_UI_Context.ui_def_id,i.page_id),
16365                             p_fatal_error  => FALSE);
16366         END IF;
16367       END IF;
16368     END LOOP;
16369 
16370     l_ui_def_map(g_UI_Context.ui_def_id) := g_UI_Context.ui_def_id;
16371 
16372     --
16373     -- Find all Page Include Regions which point to UI pages in the current UI
16374     --
16375     FOR i IN (SELECT a.deleted_flag AS page_deleted_flag, a.page_id AS page_id,
16376                      a.name AS name, a.persistent_node_id AS target_persistent_node_id,
16377                      b.ui_def_id AS ref_ui_def_id, b.page_id AS ref_page_id,
16378                      b.name AS ref_element_name, b.element_id AS ref_element_id,
16379                      b.persistent_node_id as persistent_node_id,
16380                      b.model_ref_expl_id as expl_node_id
16381               FROM CZ_UI_PAGES a, CZ_UI_PAGE_ELEMENTS b
16382               WHERE a.ui_def_id = g_UI_Context.ui_def_id AND
16383                     b.element_signature_id = G_PAGE_INCL_REGION_SIGNATURE AND
16384                     b.deleted_flag = G_NO_FLAG AND
16385                     a.ui_def_id = b.target_page_ui_def_id AND
16386                     a.page_id = b.target_page_id)
16387     LOOP
16388       IF i.page_deleted_flag = G_YES_FLAG THEN
16389         remove_target_page(i.ref_ui_def_id, i.ref_page_id, i.ref_element_id);
16390         add_Error_Message(p_message_name => 'CZ_UIGEN_DEL_PAGEINCL_TARGET',
16391                           p_token_name1  => 'PAGE_NAME',
16392                           p_token_value1 => NVL(i.name, i.page_id),
16393                           p_token_name2  => 'ELEMENT_NAME',
16394                           p_token_value2 => i.ref_element_name,
16395                           p_token_name3  => 'REF_PAGE_NAME',
16396                           p_token_value3 => get_page_name(i.ref_ui_def_id,i.ref_page_id),
16397                           p_token_name4  => 'MODEL_NAME',
16398                           p_token_value4 => get_model_name(i.ref_ui_def_id),
16399                           p_token_name5  => 'UI_NAME',
16400                           p_token_value5 => get_ui_name(i.ref_ui_def_id),
16401                           p_fatal_error  => FALSE);
16402       ELSE
16403         -- check reachability of current page if page is not deleted
16404         -- get PI element's pagebase_expl_id
16405         SELECT pagebase_expl_node_id INTO l_pagebase_expl_id
16406         FROM   cz_ui_pages
16407         WHERE  ui_def_id = i.ref_ui_def_id AND
16408                page_id = i.ref_page_id;
16409 
16410         IF i.persistent_node_id = i.target_persistent_node_id THEN
16411           l_ui_def_id := g_UI_Context.ui_def_id;
16412         ELSE
16413           l_ui_def_id := i.ref_ui_def_id; -- AMN is the root node of child model
16414         END IF;
16415 
16416         IF NOT target_page_reachable(l_pagebase_expl_id,
16417                                      i.expl_node_id,
16418                                      i.persistent_node_id,
16419                                      l_ui_def_id) THEN
16420           remove_target_page(i.ref_ui_def_id, i.ref_page_id, i.ref_element_id);
16421           add_Error_Message(p_message_name => 'CZ_UIGEN_REFUI_TARGET_PG_REACH',
16422                             p_token_name1  => 'PAGE_NAME',
16423                             p_token_value1 => NVL(i.name, i.page_id),
16424                             p_token_name2  => 'ELEMENT_NAME',
16425                             p_token_value2 => i.ref_element_name,
16426                             p_token_name3  => 'REF_PAGE_NAME',
16427                             p_token_value3 => get_page_name(i.ref_ui_def_id,i.ref_page_id),
16428                             p_token_name4  => 'UI_NAME',
16429                             p_token_value4 => get_ui_name(i.ref_ui_def_id),
16430                             p_token_name5  => 'MODEL_NAME',
16431                             p_token_value5 => get_model_name(i.ref_ui_def_id),
16432                             p_fatal_error  => FALSE);
16433         END IF;
16434 
16435         l_ui_def_map(i.ref_ui_def_id) := i.ref_ui_def_id;
16436       END IF;
16437     END LOOP;
16438 
16439     -- Recalculate relative paths for Page Include Regions. If the newly calculated path
16440     -- of a PIR element is different from the current one in xml doc, update the path
16441     -- in xml doc if the UI is the one in processing, mark the UI as must be refreshed
16442     -- if it is not the UI in refreshing.
16443     l_ui_def_id := l_ui_def_map.FIRST;
16444     WHILE l_ui_def_id IS NOT NULL
16445     LOOP
16446       l_flag := 1;
16447       FOR i IN (SELECT page_id, jrad_doc, pagebase_expl_node_id, persistent_node_id
16448                 FROM CZ_UI_PAGES pg
16449                 WHERE ui_def_id = l_ui_def_id AND deleted_flag = G_NO_FLAG
16450                 AND   EXISTS (SELECT NULL FROM CZ_UI_PAGE_ELEMENTS
16451                               WHERE ui_def_id = pg.ui_def_id AND page_id = pg.page_id AND
16452                                     element_signature_id = G_PAGE_INCL_REGION_SIGNATURE AND
16453                                     target_page_ui_def_id IS NOT NULL AND
16454                                     target_page_id IS NOT NULL AND deleted_flag=G_NO_FLAG))
16455       LOOP
16456         EXIT WHEN l_flag = 0;
16457         l_xmldoc := parse_JRAD_Document(i.jrad_doc);
16458         l_resave_doc_flag := 0;
16459         FOR j IN (SELECT * FROM CZ_UI_PAGE_ELEMENTS
16460                   WHERE ui_def_id = l_ui_def_id AND page_id = i.page_id AND
16461                         element_signature_id = G_PAGE_INCL_REGION_SIGNATURE AND
16462                         deleted_flag=G_NO_FLAG)
16463         LOOP
16464           EXIT WHEN l_flag <> 1;
16465           l_dom_node := find_XML_Node_By_Attribute(l_xmldoc, G_ID_ATTRIBUTE, j.element_id);
16466           l_current_relative_path := get_attribute_value(l_dom_node, G_USER_ATTRIBUTE1_NAME);
16467           l_new_relative_path := 'model_path=' || CZ_DEVELOPER_UTILS_PVT.runtime_relative_path
16468                    (i.pagebase_expl_node_id
16469                    ,i.persistent_node_id
16470                    ,j.model_ref_expl_id
16471                    ,j.persistent_node_id);
16472           IF l_current_relative_path <> l_new_relative_path THEN
16473             IF l_ui_def_id = g_UI_Context.ui_def_id THEN
16474               set_attribute(l_dom_node,
16475                             G_USER_ATTRIBUTE1_NAME,
16476                             l_new_relative_path);
16477               UPDATE CZ_UI_PAGES
16478 	         SET page_rev_nbr = page_rev_nbr + 1
16479                WHERE ui_def_id = l_ui_def_id AND page_id = i.page_id;
16480               l_resave_doc_flag := 1; -- save doc
16481             ELSE
16482               UPDATE cz_ui_defs
16483               SET ui_status = 'NEED_REFRESH'
16484               WHERE ui_def_id = l_ui_def_id;
16485               l_flag := 0; -- goto next ui
16486             END IF;
16487           END IF;
16488         END LOOP;
16489         IF l_resave_doc_flag = 1 THEN
16490           save_document(l_xmldoc, i.jrad_doc);
16491         END IF;
16492       END LOOP;
16493       l_ui_def_id := l_ui_def_map.NEXT(l_ui_def_id);
16494     END LOOP;
16495   END handle_page_include_regions;
16496 
16497   --
16498   -- main internal procedure to create/refresh UI
16499   --
16500   PROCEDURE construct_Single_UI(p_ui_def_id     IN NUMBER,
16501                                 p_handling_mode IN VARCHAR2 DEFAULT NULL) IS
16502     l_locked_entities_tbl cz_security_pvt.number_type_tbl;
16503     l_templates_id_tbl    number_tbl_type;
16504   BEGIN
16505 
16506     --
16507     -- set current UI context
16508     --
16509     set_UI_Context(p_ui_def_id);
16510 
16511     --
16512     -- lock global UI Templates which are used by inline copy
16513     --
16514     lock_UI_Templates(p_model_id          => g_UI_Context.devl_project_id,
16515                       p_ui_def_id         => g_UI_Context.from_master_template_id);
16516 
16517     IF p_handling_mode IS NULL OR p_handling_mode = G_CREATE_ONLY_UI_STRUCTURE THEN
16518 
16519       set_UI_Global_Entities();
16520 
16521       IF NVL(g_UI_Context.suppress_refresh_flag,G_NO_FLAG)=G_NO_FLAG THEN
16522 
16523         -- populate cache
16524         populate_Cache;
16525 
16526     -- update the UI_TIMESTAMP_REFRESH date on the UI
16527     UPDATE cz_ui_defs
16528     SET UI_TIMESTAMP_REFRESH = SYSDATE
16529     WHERE ui_def_id = p_ui_def_id;
16530 
16531         -- populate CZ UI structures first
16532         populate_UI_Structures();
16533 
16534       END IF;
16535 
16536     END IF;
16537 
16538     IF p_handling_mode IS NULL OR p_handling_mode = G_CREATE_ONLY_UI_XML THEN
16539       --
16540       -- generate/refresh UI Pages of current UI
16541       --
16542       handle_JRAD_Pages();
16543     END IF;
16544 
16545     unlock_UI_Templates();
16546 
16547     --
16548     -- mark UI as processed
16549     --
16550     mark_UI(p_ui_def_id, G_PROCESSED_UI_STATUS);
16551 
16552     EXCEPTION
16553       WHEN OTHERS THEN
16554         DEBUG(SQLERRM);
16555         --
16556         -- unlock global UI Templates which are used by inline copy
16557         --
16558         unlock_UI_Templates();
16559         RAISE;
16560   END construct_Single_UI;
16561 
16562   --
16563   -- internal procedure to create/refresh UI
16564   --
16565   PROCEDURE handle_UIs(p_ui_def_id     IN NUMBER,
16566                        p_handling_mode IN VARCHAR2 DEFAULT NULL) IS
16567     l_target_ui_def_node     CZ_UI_DEFS%ROWTYPE;
16568     l_ui_def_id              NUMBER;
16569     l_ref_persistent_node_id NUMBER;
16570     l_init_ui_def_id         NUMBER;
16571   BEGIN
16572 
16573     DEBUG('construct Single UI : ',p_ui_def_id);
16574 
16575     --
16576     -- handle root UI
16577     --
16578     construct_Single_UI(p_ui_def_id, p_handling_mode);
16579 
16580     validate_UI_Conditions(p_ui_def_id      => p_ui_def_id,
16581                            p_is_parser_open => G_YES_FLAG);
16582 
16583     IF NVL(g_UI_Context.suppress_refresh_flag,G_NO_FLAG)=G_YES_FLAG
16584        OR NVL(g_UI_Context.empty_ui_flag,G_NO_FLAG)=G_YES_FLAG THEN
16585 
16586       FOR i IN(SELECT * FROM CZ_MODEL_REF_EXPLS
16587                WHERE model_id=g_UI_Context.devl_project_id AND
16588                      ps_node_type=G_REFERENCE_TYPE AND deleted_flag='0')
16589       LOOP
16590         BEGIN
16591           SELECT NVL(MAX(ui_def_id),0) INTO l_ui_def_id
16592             FROM CZ_UI_DEFS
16593            WHERE devl_project_id=i.component_id AND
16594                  ui_style=G_OA_STYLE_UI AND
16595                  deleted_flag='0';
16596 
16597           IF l_ui_def_id=0 THEN
16598             l_init_ui_def_id := g_UI_Context.ui_def_id;
16599             l_target_ui_def_node := create_UI_Context(p_model_id           => i.component_id,
16600                                                       p_master_template_id => g_UI_Context.from_master_template_id,
16601                                                       p_show_all_nodes     => g_UI_Context.show_all_nodes_flag,
16602                                                       p_create_empty_ui    => '1');
16603             l_ui_def_id := l_target_ui_def_node.ui_def_id;
16604             set_UI_Context(l_init_ui_def_id);
16605           END IF;
16606 
16607           SELECT persistent_node_id INTO l_ref_persistent_node_id
16608             FROM CZ_PS_NODES
16609            WHERE devl_project_id=g_UI_Context.devl_project_id AND
16610                  ps_node_id=i.referring_node_id AND
16611                  deleted_flag=G_NO_FLAG;
16612 
16613           BEGIN
16614             INSERT INTO CZ_UI_REFS
16615              (ui_def_id,
16616               ref_ui_def_id,
16617               ref_persistent_node_id,
16618               model_ref_expl_id,
16619               deleted_flag)
16620              VALUES
16621              (g_UI_Context.ui_def_id,
16622               l_ui_def_id,
16623               l_ref_persistent_node_id,
16624               i.model_ref_expl_id,
16625               G_NO_FLAG);
16626           EXCEPTION
16627             WHEN OTHERS THEN
16628                 NULL;
16629           END;
16630         EXCEPTION
16631           WHEN OTHERS THEN
16632             NULL;
16633         END;
16634       END LOOP;
16635 
16636     END IF;
16637 
16638     --
16639     -- table CZ_UI_REFS is populated in procedure construct_Single_UI()
16640     -- ( in this approach UI can have a more referenced UIs than Model Tree )
16641     --
16642     FOR i IN (SELECT DISTINCT ref_ui_def_id
16643                 FROM CZ_UI_REFS
16644                WHERE ui_def_id = p_ui_def_id AND
16645                      deleted_flag = G_NO_FLAG)
16646     LOOP
16647       --
16648       -- construct UIs of referenced models
16649       --
16650       handle_UIs(i.ref_ui_def_id, p_handling_mode);
16651     END LOOP;
16652 
16653   END handle_UIs;
16654 
16655   --
16656   -- main internal procedure to create/refresh UI
16657   -- this procedure is invoked only once during UI Generation/UI Refresh
16658   --
16659   PROCEDURE construct_UI(p_ui_def_id     IN NUMBER,
16660                          p_handling_mode IN VARCHAR2 DEFAULT NULL) IS
16661   BEGIN
16662     --
16663     -- initialize XML parser
16664     --
16665     OPEN_Parser();
16666     --
16667     -- handle root UI and all referenced UIs
16668     --
16669     handle_UIs(p_ui_def_id, p_handling_mode);
16670     --
16671     -- close XML parser
16672     --
16673     CLOSE_Parser();
16674 
16675     set_UI_Context(p_ui_def_id);
16676 
16677     OPEN_Parser();
16678     handle_page_include_regions;
16679     CLOSE_Parser();
16680   END construct_UI;
16681 
16682   --
16683   -- create a new UI for a given model
16684   -- Parameters :
16685   --   p_model_id           - identifies Model
16686   --   p_master_template_id - identifies UI Master Template
16687   --   px_ui_def_id         - Id of a new UI
16688   --   x_return_status      - status string
16689   --   x_msg_count          - number of error messages
16690   --   x_msg_data           - string which contains error messages
16691   --
16692   PROCEDURE create_UI(p_model_id           IN NUMBER, -- identifies Model
16693                       p_master_template_id IN NUMBER DEFAULT NULL, -- identifies UI Master Template
16694                       p_ui_name            IN VARCHAR2 DEFAULT NULL,
16695                       p_description        IN VARCHAR2 DEFAULT NULL,
16696                       p_show_all_nodes     IN VARCHAR2 DEFAULT NULL,
16697                       p_create_empty_ui    IN VARCHAR2 DEFAULT NULL,
16698                       x_ui_def_id          OUT NOCOPY NUMBER, -- Id of a new UI
16699                       x_return_status      OUT NOCOPY VARCHAR2,
16700                       x_msg_count          OUT NOCOPY NUMBER,
16701                       x_msg_data           OUT NOCOPY VARCHAR2) IS
16702 
16703     l_ui_context CZ_UI_DEFS%ROWTYPE;
16704     l_locked_models      cz_security_pvt.number_type_tbl;
16705 
16706   BEGIN
16707 
16708     --
16709     -- initialize FND variables/packages
16710     --
16711     Initialize(x_return_status,x_msg_count,x_msg_data);
16712 
16713     --
16714     -- get UI context
16715     -- ( * also function get_UI_Context() inserts data for new UI into CZ_UI_DEFS table )
16716     --
16717     l_ui_context := create_UI_Context(p_model_id           => p_model_id,
16718                                       p_master_template_id => p_master_template_id,
16719                                       p_ui_name            => p_ui_name,
16720                                       p_description        => p_description,
16721                                       p_show_all_nodes     => p_show_all_nodes,
16722                                       p_create_empty_ui    => p_create_empty_ui);
16723     --
16724     -- set ui_def_id of root UI ( UI that is generated for model with model_id=p_model_id )
16725     --
16726     x_ui_def_id := l_ui_context.ui_def_id;
16727 
16728     lock_Model(p_model_id, l_locked_models);
16729 
16730     --
16731     -- generate a new UI for the current UI context
16732     --
16733     construct_UI(l_ui_context.ui_def_id);
16734 
16735     IF p_create_empty_ui IS NOT NULL AND p_create_empty_ui = '1' THEN
16736 
16737       UPDATE CZ_UI_DEFS
16738       SET suppress_refresh_flag = G_NO_FLAG
16739       WHERE ui_def_id = x_ui_def_id and deleted_flag = G_NO_FLAG;
16740 
16741       UPDATE CZ_UI_DEFS
16742       SET suppress_refresh_flag = G_NO_FLAG
16743       WHERE ui_def_Id IN (
16744          SELECT ref_ui_def_Id
16745          FROM CZ_UI_REFS
16746          START WITH ui_def_id = x_ui_def_id
16747          AND deleted_flag = G_NO_FLAG
16748          CONNECT BY PRIOR ref_ui_def_id = ui_def_id AND deleted_flag = G_NO_FLAG)
16749       AND deleted_flag = G_NO_FLAG;
16750     END IF;
16751 
16752     IF g_MSG_COUNT>0 THEN
16753       x_return_status := G_RETURN_STATUS;
16754       x_msg_count     := g_MSG_COUNT;
16755       x_msg_data      := fnd_msg_pub.GET(g_MSG_COUNT,fnd_api.g_false);
16756     END IF;
16757 
16758     unlock_model(l_locked_models);
16759 
16760   EXCEPTION
16761     WHEN FAILED_TO_LOCK_MODEL THEN
16762       x_return_status := FND_API.G_RET_STS_ERROR;
16763       x_msg_count     := 1;
16764       x_msg_data      := fnd_msg_pub.GET(g_MSG_COUNT,fnd_api.g_false);
16765       DEBUG(x_msg_data);
16766     WHEN WRONG_UI_TEMPLATE THEN
16767       x_return_status := FND_API.G_RET_STS_ERROR;
16768       x_msg_count     := g_MSG_COUNT;
16769       x_msg_data      := fnd_msg_pub.GET(g_MSG_COUNT,fnd_api.g_false);
16770       DEBUG(x_msg_data);
16771     WHEN WRONG_EXT_PS_TYPE THEN
16772       x_return_status := FND_API.G_RET_STS_ERROR;
16773       x_msg_count     :=  1;
16774       x_msg_data      :=  'Internal Error : extended ps node type of node with ps_node_id='||
16775                           TO_CHAR(g_WRONG_PS_NODE_ID)||' is not defined.';
16776       fnd_msg_pub.add_exc_msg('CZ_UIOA_PVT', 'create_UI', x_msg_data);
16777       DEBUG(x_msg_data);
16778     WHEN UNREACH_UI_NODE THEN
16779       x_return_status := FND_API.G_RET_STS_ERROR;
16780       x_msg_count     := g_MSG_COUNT;
16781       x_msg_data      := fnd_msg_pub.GET(g_MSG_COUNT,fnd_api.g_false);
16782       DEBUG(x_msg_data);
16783     WHEN OTHERS THEN
16784       x_return_status := FND_API.G_RET_STS_ERROR;
16785       x_msg_count := g_MSG_COUNT;
16786       IF g_MSG_COUNT>0 THEN
16787          x_msg_count := g_MSG_COUNT;
16788          x_msg_data  := fnd_msg_pub.GET(g_MSG_COUNT,fnd_api.g_false);
16789       ELSE
16790          x_msg_count := 1;
16791          x_msg_data  := SUBSTR(DBMS_UTILITY.format_error_backtrace,1,4000);
16792       END IF;
16793       fnd_msg_pub.add_exc_msg('CZ_UIOA_PVT', 'create_UI', x_msg_data);
16794       DEBUG(x_msg_data);
16795   END create_UI;
16796 
16797   --
16798   -- refresh a given UI
16799   -- Parameters :
16800   --   p_ui_def_id          - identifies UI
16801   --   x_return_status      - status string
16802   --   x_msg_count          - number of error messages
16803   --   x_msg_data           - string which contains error messages
16804   --
16805   PROCEDURE refresh_UI(p_ui_def_id     IN NUMBER,
16806                        x_return_status OUT NOCOPY VARCHAR2,
16807                        x_msg_count     OUT NOCOPY NUMBER,
16808                        x_msg_data      OUT NOCOPY VARCHAR2) IS
16809 
16810     l_ui_context CZ_UI_DEFS%ROWTYPE;
16811   BEGIN
16812     --
16813     -- initialize FND variables/packages
16814     --
16815     Initialize(x_return_status,x_msg_count,x_msg_data);
16816 
16817     --
16818     -- get UI context
16819     --
16820     l_ui_context := get_UI_Context(p_ui_def_id => p_ui_def_id);
16821 
16822     --
16823     -- if p_create_empty_ui = G_NO_FLAG ( ='1') then do generate/refresh UI
16824     --
16825     IF NVL(l_ui_context.suppress_refresh_flag,G_NO_FLAG) = G_NO_FLAG THEN
16826 
16827       -- refresh model_path for all nodes on refreshed UI page
16828       g_REFRESH_MODEL_PATH := TRUE;
16829 
16830       --
16831       -- refresh UI
16832       --
16833       construct_UI(p_ui_def_id);
16834     END IF;
16835 
16836     IF g_MSG_COUNT>0 THEN
16837       x_return_status := G_RETURN_STATUS;
16838       x_msg_count     := g_MSG_COUNT;
16839       x_msg_data      := fnd_msg_pub.GET(g_MSG_COUNT,fnd_api.g_false);
16840     END IF;
16841 
16842   EXCEPTION
16843     WHEN FAILED_TO_LOCK_MODEL THEN
16844       x_return_status := FND_API.G_RET_STS_ERROR;
16845       x_msg_count     := 1;
16846       x_msg_data      := fnd_msg_pub.GET(g_MSG_COUNT,fnd_api.g_false);
16847       DEBUG(x_msg_data);
16848     WHEN WRONG_UI_TO_REFRESH THEN
16849       x_return_status := FND_API.G_RET_STS_ERROR;
16850       x_msg_count     := 1;
16851       x_msg_data      := 'Internal Error : Wrong UI to refresh.';
16852       fnd_msg_pub.add_exc_msg('CZ_UIOA_PVT', 'refresh_UI', x_msg_data);
16853       DEBUG(x_msg_data);
16854     WHEN WRONG_UI_TEMPLATE THEN
16855       x_return_status := FND_API.G_RET_STS_ERROR;
16856       x_msg_count     := g_MSG_COUNT;
16857       x_msg_data      := fnd_msg_pub.GET(g_MSG_COUNT,fnd_api.g_false);
16858       DEBUG(x_msg_data);
16859     WHEN WRONG_EXT_PS_TYPE THEN
16860       x_return_status := FND_API.G_RET_STS_ERROR;
16861       x_msg_count     :=  1;
16862       x_msg_data      :=  'Internal Error : extended ps node type of node with ps_node_id='||
16863                           TO_CHAR(g_WRONG_PS_NODE_ID)||' is not defined.';
16864       fnd_msg_pub.add_exc_msg('CZ_UIOA_PVT', 'create_UI', x_msg_data);
16865       DEBUG(x_msg_data);
16866     WHEN UNREACH_UI_NODE THEN
16867       x_return_status := FND_API.G_RET_STS_ERROR;
16868       x_msg_count     := g_MSG_COUNT;
16869       x_msg_data      := fnd_msg_pub.GET(g_MSG_COUNT,fnd_api.g_false);
16870       DEBUG(x_msg_data);
16871     WHEN OTHERS THEN
16872       x_return_status := FND_API.G_RET_STS_ERROR;
16873       x_msg_count := g_MSG_COUNT;
16874       IF g_MSG_COUNT>0 THEN
16875          x_msg_count := g_MSG_COUNT;
16876          x_msg_data  := fnd_msg_pub.GET(g_MSG_COUNT,fnd_api.g_false);
16877       ELSE
16878          x_msg_count := 1;
16879          x_msg_data  := SUBSTR(DBMS_UTILITY.format_error_backtrace,1,4000);
16880       END IF;
16881       fnd_msg_pub.add_exc_msg('CZ_UIOA_PVT', 'refresh_UI', x_msg_data);
16882       DEBUG(x_msg_data);
16883   END refresh_UI;
16884 
16885   --
16886   -- delete records which correspond with user attributes
16887   --
16888   PROCEDURE delete_User_Attr_For_Node(p_xml_node           xmldom.DOMNode,
16889                                       p_ui_def_id          NUMBER,
16890                                       p_template_id        NUMBER DEFAULT NULL,
16891                                       p_template_ui_def_id NUMBER DEFAULT NULL) IS
16892 
16893     l_user_attribute_value VARCHAR2(4000);
16894     l_persistent_id        NUMBER;
16895 
16896   BEGIN
16897 
16898       l_user_attribute_value := get_Attribute_Value(p_xml_node, G_USER_ATTRIBUTE3_NAME);
16899       IF l_user_attribute_value IS NOT NULL THEN
16900 
16901         l_persistent_id := TO_NUMBER(get_User_Attribute(l_user_attribute_value,'actionId'));
16902         IF l_persistent_id IS NOT NULL THEN
16903           UPDATE CZ_UI_ACTIONS
16904              SET deleted_flag=G_YES_FLAG
16905            WHERE ui_def_id=p_ui_def_id AND
16906                  ui_action_id=l_persistent_id AND
16907                  seeded_flag=G_NO_FLAG;
16908 
16909             IF p_template_id IS NOT NULL THEN
16910               UPDATE CZ_UI_TEMPLATE_ELEMENTS
16911                  SET deleted_flag=G_YES_FLAG
16912                WHERE template_id=p_template_id AND
16913                      ui_def_id=p_template_ui_def_id AND
16914                      element_id=l_persistent_id AND
16915                      element_type IN(552) AND
16916                      seeded_flag=G_NO_FLAG AND
16917                      deleted_flag=G_NO_FLAG;
16918             END IF;
16919         END IF;
16920 
16921         FOR i IN g_condition_attr_tbl.First..g_condition_attr_tbl.Last
16922         LOOP
16923           l_persistent_id := TO_NUMBER(get_User_Attribute(l_user_attribute_value,g_condition_attr_tbl(i)));
16924           IF l_persistent_id IS NOT NULL THEN
16925             UPDATE CZ_RULES
16926                SET deleted_flag = G_YES_FLAG
16927              WHERE persistent_rule_id = l_persistent_id
16928                AND ui_def_id = p_ui_def_id
16929                AND seeded_flag = G_NO_FLAG;
16930 
16931             IF p_template_id IS NOT NULL THEN
16932               UPDATE CZ_UI_TEMPLATE_ELEMENTS
16933                  SET deleted_flag=G_YES_FLAG
16934                WHERE template_id=p_template_id AND
16935                      ui_def_id=p_template_ui_def_id AND
16936                      element_id=l_persistent_id AND
16937                      element_type IN(33,34) AND
16938                      seeded_flag=G_NO_FLAG AND
16939                      deleted_flag=G_NO_FLAG;
16940             END IF;
16941           END IF;
16942         END LOOP;
16943 
16944         FOR i IN g_caption_attr_tbl.First..g_caption_attr_tbl.Last
16945         LOOP
16946           l_persistent_id := TO_NUMBER(get_User_Attribute(l_user_attribute_value,g_caption_attr_tbl(i)));
16947           IF l_persistent_id IS NOT NULL THEN
16948             UPDATE CZ_LOCALIZED_TEXTS
16949                SET deleted_flag=G_YES_FLAG
16950              WHERE persistent_intl_text_id=l_persistent_id AND
16951                    ui_def_id=p_ui_def_id AND
16952                    seeded_flag=G_NO_FLAG;
16953 
16954             IF p_template_id IS NOT NULL THEN
16955               UPDATE CZ_UI_TEMPLATE_ELEMENTS
16956                  SET deleted_flag=G_YES_FLAG
16957                WHERE template_id=p_template_id AND
16958                      ui_def_id=p_template_ui_def_id AND
16959                      element_id=l_persistent_id AND
16960                      element_type IN(8) AND
16961                      seeded_flag=G_NO_FLAG AND
16962                      deleted_flag=G_NO_FLAG;
16963             END IF;
16964           END IF;
16965         END LOOP;
16966 
16967       END IF;
16968   END delete_User_Attr_For_Node;
16969 
16970   PROCEDURE copy_User_Attr_For_Node(p_xml_node               xmldom.DOMNode,
16971                                     p_source_ui_def_id       NUMBER,
16972                                     p_target_ui_def_id       NUMBER,
16973                                     p_source_ui_page_id      NUMBER,
16974                                     p_target_ui_page_id      NUMBER,
16975                                     p_target_model_path      VARCHAR2,
16976                                     p_new_element_id_arr_tbl IN OUT NOCOPY number_tbl_type) IS
16977 
16978     l_user_attribute_value VARCHAR2(4000);
16979     l_new_element_id       VARCHAR2(255);
16980     l_target_model_path    VARCHAR2(4000);
16981     l_name                 VARCHAR2(4000);
16982     l_ui_node              CZ_UI_PAGE_ELEMENTS%ROWTYPE;
16983     l_model_ref_expl_id    NUMBER;
16984     l_num_copy             NUMBER;
16985     l_id                   NUMBER;
16986 
16987   BEGIN
16988 
16989       set_UI_Context(p_target_ui_def_id);
16990 
16991       l_user_attribute_value := get_Attribute_Value(p_xml_node, G_ID_ATTRIBUTE);
16992 
16993       IF l_user_attribute_value IS NOT NULL THEN
16994         BEGIN
16995           l_id := TO_NUMBER(l_user_attribute_value);
16996 
16997           l_new_element_id := p_new_element_id_arr_tbl(l_id);
16998 
16999           set_Attribute(p_xml_node,
17000                         G_ID_ATTRIBUTE,
17001                         l_new_element_id);
17002 
17003           g_handled_attr_id_tbl(l_new_element_id) := l_id;
17004 
17005         EXCEPTION
17006           WHEN OTHERS THEN
17007             DEBUG('copy_User_Attr_For_Node() : '||SQLERRM);
17008             IF NOT(g_handled_attr_id_tbl.EXISTS(l_id)) THEN
17009               set_Attribute(p_xml_node,
17010                             G_ID_ATTRIBUTE,
17011                             l_user_attribute_value||'_'||get_Element_Id());
17012             END IF;
17013         END;
17014 
17015       END IF;
17016 
17017       l_user_attribute_value := get_Attribute_Value(p_xml_node, G_USER_ATTRIBUTE1_NAME);
17018 
17019       IF l_user_attribute_value IS NOT NULL AND l_new_element_id IS NOT NULL THEN
17020 
17021         SELECT * INTO l_ui_node FROM CZ_UI_PAGE_ELEMENTS
17022          WHERE ui_def_id=p_target_ui_def_id AND
17023                page_id=p_target_ui_page_id AND
17024                element_id=l_new_element_id;
17025         SELECT model_ref_expl_id INTO l_model_ref_expl_id FROM CZ_UI_PAGE_ELEMENTS
17026         WHERE ui_def_id=l_ui_node.ui_def_id AND page_id=l_ui_node.page_id AND
17027              parent_element_id IS NULL AND deleted_flag NOT IN(G_YES_FLAG,G_MARK_TO_DELETE);
17028        l_target_model_path := CZ_DEVELOPER_UTILS_PVT.runtime_relative_path(p_base_expl_id => l_model_ref_expl_id,
17029                                                      p_base_pers_id => l_ui_node.pagebase_persistent_node_id,
17030                                                      p_node_expl_id => l_ui_node.model_ref_expl_id,
17031                                                      p_node_pers_id => l_ui_node.persistent_node_id);
17032         IF l_target_model_path IS NULL THEN
17033            l_target_model_path := '.';
17034         END IF;
17035 
17036         set_Attribute(p_xml_node,
17037                       G_USER_ATTRIBUTE1_NAME,
17038                       'model_path='||l_target_model_path);
17039 
17040       END IF;
17041 
17042       l_user_attribute_value := get_Attribute_Value(p_xml_node, G_USER_ATTRIBUTE3_NAME);
17043 
17044       IF l_user_attribute_value IS NOT NULL AND l_new_element_id IS NOT NULL  THEN
17045 
17046         handle_User_Attributes
17047         (px_user_attribute_value => l_user_attribute_value,
17048          p_source_ui_def_id      => p_source_ui_def_id,
17049          p_source_ui_page_id     => p_source_ui_page_id,
17050          p_target_ui_def_id      => p_target_ui_def_id,
17051          p_target_ui_page_id     => p_target_ui_page_id,
17052          p_new_element_id        => l_new_element_id,
17053          p_xml_node              => p_xml_node);
17054 
17055          set_Attribute(p_xml_node,
17056                        G_USER_ATTRIBUTE3_NAME,
17057                        l_user_attribute_value);
17058      END IF;
17059 
17060      l_user_attribute_value := get_Attribute_Value(p_xml_node, G_USER_ATTRIBUTE4_NAME);
17061 
17062      IF l_user_attribute_value IS NOT NULL THEN
17063 
17064        l_name := get_User_Attribute(l_user_attribute_value ,'name');
17065 
17066        SELECT COUNT(*)+1 INTO l_num_copy FROM CZ_UI_PAGE_ELEMENTS
17067        WHERE ui_def_id=p_target_ui_def_id AND page_id=p_target_ui_page_id AND
17068              name like l_name||'%' AND deleted_flag=G_NO_FLAG;
17069 
17070        l_name := l_name||' ('||TO_CHAR(l_num_copy)||')';
17071 
17072        set_User_Attribute(p_cz_attribute_name    => 'name',
17073                           p_cz_attribute_value   => l_name,
17074                           px_xml_attribute_value => l_user_attribute_value);
17075 
17076        set_Attribute(p_xml_node,
17077                      G_USER_ATTRIBUTE4_NAME,
17078                      l_user_attribute_value);
17079      END IF;
17080 
17081      IF l_new_element_id IS NOT NULL THEN
17082        UPDATE CZ_UI_PAGE_ELEMENTS
17083           SET name=l_name
17084         WHERE ui_def_id=p_target_ui_def_id AND page_id=p_target_ui_page_id AND
17085               element_id = l_new_element_id;
17086      END IF;
17087 
17088   END copy_User_Attr_For_Node;
17089 
17090   --
17091   -- copy records which correspond to user attributes
17092   --
17093   PROCEDURE copy_User_Attr_For_Node(p_xml_node               xmldom.DOMNode,
17094                                     p_source_ui_def_id       NUMBER,
17095                                     p_target_ui_def_id       NUMBER,
17096                                     p_source_template_id     NUMBER DEFAULT NULL,
17097                                     p_target_template_id     NUMBER DEFAULT NULL) IS
17098 
17099     l_user_attribute_value VARCHAR2(4000);
17100     l_new_element_id       VARCHAR2(255);
17101     l_id                   NUMBER;
17102     l_name                 VARCHAR2(4000);
17103     l_num_copy             NUMBER;
17104 
17105   BEGIN
17106 
17107       l_user_attribute_value := get_Attribute_Value(p_xml_node, G_ID_ATTRIBUTE);
17108 
17109       IF l_user_attribute_value IS NOT NULL THEN
17110 
17111          l_new_element_id := '_czc'||get_Element_Id(); -- fix for bug #3975276
17112          set_Attribute(p_xml_node,
17113                        G_ID_ATTRIBUTE,
17114                        l_new_element_id);
17115 
17116       END IF;
17117 
17118       l_user_attribute_value := get_Attribute_Value(p_xml_node, G_USER_ATTRIBUTE3_NAME);
17119 
17120       IF l_user_attribute_value IS NOT NULL THEN
17121         handle_User_Attributes
17122         (px_user_attribute_value => l_user_attribute_value,
17123          p_source_ui_def_id      => p_source_ui_def_id,
17124          p_source_ui_page_id     => 0,  -- fix for bug #3975276
17125          p_target_ui_def_id      => p_target_ui_def_id,
17126          p_target_ui_page_id     => 0,  -- fix for bug #3975276
17127          p_new_element_id        => l_new_element_id,
17128          p_source_template_id    => p_source_template_id,
17129          p_target_template_id    => p_target_template_id,
17130          p_xml_node              => p_xml_node);
17131 
17132          set_Attribute(p_xml_node,
17133                        G_USER_ATTRIBUTE3_NAME,
17134                        l_user_attribute_value);
17135       END IF;
17136 
17137      l_user_attribute_value := get_Attribute_Value(p_xml_node, G_USER_ATTRIBUTE4_NAME);
17138 
17139      IF l_user_attribute_value IS NOT NULL THEN
17140 
17141        l_name := get_User_Attribute(l_user_attribute_value ,'name');
17142 
17143        IF l_new_element_id IS NOT NULL THEN
17144          l_name := l_name||' - '||l_new_element_id;
17145        END IF;
17146 
17147        set_User_Attribute(p_cz_attribute_name    => 'name',
17148                           p_cz_attribute_value   => l_name,
17149                           px_xml_attribute_value => l_user_attribute_value);
17150 
17151        set_Attribute(p_xml_node,
17152                      G_USER_ATTRIBUTE4_NAME,
17153                      l_user_attribute_value);
17154      END IF;
17155 
17156   END copy_User_Attr_For_Node;
17157 
17158   --
17159   -- delete records which corresponds with user attributes
17160   --
17161   PROCEDURE delete_User_Attributes(p_xml_node  xmldom.DOMNode,
17162                                    p_ui_def_id NUMBER,
17163                                    p_template_id        NUMBER DEFAULT NULL,
17164                                    p_template_ui_def_id NUMBER DEFAULT NULL) IS
17165 
17166 
17167     l_child_nodes_tbl xmldom.DOMNodeList;
17168     l_child_xml_node  xmldom.DOMNode;
17169     l_length          NUMBER;
17170 
17171   BEGIN
17172 
17173     IF xmldom.IsNull(p_xml_node) THEN
17174       RETURN;
17175     END IF;
17176 
17177     delete_User_Attr_For_Node(p_xml_node,p_ui_def_id,
17178                               p_template_id, p_template_ui_def_id);
17179 
17180     l_child_nodes_tbl := xmldom.getChildNodes(p_xml_node);
17181     l_length          := xmldom.getLength(l_child_nodes_tbl);
17182 
17183     FOR k IN 0 .. l_length - 1
17184     LOOP
17185       --
17186       -- get next child DOM node
17187       --
17188       l_child_xml_node := xmldom.item(l_child_nodes_tbl, k);
17189 
17190       delete_User_Attr_For_Node(l_child_xml_node,p_ui_def_id,
17191                                 p_template_id, p_template_ui_def_id);
17192 
17193       delete_User_Attributes(l_child_xml_node,p_ui_def_id,
17194                              p_template_id, p_template_ui_def_id);
17195 
17196     END LOOP;
17197 
17198   END delete_User_Attributes;
17199 
17200   --
17201   -- copy records which corresponds with user attributes
17202   --
17203   PROCEDURE copy_User_Attributes(p_xml_node               xmldom.DOMNode,
17204                                  p_source_ui_def_id       NUMBER,
17205                                  p_target_ui_def_id       NUMBER,
17206                                  p_source_ui_page_id      NUMBER,
17207                                  p_target_ui_page_id      NUMBER,
17208                                  p_target_model_path      VARCHAR2,
17209                                  p_new_element_id_arr_tbl IN OUT NOCOPY number_tbl_type) IS
17210 
17211     l_child_nodes_tbl xmldom.DOMNodeList;
17212     l_child_xml_node  xmldom.DOMNode;
17213     l_length          NUMBER;
17214 
17215   BEGIN
17216 
17217      copy_User_Attr_For_Node(p_xml_node          => p_xml_node,
17218                             p_source_ui_def_id  => p_source_ui_def_id,
17219                             p_target_ui_def_id  => p_target_ui_def_id,
17220                             p_source_ui_page_id => p_source_ui_page_id,
17221                             p_target_ui_page_id => p_target_ui_page_id,
17222                             p_target_model_path => p_target_model_path,
17223                             p_new_element_id_arr_tbl => p_new_element_id_arr_tbl);
17224 
17225     l_child_nodes_tbl := xmldom.getChildNodes(p_xml_node);
17226     l_length          := xmldom.getLength(l_child_nodes_tbl);
17227 
17228     FOR k IN 0 .. l_length - 1
17229     LOOP
17230       --
17231       -- get next child DOM node
17232       --
17233       l_child_xml_node := xmldom.item(l_child_nodes_tbl, k);
17234 
17235       copy_User_Attr_For_Node(p_xml_node          => l_child_xml_node,
17236                               p_source_ui_def_id  => p_source_ui_def_id,
17237                               p_target_ui_def_id  => p_target_ui_def_id,
17238                               p_source_ui_page_id => p_source_ui_page_id,
17239                               p_target_ui_page_id => p_target_ui_page_id,
17240                               p_target_model_path => p_target_model_path,
17241                               p_new_element_id_arr_tbl => p_new_element_id_arr_tbl);
17242 
17243       copy_User_Attributes(p_xml_node          => l_child_xml_node,
17244                            p_source_ui_def_id  => p_source_ui_def_id,
17245                            p_target_ui_def_id  => p_target_ui_def_id,
17246                            p_source_ui_page_id => p_source_ui_page_id,
17247                            p_target_ui_page_id => p_target_ui_page_id,
17248                            p_target_model_path => p_target_model_path,
17249                            p_new_element_id_arr_tbl => p_new_element_id_arr_tbl);
17250 
17251     END LOOP;
17252 
17253   EXCEPTION
17254     WHEN OTHERS THEN
17255       DEBUG('copy_User_Attributes() : '||SQLERRM);
17256 
17257   END copy_User_Attributes;
17258 
17259  PROCEDURE validate_Copied_PIR(p_ui_def_id IN NUMBER, p_page_id IN NUMBER) IS
17260     TYPE number_tbl_type        IS TABLE OF NUMBER INDEX BY BINARY_INTEGER;
17261     l_element_id_tbl            varchar_tbl_type;
17262     l_name_tbl                  varchar_tbl_type;
17263     l_target_page_ui_def_id_tbl number_tbl_type;
17264     l_target_page_id_tbl        number_tbl_type;
17265     l_ui_name                   CZ_UI_DEFS.name%TYPE;
17266     l_page_name                 CZ_UI_PAGES.name%TYPE;
17267     l_pagebase_expl_id          NUMBER;
17268     l_ui_def_id                 NUMBER;
17269     l_target_persistent_node_id NUMBER;
17270 
17271   BEGIN
17272 
17273     UPDATE CZ_UI_PAGE_ELEMENTS
17274        SET target_page_ui_def_id=NULL,
17275            target_page_id=NULL
17276      WHERE ui_def_id=p_ui_def_id AND
17277            page_id=p_page_id AND
17278            element_signature_id = G_PAGE_INCL_REGION_SIGNATURE AND
17279            deleted_flag='0' AND target_page_ui_def_id IS NOT NULL AND
17280            target_page_id IS NOT NULL AND
17281            target_page_ui_def_id NOT IN (SELECT ref_ui_def_id FROM CZ_UI_REFS WHERE ui_def_id=p_ui_def_id AND
17282            deleted_flag='0')
17283     RETURNING element_id,name,target_page_id,target_page_ui_def_id
17284     BULK COLLECT INTO l_element_id_tbl,l_name_tbl,l_target_page_id_tbl,l_target_page_ui_def_id_tbl;
17285 
17286     IF l_name_tbl.COUNT>0 THEN
17287       FOR i IN l_name_tbl.First..l_name_tbl.Last
17288       LOOP
17289         SELECT name INTO l_page_name FROM CZ_UI_PAGES
17290         WHERE page_id=l_target_page_id_tbl(i) AND ui_def_id=l_target_page_ui_def_id_tbl(i);
17291         SELECT name INTO l_ui_name FROM CZ_UI_DEFS WHERE ui_def_id=l_target_page_ui_def_id_tbl(i);
17292         add_Error_Message(p_message_name => 'CZ_CP_PIR_REF_UI_NOT_IN_CHAIN',
17293                           p_token_name1  => 'RGNNAME',
17294 	                  p_token_value1 => NVL(l_name_tbl(i), l_element_id_tbl(i)),
17295 	                  p_token_name2  => 'PAGENAME',
17296                           p_token_value2 => l_page_name,
17297 	                  p_token_name3  => 'UINAME',
17298                           p_token_value3 => l_ui_name,
17299                           p_fatal_error  => FALSE);
17300       END LOOP;
17301     END IF;
17302 
17303     --
17304     -- Find all Page Include Regions of current UI
17305     --
17306     FOR i IN (SELECT page_id, element_id, target_page_ui_def_id, target_page_id,
17307                      model_ref_expl_id, persistent_node_id, name
17308               FROM CZ_UI_PAGE_ELEMENTS
17309               WHERE ui_def_id = p_ui_def_id AND page_id=p_page_id AND
17310                     element_signature_id = G_PAGE_INCL_REGION_SIGNATURE AND
17311                     target_page_ui_def_id IS NOT NULL AND target_page_id IS NOT NULL AND
17312                     deleted_flag = '0')
17313     LOOP
17314       -- target page exists?
17315       l_target_persistent_node_id := NULL;
17316       BEGIN
17317         SELECT persistent_node_id INTO l_target_persistent_node_id
17318         FROM   cz_ui_pages
17319         WHERE  ui_def_id = i.target_page_ui_def_id AND
17320                page_id = i.target_page_id AND deleted_flag <> '1';
17321       EXCEPTION
17322         -- target page not exist
17323         WHEN NO_DATA_FOUND THEN
17324           -- l_target_persistent_node_id := NULL;
17325           UPDATE CZ_UI_PAGE_ELEMENTS
17326           SET    target_page_ui_def_id = NULL, target_page_id = NULL
17327           WHERE  ui_def_id = p_ui_def_id AND
17328                  page_id = i.page_id AND element_id = i.element_id;
17329 
17330           add_Error_Message(p_message_name => 'CZ_UIGEN_TARGET_PAGE_NOT_EXIST',
17331 	                    p_token_name1  => 'REGION_NAME',
17332 	                    p_token_value1 => NVL(i.NAME, i.element_id),
17333 	                    p_token_name2  => 'PAGE_NAME',
17334 	                    p_token_value2 => get_page_name(p_ui_def_id,i.page_id),
17335                             p_fatal_error  => FALSE);
17336       END;
17337 
17338       -- target page exists. check if reachable
17339       IF l_target_persistent_node_id IS NOT NULL THEN
17340         SELECT pagebase_expl_node_id INTO l_pagebase_expl_id
17341         FROM   cz_ui_pages
17342         WHERE  ui_def_id = p_ui_def_id AND
17343                page_id = i.page_id;
17344 
17345         IF i.persistent_node_id = l_target_persistent_node_id THEN
17346           l_ui_def_id := i.target_page_ui_def_id;
17347         ELSE
17348           l_ui_def_id := p_ui_def_id;
17349         END IF;
17350 
17351         IF NOT target_page_reachable(l_pagebase_expl_id,
17352                                      i.model_ref_expl_id,
17353                                      i.persistent_node_id,
17354                                      l_ui_def_id) THEN
17355           add_Error_Message(p_message_name => 'CZ_UIGEN_TARGET_PAGE_REACH',
17356 	                    p_token_name1  => 'REGION_NAME',
17357 	                    p_token_value1 => NVL(i.NAME, i.element_id),
17358 	                    p_token_name2  => 'PAGE_NAME',
17359 	                    p_token_value2 => get_page_name(p_ui_def_id,i.page_id),
17360                             p_fatal_error  => FALSE);
17361           UPDATE CZ_UI_PAGE_ELEMENTS
17362           SET    target_page_ui_def_id = NULL, target_page_id = NULL
17363           WHERE  ui_def_id = p_ui_def_id AND
17364                  page_id = i.page_id AND element_id = i.element_id;
17365         END IF;
17366       END IF;
17367     END LOOP;
17368 
17369   END validate_Copied_PIR;
17370 
17371   PROCEDURE copy_Tree_Level(p_xml_node                    xmldom.DOMNode,
17372                             p_source_ui_def_id            NUMBER,
17373                             p_target_ui_def_id            NUMBER,
17374                             p_source_ui_page_id           NUMBER,
17375                             p_target_ui_page_id           NUMBER,
17376                             p_parent_element_id           VARCHAR2,
17377                             p_target_parent_element_id    VARCHAR2,
17378                             p_pagebase_persistent_node_id NUMBER,
17379                             x_new_element_id              IN OUT NOCOPY VARCHAR2,
17380                             p_copy_as_ui_page             IN BOOLEAN,
17381                             p_source_jrad_doc             IN VARCHAR2,
17382                             p_target_jrad_doc             IN VARCHAR2,
17383                             p_amn_parent_element_id       IN VARCHAR2
17384                             ) IS
17385 
17386     l_child_nodes_tbl      xmldom.DOMNodeList;
17387     l_child_xml_node       xmldom.DOMNode;
17388     l_parent_xml_node      xmldom.DOMNode;
17389     l_ui_node              CZ_UI_PAGE_ELEMENTS%ROWTYPE;
17390 
17391     l_user_attribute_value  VARCHAR2(4000);
17392     l_user_attribute3_value VARCHAR2(4000);
17393 
17394     l_switcher_casename    VARCHAR2(255);
17395 
17396     l_target_model_path    VARCHAR2(255);
17397     l_current_element_id   VARCHAR2(255);
17398     l_amn_parent_element_id VARCHAR2(255);
17399     l_new_element_id       VARCHAR2(255);
17400     l_parent_element_id    VARCHAR2(255);
17401     l_name                 VARCHAR2(255);
17402     l_view_name            VARCHAR2(255);
17403     l_children_view_name   VARCHAR2(255);
17404     l_ancestor_node        VARCHAR2(255);
17405     l_hgrid_element_id     VARCHAR2(255);
17406     l_case_node_id         VARCHAR2(255);
17407     l_case_node_name       VARCHAR2(255);
17408     l_switcher_element_id  VARCHAR2(255);
17409     l_case_new_node_id     VARCHAR2(255);
17410     l_case_new_node_name   VARCHAR2(255);
17411     l_old_ui_switcher_id   VARCHAR2(255);
17412     l_layout_node_id       VARCHAR2(255);
17413     l_layout_node_name     VARCHAR2(255);
17414     l_layout_new_node_id   VARCHAR2(255);
17415     l_layout_new_node_name VARCHAR2(255);
17416     l_temp_str             VARCHAR2(255);
17417     l_instr_ind            NUMBER;
17418     l_view_counter         NUMBER;
17419     l_num_copy             NUMBER;
17420     l_model_ref_expl_id    NUMBER;
17421     l_ui_action_id         NUMBER;
17422     l_length               NUMBER;
17423     l_ind                  NUMBER;
17424     l_id                   NUMBER;
17425     l_temp_ind             NUMBER;
17426     l_ui_page_elements_exists BOOLEAN := FALSE;
17427 
17428   BEGIN
17429 
17430     l_ancestor_node := get_Attribute_Value(p_xml_node,
17431                                            'ancestorNode');
17432     IF l_ancestor_node IS NOT NULL THEN
17433 
17434       l_hgrid_element_id := find_Element_Id_Of_XMLTag(p_xml_node, 'oa:tree');
17435       IF NOT(xmldom.IsNull(p_xml_node)) THEN
17436         l_ancestor_node := p_target_jrad_doc||'.'||l_hgrid_element_id;
17437 
17438         set_Attribute(p_xml_node,
17439                       'ancestorNode',
17440                       l_ancestor_node);
17441       END IF;
17442     END IF;
17443 
17444     IF xmldom.getNodeName(p_xml_node)='ui:case' THEN
17445 
17446       handle_UI_CASE_Id(p_xml_node);
17447 
17448       l_switcher_element_id := find_Element_Id_Of_XMLTag(p_xml_node, 'oa:switcher');
17449 
17450       l_case_node_id := get_Attribute_Value(p_xml_node,
17451                                             'name');
17452 
17453 
17454       l_instr_ind := 0;
17455 
17456       FOR i IN 1..LENGTH(l_case_node_id)
17457       LOOP
17458         IF SUBSTR(l_case_node_id,i,1)='_' THEN
17459           l_instr_ind := i;
17460         END IF;
17461       END LOOP;
17462 
17463       IF l_case_node_id IS NOT NULL THEN
17464         l_old_ui_switcher_id := SUBSTR(l_case_node_id,1,l_instr_ind-1);
17465         l_case_new_node_id := REPLACE(l_case_node_id,
17466           l_old_ui_switcher_id,
17467           l_switcher_element_id);
17468         set_Attribute(p_xml_node,
17469                       'name',
17470                       l_case_new_node_id);
17471       END IF;
17472 
17473     END IF;
17474 
17475     IF xmldom.getNodeName(p_xml_node)='oa:stackLayout' THEN
17476 
17477       l_parent_xml_node := xmldom.getParentNode(p_xml_node);
17478 
17479       IF NOT(xmldom.IsNull(l_parent_xml_node)) THEN
17480 
17481         IF xmldom.getNodeName(l_parent_xml_node)='ui:case' THEN
17482 
17483           l_layout_new_node_id := get_Attribute_Value(l_parent_xml_node,'name');
17484           set_Attribute(p_xml_node,
17485                         G_ID_ATTRIBUTE,
17486                         l_layout_new_node_id);
17487 
17488         END IF; -- end of IF xmldom.getNodeName(l_parent_xml_node)='ui:case'
17489 
17490       END IF; -- end of IF NOT(xmldom.IsNull(l_parent_xml_node))
17491 
17492     END IF;  -- end of IF xmldom.getNodeName(p_xml_node)='oa:stackLayout'
17493 
17494     IF l_layout_new_node_id IS NULL THEN
17495       l_current_element_id := get_Attribute_Value(p_xml_node,
17496                                                   G_ID_ATTRIBUTE);
17497 
17498       IF l_current_element_id IS NOT NULL THEN
17499         l_new_element_id := get_Element_Id();
17500       END IF;
17501 
17502     END IF;
17503 
17504     FOR i IN(SELECT parent_element_id FROM CZ_UI_PAGE_ELEMENTS
17505              WHERE ui_def_id=p_source_ui_def_id AND
17506                    page_id=p_source_ui_page_id AND
17507                    element_id=l_current_element_id)
17508     LOOP
17509       l_ui_page_elements_exists := TRUE;
17510       IF x_new_element_id IS NULL THEN
17511         x_new_element_id := l_new_element_id;
17512       END IF;
17513     END LOOP;
17514 
17515     l_amn_parent_element_id := p_amn_parent_element_id;
17516     IF  l_ui_page_elements_exists THEN
17517       l_parent_element_id := l_amn_parent_element_id;
17518       l_amn_parent_element_id := l_new_element_id;
17519     ELSIF p_parent_element_id IS NULL THEN
17520       l_parent_element_id := p_target_parent_element_id;
17521     ELSE
17522       l_parent_element_id := p_parent_element_id;
17523     END IF;
17524 
17525     IF l_ui_page_elements_exists THEN
17526         INSERT INTO CZ_UI_PAGE_ELEMENTS
17527         (ui_def_id,
17528          persistent_node_id,
17529          parent_persistent_node_id,
17530          region_persistent_node_id,
17531          pagebase_persistent_node_id,
17532          page_id,
17533          seq_nbr,
17534          ctrl_template_id,
17535          element_id,
17536          parent_element_id,
17537          element_type,
17538          instantiable_flag,
17539          ctrl_template_ui_def_id,
17540          model_ref_expl_id,
17541          element_signature_id,
17542          name,
17543          suppress_refresh_flag,
17544          deleted_flag,
17545          target_page_ui_def_id,
17546          target_page_id)
17547          SELECT
17548            p_target_ui_def_id,
17549          persistent_node_id,
17550          parent_persistent_node_id,
17551          region_persistent_node_id,
17552          p_pagebase_persistent_node_id,
17553          p_target_ui_page_id,
17554            seq_nbr,
17555          ctrl_template_id,
17556             l_new_element_id,
17557             l_parent_element_id,
17558          element_type,
17559          instantiable_flag,
17560          ctrl_template_ui_def_id,
17561          model_ref_expl_id,
17562          element_signature_id,
17563          name,
17564          suppress_refresh_flag,
17565          deleted_flag,
17566          target_page_ui_def_id,
17567          target_page_id
17568         FROM CZ_UI_PAGE_ELEMENTS
17569         WHERE ui_def_id=p_source_ui_def_id AND
17570               page_id=p_source_ui_page_id AND
17571               element_id=l_current_element_id;
17572 
17573         -- set JRAD Id of current XML node to new value
17574         set_Attribute(p_xml_node,
17575                       G_ID_ATTRIBUTE,
17576                       l_new_element_id);
17577         g_handled_attr_id_tbl(TO_NUMBER(l_new_element_id)) := l_current_element_id;
17578 
17579      END IF;
17580 
17581     -----------------------------------------------------
17582 
17583       IF l_current_element_id IS NOT NULL THEN
17584         -- set JRAD Id of current XML node to new value
17585         set_Attribute(p_xml_node,
17586                       G_ID_ATTRIBUTE,
17587                       l_new_element_id);
17588         g_handled_attr_id_tbl(TO_NUMBER(l_new_element_id)) := l_current_element_id;
17589 
17590         IF x_new_element_id IS NULL THEN
17591           x_new_element_id := l_new_element_id;
17592         END IF;
17593 
17594         IF xmldom.getNodeName(p_xml_node)='oa:switcher' THEN
17595 
17596           l_user_attribute3_value := get_Attribute_Value(p_xml_node, G_USER_ATTRIBUTE3_NAME);
17597 
17598           l_switcher_casename := get_User_Attribute(l_user_attribute3_value ,'switcherDefaultCaseName');
17599 
17600           l_switcher_casename := REPLACE(l_switcher_casename,l_current_element_id, l_new_element_id);
17601           set_User_Attribute(p_cz_attribute_name    => 'switcherDefaultCaseName',
17602                              p_cz_attribute_value   => l_switcher_casename,
17603                              px_xml_attribute_value => l_user_attribute3_value);
17604 
17605           set_Attribute(p_xml_node,
17606                         G_USER_ATTRIBUTE3_NAME,
17607                         l_user_attribute3_value);
17608         END IF;
17609 
17610       END IF;
17611 
17612       l_user_attribute_value := get_Attribute_Value(p_xml_node, G_USER_ATTRIBUTE3_NAME);
17613 
17614       IF l_user_attribute_value IS NOT NULL THEN
17615 
17616         handle_User_Attributes
17617         (px_user_attribute_value => l_user_attribute_value,
17618          p_source_ui_def_id      => p_source_ui_def_id,
17619          p_source_ui_page_id     => p_source_ui_page_id,
17620          p_target_ui_def_id      => p_target_ui_def_id,
17621          p_target_ui_page_id     => p_target_ui_page_id,
17622          p_new_element_id        => l_new_element_id,
17623          p_xml_node              => p_xml_node);
17624 
17625          set_Attribute(p_xml_node,
17626                        G_USER_ATTRIBUTE3_NAME,
17627                        l_user_attribute_value);
17628 
17629      END IF;
17630 
17631    IF p_copy_as_ui_page=FALSE THEN
17632 
17633       l_user_attribute_value := get_Attribute_Value(p_xml_node, G_USER_ATTRIBUTE1_NAME);
17634 
17635       IF l_user_attribute_value IS NOT NULL AND l_ui_page_elements_exists THEN
17636 
17637         SELECT * INTO l_ui_node FROM CZ_UI_PAGE_ELEMENTS
17638          WHERE ui_def_id=p_target_ui_def_id AND
17639                page_id=p_target_ui_page_id AND
17640                element_id=l_new_element_id;
17641 
17642         SELECT model_ref_expl_id INTO l_model_ref_expl_id FROM CZ_UI_PAGE_ELEMENTS
17643         WHERE ui_def_id=p_target_ui_def_id AND page_id=p_target_ui_page_id AND
17644              parent_element_id IS NULL AND deleted_flag NOT IN(G_YES_FLAG,G_LIMBO_FLAG,G_MARK_TO_DELETE);
17645 
17646        l_target_model_path := CZ_DEVELOPER_UTILS_PVT.runtime_relative_path(p_base_expl_id => l_model_ref_expl_id,
17647                                                      p_base_pers_id => l_ui_node.pagebase_persistent_node_id,
17648                                                      p_node_expl_id => l_ui_node.model_ref_expl_id,
17649                                                      p_node_pers_id => l_ui_node.persistent_node_id);
17650 
17651         IF l_target_model_path IS NULL THEN
17652            l_target_model_path := '.';
17653         END IF;
17654 
17655         set_Attribute(p_xml_node,
17656                       G_USER_ATTRIBUTE1_NAME,
17657                       'model_path='||l_target_model_path);
17658 
17659       END IF;
17660 
17661      l_user_attribute_value := get_Attribute_Value(p_xml_node, G_USER_ATTRIBUTE3_NAME);
17662 
17663      IF l_user_attribute_value IS NOT NULL THEN
17664 
17665        SELECT COUNT(element_id) INTO l_view_counter
17666        FROM CZ_UI_PAGE_ELEMENTS
17667        WHERE ui_def_id=p_target_ui_def_id AND page_id=p_target_ui_page_id AND
17668        deleted_flag NOT IN(G_YES_FLAG,G_MARK_TO_DELETE);
17669 
17670        l_view_name := get_User_Attribute(l_user_attribute_value ,'nodeView');
17671 
17672        IF l_view_name <> '%nodeView' AND l_view_name IS NOT NULL THEN
17673          l_ind := INSTR(l_view_name, '_');
17674          l_view_name := SUBSTR(l_view_name,1,l_ind-1)||'_'||TO_CHAR(l_view_counter);
17675          set_User_Attribute(p_cz_attribute_name    => 'nodeView',
17676                             p_cz_attribute_value   => l_view_name,
17677                             px_xml_attribute_value => l_user_attribute_value);
17678 
17679          l_children_view_name := get_User_Attribute(l_user_attribute_value ,'nodeChildrenView');
17680          IF l_children_view_name <> '%nodeChildrenView' AND l_children_view_name IS NOT NULL THEN
17681 
17682            l_ind := INSTR(l_children_view_name, '_');
17683            l_children_view_name := SUBSTR(l_children_view_name,1,l_ind-1)||'_'||TO_CHAR(l_view_counter)||'_children';
17684 
17685            set_User_Attribute(p_cz_attribute_name    => 'nodeChildrenView',
17686                               p_cz_attribute_value   => l_children_view_name,
17687                               px_xml_attribute_value => l_user_attribute_value);
17688          END IF;
17689          set_Attribute(p_xml_node,
17690                        G_USER_ATTRIBUTE3_NAME,
17691                        l_user_attribute_value);
17692        END IF;
17693      END IF;
17694 
17695      l_user_attribute_value := get_Attribute_Value(p_xml_node, G_USER_ATTRIBUTE4_NAME);
17696 
17697      IF l_user_attribute_value IS NOT NULL THEN
17698 
17699        l_name := get_User_Attribute(l_user_attribute_value ,'name');
17700 
17701        SELECT COUNT(*)+1 INTO l_num_copy FROM CZ_UI_PAGE_ELEMENTS
17702        WHERE ui_def_id=p_target_ui_def_id AND page_id=p_target_ui_page_id AND
17703              name like l_name||'%' AND deleted_flag=G_NO_FLAG;
17704 
17705        l_name := l_name||' ('||TO_CHAR(l_num_copy)||')';
17706 
17707        set_User_Attribute(p_cz_attribute_name    => 'name',
17708                           p_cz_attribute_value   => l_name,
17709                           px_xml_attribute_value => l_user_attribute_value);
17710 
17711        set_Attribute(p_xml_node,
17712                      G_USER_ATTRIBUTE4_NAME,
17713                      l_user_attribute_value);
17714      END IF;
17715 
17716      IF l_new_element_id IS NOT NULL THEN
17717        UPDATE CZ_UI_PAGE_ELEMENTS
17718           SET name=l_name
17719         WHERE ui_def_id=p_target_ui_def_id AND page_id=p_target_ui_page_id AND
17720               element_id = l_new_element_id;
17721      END IF;
17722 
17723     END IF;
17724 
17725     -----------------------------------------------------
17726 
17727     IF l_current_element_id IS NULL THEN
17728       l_current_element_id := p_parent_element_id;
17729     END IF;
17730 
17731     l_child_nodes_tbl := xmldom.getChildNodes(p_xml_node);
17732     l_length          := xmldom.getLength(l_child_nodes_tbl);
17733 
17734     FOR k IN 0 .. l_length - 1
17735     LOOP
17736       --
17737       -- get next child DOM node
17738       --
17739       l_child_xml_node := xmldom.item(l_child_nodes_tbl, k);
17740 
17741       copy_Tree_Level(p_xml_node                    => l_child_xml_node,
17742                       p_source_ui_def_id            => p_source_ui_def_id,
17743                       p_target_ui_def_id            => p_target_ui_def_id,
17744                       p_source_ui_page_id           => p_source_ui_page_id,
17745                       p_target_ui_page_id           => p_target_ui_page_id,
17746                       p_parent_element_id           => l_current_element_id,
17747                       p_target_parent_element_id    => p_target_parent_element_id,
17748                       p_pagebase_persistent_node_id => p_pagebase_persistent_node_id,
17749                       x_new_element_id              => x_new_element_id,
17750                       p_copy_as_ui_page             => p_copy_as_ui_page,
17751                       p_source_jrad_doc             => p_source_jrad_doc,
17752                       p_target_jrad_doc             => p_target_jrad_doc,
17753                       p_amn_parent_element_id       => l_amn_parent_element_id);
17754 
17755     END LOOP;
17756 
17757   END copy_Tree_Level;
17758 
17759   --
17760   -- copy records which corresponds with user attributes
17761   --
17762   PROCEDURE copy_User_Attributes(p_xml_node               xmldom.DOMNode,
17763                                  p_source_ui_def_id       NUMBER,
17764                                  p_target_ui_def_id       NUMBER,
17765                                  p_source_template_id     NUMBER DEFAULT NULL,
17766                                  p_target_template_id     NUMBER DEFAULT NULL) IS
17767 
17768     l_child_nodes_tbl xmldom.DOMNodeList;
17769     l_child_xml_node  xmldom.DOMNode;
17770     l_length          NUMBER;
17771 
17772   BEGIN
17773     copy_User_Attr_For_Node(p_xml_node          => p_xml_node,
17774                             p_source_ui_def_id  => p_source_ui_def_id,
17775                             p_target_ui_def_id  => p_target_ui_def_id,
17776                             p_source_template_id=> p_source_template_id,
17777                             p_target_template_id=> p_target_template_id);
17778 
17779     l_child_nodes_tbl := xmldom.getChildNodes(p_xml_node);
17780     l_length          := xmldom.getLength(l_child_nodes_tbl);
17781 
17782     FOR k IN 0 .. l_length - 1
17783     LOOP
17784       --
17785       -- get next child DOM node
17786       --
17787       l_child_xml_node := xmldom.item(l_child_nodes_tbl, k);
17788 
17789       copy_User_Attr_For_Node(p_xml_node          => l_child_xml_node,
17790                               p_source_ui_def_id  => p_source_ui_def_id,
17791                               p_target_ui_def_id  => p_target_ui_def_id,
17792                               p_source_template_id=> p_source_template_id,
17793                               p_target_template_id=> p_target_template_id);
17794 
17795       copy_User_Attributes(p_xml_node          => l_child_xml_node,
17796                            p_source_ui_def_id  => p_source_ui_def_id,
17797                            p_target_ui_def_id  => p_target_ui_def_id,
17798                            p_source_template_id=> p_source_template_id,
17799                            p_target_template_id=> p_target_template_id);
17800     END LOOP;
17801 
17802   EXCEPTION
17803     WHEN OTHERS THEN
17804       DEBUG('copy_User_Attributes() : '||SQLERRM);
17805   END copy_User_Attributes;
17806 
17807   --
17808   -- This procedure sets/propogates deleted_flag='1' from a given UI element to its subtree in CZ_UI_PAGE_ELEMENTS table.
17809   -- Also the procedure parses the corresponding XML to collect all caption intl_text_ids, UI condtion rules ids of
17810   -- deleted UI elements and then performs a soft delete ( set deleted_flag='1' ) of corresponding records
17811   -- in tables CZ_LOCALIZED_TEXTS and CZ_RULES which have seeded_flag='0'.
17812   -- If  parameter p_delete_xml = '1' then it also deletes a corresponding XML elements.
17813   --
17814   PROCEDURE delete_UI_Subtree(p_ui_def_id      IN NUMBER,
17815                               p_ui_page_id     IN NUMBER,
17816                               p_element_id     IN VARCHAR2,
17817                               p_delete_xml     IN VARCHAR2,
17818                               x_return_status  OUT NOCOPY VARCHAR2,
17819                               x_msg_count      OUT NOCOPY NUMBER,
17820                               x_msg_data       OUT NOCOPY VARCHAR2) IS
17821 
17822    l_xmldoc                   xmldom.DOMDocument;
17823    l_xml_node                 xmldom.DOMNode;
17824    l_element_id_tbl           varchar_tbl_type;
17825    l_out_node                 xmldom.DOMNode;
17826    l_parent_node              xmldom.DOMNode;
17827    l_page_ref_id              CZ_UI_PAGE_REFS.page_ref_id%TYPE;
17828    l_parent_element_id        CZ_UI_PAGE_ELEMENTS.parent_element_id%TYPE;
17829    l_jrad_doc                 CZ_UI_PAGES.jrad_doc%TYPE;
17830    l_page_ref_type            CZ_UI_PAGE_REFS.page_ref_type%TYPE;
17831    l_ui_context               CZ_UI_DEFS%ROWTYPE;
17832    l_condition_id             NUMBER;
17833    l_caption_text_id          NUMBER;
17834    l_caption_rule_id          NUMBER;
17835    l_display_condition_id     NUMBER;
17836    l_enabled_condition_id     NUMBER;
17837 
17838   BEGIN
17839 
17840     --
17841     -- initialize FND variables/packages
17842     --
17843     Initialize(x_return_status,x_msg_count,x_msg_data);
17844 
17845     --
17846     -- get UI context
17847     --
17848     g_ui_def_nodes_tbl.DELETE;
17849     l_ui_context := get_UI_Context(p_ui_def_id => p_ui_def_id);
17850 
17851     --
17852     -- propogate deleted_flag in UI subtree
17853     --
17854     UPDATE CZ_UI_PAGE_ELEMENTS
17855        SET deleted_flag=G_LIMBO_FLAG
17856      WHERE (ui_def_id,page_id,element_id) IN
17857      (SELECT ui_def_id,page_id,element_id FROM CZ_UI_PAGE_ELEMENTS
17858       START WITH ui_def_id=p_ui_def_id AND page_id=p_ui_page_id AND element_id=p_element_id
17859       CONNECT BY PRIOR ui_def_id=p_ui_def_id AND
17860                        PRIOR page_id=p_ui_page_id AND page_id=p_ui_page_id AND
17861                        PRIOR element_id=parent_element_id AND
17862                        PRIOR ui_def_id=p_ui_def_id AND ui_def_id=p_ui_def_id AND
17863                        PRIOR deleted_flag=G_NO_FLAG AND deleted_flag=G_NO_FLAG)
17864     RETURNING element_id
17865     BULK COLLECT INTO l_element_id_tbl;
17866 
17867     IF l_element_id_tbl.COUNT=0 THEN
17868       RETURN;
17869     END IF;
17870 
17871     SELECT parent_element_id
17872      INTO l_parent_element_id
17873      FROM CZ_UI_PAGE_ELEMENTS
17874     WHERE ui_def_id=p_ui_def_id AND
17875           page_id=p_ui_page_id AND
17876           element_id=p_element_id;
17877 
17878     SELECT jrad_doc INTO l_jrad_doc FROM CZ_UI_PAGES
17879     WHERE page_id=p_ui_page_id AND ui_def_id=p_ui_def_id;
17880 
17881     IF  l_parent_element_id IS NULL OR p_element_id=G_NO_FLAG THEN  -- this is UI page ( and it should be deleted )
17882 
17883       FOR i IN(SELECT page_ref_id,page_ref_type,page_set_id,condition_id,caption_text_id,caption_rule_id
17884                  FROM CZ_UI_PAGE_REFS
17885                 WHERE ui_def_id=p_ui_def_id AND target_page_id=p_ui_page_id AND deleted_flag=G_NO_FLAG)
17886       LOOP
17887 
17888         UPDATE CZ_LOCALIZED_TEXTS
17889            SET deleted_flag=G_YES_FLAG
17890          WHERE persistent_intl_text_id=i.caption_text_id AND
17891                ui_def_id=p_ui_def_id AND seeded_flag=G_NO_FLAG;
17892 
17893         UPDATE CZ_RULES
17894            SET deleted_flag=G_YES_FLAG
17895          WHERE persistent_rule_id IN(i.condition_id,i.caption_rule_id) AND
17896                ui_def_id=p_ui_def_id AND seeded_flag=G_NO_FLAG;
17897 
17898         IF l_page_ref_type IN( G_MODEL_TREE_MENU, G_MULTI_LEVEL_MENU) THEN
17899           UPDATE CZ_UI_PAGE_REFS
17900              SET deleted_flag=G_YES_FLAG
17901            WHERE ui_def_id=p_ui_def_id
17902                  AND deleted_flag=G_NO_FLAG
17903                  AND (ui_def_id,page_ref_id,page_set_id) IN
17904                  (SELECT a.ui_def_id,a.page_ref_id,a.page_set_id FROM CZ_UI_PAGE_REFS a
17905                    START WITH a.ui_def_id=p_ui_def_id AND
17906                               a.page_ref_id=i.page_ref_id
17907                    CONNECT BY PRIOR a.page_ref_id=a.parent_page_ref_id AND
17908                                     a.deleted_flag='0' AND a.ui_def_id=p_ui_def_id AND
17909                               PRIOR a.ui_def_id=p_ui_def_id AND
17910                                     a.page_set_id=i.page_set_id AND
17911                               PRIOR a.page_set_id=i.page_set_id);
17912         ELSE
17913           UPDATE CZ_UI_PAGE_REFS
17914              SET deleted_flag=G_YES_FLAG
17915            WHERE ui_def_id=p_ui_def_id AND page_ref_id=i.page_ref_id;
17916         END IF;
17917 
17918       END LOOP;
17919 
17920       --
17921       -- set data for Page Sets
17922       --
17923       handle_Page_Flows();
17924 
17925       UPDATE CZ_UI_PAGES
17926          SET deleted_flag=G_YES_FLAG
17927        WHERE page_id=p_ui_page_id AND ui_def_id=p_ui_def_id AND seeded_flag=G_NO_FLAG
17928       RETURNING caption_text_id,caption_rule_id,display_condition_id,enabled_condition_id
17929       INTO l_caption_text_id,l_caption_rule_id,l_display_condition_id,l_enabled_condition_id;
17930 
17931       UPDATE CZ_LOCALIZED_TEXTS
17932          SET deleted_flag=G_YES_FLAG
17933        WHERE intl_text_id=l_caption_text_id AND ui_def_id=p_ui_def_id AND seeded_flag=G_NO_FLAG;
17934 
17935       UPDATE CZ_RULES
17936          SET deleted_flag=G_YES_FLAG
17937        WHERE rule_id IN(l_display_condition_id,l_caption_rule_id,l_enabled_condition_id)
17938          AND seeded_flag=G_NO_FLAG;
17939 
17940     END IF;
17941 
17942     FORALL i IN l_element_id_tbl.First..l_element_id_tbl.Last
17943       UPDATE CZ_UI_ACTIONS
17944          SET deleted_flag=G_YES_FLAG
17945        WHERE ui_def_id=p_ui_def_id AND
17946              source_page_id=p_ui_page_id AND
17947              element_id=l_element_id_tbl(i) AND deleted_flag=G_NO_FLAG AND seeded_flag=G_NO_FLAG;
17948 
17949     FORALL i IN l_element_id_tbl.First..l_element_id_tbl.Last
17950       UPDATE CZ_RULES
17951          SET deleted_flag=G_YES_FLAG
17952        WHERE ui_def_id=p_ui_def_id AND
17953              ui_page_id=p_ui_page_id AND
17954              ui_page_element_id=l_element_id_tbl(i) AND
17955              deleted_flag=G_NO_FLAG AND seeded_flag=G_NO_FLAG;
17956 
17957     FORALL i IN l_element_id_tbl.First..l_element_id_tbl.Last
17958       UPDATE CZ_LOCALIZED_TEXTS
17959          SET deleted_flag=G_YES_FLAG
17960        WHERE ui_def_id=p_ui_def_id AND
17961              ui_page_id=p_ui_page_id AND
17962              ui_page_element_id=l_element_id_tbl(i) AND
17963              deleted_flag=G_NO_FLAG AND seeded_flag=G_NO_FLAG;
17964 
17965     --
17966     -- open XML parser
17967     --
17968     Open_Parser();
17969 
17970     --
17971     -- create UI Template in JRAD repository
17972     --
17973     l_xmldoc := parse_JRAD_Document(p_doc_full_name => l_jrad_doc);
17974 
17975     IF xmldom.isNull(l_xmldoc) THEN
17976       add_Error_Message(p_message_name => 'CZ_WRONG_UI_TEMPLATE',
17977                         p_token_name   => 'UI_TEMPLATE',
17978                         p_token_value  => l_jrad_doc,
17979                         p_fatal_error  => TRUE);
17980       RAISE WRONG_UI_TEMPLATE;
17981     END IF;
17982 
17983     l_xml_node := find_XML_Node_By_Attribute(p_subtree_doc     => l_xmldoc,
17984                                              p_attribute_name  => G_ID_ATTRIBUTE,
17985                                              p_attribute_value => p_element_id);
17986     --
17987     -- delete user attributes from the list of attrributes to delete
17988     --
17989     delete_User_Attributes(l_xml_node, p_ui_def_id);
17990 
17991     IF p_delete_xml=G_YES_FLAG THEN
17992       IF l_parent_element_id IS NULL OR p_element_id=G_NO_FLAG THEN
17993         jdr_docbuilder.deleteDocument(l_jrad_doc);
17994       ELSE
17995         l_parent_node:=xmldom.getParentNode(l_xml_node);
17996         l_out_node:=xmldom.removeChild(l_parent_node,l_xml_node);
17997         Save_Document(p_xml_doc   => l_xmldoc,
17998                       p_doc_name  => l_jrad_doc);
17999       END IF;
18000 
18001       UPDATE CZ_UI_PAGES
18002          SET page_rev_nbr=page_rev_nbr+1
18003        WHERE ui_def_id=p_ui_def_id AND
18004              page_id=p_ui_page_id;
18005 
18006     END IF;
18007 
18008     --
18009     -- close XML parser
18010     --
18011     Close_Parser();
18012 
18013 
18014   EXCEPTION
18015     WHEN WRONG_UI_TEMPLATE THEN
18016       x_return_status := FND_API.G_RET_STS_ERROR;
18017       x_msg_count     := g_MSG_COUNT;
18018       x_msg_data      := fnd_msg_pub.GET(g_MSG_COUNT,fnd_api.g_false);
18019       --DEBUG(x_msg_data);
18020     WHEN OTHERS THEN
18021       x_return_status := FND_API.G_RET_STS_ERROR;
18022       x_msg_count := 1;
18023       x_msg_data  := SQLERRM;
18024       fnd_msg_pub.add_exc_msg('CZ_UIOA_PVT', 'delete_UI_Subtree', x_msg_data);
18025       --DEBUG(x_msg_data);
18026   END delete_UI_Subtree;
18027 
18028   --
18029   -- This procedure sets/propogates deleted_flag='1' from a given UI page to all related UI entities which belong to this page,
18030   -- parses the corresponding XML to collect all caption intl_text_ids, UI condtion rules ids of
18031   -- deleted UI elements and then performs a soft delete ( set deleted_flag='1' ) of corresponding records
18032   -- in tables CZ_LOCALIZED_TEXTS and CZ_RULES which have seeded_flag='0'  and deletes the corresponding XML/JRAD document.
18033   --
18034   PROCEDURE delete_UI_Page(p_ui_def_id      IN NUMBER,         -- ui_def_id of UI
18035                             p_ui_page_id    IN NUMBER,        -- page_id of
18036                                                                 -- UI page which needs
18037                                                                 -- to be deleted.
18038                             x_return_status  OUT NOCOPY VARCHAR2,-- status string
18039                             x_msg_count      OUT NOCOPY NUMBER,  -- number of error messages
18040                             x_msg_data       OUT NOCOPY VARCHAR2 -- string which contains error messages
18041                             ) IS
18042 
18043     l_element_id CZ_UI_PAGE_ELEMENTS.element_id%TYPE;
18044 
18045   BEGIN
18046 
18047     --
18048     -- initialize FND variables/packages
18049     --
18050     Initialize(x_return_status,x_msg_count,x_msg_data);
18051 
18052     --
18053     -- get element_id of root element of UI page
18054     --
18055     FOR i IN(SELECT element_id FROM CZ_UI_PAGE_ELEMENTS
18056               WHERE ui_def_id=p_ui_def_id AND page_id=p_ui_page_id AND
18057                     parent_element_id IS NULL AND deleted_flag=G_NO_FLAG)
18058     LOOP
18059       --
18060       -- delete UI elements of this UI page starting with
18061       -- the root element
18062       --
18063       delete_UI_Subtree(p_ui_def_id      => p_ui_def_id,
18064                         p_ui_page_id     => p_ui_page_id,
18065                         p_element_id     => i.element_id,
18066                         p_delete_xml     => G_YES_FLAG,
18067                         x_return_status  => x_return_status,
18068                         x_msg_count      => x_msg_count,
18069                         x_msg_data       => x_msg_data);
18070     END LOOP;
18071 
18072     -- handle page include region
18073     UPDATE cz_ui_page_elements
18074     SET target_page_ui_def_id = NULL, target_page_id = NULL
18075     WHERE target_page_ui_def_id = p_ui_def_id AND target_page_id = p_ui_page_id AND
18076           deleted_flag = '0' AND element_signature_id = G_PAGE_INCL_REGION_SIGNATURE;
18077   EXCEPTION
18078     WHEN OTHERS THEN
18079       x_return_status := FND_API.G_RET_STS_ERROR;
18080       x_msg_count := 1;
18081       x_msg_data  := SUBSTR(DBMS_UTILITY.format_error_backtrace,1,4000);
18082       fnd_msg_pub.add_exc_msg('CZ_UIOA_PVT', 'delete_UI_Page', x_msg_data);
18083       DEBUG(x_msg_data);
18084   END delete_UI_Page;
18085 
18086   --
18087   -- This procedure sets/propogates deleted_flag='1' from a given Page Ref record specified by parameter p_page_ref_id.
18088   -- a target UI pages are not deleted.
18089   --
18090   PROCEDURE delete_UI_Page_Ref(p_ui_def_id      IN NUMBER,          -- ui_def_id of UI
18091                                 p_page_ref_id   IN NUMBER,          -- page_ref_id of
18092                                                                     -- Menu/Page Flow link which needs
18093                                                                     -- to be deleted.
18094                                 x_return_status  OUT NOCOPY VARCHAR2,-- status string
18095                                 x_msg_count      OUT NOCOPY NUMBER,  -- number of error messages
18096                                 x_msg_data       OUT NOCOPY VARCHAR2 -- string which contains error messages
18097                                 ) IS
18098 
18099    l_parent_page_ref_id   CZ_UI_PAGE_REFS.parent_page_ref_id%TYPE;
18100    l_ui_context           CZ_UI_DEFS%ROWTYPE;
18101    l_page_id              CZ_UI_PAGES.page_id%TYPE;
18102    l_page_set_id          CZ_UI_PAGES.page_set_id%TYPE;
18103    l_page_ref_type        CZ_UI_PAGE_REFS.page_ref_type%TYPE;
18104 
18105   BEGIN
18106 
18107     --
18108     -- initialize FND variables/packages
18109     --
18110     Initialize(x_return_status,x_msg_count,x_msg_data);
18111 
18112     g_ui_def_nodes_tbl.DELETE;
18113 
18114     --
18115     -- get UI context
18116     --
18117     l_ui_context := get_UI_Context(p_ui_def_id => p_ui_def_id);
18118 
18119     SELECT page_set_id, page_ref_type
18120       INTO l_page_set_id, l_page_ref_type
18121       FROM CZ_UI_PAGE_REFS
18122      WHERE ui_def_id=p_ui_def_id AND page_ref_id=p_page_ref_id
18123            AND deleted_flag=G_NO_FLAG;
18124 
18125     IF l_page_ref_type IN( G_MODEL_TREE_MENU, G_MULTI_LEVEL_MENU) THEN
18126       UPDATE CZ_UI_PAGE_REFS
18127          SET deleted_flag=G_YES_FLAG
18128        WHERE ui_def_id=p_ui_def_id
18129              AND deleted_flag=G_NO_FLAG
18130              AND (ui_def_id,page_ref_id,page_set_id) IN
18131              (SELECT a.ui_def_id,a.page_ref_id,a.page_set_id FROM CZ_UI_PAGE_REFS a
18132              START WITH a.ui_def_id=p_ui_def_id AND
18133              a.page_ref_id=p_page_ref_id
18134              CONNECT BY PRIOR a.page_ref_id=a.parent_page_ref_id AND
18135              a.deleted_flag='0' AND a.ui_def_id=p_ui_def_id AND
18136              PRIOR a.ui_def_id=p_ui_def_id AND
18137              a.page_set_id=l_page_set_id AND
18138              PRIOR a.page_set_id=l_page_set_id);
18139     ELSE
18140       UPDATE CZ_UI_PAGE_REFS
18141          SET deleted_flag=G_YES_FLAG
18142        WHERE ui_def_id=p_ui_def_id
18143              AND page_ref_id=p_page_ref_id;
18144     END IF;
18145 
18146     --
18147     -- null out CZ_UI_PAGES.page_set_id for those UI pages in this UI
18148     -- which have no corresponding records in CZ_UI_PAGE_REFS
18149     --
18150     UPDATE CZ_UI_PAGES a
18151        SET page_set_id=NULL
18152      WHERE ui_def_id=p_ui_def_id AND page_set_id IS NOT NULL AND
18153            NOT EXISTS(SELECT NULL FROM CZ_UI_PAGE_REFS b
18154            WHERE b.ui_def_id=p_ui_def_id AND target_page_id=a.page_id AND
18155            deleted_flag='0');
18156 
18157     IF l_page_ref_type IN( G_PAGE_FLOW, G_SUBTABS) THEN
18158       --
18159       -- set data for Page Sets
18160       --
18161       handle_Page_Flows();
18162     END IF;
18163 
18164   EXCEPTION
18165     WHEN OTHERS THEN
18166       x_return_status := FND_API.G_RET_STS_ERROR;
18167       x_msg_count := 1;
18168       x_msg_data  := SUBSTR(DBMS_UTILITY.format_error_backtrace,1,4000);
18169       fnd_msg_pub.add_exc_msg('CZ_UIOA_PVT', 'delete_UI_Page_Ref', x_msg_data);
18170       DEBUG(x_msg_data);
18171   END delete_UI_Page_Ref;
18172 
18173   --
18174   -- For a given Local Template specified by parameters p_template_id and p_ui_def_id this procedure performs a soft deletion
18175   -- ( sets deleted_flag='1' ) of corresponding CZ_UI_TEMPLATES record and deletes the corresponding JRAD/XML document.
18176 	-- It parses the corresponding XML to collect all caption intl_text_ids and UI Condition Ids and performs soft
18177   -- Delete of corresponding records in CZ_LOCALIZED_TEXTS
18178   -- and CZ_RULES which have seeded_flag='0'
18179   --
18180   PROCEDURE delete_Local_Template(p_template_ui_def_id  IN NUMBER,     -- ui_def_id of UI
18181                                   p_template_id         IN NUMBER,     -- template_id of
18182                                                                        -- Local UI Template which needs
18183                                                                        -- to be deleted.
18184                                   x_return_status  OUT NOCOPY VARCHAR2,-- status string
18185                                   x_msg_count      OUT NOCOPY NUMBER,  -- number of error messages
18186                                   x_msg_data       OUT NOCOPY VARCHAR2 -- string which contains error messages
18187                                   ) IS
18188 
18189    l_xmldoc                   xmldom.DOMDocument;
18190    l_jrad_doc                 CZ_UI_PAGES.jrad_doc%TYPE;
18191 
18192   BEGIN
18193 
18194     --
18195     -- initialize FND variables/packages
18196     --
18197     Initialize(x_return_status,x_msg_count,x_msg_data);
18198 
18199     FOR i IN(SELECT 'x' FROM CZ_MODEL_PUBLICATIONS
18200              WHERE object_id=p_template_id AND object_type='UIT' AND
18201                    deleted_flag='0' AND rownum<2)
18202     LOOP
18203       RETURN;
18204     END LOOP;
18205 
18206     --
18207     -- get full JRAD path of the given UI template
18208     --
18209     SELECT jrad_doc INTO l_jrad_doc FROM CZ_UI_TEMPLATES
18210     WHERE ui_def_id=p_template_ui_def_id AND template_id=p_template_id;
18211 
18212     --
18213     -- open XML parser
18214     --
18215     Open_Parser();
18216 
18217     --
18218     -- create UI Template in JRAD repository
18219     --
18220     l_xmldoc := parse_JRAD_Document(p_doc_full_name => l_jrad_doc);
18221 
18222     IF xmldom.isNull(l_xmldoc) THEN
18223       add_Error_Message(p_message_name => 'CZ_WRONG_UI_TEMPLATE',
18224                         p_token_name   => 'UI_TEMPLATE',
18225                         p_token_value  => l_jrad_doc,
18226                         p_fatal_error  => TRUE);
18227       RAISE WRONG_UI_TEMPLATE;
18228     END IF;
18229 
18230     --
18231     -- delete user attributes from the list of attrributes to delete
18232     --
18233     delete_User_Attributes(xmldom.makeNode(l_xmldoc),p_template_ui_def_id,
18234                            p_template_id, p_template_ui_def_id);
18235 
18236     jdr_docbuilder.deleteDocument(l_jrad_doc);
18237 
18238     --
18239     -- close XML parser
18240     --
18241     Close_Parser();
18242 
18243     DELETE FROM CZ_UI_TEMPLATES
18244     WHERE ui_def_id=p_template_ui_def_id AND template_id=p_template_id
18245           AND seeded_flag=G_NO_FLAG;
18246 
18247     DELETE FROM CZ_UI_REF_TEMPLATES
18248     WHERE template_ui_def_id=p_template_ui_def_id AND template_id=p_template_id;
18249 
18250     UPDATE CZ_UI_TEMPLATE_ELEMENTS
18251        SET deleted_flag=G_YES_FLAG
18252      WHERE template_id=p_template_ui_def_id AND
18253            deleted_flag=G_NO_FLAG;
18254 
18255   EXCEPTION
18256     WHEN WRONG_UI_TEMPLATE THEN
18257       x_return_status := FND_API.G_RET_STS_ERROR;
18258       x_msg_count     := g_MSG_COUNT;
18259       x_msg_data      := fnd_msg_pub.GET(g_MSG_COUNT,fnd_api.g_false);
18260       DEBUG(x_msg_data);
18261     WHEN OTHERS THEN
18262       x_return_status := FND_API.G_RET_STS_ERROR;
18263       x_msg_count := 1;
18264       x_msg_data  := SUBSTR(DBMS_UTILITY.format_error_backtrace,1,4000);
18265       fnd_msg_pub.add_exc_msg('CZ_UIOA_PVT', 'delete_Local_Template', x_msg_data);
18266       DEBUG('delete_Local_Template() : '||x_msg_data);
18267   END delete_Local_Template;
18268 
18269   --
18270   -- This procedure deletes subtree  identified by p_element_id  of UI Local Template.
18271   -- Follows the same rules as deleting an element in a page.
18272   --
18273   PROCEDURE delete_Local_Template_Elem(p_template_ui_def_id  IN NUMBER, -- ui_def_id of UI
18274                                        p_template_id         IN NUMBER,        -- template_id of
18275                                        p_element_id          IN VARCHAR2,        -- element_id of Element to delete
18276                                        x_return_status  OUT NOCOPY VARCHAR2,-- status string
18277                                        x_msg_count      OUT NOCOPY NUMBER,  -- number of error messages
18278                                        x_msg_data       OUT NOCOPY VARCHAR2 -- string which contains error messages
18279                                        ) IS
18280 
18281     l_xmldoc                   xmldom.DOMDocument;
18282     l_out_node                 xmldom.DOMNode;
18283     l_parent_node              xmldom.DOMNode;
18284     l_xml_node                 xmldom.DOMNode;
18285     l_jrad_doc                 CZ_UI_PAGES.jrad_doc%TYPE;
18286     l_needs_to_be_unlocked     BOOLEAN;
18287 
18288   BEGIN
18289 
18290     --
18291     -- lock source UI Template
18292     --
18293     lock_UI_Template( p_template_id, p_template_ui_def_id, l_needs_to_be_unlocked );
18294 
18295     --
18296     -- initialize FND variables/packages
18297     --
18298     Initialize(x_return_status,x_msg_count,x_msg_data);
18299 
18300     --
18301     -- get full JRAD path of the given UI template
18302     --
18303     SELECT jrad_doc INTO l_jrad_doc FROM CZ_UI_TEMPLATES
18304     WHERE ui_def_id=p_template_ui_def_id AND template_id=p_template_id;
18305 
18306     --
18307     -- open XML parser
18308     --
18309     Open_Parser();
18310 
18311     --
18312     -- create UI Template in JRAD repository
18313     --
18314     l_xmldoc := parse_JRAD_Document(p_doc_full_name => l_jrad_doc);
18315 
18316     IF xmldom.isNull(l_xmldoc) THEN
18317       add_Error_Message(p_message_name => 'CZ_WRONG_UI_TEMPLATE',
18318                         p_token_name   => 'UI_TEMPLATE',
18319                         p_token_value  => l_jrad_doc,
18320                         p_fatal_error  => TRUE);
18321       RAISE WRONG_UI_TEMPLATE;
18322     END IF;
18323 
18324     l_xml_node := find_XML_Node_By_Attribute(p_subtree_doc     => l_xmldoc,
18325                                              p_attribute_name  => G_ID_ATTRIBUTE,
18326                                              p_attribute_value => p_element_id);
18327 
18328     IF xmldom.isNull(l_xml_node) THEN
18329       l_xml_node := find_XML_Node_By_Attribute(p_subtree_doc        => l_xmldoc,
18330                                                p_attribute_name     => 'caseId',
18331                                                p_attribute_value    => p_element_id,
18332                                                p_in_user_attributes => G_YES_FLAG  );
18333 
18334       IF xmldom.isNull(l_xml_node) THEN
18335         x_return_status := FND_API.G_RET_STS_ERROR;
18336         x_msg_count := 1;
18337         x_msg_data  := 'Element with element_id="'||p_element_id||'" does exist.';
18338         fnd_msg_pub.add_exc_msg('CZ_UIOA_PVT', 'delete_Local_Template_Elem', 'Element with element_id="'||
18339         p_element_id||'" does exist.');
18340         DEBUG('delete_Local_Template_Elem() : '||'Element with element_id="'||
18341         p_element_id||'" does exist.');
18342         RETURN;
18343       END IF;
18344     END IF;
18345 
18346     --
18347     -- delete user attributes from the list of attrributes to delete
18348     --
18349     delete_User_Attributes(l_xml_node, p_template_ui_def_id,
18350                            p_template_id, p_template_ui_def_id);
18351 
18352     --
18353     -- remove XML subtree
18354     --
18355     l_parent_node:=xmldom.getParentNode(l_xml_node);
18356     l_out_node:=xmldom.removeChild(l_parent_node,l_xml_node);
18357 
18358 
18359     refresh_Templ_Ref_Counts(l_xmldoc, p_template_ui_def_id, p_template_id);
18360 
18361     --
18362     -- save XML in JRAD repository
18363     --
18364     Save_Document(p_xml_doc   => l_xmldoc,
18365                   p_doc_name  => l_jrad_doc);
18366 
18367     --
18368     -- close XML parser
18369     --
18370     Close_Parser();
18371 
18372     /* *** changes for build 21p *** */
18373 
18374     UPDATE CZ_UI_TEMPLATES
18375        SET template_rev_nbr=NVL(template_rev_nbr,0)+1
18376      WHERE ui_def_id=p_template_ui_def_id AND template_id=p_template_id;
18377 
18378     --
18379     -- unlock source UI Template
18380     --
18381     unlock_UI_Template( p_template_id, p_template_ui_def_id, l_needs_to_be_unlocked );
18382 
18383   EXCEPTION
18384       WHEN WRONG_UI_TEMPLATE THEN
18385       x_return_status := FND_API.G_RET_STS_ERROR;
18386       x_msg_count     := g_MSG_COUNT;
18387       x_msg_data      := fnd_msg_pub.GET(g_MSG_COUNT,fnd_api.g_false);
18388       DEBUG(x_msg_data);
18389       --
18390       -- unlock source UI Template
18391       --
18392       unlock_UI_Template( p_template_id, p_template_ui_def_id, l_needs_to_be_unlocked );
18393 
18394     WHEN OTHERS THEN
18395       x_return_status := FND_API.G_RET_STS_ERROR;
18396       x_msg_count := 1;
18397       x_msg_data  := SUBSTR(DBMS_UTILITY.format_error_backtrace,1,4000);
18398       fnd_msg_pub.add_exc_msg('CZ_UIOA_PVT', 'delete_Local_Template_Elem', x_msg_data);
18399       DEBUG('delete_Local_Template_Elem() : '||x_msg_data);
18400       --
18401       -- unlock source UI Template
18402       --
18403       unlock_UI_Template( p_template_id, p_template_ui_def_id, l_needs_to_be_unlocked );
18404 
18405   END delete_Local_Template_Elem;
18406 
18407   --
18408   -- This procedure copies a UI element and its subtree specified by parameters p_element_id, p_page_id and p_ui_def_id to
18409   -- to a new location specified by paremeters p_new_parent_element_id - new parent UI element  and p_target_ui_def_id.
18410   -- For all caption intl_text_ids, UI condtion rules ids  from the source page a new copies will be created for use in the copied page.
18411   -- Action records associated to the UI Elements will also be copied, pointing to the same action as the source Element.
18412   PROCEDURE copy_UI_Subtree(p_source_ui_def_id      IN NUMBER,    -- ui_def_id of source UI
18413                             p_source_element_id     IN VARCHAR2,  -- element_id of
18414                                                                   -- UI element which needs
18415                                                                   -- to be copied ( source element )
18416                             p_source_ui_page_id IN NUMBER,        -- page_id of UI page to which source element belongs to
18417                             p_target_ui_def_id  IN NUMBER, -- ui_def_id of target UI
18418                             p_target_ui_page_id IN NUMBER,        -- page_id of target UI page
18419                             p_target_parent_element_id     IN VARCHAR2,  -- element_id of
18420                                                                          -- new parent UI element
18421                             x_new_element_id OUT NOCOPY VARCHAR2,     -- element_id of copied UI element
18422                             x_return_status  OUT NOCOPY VARCHAR2,-- status string
18423                             x_msg_count      OUT NOCOPY NUMBER,  -- number of error messages
18424                             x_msg_data       OUT NOCOPY VARCHAR2 -- string which contains error messages
18425                             ) IS
18426 
18427     l_source_xmldoc               xmldom.DOMDocument;
18428     l_target_xmldoc               xmldom.DOMDocument;
18429     l_source_xml_node             xmldom.DOMNode;
18430     l_target_xml_node             xmldom.DOMNode;
18431     l_new_xml_root_node           xmldom.DOMNode;
18432     l_out_xml_node                xmldom.DOMNode;
18433     l_target_uicont_xml_node      xmldom.DOMNode;
18434     l_stacklayout_node            xmldom.DOMNode;
18435     l_stacklayout_uicont_xml_node xmldom.DOMNode;
18436     l_xml_temp_node               xmldom.DOMNode;
18437     l_source_jrad_doc             CZ_UI_PAGES.jrad_doc%TYPE;
18438     l_target_jrad_doc             CZ_UI_PAGES.jrad_doc%TYPE;
18439     l_xml_uicont_node             xmldom.DOMNode;
18440     l_xml_new_node                xmldom.DOMNode;
18441     l_amn_parent_element_id       CZ_UI_PAGE_ELEMENTS.element_id%TYPE;
18442     l_pagebase_persistent_node_id NUMBER;
18443     l_length                      NUMBER;
18444     l_caseid_to_copy              BOOLEAN;
18445 
18446   BEGIN
18447 
18448     --
18449     -- initialize FND variables/packages
18450     --
18451     Initialize(x_return_status,x_msg_count,x_msg_data);
18452 
18453     g_handled_attr_id_tbl.DELETE;
18454 
18455     set_Local_UI_Context(p_target_ui_def_id);
18456 
18457     --
18458     -- get jrad_doc of source UI page to which this UI element belongs to
18459     --
18460     SELECT jrad_doc
18461       INTO l_source_jrad_doc FROM CZ_UI_PAGES
18462     WHERE page_id=p_source_ui_page_id AND
18463           ui_def_id=p_source_ui_def_id;
18464 
18465     --
18466     -- get jrad_doc of source UI page to which this UI element belongs to
18467     --
18468     SELECT jrad_doc,persistent_node_id
18469       INTO l_target_jrad_doc, l_pagebase_persistent_node_id
18470       FROM CZ_UI_PAGES
18471      WHERE  page_id=p_target_ui_page_id AND
18472             ui_def_id=p_target_ui_def_id;
18473 
18474     --
18475     -- open XML parser
18476     --
18477     Open_Parser();
18478 
18479     l_source_xmldoc := parse_JRAD_Document(p_doc_full_name => l_source_jrad_doc);
18480 
18481     IF xmldom.isNull(l_source_xmldoc) THEN
18482       add_Error_Message(p_message_name => 'CZ_WRONG_UI_TEMPLATE',
18483                         p_token_name   => 'UI_TEMPLATE',
18484                         p_token_value  => l_source_jrad_doc,
18485                         p_fatal_error  => TRUE);
18486       RAISE WRONG_UI_TEMPLATE;
18487     END IF;
18488 
18489     --
18490     -- create UI Template in JRAD repository
18491     --
18492     l_target_xmldoc := parse_JRAD_Document(p_doc_full_name => l_target_jrad_doc);
18493 
18494     IF xmldom.isNull(l_target_xmldoc) THEN
18495       add_Error_Message(p_message_name => 'CZ_WRONG_UI_TEMPLATE',
18496                         p_token_name   => 'UI_TEMPLATE',
18497                         p_token_value  => l_target_jrad_doc,
18498                         p_fatal_error  => TRUE);
18499       RAISE WRONG_UI_TEMPLATE;
18500     END IF;
18501 
18502     l_source_xml_node := find_XML_Node_By_Attribute(p_subtree_doc     => l_source_xmldoc,
18503                                                     p_attribute_name  => G_ID_ATTRIBUTE,
18504                                                     p_attribute_value => p_source_element_id);
18505 
18506     IF xmldom.IsNull(l_source_xml_node) THEN
18507       l_source_xml_node := find_XML_Node_By_Attribute(p_subtree_doc     => l_source_xmldoc,
18508                                                       p_attribute_name  => 'caseId',
18509                                                       p_attribute_value => p_source_element_id,
18510                                                       p_in_user_attributes => G_YES_FLAG);
18511       l_caseid_to_copy := TRUE;
18512     END IF;
18513 
18514     l_target_xml_node := find_XML_Node_By_Attribute(p_subtree_doc     => l_target_xmldoc,
18515                                                     p_attribute_name  => G_ID_ATTRIBUTE,
18516                                                     p_attribute_value => p_target_parent_element_id);
18517     IF xmldom.IsNull(l_target_xml_node) THEN
18518       l_target_xml_node := find_XML_Node_By_Attribute(p_subtree_doc     => l_target_xmldoc,
18519                                                       p_attribute_name  => 'caseId',
18520                                                       p_attribute_value => p_target_parent_element_id,
18521                                                       p_in_user_attributes => G_YES_FLAG);
18522     END IF;
18523 
18524     BEGIN
18525       SELECT element_id INTO l_amn_parent_element_id
18526         FROM CZ_UI_PAGE_ELEMENTS
18527        WHERE ui_def_id=p_target_ui_def_id AND
18528              page_id=p_target_ui_page_id AND
18529              element_id=p_target_parent_element_id;
18530     EXCEPTION
18531       WHEN NO_DATA_FOUND THEN
18532         l_amn_parent_element_id := find_AMN_Element_Above(l_target_xml_node);
18533     END;
18534 
18535     l_target_uicont_xml_node := getUIContents(l_target_xml_node, G_YES_FLAG);
18536 
18537     IF xmldom.IsNull(l_target_uicont_xml_node) THEN
18538       l_xml_temp_node := xmldom.makeNode(xmldom.createElement(l_target_xmldoc, 'ui:contents'));
18539       l_target_uicont_xml_node := xmldom.appendChild(l_target_xml_node,
18540                                                      l_xml_temp_node);
18541     END IF;
18542 
18543 
18544     --
18545     -- returns cloned DOM subtree
18546     --
18547     --l_new_xml_root_node := xmldom.cloneNode(l_source_xml_node, TRUE);
18548     l_new_xml_root_node := cloneNode(l_source_xml_node, l_target_uicont_xml_node);
18549 
18550 
18551     copy_Tree_Level(p_xml_node                    => l_new_xml_root_node,
18552                     p_source_ui_def_id            => p_source_ui_def_id,
18553                     p_target_ui_def_id            => p_target_ui_def_id,
18554                     p_source_ui_page_id           => p_source_ui_page_id,
18555                     p_target_ui_page_id           => p_target_ui_page_id,
18556                     p_parent_element_id           => NULL,
18557                     p_target_parent_element_id    => p_target_parent_element_id,
18558                     p_pagebase_persistent_node_id => l_pagebase_persistent_node_id,
18559                     x_new_element_id              => x_new_element_id,
18560                     p_copy_as_ui_page             => FALSE,
18561                     p_source_jrad_doc             => l_source_jrad_doc,
18562                     p_target_jrad_doc             => l_target_jrad_doc,
18563                     p_amn_parent_element_id       => l_amn_parent_element_id);
18564 
18565     validate_Copied_PIR(p_target_ui_def_id, p_target_ui_page_id);
18566 
18567     IF xmldom.getNodeName(l_source_xml_node)='ui:case' AND xmldom.getNodeName(l_target_xml_node)='oa:switcher' THEN
18568 
18569       l_out_xml_node := xmldom.appendChild(l_target_xml_node,
18570                                            l_new_xml_root_node);
18571 
18572     ELSIF xmldom.IsNull(l_target_uicont_xml_node) AND xmldom.getNodeName(l_target_xml_node)<>'ui:case' THEN
18573       l_xml_new_node := xmldom.makeNode(xmldom.createElement(l_target_xmldoc, 'ui:contents'));
18574 
18575       l_xml_uicont_node := xmldom.appendChild(l_target_xml_node,
18576                                               l_xml_new_node);
18577       l_out_xml_node := xmldom.appendChild(l_xml_uicont_node,
18578                                            l_new_xml_root_node);
18579     ELSIF xmldom.IsNull(l_target_uicont_xml_node) AND  xmldom.getNodeName(l_target_xml_node)='ui:case' THEN
18580 
18581       l_stacklayout_node := findChildXMLTag(l_target_xml_node, 'oa:stackLayout');
18582       l_stacklayout_uicont_xml_node := getUIContents(l_stacklayout_node, G_YES_FLAG);
18583 
18584       IF xmldom.IsNull(l_stacklayout_uicont_xml_node) THEN
18585 
18586         l_xml_new_node := xmldom.makeNode(xmldom.createElement(l_target_xmldoc, 'ui:contents'));
18587         l_xml_uicont_node := xmldom.appendChild(l_stacklayout_node,
18588                                               l_xml_new_node);
18589         l_out_xml_node := xmldom.appendChild(l_xml_uicont_node,
18590                                              l_new_xml_root_node);
18591 
18592       ELSE
18593 
18594         l_out_xml_node := xmldom.appendChild(l_stacklayout_uicont_xml_node,
18595                                              l_new_xml_root_node);
18596       END IF;
18597     ELSE
18598       l_out_xml_node := xmldom.appendChild(l_target_uicont_xml_node,
18599                                            l_new_xml_root_node);
18600     END IF;
18601 
18602     Save_Document(p_xml_doc   => l_target_xmldoc,
18603                   p_doc_name  => l_target_jrad_doc);
18604 
18605     --
18606     -- close XML parser
18607     --
18608     Close_Parser();
18609 
18610     UPDATE CZ_UI_PAGES
18611        SET page_rev_nbr=page_rev_nbr+1,
18612            empty_page_flag = G_NO_FLAG
18613      WHERE page_id=p_target_ui_page_id AND
18614            ui_def_id=p_target_ui_def_id;
18615 
18616        UPDATE CZ_UI_PAGE_REFS
18617           SET empty_page_flag = G_NO_FLAG
18618         WHERE target_page_id=p_target_ui_page_id AND
18619               ui_def_id=p_target_ui_def_id AND
18620               deleted_flag = G_NO_FLAG AND
18621               empty_page_flag = G_YES_FLAG;
18622 
18623 
18624   EXCEPTION
18625     WHEN WRONG_UI_TEMPLATE THEN
18626       x_return_status := FND_API.G_RET_STS_ERROR;
18627       x_msg_count     := g_MSG_COUNT;
18628       x_msg_data      := fnd_msg_pub.GET(g_MSG_COUNT,fnd_api.g_false);
18629       DEBUG(x_msg_data);
18630     WHEN OTHERS THEN
18631       x_return_status := FND_API.G_RET_STS_ERROR;
18632       x_msg_count := 1;
18633       x_msg_data  := SUBSTR(DBMS_UTILITY.format_error_backtrace,1,4000);
18634       fnd_msg_pub.add_exc_msg('CZ_UIOA_PVT', 'copy_UI_Subtree', x_msg_data);
18635       DEBUG('copy_UI_Subtree() : '||x_msg_data);
18636   END copy_UI_Subtree;
18637 
18638   --
18639   --
18640   -- This procedure copies a UI page specified by parameter p_page_id - it creates a new copies for UI entities corresponding to
18641   -- a source UI page except corresponding UI Page Refs records.
18642   -- For all caption intl_text_ids, UI condtion rules ids from the source page which have seeded_flag='0', a new copies will be created for use in the copied page.
18643   --
18644   PROCEDURE copy_UI_Page (p_source_ui_def_id      IN NUMBER,   -- ui_def_id of UI
18645                           p_source_ui_page_id     IN NUMBER, -- page_id of
18646                                                                -- UI page which needs
18647                                                                -- to be copied
18648                           p_target_ui_def_id      IN NUMBER,        -- ui_def_id of target UI
18649                           x_new_ui_page_id        OUT NOCOPY NUMBER,-- page_id of copied UI page
18650                           x_return_status  OUT NOCOPY VARCHAR2,-- status string
18651                           x_msg_count      OUT NOCOPY NUMBER,  -- number of error messages
18652                           x_msg_data       OUT NOCOPY VARCHAR2 -- string which contains error messages
18653                           ) IS
18654 
18655     l_source_xmldoc              xmldom.DOMDocument;
18656     l_source_xml_node            xmldom.DOMNode;
18657     l_source_jrad_doc            CZ_UI_PAGES.jrad_doc%TYPE;
18658     l_target_jrad_doc            CZ_UI_PAGES.jrad_doc%TYPE;
18659     l_element_id_tbl             number_tbl_type;
18660     l_parent_element_id_tbl      number_tbl_type;
18661     l_element_id_arr_tbl         number_tbl_type;
18662     l_new_element_id_arr_tbl     number_tbl_type;
18663     l_seq_nbr_tbl                number_tbl_type;
18664     l_seq_nbr_arr_tbl            number_tbl_type;
18665     l_source_element_id          VARCHAR2(255);
18666     l_new_element_id             VARCHAR2(255);
18667     l_caption_text_id            NUMBER;
18668     l_ui_action_id               NUMBER;
18669     l_display_condition_id       NUMBER;
18670     l_enabled_condition_id       NUMBER;
18671     l_current_element_id         NUMBER;
18672     l_persistent_node_id         NUMBER;
18673     l_caption_rule_id            NUMBER;
18674     l_new_parent_element_id      NUMBER;
18675     l_copy_nbr                   NUMBER;
18676 
18677   BEGIN
18678 
18679     --
18680     -- initialize FND variables/packages
18681     --
18682     Initialize(x_return_status,x_msg_count,x_msg_data);
18683 
18684     g_handled_attr_id_tbl.DELETE;
18685 
18686     set_Local_UI_Context(p_target_ui_def_id);
18687 
18688     SELECT element_id INTO l_source_element_id
18689       FROM CZ_UI_PAGE_ELEMENTS
18690      WHERE ui_def_id=p_source_ui_def_id AND page_id=p_source_ui_page_id AND
18691            parent_element_id IS NULL AND deleted_flag=G_NO_FLAG;
18692 
18693     --
18694     -- get jrad_doc of source UI page to which this UI element belongs to
18695     --
18696     SELECT jrad_doc,persistent_node_id
18697       INTO l_source_jrad_doc,l_persistent_node_id
18698       FROM CZ_UI_PAGES
18699      WHERE ui_def_id=p_source_ui_def_id AND
18700            page_id=p_source_ui_page_id;
18701 
18702     SELECT COUNT(*) INTO l_copy_nbr FROM CZ_UI_PAGES
18703     WHERE ui_def_id=p_target_ui_def_id AND
18704           persistent_node_id=l_persistent_node_id;
18705 
18706     l_target_jrad_doc := '/oracle/apps/cz/runtime/oa/webui/regions/ui' ||
18707                          TO_CHAR(p_target_ui_def_id) || '/' ||
18708                          get_Short_JRAD_Name(l_source_jrad_doc)||'_'||TO_CHAR(l_copy_nbr);
18709 
18710     l_target_jrad_doc := REPLACE(l_target_jrad_doc,'_'||TO_CHAR(p_source_ui_def_id)||'_',
18711                                  '_'||TO_CHAR(p_target_ui_def_id)||'_');
18712 
18713     FOR i IN(SELECT * FROM CZ_UI_PAGES
18714              WHERE ui_def_id=p_source_ui_def_id AND
18715                    page_id=p_source_ui_page_id)
18716     LOOP
18717 
18718       x_new_ui_page_id := allocateId('CZ_UI_PAGES_S');
18719 
18720       l_caption_text_id := copy_Intl_Text(i.caption_text_id, p_target_ui_def_id, NULL, NULL);
18721 
18722       copy_UI_Rule( i.caption_rule_id, l_caption_rule_id,
18723                     p_target_ui_def_id,x_new_ui_page_id,NULL,p_source_ui_def_id);
18724 
18725       copy_UI_Rule( i.display_condition_id, l_display_condition_id,
18726                     p_target_ui_def_id,x_new_ui_page_id,NULL,p_source_ui_def_id);
18727 
18728       copy_UI_Rule( i.enabled_condition_id, l_enabled_condition_id,
18729                     p_target_ui_def_id,x_new_ui_page_id,NULL,p_source_ui_def_id);
18730 
18731       INSERT INTO CZ_UI_PAGES
18732       (
18733       PAGE_ID
18734       ,UI_DEF_ID
18735       ,PERSISTENT_NODE_ID
18736       ,JRAD_DOC
18737       ,PAGEBASE_PATH
18738       ,PAGE_SET_ID
18739       ,SPLIT_SEQ_NBR
18740       ,CAPTION_SOURCE
18741       ,CAPTION_TEXT_ID
18742       ,PERSISTENT_CAPTION_TEXT_ID
18743       ,PROPERTY_ID
18744       ,DELETED_FLAG
18745       ,SEEDED_FLAG
18746       ,PAGEBASE_EXPL_NODE_ID
18747       ,suppress_refresh_flag
18748       ,PAGE_REV_NBR
18749       ,NAME
18750       ,DESC_TEXT
18751       ,PAGE_STATUS_TEMPLATE_ID
18752       ,PAGE_STATUS_TEMPL_UIDEF_ID
18753       ,CAPTION_RULE_ID
18754       ,PAGE_STATUS_TEMPLATE_USAGE
18755       ,OUTER_TEMPLATE_USAGE
18756       ,OUTER_PAGE_TEMPLATE_ID
18757       ,OUTER_PAGE_TEMPL_UIDEF_ID
18758       ,DISPLAY_CONDITION_ID
18759       ,DISPLAY_CONDITION_COMP
18760       ,DISPLAY_CONDITION_VALUE
18761       ,ENABLED_CONDITION_ID
18762       ,ENABLED_CONDITION_COMP
18763       ,ENABLED_CONDITION_VALUE
18764       )
18765       VALUES
18766       (
18767       x_new_ui_page_id
18768       ,p_target_ui_def_id
18769       ,i.PERSISTENT_NODE_ID
18770       ,l_target_jrad_doc
18771       ,i.PAGEBASE_PATH
18772       ,NULL
18773       ,1
18774       ,i.CAPTION_SOURCE
18775       ,l_caption_text_id
18776       ,i.PERSISTENT_CAPTION_TEXT_ID
18777       ,i.PROPERTY_ID
18778       ,i.DELETED_FLAG
18779       ,i.SEEDED_FLAG
18780       ,i.PAGEBASE_EXPL_NODE_ID
18781       ,i.suppress_refresh_flag
18782       ,0
18783       ,i.NAME||'_'||TO_CHAR(l_copy_nbr)
18784       ,i.DESC_TEXT
18785       ,i.PAGE_STATUS_TEMPLATE_ID
18786       ,i.PAGE_STATUS_TEMPL_UIDEF_ID
18787       ,l_caption_rule_id
18788       ,i.PAGE_STATUS_TEMPLATE_USAGE
18789       ,i.OUTER_TEMPLATE_USAGE
18790       ,i.OUTER_PAGE_TEMPLATE_ID
18791       ,i.OUTER_PAGE_TEMPL_UIDEF_ID
18792       ,l_display_condition_id
18793       ,i.DISPLAY_CONDITION_COMP
18794       ,i.DISPLAY_CONDITION_VALUE
18795       ,l_enabled_condition_id
18796       ,i.ENABLED_CONDITION_COMP
18797       ,i.ENABLED_CONDITION_VALUE
18798       );
18799     END LOOP;
18800 
18801     --
18802     -- open XML parser
18803     --
18804     Open_Parser();
18805 
18806     --
18807     -- create UI Template in JRAD repository
18808     --
18809     l_source_xmldoc := parse_JRAD_Document(p_doc_full_name => l_source_jrad_doc);
18810 
18811     IF xmldom.isNull(l_source_xmldoc) THEN
18812       add_Error_Message(p_message_name => 'CZ_WRONG_UI_TEMPLATE',
18813                         p_token_name   => 'UI_TEMPLATE',
18814                         p_token_value  => l_source_jrad_doc,
18815                         p_fatal_error  => TRUE);
18816       RAISE WRONG_UI_TEMPLATE;
18817     END IF;
18818 
18819     l_source_xml_node := find_XML_Node_By_Attribute(p_subtree_doc     => l_source_xmldoc,
18820                                                     p_attribute_name  => G_ID_ATTRIBUTE,
18821                                                     p_attribute_value => l_source_element_id);
18822 
18823     copy_Tree_Level(p_xml_node                    => l_source_xml_node,
18824                     p_source_ui_def_id            => p_source_ui_def_id,
18825                     p_target_ui_def_id            => p_target_ui_def_id,
18826                     p_source_ui_page_id           => p_source_ui_page_id,
18827                     p_target_ui_page_id           => x_new_ui_page_id,
18828                     p_parent_element_id           => NULL,
18829                     p_target_parent_element_id    => NULL,
18830                     p_pagebase_persistent_node_id => l_persistent_node_id,
18831                     x_new_element_id              => l_new_element_id,
18832                     p_copy_as_ui_page             => TRUE,
18833                     p_source_jrad_doc             => l_source_jrad_doc,
18834                     p_target_jrad_doc             => l_target_jrad_doc,
18835                     p_amn_parent_element_id       => NULL);
18836 
18837     validate_Copied_PIR(p_target_ui_def_id, x_new_ui_page_id);
18838 
18839     Save_Document(p_xml_doc   => l_source_xmldoc,
18840                   p_doc_name  => l_target_jrad_doc);
18841 
18842     translate_JRAD_Doc(l_target_jrad_doc);
18843 
18844     --
18845     -- close XML parser
18846     --
18847     Close_Parser();
18848 
18849   EXCEPTION
18850     WHEN WRONG_UI_TEMPLATE THEN
18851       x_return_status := FND_API.G_RET_STS_ERROR;
18852       x_msg_count     := g_MSG_COUNT;
18853       x_msg_data      := fnd_msg_pub.GET(g_MSG_COUNT,fnd_api.g_false);
18854       DEBUG(x_msg_data);
18855     WHEN OTHERS THEN
18856       x_return_status := FND_API.G_RET_STS_ERROR;
18857       x_msg_count := 1;
18858       x_msg_data  := SUBSTR(DBMS_UTILITY.format_error_backtrace,1,4000);
18859       fnd_msg_pub.add_exc_msg('CZ_UIOA_PVT', 'copy_UI_Page', x_msg_data);
18860       DEBUG('copy_UI_Page() : '||x_msg_data);
18861 
18862   END copy_UI_Page;
18863 
18864   --
18865   -- This procedure sets/propogates deleted_flag='1' from a given
18866   -- Page Ref record specified by parameter p_page_ref_id.
18867   -- target UI pages are not deleted.
18868   --
18869   PROCEDURE copy_UI_Page_Ref(p_source_ui_def_id      IN NUMBER,    -- ui_def_id of UI
18870                              p_source_page_ref_id    IN NUMBER,  -- page_ref_id of
18871                                                                    -- Menu/Page Flow link which needs
18872                                                                    -- to be deleted.
18873                              p_target_ui_def_id       IN NUMBER,   -- ui_def_id of target UI
18874                              p_target_parent_page_ref_id IN NUMBER,-- new parent page ref id
18875                              x_page_ref_id OUT NOCOPY NUMBER,    -- template_id of
18876                                                                    -- Local UI Template which needs
18877                                                                    -- to be copied
18878                              x_return_status  OUT NOCOPY VARCHAR2, -- status string
18879                              x_msg_count      OUT NOCOPY NUMBER,   -- number of error messages
18880                              x_msg_data       OUT NOCOPY VARCHAR2  -- string which contains error messages
18881                              ) IS
18882     TYPE number_tbl_type        IS TABLE OF NUMBER INDEX BY BINARY_INTEGER;
18883     l_page_ref_id_tbl           number_tbl_type;
18884     l_parent_page_ref_id_tbl    number_tbl_type;
18885     l_node_depth_tbl            number_tbl_type;
18886     l_seq_nbr_tbl               number_tbl_type;
18887     l_page_ref_arr_tbl          number_tbl_type;
18888     l_new_page_ref_arr_tbl      number_tbl_type;
18889     l_seq_nbr_arr_tbl           number_tbl_type;
18890     l_node_depth_arr_tbl        number_tbl_type;
18891     l_target_page_set_id        NUMBER;
18892     l_current_page_ref_id       NUMBER;
18893     l_new_page_ref_id           NUMBER;
18894     l_new_parent_page_ref_id    NUMBER;
18895 
18896     l_condition_id              NUMBER;
18897     l_caption_rule_id           NUMBER;
18898     l_target_max_seq_nbr        NUMBER;
18899     l_target_node_depth         NUMBER;
18900     l_caption_text_id           NUMBER;
18901     l_seq_nbr                   NUMBER;
18902     l_node_depth                NUMBER;
18903 
18904   BEGIN
18905 
18906     --
18907     -- initialize FND variables/packages
18908     --
18909     Initialize(x_return_status,x_msg_count,x_msg_data);
18910 
18911     SELECT page_set_id,node_depth INTO l_target_page_set_id,l_target_node_depth
18912     FROM CZ_UI_PAGE_REFS
18913     WHERE ui_def_id=p_target_ui_def_id AND page_ref_id=p_target_parent_page_ref_id;
18914 
18915     SELECT NVL(MAX(seq_nbr),0) INTO l_target_max_seq_nbr FROM CZ_UI_PAGE_REFS
18916     WHERE ui_def_id=p_target_ui_def_id AND deleted_flag=G_NO_FLAG;
18917 
18918     SELECT page_ref_id,parent_page_ref_id,node_depth,seq_nbr
18919     BULK COLLECT INTO l_page_ref_id_tbl,l_parent_page_ref_id_tbl,l_node_depth_tbl,l_seq_nbr_tbl
18920     FROM CZ_UI_PAGE_REFS
18921     START WITH ui_def_id=p_source_ui_def_id AND page_ref_id=p_source_page_ref_id
18922     CONNECT BY PRIOR ui_def_id=p_source_ui_def_id AND
18923                ui_def_id=p_source_ui_def_id AND
18924                PRIOR page_ref_id=parent_page_ref_id AND
18925                PRIOR deleted_flag=G_NO_FLAG AND deleted_flag=G_NO_FLAG;
18926 
18927     IF l_page_ref_id_tbl.Count>0 THEN
18928       FOR i IN l_page_ref_id_tbl.First..l_page_ref_id_tbl.Last
18929       LOOP
18930         l_page_ref_arr_tbl(l_page_ref_id_tbl(i))     := l_parent_page_ref_id_tbl(i);
18931         l_new_page_ref_arr_tbl(l_page_ref_id_tbl(i)) := get_Element_Id();
18932         l_seq_nbr_arr_tbl(l_page_ref_id_tbl(i))      := l_seq_nbr_tbl(i);
18933         l_node_depth_arr_tbl(l_page_ref_id_tbl(i))   := l_node_depth_tbl(i);
18934       END LOOP;
18935     END IF;
18936 
18937     l_current_page_ref_id := l_page_ref_arr_tbl.First;
18938     LOOP
18939       IF l_current_page_ref_id IS NULL THEN
18940         EXIT;
18941       END IF;
18942 
18943       l_new_page_ref_id := l_page_ref_arr_tbl(l_current_page_ref_id);
18944 
18945       IF l_new_page_ref_arr_tbl.EXISTS(l_new_page_ref_id) THEN
18946         l_new_parent_page_ref_id := l_new_page_ref_arr_tbl(l_new_page_ref_id);
18947       ELSE
18948         l_new_parent_page_ref_id := p_target_parent_page_ref_id;
18949         x_page_ref_id := l_new_page_ref_id;
18950       END IF;
18951 
18952       FOR i IN(SELECT * FROM CZ_UI_PAGE_REFS
18953                WHERE ui_def_id=p_source_ui_def_id AND
18954                      page_ref_id=l_current_page_ref_id AND
18955                      deleted_flag=G_NO_FLAG)
18956       LOOP
18957 
18958         l_seq_nbr := l_target_max_seq_nbr + i.SEQ_NBR;
18959         l_node_depth := l_target_node_depth - l_node_depth_tbl(1) + 1;
18960 
18961         copy_UI_Rule(i.condition_id, l_condition_id,
18962                      p_target_ui_def_id, i.target_page_id, NULL,p_source_ui_def_id);
18963 
18964         copy_UI_Rule(i.caption_rule_id, l_caption_rule_id,
18965                      p_target_ui_def_id, i.target_page_id, NULL,p_source_ui_def_id);
18966 
18967         l_caption_text_id := copy_Intl_Text(l_caption_text_id, p_target_ui_def_id,
18968                                             NULL, NULL);
18969 
18970         INSERT INTO CZ_UI_PAGE_REFS
18971       (
18972       PAGE_SET_ID
18973       ,UI_DEF_ID
18974       ,PAGE_REF_ID
18975       ,PARENT_PAGE_REF_ID
18976       ,SEQ_NBR
18977       ,NODE_DEPTH
18978       ,PAGE_REF_TYPE
18979       ,CONDITION_ID
18980       ,NAME
18981       ,CAPTION_SOURCE
18982       ,CAPTION_TEXT_ID
18983       ,PERSISTENT_CAPTION_TEXT_ID
18984       ,PROPERTY_ID
18985       ,TARGET_PERSISTENT_NODE_ID
18986       ,TARGET_PATH
18987       ,TARGET_UI_DEF_ID
18988       ,TARGET_PAGE_SET_ID
18989       ,TARGET_PAGE_ID
18990       ,MODIFIED_FLAGS
18991       ,PATH_TO_PREV_PAGE
18992       ,PATH_TO_NEXT_PAGE
18993       ,DELETED_FLAG
18994       ,CAPTION_RULE_ID
18995       ,TARGET_EXPL_NODE_ID
18996       )
18997        VALUES
18998       (
18999       l_target_page_set_id
19000       ,p_target_ui_def_id
19001       ,l_new_page_ref_id
19002       ,l_new_parent_page_ref_id
19003       ,l_seq_nbr
19004       ,l_node_depth
19005       ,i.PAGE_REF_TYPE
19006       ,l_condition_id
19007       ,i.NAME
19008       ,i.CAPTION_SOURCE
19009       ,l_caption_text_id
19010       ,i.PERSISTENT_CAPTION_TEXT_ID
19011       ,i.PROPERTY_ID
19012       ,i.TARGET_PERSISTENT_NODE_ID
19013       ,i.TARGET_PATH
19014       ,i.TARGET_UI_DEF_ID
19015       ,i.TARGET_PAGE_SET_ID
19016       ,i.TARGET_PAGE_ID
19017       ,i.MODIFIED_FLAGS
19018       ,i.PATH_TO_PREV_PAGE
19019       ,i.PATH_TO_NEXT_PAGE
19020       ,i.DELETED_FLAG
19021       ,l_caption_rule_id
19022       ,i.TARGET_EXPL_NODE_ID
19023       );
19024 
19025      END LOOP;
19026 
19027      l_current_page_ref_id := l_page_ref_arr_tbl.NEXT(l_current_page_ref_id);
19028    END LOOP;
19029 
19030   EXCEPTION
19031     WHEN OTHERS THEN
19032       x_return_status := FND_API.G_RET_STS_ERROR;
19033       x_msg_count := 1;
19034       x_msg_data  := SUBSTR(DBMS_UTILITY.format_error_backtrace,1,4000);
19035       fnd_msg_pub.add_exc_msg('CZ_UIOA_PVT', 'delete_UI_Subtree', x_msg_data);
19036       DEBUG('copy_UI_Page_Ref() : '||x_msg_data);
19037   END copy_UI_Page_Ref;
19038 
19039   --
19040 	-- This procedure creates copies of the Local Template record and its corresponding XML Jrad document.  In addition, it also
19041 	-- parses the source jrad document for any caption intl_text_ids or condition rule Ids and creates copies
19042   -- the Intl_text and Rule records which have seeded_flag='0'.
19043 	-- the UI Elements.  The Elements could also have Associated with them which need to be copied and refered in the new copy.
19044   --
19045   PROCEDURE copy_Local_Template(p_source_ui_def_id       IN NUMBER,   -- ui_def_id of UI
19046                                 p_source_template_id     IN NUMBER,   -- template_id of
19047                                                                       -- Local UI Template which needs
19048                                                                       -- to be copied
19049                                 p_target_ui_def_id       IN NUMBER,           -- ui_def_id of target UI
19050                                 x_new_template_id        OUT NOCOPY NUMBER, -- template_id of
19051                                                                               -- Local UI Template which needs
19052                                                                               -- to be copied
19053                                 x_return_status  OUT NOCOPY VARCHAR2,-- status string
19054                                 x_msg_count      OUT NOCOPY NUMBER,  -- number of error messages
19055                                 x_msg_data       OUT NOCOPY VARCHAR2 -- string which contains error messages
19056                                 ) IS
19057     l_source_template_xmldoc  xmldom.DOMDocument;
19058     l_template_root_xml_node  xmldom.DOMNode;
19059     l_xml_node                xmldom.DOMNode;
19060     l_child_nodes_tbl         xmldom.DOMNodeList;
19061     l_source_jrad_doc         CZ_UI_PAGES.jrad_doc%TYPE;
19062     l_target_jrad_doc         CZ_UI_PAGES.jrad_doc%TYPE;
19063     l_length                  NUMBER;
19064     l_needs_to_be_unlocked    BOOLEAN;
19065 
19066   BEGIN
19067 
19068     --
19069     -- lock source UI Template
19070     --
19071     lock_UI_Template( p_source_template_id, p_source_ui_def_id, l_needs_to_be_unlocked );
19072 
19073     --
19074     -- initialize FND variables/packages
19075     --
19076     Initialize(x_return_status,x_msg_count,x_msg_data);
19077 
19078     SELECT jrad_doc INTO l_source_jrad_doc FROM CZ_UI_TEMPLATES
19079     WHERE ui_def_id=p_source_ui_def_id AND template_id=p_source_template_id;
19080 
19081     --
19082     -- open XML parser
19083     --
19084     Open_Parser();
19085 
19086     --
19087     -- create UI Template in JRAD repository
19088     --
19089     l_source_template_xmldoc := parse_JRAD_Document(p_doc_full_name => l_source_jrad_doc);
19090 
19091     IF xmldom.isNull(l_source_template_xmldoc) THEN
19092       add_Error_Message(p_message_name => 'CZ_WRONG_UI_TEMPLATE',
19093                         p_token_name   => 'UI_TEMPLATE',
19094                         p_token_value  => l_source_jrad_doc,
19095                         p_fatal_error  => TRUE);
19096       RAISE WRONG_UI_TEMPLATE;
19097     END IF;
19098 
19099     l_template_root_xml_node :=xmldom.makeNode(xmldom.getDocumentElement(l_source_template_xmldoc));
19100 
19101     l_child_nodes_tbl := xmldom.getElementsByTagName(l_source_template_xmldoc, '*');
19102     l_length := xmldom.getLength(l_child_nodes_tbl);
19103     IF (l_length > 0) THEN
19104         FOR k IN 0..l_length-1
19105         LOOP
19106           --
19107           -- get next child DOM node
19108           --
19109           l_xml_node := xmldom.item(l_child_nodes_tbl, k);
19110           IF k > 0 THEN
19111              --
19112              -- create a new copies for corresponding entities ( captions, rules ,... )
19113              --
19114              copy_Node_Related_Entities(p_ui_def_id        => p_source_ui_def_id,
19115                                         p_ui_page_id       => NULL,
19116                                         p_xml_node         => l_xml_node,
19117                                         p_target_ui_def_id => p_target_ui_def_id);
19118           END IF;
19119         END LOOP;
19120     END IF;
19121 
19122     l_target_jrad_doc := '/oracle/apps/cz/runtime/oa/webui/regions/ui' ||
19123                          TO_CHAR(p_target_ui_def_id) || '/' ||
19124                          get_Short_JRAD_Name(l_source_jrad_doc);
19125 
19126     Save_Document(p_xml_doc   => l_source_template_xmldoc,
19127                   p_doc_name  => l_target_jrad_doc);
19128 
19129     translate_JRAD_Doc(l_target_jrad_doc);
19130 
19131     --
19132     -- close XML parser
19133     --
19134     Close_Parser();
19135 
19136     x_new_template_id := allocateId('CZ_UI_TEMPLATES_S');
19137 
19138     INSERT INTO CZ_UI_TEMPLATES
19139               (TEMPLATE_ID,
19140                UI_DEF_ID,
19141                TEMPLATE_NAME,
19142                TEMPLATE_TYPE,
19143                TEMPLATE_DESC,
19144                PARENT_CONTAINER_TYPE,
19145                JRAD_DOC,
19146                BUTTON_BAR_TEMPLATE_ID,
19147                MESSAGE_TYPE,
19148                MAIN_MESSAGE_ID,
19149                TITLE_ID,
19150                SEEDED_FLAG,
19151                LAYOUT_UI_STYLE,
19152                ROOT_REGION_TYPE,
19153                ROOT_ELEMENT_SIGNATURE_ID,
19154                TEMPLATE_REV_NBR,
19155                TEMPLATE_USAGE,
19156                AMN_USAGE,
19157                DELETED_FLAG)
19158      SELECT
19159                x_new_template_id ,
19160                p_target_ui_def_id,
19161                TEMPLATE_NAME,
19162                TEMPLATE_TYPE,
19163                TEMPLATE_DESC,
19164                PARENT_CONTAINER_TYPE,
19165                l_target_jrad_doc,
19166                BUTTON_BAR_TEMPLATE_ID,
19167                MESSAGE_TYPE,
19168                MAIN_MESSAGE_ID,
19169                TITLE_ID,
19170                G_NO_FLAG,
19171                LAYOUT_UI_STYLE,
19172                ROOT_REGION_TYPE,
19173                ROOT_ELEMENT_SIGNATURE_ID,
19174                TEMPLATE_REV_NBR,
19175                TEMPLATE_USAGE,
19176                AMN_USAGE,
19177                G_NO_FLAG
19178       FROM CZ_UI_TEMPLATES
19179      WHERE ui_def_id=p_source_ui_def_id AND
19180            template_id=p_source_template_id;
19181 
19182     INSERT INTO CZ_UI_REF_TEMPLATES
19183       (
19184       TEMPLATE_ID
19185       ,REF_TEMPLATE_ID
19186       ,DELETED_FLAG
19187       ,TEMPLATE_UI_DEF_ID
19188       ,REF_TEMPLATE_UI_DEF_ID
19189       )
19190     SELECT
19191       x_new_template_id
19192       ,REF_TEMPLATE_ID
19193       ,DELETED_FLAG
19194       ,p_target_ui_def_id
19195       ,REF_TEMPLATE_UI_DEF_ID
19196     FROM CZ_UI_REF_TEMPLATES
19197     WHERE template_id=p_source_template_id AND
19198           template_ui_def_id=p_source_ui_def_id AND
19199           deleted_flag=G_NO_FLAG;
19200 
19201     --
19202     -- unlock source UI Template
19203     --
19204     unlock_UI_Template( p_source_template_id, p_source_ui_def_id, l_needs_to_be_unlocked );
19205 
19206   EXCEPTION
19207     WHEN WRONG_UI_TEMPLATE THEN
19208       x_return_status := FND_API.G_RET_STS_ERROR;
19209       x_msg_count     := g_MSG_COUNT;
19210       x_msg_data      := fnd_msg_pub.GET(g_MSG_COUNT,fnd_api.g_false);
19211       DEBUG(x_msg_data);
19212       --
19213       -- unlock source UI Template
19214       --
19215       unlock_UI_Template( p_source_template_id, p_source_ui_def_id, l_needs_to_be_unlocked );
19216     WHEN OTHERS THEN
19217       x_return_status := FND_API.G_RET_STS_ERROR;
19218       x_msg_count := 1;
19219       x_msg_data  := SUBSTR(DBMS_UTILITY.format_error_backtrace,1,4000);
19220       fnd_msg_pub.add_exc_msg('CZ_UIOA_PVT', 'copy_Local_Template', x_msg_data);
19221       DEBUG('copy_Local_Template() : '||x_msg_data);
19222       --
19223       -- unlock source UI Template
19224       --
19225       unlock_UI_Template( p_source_template_id, p_source_ui_def_id, l_needs_to_be_unlocked );
19226   END copy_Local_Template;
19227 
19228   --
19229   -- This procedure creates a new copy of JRAD document specified by parameter p_source_jrad_doc
19230   -- new copy will have full JRAD path = p_target_jrad_doc
19231   --
19232   PROCEDURE copy_JRAD_Document(p_source_jrad_doc    IN VARCHAR2,   -- specify source JRAD document that will be copied
19233                                p_target_jrad_doc     IN VARCHAR2, -- specify full JRAD path of new copy
19234                                x_return_status  OUT NOCOPY VARCHAR2,-- status string
19235                                x_msg_count      OUT NOCOPY NUMBER,  -- number of error messages
19236                                x_msg_data       OUT NOCOPY VARCHAR2 -- string which contains error messages
19237                                ) IS
19238 
19239     l_source_xmldoc  xmldom.DOMDocument;
19240 
19241   BEGIN
19242 
19243     --
19244     -- initialize FND variables/packages
19245     --
19246     Initialize(x_return_status,x_msg_count,x_msg_data);
19247 
19248     --
19249     -- open XML parser
19250     --
19251     Open_Parser();
19252 
19253     --
19254     -- create UI Template in JRAD repository
19255     --
19256     l_source_xmldoc := parse_JRAD_Document(p_doc_full_name => p_source_jrad_doc);
19257 
19258     IF xmldom.isNull(l_source_xmldoc) THEN
19259       add_Error_Message(p_message_name => 'CZ_WRONG_UI_TEMPLATE',
19260                         p_token_name   => 'UI_TEMPLATE',
19261                         p_token_value  => p_source_jrad_doc,
19262                         p_fatal_error  => TRUE);
19263       RAISE WRONG_UI_TEMPLATE;
19264     END IF;
19265 
19266     Save_Document(p_xml_doc   => l_source_xmldoc,
19267                   p_doc_name  => p_target_jrad_doc);
19268 
19269     translate_JRAD_Doc(p_target_jrad_doc);
19270 
19271     --
19272     -- close XML parser
19273     --
19274     Close_Parser();
19275 
19276   EXCEPTION
19277     WHEN WRONG_UI_TEMPLATE THEN
19278       x_return_status := FND_API.G_RET_STS_ERROR;
19279       x_msg_count     := g_MSG_COUNT;
19280       x_msg_data      := fnd_msg_pub.GET(g_MSG_COUNT,fnd_api.g_false);
19281       DEBUG(x_msg_data);
19282     WHEN OTHERS THEN
19283       x_return_status := FND_API.G_RET_STS_ERROR;
19284       x_msg_count := 1;
19285       x_msg_data  := SUBSTR(DBMS_UTILITY.format_error_backtrace,1,4000);
19286       fnd_msg_pub.add_exc_msg('CZ_UIOA_PVT', 'copy_JRAD_Document', x_msg_data);
19287       DEBUG('copy_JRAD_Document() : '||x_msg_data);
19288   END copy_JRAD_Document;
19289 
19290   --
19291   -- This procedure copies subtree of Local UI Template identified by ui_def_id=p_source_ui_def_id,
19292   -- template_id=p_source_template_id and element_id=p_source_element_id to a new place identified by
19293   -- ui_def_id=p_target_ui_def_id, template_id=p_target_template_id and
19294   -- parent_element_id=p_target_parent_element_id.
19295   --
19296   PROCEDURE copy_Local_Template_Elem(p_source_ui_def_id       IN NUMBER,         -- ui_def_id of UI
19297                                      p_source_template_id    IN NUMBER,          -- template_id of
19298                                                                                  -- Local UI Template which needs
19299                                                                                  -- to be copied
19300                                      p_source_element_id     IN VARCHAR2,
19301                                      p_target_ui_def_id      IN NUMBER,          -- ui_def_id of UI
19302                                      p_target_template_id    IN NUMBER,          -- template_id of
19303                                                                                  -- Local UI Template which needs
19304                                                                                  -- to be copied
19305                                      p_target_parent_element_id IN VARCHAR2,
19306                                      x_new_element_id OUT NOCOPY VARCHAR2,       -- template_id of
19307                                                                                  -- Local UI Template which needs
19308                                                                                  -- to be copied
19309                                      x_return_status  OUT NOCOPY VARCHAR2,-- status string
19310                                      x_msg_count      OUT NOCOPY NUMBER,  -- number of error messages
19311                                      x_msg_data       OUT NOCOPY VARCHAR2 -- string which contains error messages
19312                                      ) IS
19313 
19314     l_source_xmldoc            xmldom.DOMDocument;
19315     l_target_xmldoc            xmldom.DOMDocument;
19316     l_source_xml_node          xmldom.DOMNode;
19317     l_xml_uicont_node          xmldom.DOMNode;
19318     l_xml_new_node             xmldom.DOMNode;
19319     l_target_xml_node          xmldom.DOMNode;
19320     l_new_xml_root_node        xmldom.DOMNode;
19321     l_out_xml_node             xmldom.DOMNode;
19322     l_target_uicont_xml_node   xmldom.DOMNode;
19323     l_xml_temp_node            xmldom.DOMNode;
19324     l_stacklayout_node            xmldom.DOMNode;
19325     l_stacklayout_uicont_xml_node xmldom.DOMNode;
19326     l_source_jrad_doc          CZ_UI_PAGES.jrad_doc%TYPE;
19327     l_target_jrad_doc          CZ_UI_PAGES.jrad_doc%TYPE;
19328     l_needs_to_be_unlocked     BOOLEAN;
19329   BEGIN
19330 
19331     --
19332     -- lock source UI Template
19333     --
19334     lock_UI_Template( p_source_template_id, p_source_ui_def_id, l_needs_to_be_unlocked );
19335 
19336     --
19337     -- initialize FND variables/packages
19338     --
19339     Initialize(x_return_status,x_msg_count,x_msg_data);
19340 
19341     SELECT jrad_doc INTO l_source_jrad_doc FROM CZ_UI_TEMPLATES
19342     WHERE ui_def_id=p_source_ui_def_id AND
19343           template_id=p_source_template_id;
19344 
19345     SELECT jrad_doc INTO l_target_jrad_doc FROM CZ_UI_TEMPLATES
19346     WHERE ui_def_id=p_target_ui_def_id AND
19347           template_id=p_target_template_id;
19348 
19349     --
19350     -- open XML parser
19351     --
19352     Open_Parser();
19353 
19354     --
19355     -- create UI Template in JRAD repository
19356     --
19357     l_source_xmldoc := parse_JRAD_Document(p_doc_full_name => l_source_jrad_doc);
19358 
19359     IF xmldom.isNull(l_source_xmldoc) THEN
19360       add_Error_Message(p_message_name => 'CZ_WRONG_UI_TEMPLATE',
19361                         p_token_name   => 'UI_TEMPLATE',
19362                         p_token_value  => l_source_jrad_doc,
19363                         p_fatal_error  => TRUE);
19364       RAISE WRONG_UI_TEMPLATE;
19365     END IF;
19366 
19367     --
19368     -- create UI Template in JRAD repository
19369     --
19370     l_target_xmldoc := parse_JRAD_Document(p_doc_full_name => l_target_jrad_doc);
19371 
19372     IF xmldom.isNull(l_target_xmldoc) THEN
19373       add_Error_Message(p_message_name => 'CZ_WRONG_UI_TEMPLATE',
19374                         p_token_name   => 'UI_TEMPLATE',
19375                         p_token_value  => l_target_jrad_doc,
19376                         p_fatal_error  => TRUE);
19377       RAISE WRONG_UI_TEMPLATE;
19378     END IF;
19379 
19380     l_source_xml_node := find_XML_Node_By_Attribute(p_subtree_doc     => l_source_xmldoc,
19381                                                     p_attribute_name  => G_ID_ATTRIBUTE,
19382                                                     p_attribute_value => p_source_element_id);
19383 
19384     IF p_target_parent_element_id IS NULL THEN
19385       l_target_xml_node := xmldom.makeNode(xmldom.getDocumentElement(l_target_xmldoc));
19386     ELSE
19387       l_target_xml_node := find_XML_Node_By_Attribute(p_subtree_doc     => l_target_xmldoc,
19388                                                       p_attribute_name  => G_ID_ATTRIBUTE,
19389                                                       p_attribute_value => p_target_parent_element_id);
19390     END IF;
19391 
19392     l_target_uicont_xml_node := getUIContents(l_target_xml_node, G_YES_FLAG);
19393 
19394     IF xmldom.IsNull(l_target_uicont_xml_node) THEN
19395       l_xml_temp_node := xmldom.makeNode(xmldom.createElement(l_target_xmldoc, 'ui:contents'));
19396       l_target_uicont_xml_node := xmldom.appendChild(l_target_xml_node,
19397                                                      l_xml_temp_node);
19398     END IF;
19399 
19400     --
19401     -- returns cloned DOM subtree
19402     --
19403     -- l_new_xml_root_node := xmldom.cloneNode(l_source_xml_node, TRUE);
19404     l_new_xml_root_node := cloneNode(l_source_xml_node, l_target_uicont_xml_node);
19405 
19406     x_new_element_id := get_Element_Id();
19407 
19408     set_Attribute(l_new_xml_root_node,
19409                   G_ID_ATTRIBUTE,
19410                   x_new_element_id);
19411 
19412     copy_User_Attributes(p_xml_node               => l_new_xml_root_node,
19413                          p_source_ui_def_id       => p_source_ui_def_id,
19414                          p_target_ui_def_id       => p_target_ui_def_id,
19415                          p_source_template_id     => p_source_template_id,
19416                          p_target_template_id     => p_target_template_id);
19417 
19418     IF xmldom.IsNull(l_target_uicont_xml_node) AND xmldom.getNodeName(l_target_xml_node)<>'ui:case' THEN
19419       l_xml_new_node := xmldom.makeNode(xmldom.createElement(l_target_xmldoc, 'ui:contents'));
19420 
19421       l_xml_uicont_node := xmldom.appendChild(l_target_xml_node,
19422                                               l_xml_new_node);
19423 
19424       l_out_xml_node := xmldom.appendChild(l_xml_uicont_node,
19425                                            l_new_xml_root_node);
19426 
19427     ELSIF xmldom.IsNull(l_target_uicont_xml_node) AND  xmldom.getNodeName(l_target_xml_node)='ui:case' THEN
19428       l_stacklayout_node := findChildXMLTag(l_target_xml_node, 'oa:stackLayout');
19429       l_stacklayout_uicont_xml_node := getUIContents(l_stacklayout_node, G_YES_FLAG);
19430       IF xmldom.IsNull(l_stacklayout_uicont_xml_node) THEN
19431 
19432         l_xml_new_node := xmldom.makeNode(xmldom.createElement(l_target_xmldoc, 'ui:contents'));
19433         l_xml_uicont_node := xmldom.appendChild(l_stacklayout_node,
19434                                               l_xml_new_node);
19435 
19436         l_out_xml_node := xmldom.appendChild(l_xml_uicont_node,
19437                                              l_new_xml_root_node);
19438 
19439       ELSE
19440         l_out_xml_node := xmldom.appendChild(l_stacklayout_uicont_xml_node,
19441                                              l_new_xml_root_node);
19442       END IF;
19443 
19444     ELSE
19445       l_out_xml_node := xmldom.appendChild(l_target_uicont_xml_node,
19446                                            l_new_xml_root_node);
19447 
19448     END IF;
19449 
19450     refresh_Templ_Ref_Counts(l_target_xmldoc, p_target_ui_def_id, p_target_template_id);
19451 
19452     Save_Document(p_xml_doc   => l_target_xmldoc,
19453                   p_doc_name  => l_target_jrad_doc);
19454 
19455     --
19456     -- close XML parser
19457     --
19458     Close_Parser();
19459 
19460     /* *** changes for build 21p *** */
19461 
19462     UPDATE CZ_UI_TEMPLATES
19463        SET template_rev_nbr=NVL(template_rev_nbr,0)+1
19464      WHERE ui_def_id=p_target_ui_def_id AND template_id=p_target_template_id;
19465 
19466     --
19467     -- unlock source UI Template
19468     --
19469     unlock_UI_Template( p_source_template_id, p_source_ui_def_id, l_needs_to_be_unlocked );
19470 
19471   EXCEPTION
19472     WHEN WRONG_UI_TEMPLATE THEN
19473       x_return_status := FND_API.G_RET_STS_ERROR;
19474       x_msg_count     := g_MSG_COUNT;
19475       x_msg_data      := fnd_msg_pub.GET(g_MSG_COUNT,fnd_api.g_false);
19476       DEBUG(x_msg_data);
19477       --
19478       -- unlock source UI Template
19479       --
19480       unlock_UI_Template( p_source_template_id, p_source_ui_def_id, l_needs_to_be_unlocked );
19481 
19482     WHEN OTHERS THEN
19483       x_return_status := FND_API.G_RET_STS_ERROR;
19484       x_msg_count := 1;
19485       x_msg_data  := SUBSTR(DBMS_UTILITY.format_error_backtrace,1,4000);
19486       fnd_msg_pub.add_exc_msg('CZ_UIOA_PVT', 'copy_Local_Template_Elem', x_msg_data);
19487       DEBUG('copy_Local_Template_Elem() : '||x_msg_data);
19488       --
19489       -- unlock source UI Template
19490       --
19491       unlock_UI_Template( p_source_template_id, p_source_ui_def_id, l_needs_to_be_unlocked );
19492 
19493   END copy_Local_Template_Elem;
19494 
19495   --
19496   -- create UI Region from Template
19497   --
19498   PROCEDURE create_Region_From_Template (p_ui_def_id       IN NUMBER,   -- ui_def_id of UI
19499                                          p_template_id     IN NUMBER,   -- template_id of
19500                                                                         -- Local UI Template which needs
19501                                                                         -- to be copied
19502                                          p_template_ui_def_id    IN NUMBER,
19503                                          p_ui_page_id            IN NUMBER,
19504                                          p_parent_element_id     IN VARCHAR2,          -- ui_def_id of target UI
19505                                          x_new_element_id        OUT NOCOPY VARCHAR2, -- element_id of new UI region
19506                                          x_return_status  OUT NOCOPY VARCHAR2,-- status string
19507                                          x_msg_count      OUT NOCOPY NUMBER,  -- number of error messages
19508                                          x_msg_data       OUT NOCOPY VARCHAR2 -- string which contains error messages
19509                                          ) IS
19510 
19511     l_template_xmldoc         xmldom.DOMDocument;
19512     l_xmldoc                  xmldom.DOMDocument;
19513     l_template_root_xml_node  xmldom.DOMNode;
19514     l_parent_xml_node         xmldom.DOMNode;
19515     l_out_xml_node            xmldom.DOMNode;
19516     l_target_uicont_xml_node  xmldom.DOMNode;
19517     l_new_xml_root_node       xmldom.DOMNode;
19518     l_xml_node                xmldom.DOMNode;
19519 
19520     l_source_xml_node          xmldom.DOMNode;
19521     l_xml_uicont_node          xmldom.DOMNode;
19522     l_xml_new_node             xmldom.DOMNode;
19523     l_target_xml_node          xmldom.DOMNode;
19524     l_stacklayout_node            xmldom.DOMNode;
19525     l_stacklayout_uicont_xml_node xmldom.DOMNode;
19526 
19527     l_switcher_element_id     VARCHAR2(255);
19528     l_old_ui_element_id       VARCHAR2(255);
19529     l_new_ui_element_id       VARCHAR2(255);
19530     l_old_switcher_xml_id     VARCHAR2(255);
19531     l_user_attribute3_value   VARCHAR2(4000);
19532     l_switcher_casename       VARCHAR2(255);
19533     l_switcher_xml_id         VARCHAR2(255);
19534     l_uicase_name             VARCHAR2(255);
19535     l_child_nodes_tbl         xmldom.DOMNodeList;
19536     l_template_jrad_doc       CZ_UI_PAGES.jrad_doc%TYPE;
19537     l_jrad_doc                CZ_UI_PAGES.jrad_doc%TYPE;
19538     l_ui_node                 CZ_UI_PAGE_ELEMENTS%ROWTYPE;
19539     l_attribute_value         VARCHAR2(255);
19540     l_length                  NUMBER;
19541     l_needs_to_be_unlocked    BOOLEAN;
19542 
19543   BEGIN
19544 
19545     --
19546     -- lock source UI Template
19547     --
19548     lock_UI_Template( p_template_id, p_template_ui_def_id, l_needs_to_be_unlocked );
19549 
19550     --
19551     -- initialize FND variables/packages
19552     --
19553     Initialize(x_return_status,x_msg_count,x_msg_data);
19554 
19555     set_Local_UI_Context(p_ui_def_id);
19556 
19557     --
19558     -- get full JRAD path of the given UI template
19559     --
19560     SELECT jrad_doc INTO l_template_jrad_doc FROM CZ_UI_TEMPLATES
19561     WHERE ui_def_id=p_template_ui_def_id AND template_id=p_template_id;
19562 
19563     SELECT jrad_doc INTO l_jrad_doc FROM CZ_UI_PAGES a
19564     WHERE ui_def_id=p_ui_def_id AND page_id=p_ui_page_id;
19565 
19566 
19567     --
19568     -- open XML parser
19569     --
19570     Open_Parser();
19571 
19572     --
19573     -- create UI Template in JRAD repository
19574     --
19575     l_template_xmldoc := parse_JRAD_Document(p_doc_full_name => l_template_jrad_doc);
19576 
19577     IF xmldom.isNull(l_template_xmldoc) THEN
19578       add_Error_Message(p_message_name => 'CZ_WRONG_UI_TEMPLATE',
19579                         p_token_name   => 'UI_TEMPLATE',
19580                         p_token_value  => l_template_jrad_doc,
19581                         p_fatal_error  => TRUE);
19582       RAISE WRONG_UI_TEMPLATE;
19583     END IF;
19584 
19585     l_xmldoc := parse_JRAD_Document(p_doc_full_name => l_jrad_doc);
19586 
19587     IF xmldom.isNull(l_xmldoc) THEN
19588       add_Error_Message(p_message_name => 'CZ_WRONG_UI_TEMPLATE',
19589                         p_token_name   => 'UI_TEMPLATE',
19590                         p_token_value  => l_jrad_doc,
19591                         p_fatal_error  => TRUE);
19592       RAISE WRONG_UI_TEMPLATE;
19593     END IF;
19594 
19595     l_parent_xml_node := find_XML_Node_By_Attribute(p_subtree_doc     => l_xmldoc,
19596                                                     p_attribute_name  => G_ID_ATTRIBUTE,
19597                                                     p_attribute_value => p_parent_element_id);
19598 
19599     l_ui_node := find_Parent_UI_Element(p_xml_node   => l_parent_xml_node,
19600                                         p_ui_def_id  => p_ui_def_id,
19601                                         p_ui_page_id => p_ui_page_id);
19602 
19603     l_target_uicont_xml_node := getUIContents(l_parent_xml_node);
19604 
19605     l_template_root_xml_node :=xmldom.makeNode(xmldom.getDocumentElement(l_template_xmldoc));
19606 
19607     x_new_element_id := get_Element_Id();
19608 
19609     set_Attribute(l_template_root_xml_node,
19610                   G_ID_ATTRIBUTE,
19611                   x_new_element_id);
19612 
19613     handle_USER_ATTRIBUTE10(p_xml_root_node => l_template_root_xml_node,
19614                             p_ui_def_id     => p_ui_def_id,
19615                             p_ui_page_id    => p_ui_page_id,
19616                             p_ui_element_id => x_new_element_id);
19617 
19618     l_child_nodes_tbl := xmldom.getElementsByTagName(l_template_xmldoc, '*');
19619     l_length := xmldom.getLength(l_child_nodes_tbl);
19620     IF (l_length > 0) THEN
19621         FOR k IN 0..l_length-1
19622         LOOP
19623           --
19624           -- get next child DOM node
19625           --
19626           l_xml_node := xmldom.item(l_child_nodes_tbl, k);
19627 
19628           handle_UI_CASE_Id(l_xml_node);
19629 
19630           IF k > 0 THEN
19631             l_attribute_value := get_Attribute_Value(l_xml_node, G_ID_ATTRIBUTE);
19632 
19633             /*
19634             IF l_attribute_value IS NOT NULL THEN
19635               set_Attribute(xmldom.makeElement(l_xml_node),G_ID_ATTRIBUTE,l_attribute_value||'_'||x_new_element_id);
19636               --
19637               -- create a new copies for corresponding entities ( captions, rules ,... )
19638               --
19639               copy_Node_Related_Entities(p_ui_def_id   => p_ui_def_id,
19640                                          p_ui_page_id  => p_ui_page_id,
19641                                          p_xml_node    => l_xml_node);
19642             */
19643 	    l_parent_xml_node := xmldom.getParentNode(l_xml_node);
19644             IF l_attribute_value IS NOT NULL THEN
19645               --l_parent_xml_node := xmldom.getParentNode(l_xml_node);
19646 
19647               IF xmldom.getNodeName(l_xml_node)='ui:case' OR
19648                  ( NOT(xmldom.isNull(l_parent_xml_node)) AND xmldom.getNodeName(l_xml_node)='oa:stackLayout' AND
19649                    xmldom.getNodeName(l_parent_xml_node)='ui:case') THEN
19650 
19651                 l_switcher_element_id := find_Element_Id_Of_XMLTag(l_xml_node, 'oa:switcher');
19652 
19653                 l_old_ui_element_id := SUBSTR(l_attribute_value,1,INSTR(l_attribute_value, '_')-1);
19654 
19655                 l_new_ui_element_id := REPLACE(REPLACE(REPLACE(l_attribute_value,
19656                                                l_old_ui_element_id,
19657                                                l_switcher_element_id),'_czt','_czn'),'_czc','_czn');
19658                   set_Attribute(xmldom.makeElement(l_xml_node),
19659                                 G_ID_ATTRIBUTE,
19660                                 l_new_ui_element_id);
19661 
19662                 IF xmldom.getNodeName(l_parent_xml_node)='oa:switcher' THEN
19663                   l_switcher_xml_id := get_Attribute_Value(l_parent_xml_node, G_ID_ATTRIBUTE);
19664                   l_uicase_name     := get_Attribute_Value(l_xml_node, 'name');
19665                   set_Attribute(xmldom.makeElement(l_xml_node),
19666                                  'name',
19667                                   REPLACE(REPLACE(REPLACE(l_uicase_name,l_old_switcher_xml_id,l_switcher_xml_id),'_czt','_czn'),'_czc','_czn'));
19668                 END IF;
19669 	    --
19670             -- if current tag is <oa:stackLayout>
19671             -- then replace old id with new one
19672             --
19673 
19674 		IF (xmldom.getNodeName(l_xml_node)='oa:stackLayout' AND
19675 		    xmldom.getNodeName(l_parent_xml_node)='ui:case') AND l_attribute_value IS NOT NULL
19676 		THEN
19677                  set_Attribute(xmldom.makeElement(l_xml_node),
19678                             G_ID_ATTRIBUTE,
19679                            REPLACE(REPLACE(get_Attribute_Value(l_parent_xml_node, 'name'),'_czt','_czn'),'_czc','_czn'));
19680                 END IF;
19681               ELSE
19682                 set_Attribute(xmldom.makeElement(l_xml_node),G_ID_ATTRIBUTE,REPLACE(REPLACE(l_attribute_value,'_czt','_czn'),'_czc','_czn')||'_'||x_new_element_id);
19683                 IF xmldom.getNodeName(l_xml_node)='oa:switcher' THEN
19684                   l_old_switcher_xml_id := l_attribute_value;
19685                   l_user_attribute3_value := get_Attribute_Value(l_xml_node, G_USER_ATTRIBUTE3_NAME);
19686                   l_switcher_casename := get_User_Attribute(l_user_attribute3_value ,'switcherDefaultCaseName');
19687                   l_switcher_casename := REPLACE(l_switcher_casename,l_attribute_value, REPLACE(REPLACE(l_attribute_value,'_czt','_czn'),'_czc','_czn')||'_'||x_new_element_id);
19688                   set_User_Attribute(p_cz_attribute_name    => 'switcherDefaultCaseName',
19689                                      p_cz_attribute_value   => l_switcher_casename,
19690                                      px_xml_attribute_value => l_user_attribute3_value);
19691 
19692                   set_Attribute(l_xml_node,
19693                                 G_USER_ATTRIBUTE3_NAME,
19694                                 l_user_attribute3_value);
19695                 END IF; -- end of IF xmldom.getNodeName(l_xml_node)='oa:switcher'
19696               END IF; -- end of IF xmldom.getNodeName(l_xml_node)='ui:case'
19697               --
19698               -- create a new copies for corresponding entities ( captions, rules ,... )
19699               --
19700               copy_Node_Related_Entities(p_ui_def_id   => p_ui_def_id,
19701                                          p_ui_page_id  => p_ui_page_id,
19702                                          p_xml_node    => l_xml_node,
19703                                          p_source_ui_page_id =>0,
19704                                          p_source_ui_def_id =>p_template_ui_def_id);
19705 
19706          ELSE --of IF l_attribute_value IS NOT NULL
19707 
19708             --
19709             -- set value of user attribute "switcherDefaultCaseName" to new jrad id of <oa:switcher>
19710             --
19711 
19712              IF (xmldom.getNodeName(l_xml_node)='ui:case' AND xmldom.getNodeName(l_parent_xml_node)='oa:switcher')
19713 	     THEN
19714               l_switcher_xml_id := get_Attribute_Value(l_parent_xml_node, G_ID_ATTRIBUTE);
19715               l_uicase_name     :=  get_Attribute_Value(l_xml_node, 'name');
19716               set_Attribute(xmldom.makeElement(l_xml_node),
19717                             'name',
19718                             REPLACE(REPLACE(REPLACE(l_uicase_name,l_old_switcher_xml_id,l_switcher_xml_id),'_czt','_czn'),'_czc','_czn'));
19719 
19720               handle_UI_CASE_Id(l_xml_node);
19721             END IF;
19722 
19723             END IF; -- end of IF l_attribute_value IS NOT NULL
19724 
19725             --++++++ add template references ++++++
19726             add_Extends_Refs(p_xml_node  => l_xml_node,
19727                              p_ui_node   => l_ui_node);
19728 
19729           END IF; -- end  of IF k > 0
19730         END LOOP;
19731     END IF;
19732 
19733     --
19734     -- returns cloned DOM subtree
19735     --
19736     -- l_new_xml_root_node := xmldom.cloneNode(l_template_root_xml_node, TRUE);
19737     l_new_xml_root_node := cloneNode(l_template_root_xml_node, l_target_uicont_xml_node);
19738 
19739 
19740     IF xmldom.IsNull(l_target_uicont_xml_node) AND xmldom.getNodeName(l_parent_xml_node)<>'ui:case' THEN
19741       l_xml_new_node := xmldom.makeNode(xmldom.createElement(l_xmldoc, 'ui:contents'));
19742       l_xml_uicont_node := xmldom.appendChild(l_parent_xml_node,
19743                                               l_xml_new_node);
19744       l_out_xml_node := xmldom.appendChild(l_xml_uicont_node,
19745                                            l_new_xml_root_node);
19746 
19747     ELSIF xmldom.IsNull(l_target_uicont_xml_node) AND  xmldom.getNodeName(l_parent_xml_node)='ui:case' THEN
19748 
19749       l_stacklayout_node := findChildXMLTag(l_parent_xml_node, 'oa:stackLayout');
19750       l_stacklayout_uicont_xml_node := getUIContents(l_stacklayout_node, G_YES_FLAG);
19751       IF xmldom.IsNull(l_stacklayout_uicont_xml_node) THEN
19752 
19753         l_xml_new_node := xmldom.makeNode(xmldom.createElement(l_xmldoc, 'ui:contents'));
19754         l_xml_uicont_node := xmldom.appendChild(l_stacklayout_node,
19755                                               l_xml_new_node);
19756         l_out_xml_node := xmldom.appendChild(l_xml_uicont_node,
19757                                              l_new_xml_root_node);
19758 
19759       ELSE
19760         l_out_xml_node := xmldom.appendChild(l_stacklayout_uicont_xml_node,
19761                                              l_new_xml_root_node);
19762       END IF;
19763 
19764     ELSE
19765       l_out_xml_node := xmldom.appendChild(l_target_uicont_xml_node,
19766                                            l_new_xml_root_node);
19767 
19768     END IF;
19769 
19770     Save_Document(p_xml_doc   => l_xmldoc,
19771                   p_doc_name  => l_jrad_doc);
19772 
19773     --
19774     -- close XML parser
19775     --
19776     Close_Parser();
19777 
19778     UPDATE CZ_UI_PAGES
19779        SET page_rev_nbr=page_rev_nbr+1
19780      WHERE ui_def_id=p_ui_def_id AND
19781            page_id=p_ui_page_id;
19782 
19783     --
19784     -- unlock source UI Template
19785     --
19786     unlock_UI_Template( p_template_id, p_template_ui_def_id, l_needs_to_be_unlocked );
19787 
19788   EXCEPTION
19789     WHEN WRONG_UI_TEMPLATE THEN
19790       x_return_status := FND_API.G_RET_STS_ERROR;
19791       x_msg_count     := g_MSG_COUNT;
19792       x_msg_data      := fnd_msg_pub.GET(g_MSG_COUNT,fnd_api.g_false);
19793       DEBUG(x_msg_data);
19794       --
19795       -- unlock source UI Template
19796       --
19797       unlock_UI_Template( p_template_id, p_template_ui_def_id, l_needs_to_be_unlocked );
19798 
19799     WHEN OTHERS THEN
19800       x_return_status := FND_API.G_RET_STS_ERROR;
19801       x_msg_count := 1;
19802       x_msg_data  := SUBSTR(DBMS_UTILITY.format_error_backtrace,1,4000);
19803       fnd_msg_pub.add_exc_msg('CZ_UIOA_PVT', 'create_Region_From_Template', x_msg_data);
19804       DEBUG('create_Region_From_Template() : '||x_msg_data);
19805       --
19806       -- unlock source UI Template
19807       --
19808       unlock_UI_Template( p_template_id, p_template_ui_def_id, l_needs_to_be_unlocked );
19809 
19810   END create_Region_From_Template;
19811 
19812   PROCEDURE add_Template_To_Template (p_template_id                 IN NUMBER,
19813                                       p_template_ui_def_id          IN NUMBER,
19814                                       p_target_template_id          IN NUMBER,
19815                                       p_target_template_ui_def_id   IN NUMBER,
19816                                       p_parent_element_id           IN VARCHAR2,          -- ui_def_id of target UI
19817                                       x_new_element_id        OUT NOCOPY VARCHAR2, -- element_id of new UI region
19818                                       x_return_status  OUT NOCOPY VARCHAR2,-- status string
19819                                       x_msg_count      OUT NOCOPY NUMBER,  -- number of error messages
19820                                       x_msg_data       OUT NOCOPY VARCHAR2 -- string which contains error messages
19821                                       ) IS
19822 
19823     l_template_xmldoc         xmldom.DOMDocument;
19824     l_xmldoc                  xmldom.DOMDocument;
19825     l_template_root_xml_node  xmldom.DOMNode;
19826     l_parent_xml_node         xmldom.DOMNode;
19827     l_temp_parent_xml_node    xmldom.DOMNode;
19828     l_out_xml_node            xmldom.DOMNode;
19829     l_target_uicont_xml_node  xmldom.DOMNode;
19830     l_new_xml_root_node       xmldom.DOMNode;
19831     l_xml_node                xmldom.DOMNode;
19832     l_stacklayout_node        xmldom.DOMNode;
19833     l_xml_new_node            xmldom.DOMNode;
19834     l_xml_uicont_node         xmldom.DOMNode;
19835     l_stacklayout_uicont_xml_node xmldom.DOMNode;
19836     l_xml_switcher_id         VARCHAR2(255);
19837     l_switcher_element_id     VARCHAR2(255);
19838     l_old_ui_element_id       VARCHAR2(255);
19839     l_new_ui_element_id       VARCHAR2(255);
19840     l_user_attribute3_value   VARCHAR2(4000);
19841     l_switcher_casename       VARCHAR2(255);
19842     l_child_nodes_tbl         xmldom.DOMNodeList;
19843     l_template_jrad_doc        CZ_UI_PAGES.jrad_doc%TYPE;
19844     l_target_template_jrad_doc CZ_UI_PAGES.jrad_doc%TYPE;
19845     l_attribute_value         VARCHAR2(255);
19846     l_length                  NUMBER;
19847     l_needs_to_be_unlocked    BOOLEAN;
19848   BEGIN
19849 
19850     --
19851     -- lock source UI Template
19852     --
19853     lock_UI_Template( p_template_id, p_template_ui_def_id, l_needs_to_be_unlocked );
19854 
19855     --
19856     -- initialize FND variables/packages
19857     --
19858     Initialize(x_return_status,x_msg_count,x_msg_data);
19859 
19860     --
19861     -- get full JRAD path of the given UI template
19862     --
19863     SELECT jrad_doc INTO l_template_jrad_doc FROM CZ_UI_TEMPLATES
19864     WHERE ui_def_id=p_template_ui_def_id AND template_id=p_template_id;
19865 
19866     SELECT jrad_doc INTO l_target_template_jrad_doc FROM CZ_UI_TEMPLATES
19867     WHERE ui_def_id=p_target_template_ui_def_id AND template_id=p_target_template_id;
19868 
19869     --
19870     -- open XML parser
19871     --
19872     Open_Parser();
19873 
19874     --
19875     -- create UI Template in JRAD repository
19876     --
19877     l_template_xmldoc := parse_JRAD_Document(p_doc_full_name => l_template_jrad_doc);
19878 
19879     IF xmldom.isNull(l_template_xmldoc) THEN
19880       add_Error_Message(p_message_name => 'CZ_WRONG_UI_TEMPLATE',
19881                         p_token_name   => 'UI_TEMPLATE',
19882                         p_token_value  => l_template_jrad_doc,
19883                         p_fatal_error  => TRUE);
19884 
19885       RAISE WRONG_UI_TEMPLATE;
19886     END IF;
19887 
19888     l_xmldoc := parse_JRAD_Document(p_doc_full_name => l_target_template_jrad_doc);
19889 
19890     IF xmldom.isNull(l_xmldoc) THEN
19891       add_Error_Message(p_message_name => 'CZ_WRONG_UI_TEMPLATE',
19892                         p_token_name   => 'UI_TEMPLATE',
19893                         p_token_value  => l_template_jrad_doc,
19894                         p_fatal_error  => TRUE);
19895       RAISE WRONG_UI_TEMPLATE;
19896     END IF;
19897 
19898     IF p_parent_element_id IS NULL THEN
19899       l_parent_xml_node := xmldom.makeNode(xmldom.getDocumentElement(l_xmldoc));
19900     ELSE
19901       l_parent_xml_node := find_XML_Node_By_Attribute(p_subtree_doc     => l_xmldoc,
19902                                                       p_attribute_name  => G_ID_ATTRIBUTE,
19903                                                       p_attribute_value => p_parent_element_id);
19904     END IF;
19905 
19906     l_target_uicont_xml_node := getUIContents(l_parent_xml_node,G_YES_FLAG);
19907 
19908     l_template_root_xml_node := xmldom.makeNode(xmldom.getDocumentElement(l_template_xmldoc));
19909 
19910     x_new_element_id := get_Element_Id();
19911 
19912     l_new_ui_element_id := x_new_element_id;
19913 
19914     set_Attribute(l_template_root_xml_node,
19915                   G_ID_ATTRIBUTE,
19916                   x_new_element_id);
19917 
19918     l_child_nodes_tbl := xmldom.getElementsByTagName(l_template_xmldoc, '*');
19919     l_length := xmldom.getLength(l_child_nodes_tbl);
19920     IF (l_length > 0) THEN
19921         FOR k IN 0..l_length-1
19922         LOOP
19923           --
19924           -- get next child DOM node
19925           --
19926           l_xml_node := xmldom.item(l_child_nodes_tbl, k);
19927 
19928           l_attribute_value := get_Attribute_Value(l_xml_node, G_ID_ATTRIBUTE);
19929           l_new_ui_element_id := l_attribute_value||'_'||x_new_element_id;
19930 
19931           handle_Special_XMLCases(p_xml_node         => l_xml_node,
19932                                   p_old_xml_node_id  => l_attribute_value,
19933                                   p_new_xml_node_id  => l_new_ui_element_id,
19934                                   p_jrad_doc         => l_template_jrad_doc,
19935                                   px_xml_switcher_id => l_xml_switcher_id,
19936                                   p_inline_copy_mode => G_INLINE_COPY_TMPL);
19937 
19938 
19939           IF k > 0 THEN
19940 
19941             l_user_attribute3_value := get_Attribute_Value(l_xml_node, G_USER_ATTRIBUTE3_NAME);
19942 
19943             IF l_user_attribute3_value IS NOT NULL THEN
19944 
19945               handle_Template_Attributes
19946                   (px_user_attribute_value => l_user_attribute3_value,
19947                    p_new_element_id        => l_new_ui_element_id,
19948                    p_source_ui_def_id      => p_template_ui_def_id,
19949                    p_source_template_id    => p_template_id,
19950                    p_target_ui_def_id      => p_target_template_ui_def_id,
19951                    p_target_template_id    => p_target_template_id,
19952                    p_xml_node              => l_xml_node);
19953 
19954                  set_Attribute(l_xml_node,
19955                                G_USER_ATTRIBUTE3_NAME,
19956                                l_user_attribute3_value);
19957 
19958             END IF; -- end of IF l_attribute_value IS NOT NULL
19959 
19960           END IF; -- end  of IF k > 0
19961         END LOOP;
19962     END IF;
19963 
19964     --
19965     -- remove common attributes of container and subtree
19966     --
19967     remove_TopLevel_Attributes(l_template_root_xml_node);
19968 
19969 
19970     --
19971     -- returns cloned DOM subtree
19972     --
19973     -- l_new_xml_root_node := xmldom.cloneNode(l_template_root_xml_node, TRUE);
19974     l_new_xml_root_node := cloneNode(l_template_root_xml_node, l_parent_xml_node);
19975 
19976 
19977     IF xmldom.IsNull(l_target_uicont_xml_node) AND xmldom.getNodeName(l_parent_xml_node)<>'ui:case' THEN
19978       l_xml_new_node := xmldom.makeNode(xmldom.createElement(l_xmldoc, 'ui:contents'));
19979       l_xml_uicont_node := xmldom.appendChild(l_parent_xml_node,
19980                                               l_xml_new_node);
19981       l_out_xml_node := xmldom.appendChild(l_xml_uicont_node,
19982                                            l_new_xml_root_node);
19983     ELSIF xmldom.IsNull(l_target_uicont_xml_node) AND  xmldom.getNodeName(l_parent_xml_node)='ui:case' THEN
19984       l_stacklayout_node := findChildXMLTag(l_parent_xml_node, 'oa:stackLayout');
19985       l_stacklayout_uicont_xml_node := getUIContents(l_stacklayout_node, G_YES_FLAG);
19986       IF xmldom.IsNull(l_stacklayout_uicont_xml_node) THEN
19987 
19988         l_xml_new_node := xmldom.makeNode(xmldom.createElement(l_xmldoc, 'ui:contents'));
19989         l_xml_uicont_node := xmldom.appendChild(l_stacklayout_node,
19990                                               l_xml_new_node);
19991         l_out_xml_node := xmldom.appendChild(l_xml_uicont_node,
19992                                              l_new_xml_root_node);
19993 
19994       ELSE
19995         l_out_xml_node := xmldom.appendChild(l_stacklayout_uicont_xml_node,
19996                                              l_new_xml_root_node);
19997       END IF;
19998 
19999     ELSE
20000       l_out_xml_node := xmldom.appendChild(l_target_uicont_xml_node,
20001                                            l_new_xml_root_node);
20002     END IF;
20003 
20004     refresh_Templ_Ref_Counts(l_xmldoc, p_target_template_ui_def_id, p_target_template_id);
20005 
20006     Save_Document(p_xml_doc   => l_xmldoc,
20007                   p_doc_name  => l_target_template_jrad_doc);
20008 
20009     --
20010     -- close XML parser
20011     --
20012     Close_Parser();
20013 
20014     UPDATE CZ_UI_TEMPLATES
20015        SET template_rev_nbr=template_rev_nbr+1
20016      WHERE template_id=p_target_template_id AND
20017            ui_def_id=p_target_template_ui_def_id;
20018 
20019     --
20020     -- unlock source UI Template
20021     --
20022     unlock_UI_Template( p_template_id, p_template_ui_def_id, l_needs_to_be_unlocked );
20023 
20024   EXCEPTION
20025     WHEN WRONG_UI_TEMPLATE THEN
20026       x_return_status := FND_API.G_RET_STS_ERROR;
20027       x_msg_count     := g_MSG_COUNT;
20028       x_msg_data      := fnd_msg_pub.GET(g_MSG_COUNT,fnd_api.g_false);
20029       DEBUG(x_msg_data);
20030       --
20031       -- unlock source UI Template
20032       --
20033       unlock_UI_Template( p_template_id, p_template_ui_def_id, l_needs_to_be_unlocked );
20034 
20035     WHEN OTHERS THEN
20036       x_return_status := FND_API.G_RET_STS_ERROR;
20037       x_msg_count := 1;
20038       x_msg_data  := SUBSTR(DBMS_UTILITY.format_error_backtrace,1,4000);
20039       fnd_msg_pub.add_exc_msg('CZ_UIOA_PVT', 'add_Template_To_Template', x_msg_data);
20040       DEBUG('create_Region_From_Template() : '||x_msg_data);
20041       --
20042       -- unlock source UI Template
20043       --
20044       unlock_UI_Template( p_template_id, p_template_ui_def_id, l_needs_to_be_unlocked );
20045 
20046   END add_Template_To_Template;
20047 
20048   --
20049   -- create UI Region from Template
20050   -- This procedure works for both UI pages and UI templates
20051   -- Developer calls this procedure for converting UI template reference
20052   -- within either UI page or UI template
20053   -- If p_ui_def_id = 0 then this is a template case and template_id is passed to p_ui_page_id
20054   -- interface needs to be changed if we implement local UI templates, since the code uses ui_def_id = 0
20055   -- to tell when it is working with templates
20056   --
20057   PROCEDURE convert_Template_Reference  (p_ui_def_id      IN NUMBER,
20058                                          p_ui_page_id     IN NUMBER,
20059                                          p_element_id     IN VARCHAR2,
20060                                          x_return_status  OUT NOCOPY VARCHAR2,-- status string
20061                                          x_msg_count      OUT NOCOPY NUMBER,  -- number of error messages
20062                                          x_msg_data       OUT NOCOPY VARCHAR2 -- string which contains error messages
20063                                          ) IS
20064 
20065     l_template_xmldoc         xmldom.DOMDocument;
20066     l_xmldoc                  xmldom.DOMDocument;
20067     l_template_root_xml_node  xmldom.DOMNode;
20068     l_out_xml_node            xmldom.DOMNode;
20069     l_curr_parent_xml_node    xmldom.DOMNode;
20070     l_new_xml_root_node       xmldom.DOMNode;
20071     l_xml_node                xmldom.DOMNode;
20072     l_root_xml_node           xmldom.DOMNode;
20073     l_parent_xml_node         xmldom.DOMNode;
20074     l_child_nodes_tbl         xmldom.DOMNodeList;
20075     l_template_jrad_doc       CZ_UI_PAGES.jrad_doc%TYPE;
20076     l_jrad_doc                CZ_UI_PAGES.jrad_doc%TYPE;
20077     l_ui_node                 CZ_UI_PAGE_ELEMENTS%ROWTYPE;
20078     l_node_map_tbl            xmldom.DOMNamedNodeMap;
20079     l_node_attr               xmldom.DOMNode;
20080     l_prev_xml_node           xmldom.DOMNode;
20081     l_root_attr_names_tbl     varchar_tbl_type;
20082     l_root_attr_values_tbl    varchar_tbl_type;
20083 
20084     l_root_element_signature_id NUMBER;
20085     l_attr_value                VARCHAR2(32000);
20086     l_attribute_value           VARCHAR2(32000);
20087     l_user4_attribute_value     VARCHAR2(32000);
20088     l_new_id_attribute          VARCHAR2(32000);
20089     l_new_attribute_value       VARCHAR2(32000);
20090     l_switcher_element_id       VARCHAR2(4000);
20091     l_old_ui_element_id         VARCHAR2(4000);
20092     l_new_ui_element_id         VARCHAR2(4000);
20093     l_old_switcher_xml_id       VARCHAR2(4000);
20094     l_switcher_casename         VARCHAR2(4000);
20095     l_xml_node_name             VARCHAR2(4000);
20096     l_switcher_xml_id           VARCHAR2(4000);
20097     l_uicase_name               VARCHAR2(4000);
20098     l_hgrid_element_id          VARCHAR2(4000);
20099     l_ancestor_node             VARCHAR2(4000);
20100     l_user_attribute3_value     VARCHAR2(32000);
20101     l_extends_attribute         VARCHAR2(255);
20102     l_id_attribute              VARCHAR2(255);
20103     l_ref_template_id           NUMBER;
20104     l_target_ref_count          NUMBER;
20105     l_ref_count                 NUMBER;
20106     l_length                    NUMBER;
20107     l_index                     NUMBER;
20108 
20109   BEGIN
20110 
20111     set_Local_UI_Context(p_ui_def_id);
20112 
20113     --
20114     -- initialize FND variables/packages
20115     --
20116     Initialize(x_return_status,x_msg_count,x_msg_data);
20117 
20118     IF (p_ui_def_id=0) THEN
20119       SELECT jrad_doc INTO l_jrad_doc FROM CZ_UI_TEMPLATES
20120       WHERE template_id=p_ui_page_id AND ui_def_id=p_ui_def_id;
20121     ELSE
20122       SELECT jrad_doc INTO l_jrad_doc FROM CZ_UI_PAGES
20123       WHERE page_id=p_ui_page_id AND ui_def_id=p_ui_def_id;
20124 
20125     END IF;
20126 
20127     --
20128     -- open XML parser
20129     --
20130     Open_Parser();
20131 
20132     l_xmldoc := parse_JRAD_Document(p_doc_full_name => l_jrad_doc);
20133 
20134     IF xmldom.isNull(l_xmldoc) THEN
20135       add_Error_Message(p_message_name => 'CZ_WRONG_UI_TEMPLATE',
20136                         p_token_name   => 'UI_TEMPLATE',
20137                         p_token_value  => l_jrad_doc,
20138                         p_fatal_error  => TRUE);
20139       RAISE WRONG_UI_TEMPLATE;
20140     END IF;
20141 
20142     l_root_xml_node := find_XML_Node_By_Attribute(p_subtree_doc     => l_xmldoc,
20143                                                   p_attribute_name  => G_ID_ATTRIBUTE,
20144                                                   p_attribute_value => p_element_id);
20145 
20146     l_id_attribute      := get_Attribute_Value(l_root_xml_node,
20147                                                G_ID_ATTRIBUTE);
20148 
20149     IF p_ui_def_id<>0 THEN
20150 
20151       l_ui_node := find_Parent_UI_Element(p_xml_node   => l_root_xml_node,
20152                                           p_ui_def_id  => p_ui_def_id,
20153                                           p_ui_page_id => p_ui_page_id);
20154 
20155       IF l_ui_node.persistent_node_id IS NULL OR l_ui_node.persistent_node_id=0 THEN
20156         l_ui_node.element_id := l_ui_node.parent_element_id;
20157         UPDATE CZ_UI_PAGE_ELEMENTS
20158            SET deleted_flag=G_YES_FLAG
20159          WHERE ui_def_id=p_ui_def_id AND page_id=p_ui_page_id AND
20160                element_id=p_element_id;
20161       ELSE
20162         l_ui_node.element_id := p_element_id;
20163       END IF;
20164 
20165     END IF;
20166 
20167     l_new_id_attribute  := get_Element_Id();
20168 
20169     l_extends_attribute := get_Attribute_Value(l_root_xml_node,
20170                                                'extends');
20171     BEGIN
20172       SELECT template_id, jrad_doc, root_element_signature_id
20173         INTO l_ref_template_id, l_template_jrad_doc, l_root_element_signature_id
20174         FROM CZ_UI_TEMPLATES
20175       WHERE ui_def_id=p_ui_def_id AND jrad_doc=l_extends_attribute AND
20176             deleted_flag=G_NO_FLAG;
20177     EXCEPTION
20178       WHEN NO_DATA_FOUND THEN
20179         SELECT template_id, jrad_doc, root_element_signature_id
20180           INTO l_ref_template_id, l_template_jrad_doc, l_root_element_signature_id FROM CZ_UI_TEMPLATES
20181         WHERE ui_def_id=G_GLOBAL_TEMPLATES_UI_DEF_ID AND
20182               jrad_doc=l_extends_attribute AND
20183               deleted_flag=G_NO_FLAG;
20184     END;
20185 
20186 
20187     IF p_ui_def_id = 0 THEN
20188       SELECT ref_count
20189         INTO l_ref_count
20190         FROM CZ_UI_REF_TEMPLATES
20191       WHERE template_id=p_ui_page_id AND
20192             ref_template_id=l_ref_template_id AND
20193             deleted_flag=G_NO_FLAG;
20194 
20195       IF l_ref_count=1 THEN
20196         DELETE FROM CZ_UI_REF_TEMPLATES
20197          WHERE template_id=p_ui_page_id AND
20198                ref_template_id=l_ref_template_id AND
20199                deleted_flag=G_NO_FLAG;
20200       ELSIF l_ref_count>1 THEN
20201         UPDATE CZ_UI_REF_TEMPLATES
20202            SET ref_count = ref_count-1
20203          WHERE template_id=p_ui_page_id AND
20204                ref_template_id=l_ref_template_id AND
20205                deleted_flag=G_NO_FLAG;
20206       END IF;
20207 
20208       FOR reft IN (SELECT * FROM CZ_UI_REF_TEMPLATES
20209                     WHERE template_id=l_ref_template_id AND
20210                           deleted_flag=G_NO_FLAG)
20211       LOOP
20212 
20213         SELECT NVL(MAX(ref_count),0) INTO l_target_ref_count FROM CZ_UI_REF_TEMPLATES
20214          WHERE template_id=p_ui_page_id AND
20215                ref_template_id=reft.ref_template_id AND
20216                deleted_flag=G_NO_FLAG;
20217 
20218         IF l_target_ref_count=0 THEN
20219 
20220           INSERT INTO CZ_UI_REF_TEMPLATES
20221           (
20222           TEMPLATE_ID
20223           ,REF_TEMPLATE_ID
20224           ,DELETED_FLAG
20225           ,TEMPLATE_UI_DEF_ID
20226           ,REF_TEMPLATE_UI_DEF_ID
20227           ,SEEDED_FLAG
20228           ,REF_TEMPL_SEEDED_FLAG
20229           ,REF_COUNT
20230           )
20231           VALUES
20232           (
20233            p_ui_page_id
20234           ,reft.ref_template_id
20235           ,G_NO_FLAG
20236           ,p_ui_def_id
20237           ,reft.REF_TEMPLATE_UI_DEF_ID
20238           ,G_NO_FLAG
20239           ,reft.REF_TEMPL_SEEDED_FLAG
20240           ,reft.ref_count
20241           );
20242 
20243         ELSE
20244 
20245           UPDATE CZ_UI_REF_TEMPLATES
20246              SET ref_count=ref_count+l_target_ref_count
20247            WHERE template_id=p_ui_page_id AND
20248                  ref_template_id=reft.ref_template_id AND
20249                  deleted_flag=G_NO_FLAG;
20250 
20251         END IF;
20252 
20253       END LOOP;
20254 
20255     END IF;
20256 
20257 
20258     l_template_xmldoc := parse_JRAD_Document(p_doc_full_name => l_template_jrad_doc);
20259 
20260     IF xmldom.isNull(l_template_xmldoc) THEN
20261       add_Error_Message(p_message_name => 'CZ_WRONG_UI_TEMPLATE',
20262                         p_token_name   => 'UI_TEMPLATE',
20263                         p_token_value  => l_template_jrad_doc,
20264                         p_fatal_error  => TRUE);
20265       RAISE WRONG_UI_TEMPLATE;
20266     END IF;
20267 
20268     l_parent_xml_node := xmldom.getParentNode(l_root_xml_node);
20269     l_prev_xml_node := xmldom.getNextSibling(l_root_xml_node);
20270 
20271     l_template_root_xml_node :=xmldom.makeNode(xmldom.getDocumentElement(l_template_xmldoc));
20272 
20273     l_node_map_tbl := xmldom.getAttributes(l_root_xml_node);
20274     IF (xmldom.isNull(l_node_map_tbl) = FALSE) THEN
20275       l_length := xmldom.getLength(l_node_map_tbl);
20276       --
20277       -- loop through attributes
20278       --
20279       FOR i IN 0 .. l_length - 1
20280       LOOP
20281         l_node_attr := xmldom.item(l_node_map_tbl, i);
20282         IF xmldom.getNodeName(l_node_attr) <> 'extends' THEN
20283           l_index := l_root_attr_names_tbl.COUNT + 1;
20284           l_root_attr_names_tbl(l_index) := xmldom.getNodeName(l_node_attr);
20285           l_root_attr_values_tbl(l_index):= xmldom.getNodeValue(l_node_attr);
20286         END IF;
20287       END LOOP;
20288     END IF;
20289 
20290     l_child_nodes_tbl := xmldom.getElementsByTagName(l_template_xmldoc, '*');
20291     l_length := xmldom.getLength(l_child_nodes_tbl);
20292     IF (l_length > 0) THEN
20293         FOR k IN 0..l_length-1
20294         LOOP
20295           --
20296           -- get next child DOM node
20297           --
20298           l_xml_node := xmldom.item(l_child_nodes_tbl, k);
20299           l_curr_parent_xml_node := xmldom.getParentNode(l_xml_node);
20300 
20301           IF k > 0 THEN
20302 
20303             l_xml_node_name := xmldom.getNodeName(l_xml_node);
20304 
20305             l_attribute_value := get_Attribute_Value(l_xml_node, G_ID_ATTRIBUTE);
20306 
20307             IF l_attribute_value IS NOT NULL THEN --???
20308               l_new_attribute_value := handle_JRAD_Id(l_attribute_value,l_new_id_attribute);
20309               set_Attribute(xmldom.makeElement(l_xml_node),G_ID_ATTRIBUTE,REPLACE(REPLACE(l_new_attribute_value,'_czt','_czn'),'_czc','_czn'));
20310             END IF;
20311 
20312             l_ancestor_node := get_Attribute_Value(l_xml_node,
20313                                                    'ancestorNode');
20314             IF l_ancestor_node IS NOT NULL THEN
20315 
20316               l_hgrid_element_id := find_Element_Id_Of_XMLTag(l_xml_node, 'oa:tree');
20317               IF NOT(xmldom.IsNull(l_xml_node)) THEN
20318                 l_ancestor_node := l_jrad_doc||'.'||l_hgrid_element_id;
20319 
20320                 set_Attribute(l_xml_node,
20321                               'ancestorNode',
20322                               l_ancestor_node);
20323               END IF;
20324             END IF;
20325 
20326             --
20327             -- set value of user attribute "switcherDefaultCaseName" to new jrad id of <oa:switcher>
20328             --
20329             IF xmldom.getNodeName(l_xml_node)='oa:switcher' THEN
20330               l_old_switcher_xml_id := l_attribute_value;
20331               l_user_attribute3_value := get_Attribute_Value(l_xml_node, G_USER_ATTRIBUTE3_NAME);
20332               l_switcher_casename := get_User_Attribute(l_user_attribute3_value ,'switcherDefaultCaseName');
20333               l_switcher_casename := REPLACE(REPLACE(REPLACE(l_switcher_casename,l_attribute_value, l_new_attribute_value),'_czt','_czn'),'_czc','_czn');
20334               set_User_Attribute(p_cz_attribute_name    => 'switcherDefaultCaseName',
20335                                  p_cz_attribute_value   => l_switcher_casename,
20336                                  px_xml_attribute_value => l_user_attribute3_value);
20337 
20338               set_Attribute(l_xml_node,
20339                             G_USER_ATTRIBUTE3_NAME,
20340                             l_user_attribute3_value);
20341             END IF;
20342 
20343             --
20344             -- set value of attribute "name" of <ui:case> to id of parent <oa:switcher>
20345             --
20346             IF (l_xml_node_name='ui:case' AND xmldom.getNodeName(l_curr_parent_xml_node)='oa:switcher') THEN
20347               l_switcher_xml_id := get_Attribute_Value(l_curr_parent_xml_node, G_ID_ATTRIBUTE);
20348               l_uicase_name     :=  get_Attribute_Value(l_xml_node, 'name');
20349               set_Attribute(xmldom.makeElement(l_xml_node),
20350                             'name',
20351                             REPLACE(REPLACE(REPLACE(l_uicase_name,l_old_switcher_xml_id,l_switcher_xml_id),'_czt','_czn'),'_czc','_czn'));
20352               handle_UI_CASE_Id(l_xml_node);
20353             END IF;
20354 
20355             --
20356             -- if current tag is <oa:stackLayout>
20357             -- then replace old id with new one
20358             --
20359             IF (l_xml_node_name='oa:stackLayout' AND
20360                xmldom.getNodeName(l_curr_parent_xml_node)='ui:case') AND l_attribute_value IS NOT NULL THEN
20361               set_Attribute(xmldom.makeElement(l_xml_node),
20362                             G_ID_ATTRIBUTE,
20363                            REPLACE(REPLACE(get_Attribute_Value(l_curr_parent_xml_node, 'name'),'_czt','_czn'),'_czc','_czn'));
20364             END IF;
20365 
20366             IF l_attribute_value IS NOT NULL THEN
20367               --
20368               -- create a new copies for corresponding entities ( captions, rules ,... )
20369               --
20370               copy_Node_Related_Entities(p_ui_def_id   => p_ui_def_id,
20371                                          p_ui_page_id  => p_ui_page_id,
20372                                          p_xml_node    => l_xml_node,
20373                                          p_source_ui_page_id =>0,
20374                                          p_source_ui_def_id =>0);
20375             END IF;
20376 
20377             IF p_ui_def_id <> 0 THEN
20378               --++++++ add template references ++++++
20379               add_Extends_Refs(p_xml_node  => l_xml_node,
20380                                p_ui_node   => l_ui_node);
20381             END IF;
20382 
20383           END IF;  -- end of IF k > 0 THEN
20384         END LOOP;  -- end of FOR k IN 0..l_length-1
20385     END IF; -- end of IF (l_length > 0) THEN
20386 
20387     l_out_xml_node:=xmldom.removeChild(l_parent_xml_node,l_root_xml_node);
20388 
20389     --
20390     -- remove common attributes of container and subtree
20391     --
20392     remove_TopLevel_Attributes(l_template_root_xml_node);
20393 
20394     --
20395     -- returns cloned DOM subtree
20396     --
20397     --l_new_xml_root_node := xmldom.cloneNode(l_template_root_xml_node, TRUE);
20398     l_new_xml_root_node := cloneNode(l_template_root_xml_node, l_root_xml_node);
20399 
20400     l_out_xml_node := insert_before(l_parent_xml_node,l_new_xml_root_node,l_prev_xml_node);
20401 
20402 
20403     IF l_root_attr_names_tbl.COUNT > 0 THEN
20404       FOR i IN l_root_attr_names_tbl.First..l_root_attr_names_tbl.Last
20405       LOOP
20406         IF l_root_attr_names_tbl(i)=G_USER_ATTRIBUTE4_NAME THEN
20407            l_user4_attribute_value := l_root_attr_values_tbl(i);
20408            set_User_Attribute(p_cz_attribute_name    => 'elementType',
20409                               p_cz_attribute_value   => l_root_element_signature_id,
20410                               px_xml_attribute_value => l_user4_attribute_value);
20411            set_Attribute(l_out_xml_node, G_USER_ATTRIBUTE4_NAME, l_user4_attribute_value);
20412         ELSE
20413            set_Attribute(l_out_xml_node, l_root_attr_names_tbl(i), l_root_attr_values_tbl(i));
20414         END IF;
20415 
20416       END LOOP;
20417     END IF;
20418 
20419     handle_USER_ATTRIBUTE10(p_xml_root_node => l_out_xml_node,
20420                             p_ui_def_id     => p_ui_def_id,
20421                             p_ui_page_id    => p_ui_page_id,
20422                             p_ui_element_id => p_element_id);
20423 
20424 
20425     IF p_ui_def_id=0 THEN
20426       refresh_Templ_Ref_Counts(l_xmldoc, 0, p_ui_page_id);
20427     END IF;
20428 
20429     Save_Document(p_xml_doc   => l_xmldoc,
20430                   p_doc_name  => l_jrad_doc);
20431 
20432     --
20433     -- close XML parser
20434     --
20435     Close_Parser();
20436 
20437     if (p_ui_def_id=0)
20438     then
20439     UPDATE CZ_UI_TEMPLATES
20440        SET TEMPLATE_REV_NBR=TEMPLATE_REV_NBR+1
20441      WHERE ui_def_id=p_ui_def_id AND
20442            template_id=p_ui_page_id;
20443     else
20444     UPDATE CZ_UI_PAGES
20445        SET page_rev_nbr=page_rev_nbr+1
20446      WHERE ui_def_id=p_ui_def_id AND
20447            page_id=p_ui_page_id;
20448     end if;
20449 
20450   EXCEPTION
20451     WHEN WRONG_UI_TEMPLATE THEN
20452       x_return_status := FND_API.G_RET_STS_ERROR;
20453       x_msg_count     := g_MSG_COUNT;
20454       x_msg_data      := fnd_msg_pub.GET(g_MSG_COUNT,fnd_api.g_false);
20455       DEBUG(x_msg_data);
20456     WHEN OTHERS THEN
20457       x_return_status := FND_API.G_RET_STS_ERROR;
20458       x_msg_count := 1;
20459       x_msg_data  := SUBSTR(DBMS_UTILITY.format_error_backtrace,1,4000);
20460       fnd_msg_pub.add_exc_msg('CZ_UIOA_PVT', 'convert_Template_Reference', x_msg_data);
20461       DEBUG('convert_Template_Reference() : '||x_msg_data);
20462   END convert_Template_Reference;
20463 
20464   --
20465   -- check UI condition
20466   --
20467   PROCEDURE validate_UI_Condition(p_ui_def_id      IN NUMBER,
20468                                   p_rule_id        IN NUMBER,
20469                                   p_rule_type      IN NUMBER,
20470                                   p_page_id        IN NUMBER,
20471                                   p_element_id     IN VARCHAR2,
20472                                   p_is_parser_open IN VARCHAR2 DEFAULT NULL) IS
20473 
20474     l_element_path  VARCHAR2(32000);
20475     l_run_id        NUMBER;
20476 
20477   BEGIN
20478 
20479     CZ_DEVELOPER_UTILS_PVT.verify_special_rule(p_rule_id => p_rule_id,
20480                                                p_name    => NULL,
20481                                                x_run_id  => l_run_id);
20482 
20483     IF l_run_id > 0 THEN
20484       l_element_path := get_Element_XML_Path(p_ui_def_id      => p_ui_def_id,
20485                                              p_page_id        => p_page_id,
20486                                              p_element_id     => p_element_id,
20487                                              p_is_parser_open => p_is_parser_open);
20488 
20489       IF p_rule_type=33 AND l_element_path IS NOT NULL THEN
20490         add_Error_Message(p_message_name => 'CZ_DISP_COND_DEL_ND_ERROR',
20491                           p_token_name   => 'UIELEMENTPATH',
20492                           p_token_value  => l_element_path,
20493                           p_fatal_error  => TRUE);
20494       ELSIF p_rule_type=34 AND l_element_path IS NOT NULL THEN
20495         add_Error_Message(p_message_name => 'CZ_ENABLED_CONDITION_ERROR',
20496                           p_token_name   => 'UIELEMENTPATH',
20497                           p_token_value  => l_element_path,
20498                           p_fatal_error  => TRUE);
20499       ELSE
20500         NULL;
20501       END IF;
20502 
20503     END IF;
20504 
20505   END validate_UI_Condition;
20506 
20507   --
20508   -- check UI conditions
20509   --
20510   PROCEDURE validate_UI_Conditions(p_ui_def_id      IN NUMBER,
20511                                    p_is_parser_open IN VARCHAR2 DEFAULT NULL) IS
20512 
20513     l_element_id  CZ_UI_PAGE_ELEMENTS.element_id%TYPE;
20514     l_page_id     CZ_UI_PAGES.page_id%TYPE;
20515 
20516   BEGIN
20517     FOR i IN(SELECT rule_id,ui_page_id,ui_page_element_id,rule_type FROM CZ_RULES a
20518               WHERE ui_def_id=p_ui_def_id AND
20519                     deleted_flag=G_NO_FLAG AND disabled_flag=G_NO_FLAG)
20520     LOOP
20521 
20522       BEGIN
20523 
20524         IF i.ui_page_element_id IS NOT NULL AND i.ui_page_element_id<>'0' THEN
20525           SELECT element_id INTO l_element_id FROM CZ_UI_PAGE_ELEMENTS
20526            WHERE ui_def_id=p_ui_def_id AND page_id=i.ui_page_id AND
20527                  element_id=i.ui_page_element_id AND deleted_flag NOT IN(G_YES_FLAG,G_LIMBO_FLAG,G_MARK_TO_DELETE);
20528         ELSIF (i.ui_page_element_id IS NULL OR i.ui_page_element_id='0') AND
20529              (i.ui_page_id IS NOT NULL AND i.ui_page_id<>0) THEN
20530           SELECT element_id INTO l_element_id FROM CZ_UI_PAGE_ELEMENTS
20531            WHERE ui_def_id=p_ui_def_id AND page_id=i.ui_page_id AND
20532                  parent_element_id IS NULL AND deleted_flag NOT IN(G_YES_FLAG,G_LIMBO_FLAG,G_MARK_TO_DELETE) AND rownum<2;
20533           SELECT page_id INTO l_page_id FROM CZ_UI_PAGES
20534            WHERE page_id=i.ui_page_id AND ui_def_id=p_ui_def_id AND deleted_flag NOT IN(G_YES_FLAG,G_LIMBO_FLAG,G_MARK_TO_DELETE);
20535         END IF;
20536 
20537         validate_UI_Condition(p_ui_def_id,i.rule_id,i.rule_type, i.ui_page_id,i.ui_page_element_id, p_is_parser_open);
20538       EXCEPTION
20539         WHEN NO_DATA_FOUND THEN
20540           NULL; -- ignore corrupted UI rules
20541       END;
20542     END LOOP;
20543   END validate_UI_Conditions;
20544 
20545   --
20546   -- update UI Reference when target ui_def_id is changed
20547   -- ( it is called by Developer )
20548   --
20549   PROCEDURE update_UI_Reference
20550   (
20551    p_ui_def_id              IN NUMBER,
20552    p_ref_persistent_node_id IN NUMBER,
20553    p_new_target_ui_def_id   IN NUMBER,
20554    x_return_status          OUT NOCOPY VARCHAR2,-- status string
20555    x_msg_count              OUT NOCOPY NUMBER,  -- number of error messages
20556    x_msg_data               OUT NOCOPY VARCHAR2 -- string which contains error messages
20557   ) IS
20558 
20559     l_target_primary_navigation  CZ_UI_DEFS.primary_navigation%TYPE;
20560     l_target_page_set_id         CZ_UI_DEFS.page_set_id%TYPE;
20561     l_page_ref_id                CZ_UI_PAGE_REFS.page_ref_id%TYPE;
20562     l_ref_pagebase_path          CZ_UI_PAGE_REFS.target_path%TYPE;
20563     l_seq_nbr                    CZ_UI_PAGE_REFS.seq_nbr%TYPE;
20564     l_reference_name             CZ_UI_PAGE_REFS.name%TYPE;
20565     l_ref_parent_persist_node_id NUMBER;
20566     l_ref_ps_node_id             NUMBER;
20567     l_ref_parent_id              NUMBER;
20568     l_page_set_type              NUMBER;
20569     l_expl_node_id               NUMBER;
20570     l_node_depth                 NUMBER;
20571     l_old_child_ui_def_id        NUMBER;
20572 
20573   BEGIN
20574 
20575     --
20576     -- initialize FND variables/packages
20577     --
20578     Initialize(x_return_status,x_msg_count,x_msg_data);
20579 
20580     --
20581     -- get primary_navigation, page_set_id of target UI
20582     --
20583     SELECT primary_navigation, page_set_id
20584       INTO l_target_primary_navigation, l_target_page_set_id
20585       FROM CZ_UI_DEFS
20586      WHERE ui_def_id=p_new_target_ui_def_id;
20587 
20588     IF l_target_primary_navigation <> G_MODEL_TREE_MENU THEN
20589 
20590       --
20591       -- if target primary_navigation <> G_MODEL_TREE_MENU ( Dynamic Tree Menu )
20592       -- then delete a corresponding CZ_UI_PAGE_REFS record from source UI
20593       -- ( CZ_UI_PAGE_REFS.target_persistent_node_id=p_ref_persistent_node_id )
20594       --
20595       UPDATE CZ_UI_PAGE_REFS
20596          SET deleted_flag=G_YES_FLAG
20597        WHERE ui_def_id=p_ui_def_id AND
20598              target_persistent_node_id=p_ref_persistent_node_id AND
20599              deleted_flag=G_NO_FLAG;
20600 
20601     ELSE -- if target primary_navigation = G_MODEL_TREE_MENU
20602 
20603       set_UI_Context(p_ui_def_id);
20604 
20605       SELECT ps_node_id,parent_id,name
20606         INTO l_ref_ps_node_id,l_ref_parent_id,l_reference_name
20607         FROM CZ_PS_NODES
20608        WHERE devl_project_id=g_UI_Context.devl_project_id AND
20609              persistent_node_id=p_ref_persistent_node_id AND
20610              deleted_flag=G_NO_FLAG;
20611 
20612       SELECT persistent_node_id
20613         INTO l_ref_parent_persist_node_id
20614         FROM CZ_PS_NODES
20615        WHERE ps_node_id=l_ref_parent_id AND
20616              deleted_flag=G_NO_FLAG;
20617 
20618       FOR i IN(SELECT page_ref_id,node_depth,page_set_id,page_ref_type, seq_nbr
20619                  FROM CZ_UI_PAGE_REFS
20620                 WHERE ui_def_id=p_ui_def_id AND
20621                       target_persistent_node_id=l_ref_parent_persist_node_id AND
20622                       page_ref_type=G_MODEL_TREE_MENU AND
20623                       deleted_flag=G_NO_FLAG)
20624       LOOP
20625 	-- skip this block for Root record in split pages case to avoid data corruption
20626  	IF (i.node_depth <> 0 AND i.seq_nbr <> 0) THEN
20627           --
20628           -- update target_ui_def_id and target_page_set_id
20629           --
20630           UPDATE CZ_UI_PAGE_REFS
20631              SET target_ui_def_id=p_new_target_ui_def_id,
20632                  target_page_set_id=l_target_page_set_id
20633            WHERE ui_def_id=p_ui_def_id AND
20634                  parent_page_ref_id=i.page_ref_id AND
20635                  target_persistent_node_id=p_ref_persistent_node_id AND
20636                  deleted_flag=G_NO_FLAG;
20637 
20638           IF SQL%ROWCOUNT=0 THEN
20639 
20640             l_page_ref_id := allocateId('CZ_UI_PAGE_REFS_S');
20641 
20642             l_ref_pagebase_path := get_Page_Path(l_ref_ps_node_id, i.page_set_id);
20643 
20644             SELECT NVL(MAX(seq_nbr),0)+1 INTO l_seq_nbr
20645               FROM CZ_UI_PAGE_REFS
20646              WHERE ui_def_id=p_ui_def_id AND
20647                    parent_page_ref_id=i.page_ref_id AND
20648                    deleted_flag=G_NO_FLAG;
20649 
20650            SELECT MIN(model_ref_expl_id) INTO l_expl_node_id FROM CZ_MODEL_REF_EXPLS
20651             WHERE model_id=g_UI_Context.devl_project_id AND
20652                   referring_node_id=p_ref_persistent_node_id AND
20653                   deleted_flag=G_NO_FLAG;
20654 
20655             INSERT INTO CZ_UI_PAGE_REFS
20656               (ui_def_id,
20657                page_set_id,
20658                page_ref_id,
20659                parent_page_ref_id,
20660                seq_nbr,
20661                node_depth,
20662                condition_id,
20663                NAME,
20664                caption_source,
20665                target_persistent_node_id,
20666                target_path,
20667                target_ui_def_id,
20668                target_page_set_id,
20669                target_page_id,
20670                modified_flags,
20671                path_to_prev_page,
20672                path_to_next_page,
20673                page_ref_type,
20674                target_expl_node_id,
20675                caption_rule_id,
20676                deleted_flag)
20677              VALUES
20678                (p_ui_def_id,
20679                i.page_set_id,
20680                l_page_ref_id,
20681                i.page_ref_id,
20682                l_seq_nbr,
20683                i.node_depth+1,
20684                NULL,
20685                l_reference_name,
20686                G_DEFAULT_CAPTION_RULE_ID,
20687                p_ref_persistent_node_id,
20688                l_ref_pagebase_path,
20689                p_new_target_ui_def_id,
20690                l_target_page_set_id,
20691                NULL,
20692                0,
20693                NULL,
20694                NULL,
20695                i.page_ref_type,
20696                l_expl_node_id,
20697                NULL,
20698                G_NO_FLAG);
20699           END IF; --  end of IF SQL%ROWCOUNT=0
20700         END IF; -- end of IF i.node_depth<>0 and i.seq_nbr<>0
20701       END LOOP;
20702 
20703     END IF; -- end of IF l_target_primary_navigation <> G_MODEL_TREE_MENU
20704 
20705     -- handle page include region
20706     -- Note the link to the old target child ui is still there at this point
20707     SELECT ref_ui_def_id INTO l_old_child_ui_def_id
20708     FROM cz_ui_refs
20709     WHERE ui_def_id = p_ui_def_id AND ref_persistent_node_id = p_ref_persistent_node_id;
20710 
20711     UPDATE cz_ui_page_elements
20712     SET target_page_ui_def_id = NULL, target_page_id = NULL
20713     WHERE deleted_flag = '0' AND target_page_ui_def_id = l_old_child_ui_def_id AND
20714           target_page_id IN (SELECT page_id FROM cz_ui_pages
20715                              WHERE ui_def_id = l_old_child_ui_def_id AND deleted_flag = '0') AND
20716           element_signature_id = G_PAGE_INCL_REGION_SIGNATURE;
20717 
20718   EXCEPTION
20719     WHEN OTHERS THEN
20720       x_return_status := FND_API.G_RET_STS_ERROR;
20721       x_msg_count := 1;
20722       x_msg_data  := SUBSTR(DBMS_UTILITY.format_error_backtrace,1,4000);
20723       fnd_msg_pub.add_exc_msg('CZ_UIOA_PVT', 'update_UI_Reference', x_msg_data);
20724       DEBUG('update_UI_Reference() : '||x_msg_data);
20725 
20726   END update_UI_Reference;
20727 
20728   ------------------------------------------------------------------------------
20729   ------------- some procedures for fast access to UI Generation ---------------
20730   ------------------------------------------------------------------------------
20731 
20732   PROCEDURE cui(p_model_id           IN NUMBER,
20733                 p_master_template_id IN NUMBER DEFAULT NULL,
20734                 p_ui_name            IN VARCHAR2 DEFAULT NULL,
20735                 p_description        IN VARCHAR2 DEFAULT NULL,
20736                 p_show_all_nodes     IN VARCHAR2 DEFAULT NULL,
20737                 p_create_empty_ui    IN VARCHAR2 DEFAULT NULL,
20738                 p_handling_mode      IN VARCHAR2 DEFAULT NULL) IS
20739 
20740     l_ui_context    CZ_UI_DEFS%ROWTYPE;
20741     l_return_status VARCHAR2(255);
20742     l_msg_count     NUMBER;
20743     l_msg_data      VARCHAR2(255);
20744 
20745   BEGIN
20746 
20747     Initialize(l_return_status,l_msg_count,l_msg_data);
20748 
20749     g_Use_Cache := FALSE;
20750 
20751     --
20752     -- get UI context
20753     -- ( * also function get_UI_Context() inserts data for new UI into CZ_UI_DEFS table )
20754     --
20755     l_ui_context := create_UI_Context(p_model_id           => p_model_id,
20756                                       p_master_template_id => p_master_template_id,
20757                                       p_ui_name            => p_ui_name,
20758                                       p_description        => p_description,
20759                                       p_show_all_nodes     => p_show_all_nodes,
20760                                       p_create_empty_ui    => p_create_empty_ui);
20761 
20762     --
20763     -- generate a new UI for the current UI context
20764     --
20765     construct_UI(l_ui_context.ui_def_id, p_handling_mode);
20766 
20767     DEBUG('New UI has been generated : ui_def_id = '||TO_CHAR(l_ui_context.ui_def_id));
20768 
20769   END cui;
20770 
20771   PROCEDURE rui(p_ui_def_id     IN NUMBER,
20772                 p_handling_mode IN VARCHAR2 DEFAULT NULL) IS
20773 
20774     l_ui_context      CZ_UI_DEFS%ROWTYPE;
20775     l_return_status   VARCHAR2(255);
20776     l_msg_count       NUMBER;
20777     l_msg_data        VARCHAR2(255);
20778 
20779   BEGIN
20780 
20781     Initialize(l_return_status,l_msg_count,l_msg_data);
20782 
20783     --
20784     -- get UI context
20785     --
20786     l_ui_context := get_UI_Context(p_ui_def_id => p_ui_def_id);
20787 
20788     --
20789     -- refresh UI
20790     --
20791     construct_UI(p_ui_def_id, p_handling_mode);
20792 
20793     DEBUG('UI has been refreshed ...');
20794 
20795   END rui;
20796 
20797 BEGIN
20798   DECLARE
20799     l_status            VARCHAR2(255);
20800     l_industry          VARCHAR2(255);
20801     l_oracle_schema     VARCHAR2(255);
20802     l_ret               BOOLEAN;
20803   BEGIN
20804     l_ret := FND_INSTALLATION.GET_APP_INFO(APPLICATION_SHORT_NAME => 'CZ',
20805                                            STATUS                 => l_status,
20806                                            INDUSTRY               => l_industry,
20807                                            ORACLE_SCHEMA          => l_oracle_schema);
20808 
20809     g_UINodeINCREMENT   := get_Seq_Inc('CZ_UI_PAGE_ELEMENTS_S', l_oracle_schema);
20810     g_PageRefINCREMENT  := get_Seq_Inc('CZ_UI_PAGE_REFS_S', l_oracle_schema);
20811     g_PageINCREMENT     := get_Seq_Inc('CZ_UI_PAGES_S', l_oracle_schema);
20812     g_PageSetINCREMENT  := get_Seq_Inc('CZ_UI_PAGE_SETS_S', l_oracle_schema);
20813     g_UIActionINCREMENT := get_Seq_Inc('CZ_UI_ACTIONS_S', l_oracle_schema);
20814 
20815     SELECT template_name
20816       INTO G_DRILLDOWN_TEMPLATE_NAME
20817       FROM CZ_UI_TEMPLATES
20818      WHERE template_id=G_DRILLDOWN_BUTTON_TEMPLATE_ID AND
20819            ui_def_id=G_GLOBAL_TEMPLATES_UI_DEF_ID;
20820   END;
20821 
20822 END CZ_UIOA_PVT;