DBA Data[Home] [Help]

PACKAGE BODY: APPS.CZ_UIOA_PVT

Source


1 PACKAGE BODY CZ_UIOA_PVT AS
2 /*	$Header: czuioab.pls 120.86.12020000.2 2012/08/17 15:33:13 smanna ship $		*/
3 
4   G_GEN_VERSION                 CONSTANT VARCHAR2(25)  :='11.5.20';
5   G_GEN_HEADER                  CONSTANT VARCHAR2(100) :='$Header: czuioab.pls 120.86.12020000.2 2012/08/17 15:33:13 smanna 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   --vsingava IM-ER
453   TYPE expl_node_persistent_id_pair IS RECORD(
454     expl_node_id  NUMBER,
455     persistent_node_id NUMBER);
456 
457 
458   -------------------------------------------------------------------
459 
460   --
461   -- section for a different DEBUG procedures
462   --
463   PROCEDURE DEBUG(p_str IN VARCHAR2) IS
464   BEGIN
465     --DBMS_OUTPUT.PUT_LINE(p_str);
466     NULL;
467   END DEBUG;
468 
469   PROCEDURE DEBUG(p_var_name IN VARCHAR2, p_var_value IN VARCHAR2) IS
470   BEGIN
471     DEBUG(p_var_name || ' = ' || p_var_value);
472   END DEBUG;
473 
474   PROCEDURE DEBUG(p_var_name IN VARCHAR2, p_var_value IN NUMBER) IS
475   BEGIN
476     DEBUG(p_var_name || ' = ' || TO_CHAR(p_var_value));
477   END DEBUG;
478 
479   PROCEDURE DEBUG(p_var_name IN VARCHAR2, p_var_value IN DATE) IS
480   BEGIN
481     DEBUG(p_var_name || ' = ' ||
482           TO_CHAR(p_var_value, 'DD-MM-YYYY HH24:MI:SS'));
483   END DEBUG;
484 
485   PROCEDURE dump_Error_Stack(p_prefix IN VARCHAR2) IS
486     l_msg_count              NUMBER;
487     l_msg_data               VARCHAR2(4000);
488     l_msg_index number;
489   BEGIN
490    DEBUG('------------ Start of '||p_prefix||' ----------------');
491    l_msg_index := 1;
492    l_msg_count := fnd_msg_pub.COUNT_MSG();
493    DEBUG(p_prefix||' '||TO_CHAR(l_msg_count)||' error messages .');
494    WHILE l_msg_count > 0 LOOP
495       l_msg_data := fnd_msg_pub.GET(l_msg_index,fnd_api.g_false);
496       DEBUG(p_prefix||l_msg_data);
497       l_msg_index := l_msg_index + 1;
498       l_msg_count := l_msg_count - 1;
499    END LOOP;
500    DEBUG('------------ End  of '||p_prefix||' ----------------');
501   END dump_Error_Stack;
502 
503   PROCEDURE lock_Model(p_model_id            IN NUMBER,
504                        p_locked_entities_tbl OUT NOCOPY cz_security_pvt.number_type_tbl) IS
505     PRAGMA AUTONOMOUS_TRANSACTION;
506     l_lock_status     VARCHAR2(255);
507     l_msg_count       NUMBER;
508     l_msg_data        VARCHAR2(4000);
509   BEGIN
510 
511     cz_security_pvt.lock_model(1.0,p_model_id,FND_API.G_TRUE,FND_API.G_FALSE,
512                                p_locked_entities_tbl,
513                                l_lock_status,l_msg_count,l_msg_data);
514     COMMIT;
515     IF (l_lock_status <> FND_API.G_RET_STS_SUCCESS) THEN
516        RAISE FAILED_TO_LOCK_MODEL;
517     END IF;
518   END lock_Model;
519 
520   PROCEDURE unlock_Model(p_locked_entities_tbl IN cz_security_pvt.number_type_tbl) IS
521     PRAGMA AUTONOMOUS_TRANSACTION;
522     l_lock_status     VARCHAR2(255);
523     l_msg_count       NUMBER;
524     l_msg_data        VARCHAR2(4000);
525   BEGIN
526     cz_security_pvt.unlock_model(p_api_version      => 1.0,
527                                  p_models_to_unlock => p_locked_entities_tbl,
528                                  p_commit_flag      => FND_API.G_FALSE,
529                                  p_init_msg_list    => FND_API.G_FALSE,
530                                  x_return_status    => l_lock_status,
531                                  x_msg_count        => l_msg_count,
532                                  x_msg_data         => l_msg_data);
533     COMMIT;
534   END unlock_Model;
535 
536   FUNCTION is_Used_By_Reference(p_detailed_type_id IN NUMBER,
537                                 p_ctrl_template_id IN NUMBER)
538     RETURN BOOLEAN IS
539   BEGIN
540 
541     IF ((p_detailed_type_id IN
542         (CZ_TYPES.UMANDATORY_COMPONENT_TYPEID
543         ,CZ_TYPES.UOPTIONAL_COMPONENT_TYPEID
544         ,CZ_TYPES.UMINMAX_COMPONENT_TYPEID
545         ,CZ_TYPES.UNON_COUNT_FEATURE_TYPEID
546         ,CZ_TYPES.UCOUNT_FEATURE_TYPEID
547         ,CZ_TYPES.UCOUNT_FEATURE01_TYPEID
548         ,CZ_TYPES.UMINMAX_FEATURE_TYPEID
549         ,CZ_TYPES.UINTEGER_FEATURE_TYPEID
550         ,CZ_TYPES.UDECIMAL_FEATURE_TYPEID
551         ,CZ_TYPES.UBOOLEAN_FEATURE_TYPEID
552         ,CZ_TYPES.UTEXT_FEATURE_TYPEID
553         ,CZ_TYPES.UTOTAL_TYPEID
554         ,CZ_TYPES.URESOURCE_TYPEID
555         ,CZ_TYPES.UCONNECTOR_TYPEID,CZ_TYPES.UMINMAX_CONNECTOR)
556          AND g_UI_Context.CTRLTEMPLUSE_NONBOM=G_TEMPLATE_USE_BY_REFERENCE)
557        OR
558        (p_detailed_type_id IN
559         (CZ_TYPES.UMANDATORY_REF_TYPEID
560         ,CZ_TYPES.UOPTIONAL_BOM_REF_TYPEID
561         ,CZ_TYPES.UMINMAX_BOM_REF_TYPEID
562         ,CZ_TYPES.UBOM_NSTBOM_NQMTX_TYPEID
563         ,CZ_TYPES.UBOM_NSTBOM_NQNMTX_TYPEID
564         ,CZ_TYPES.UBOM_NSTBOM_QNMTX_TYPEID
565         ,CZ_TYPES.UBOM_NSTBOM_QMTX_TYPEID
566         ,CZ_TYPES.UBOM_STIO_NQMTX_TYPEID
567         ,CZ_TYPES.UBOM_STIO_NQNMTX_TYPEID
568         ,CZ_TYPES.UBOM_STIO_QNMTX_TYPEID
569         ,CZ_TYPES.UBOM_STIO_QMTX_TYPEID)
570         AND g_UI_Context.CTRLTEMPLUSE_BOM=G_TEMPLATE_USE_BY_REFERENCE)) AND
571        p_ctrl_template_id NOT IN(G_DRILLDOWN_IMAGE_TEMPLATE_ID,G_DRILLDOWN_LABEL_TEMPLATE_ID,
572          G_DRILLDOWN_BUTTON_TEMPLATE_ID) THEN
573       RETURN TRUE;
574     END IF;
575 
576     RETURN FALSE;
577 
578   END is_Used_By_Reference;
579 
580   PROCEDURE lock_UI_Template(p_template_id           IN NUMBER,
581                              p_template_ui_def_id    IN NUMBER DEFAULT NULL,
582                              px_needs_to_be_unlocked OUT NOCOPY BOOLEAN) IS
583    PRAGMA AUTONOMOUS_TRANSACTION;
584 
585     l_templates_to_lock_tbl  cz_security_pvt.number_type_tbl;
586     l_locked_templates_tbl   cz_security_pvt.number_type_tbl;
587     l_seeded_flag            CZ_UI_TEMPLATES.seeded_flag%TYPE;
588     l_lock_status            VARCHAR2(255);
589     l_msg_count              NUMBER;
590     l_msg_data               VARCHAR2(4000);
591 
592   BEGIN
593     IF p_template_ui_def_id=G_GLOBAL_TEMPLATES_UI_DEF_ID OR
594        p_template_ui_def_id IS NULL THEN
595       SELECT seeded_flag INTO l_seeded_flag FROM CZ_UI_TEMPLATES
596        WHERE template_id=p_template_id AND ui_def_id=G_GLOBAL_TEMPLATES_UI_DEF_ID;
597       IF l_seeded_flag=G_YES_FLAG THEN
598         RETURN;
599       END IF;
600       l_templates_to_lock_tbl(1) := p_template_id;
601       cz_security_pvt.lock_template(p_api_version       => 1.0,
602                                          p_templates_to_lock => l_templates_to_lock_tbl,
603                                          p_commit_flag       => FND_API.G_FALSE,
604                                          p_init_msg_list     => FND_API.G_FALSE,
605                                          x_locked_templates  => l_locked_templates_tbl,
606                                          x_return_status     => l_lock_status,
607                                          x_msg_count         => l_msg_count,
608                                          x_msg_data          => l_msg_data);
609       COMMIT;
610 
611       IF (l_lock_status <> FND_API.G_RET_STS_SUCCESS) THEN
612          RAISE FAILED_TO_LOCK_TEMPLATE;
613       END IF;
614       IF l_locked_templates_tbl.COUNT>0 THEN
615         px_needs_to_be_unlocked := TRUE;
616       ELSE
617         px_needs_to_be_unlocked := FALSE;
618       END IF;
619     END IF;
620   END lock_UI_Template;
621 
622   PROCEDURE unlock_UI_Template(p_template_id          IN NUMBER,
623                                p_template_ui_def_id   IN NUMBER DEFAULT NULL,
624                                p_needs_to_be_unlocked IN BOOLEAN) IS
625     PRAGMA AUTONOMOUS_TRANSACTION;
626     l_templates_to_unlock_tbl    cz_security_pvt.number_type_tbl;
627     l_lock_status                VARCHAR2(255);
628     l_msg_count                  NUMBER;
629     l_msg_data                   VARCHAR2(4000);
630   BEGIN
631     IF (p_template_ui_def_id=G_GLOBAL_TEMPLATES_UI_DEF_ID OR
632        p_template_ui_def_id IS NULL) AND p_needs_to_be_unlocked THEN
633       l_templates_to_unlock_tbl(1) := p_template_id;
634       cz_security_pvt.unlock_template(p_api_version            => 1.0,
635                                            p_templates_to_unlock    => l_templates_to_unlock_tbl,
636                                            p_commit_flag            => FND_API.G_FALSE,
637                                            p_init_msg_list          => FND_API.G_FALSE,
638                                            x_return_status          => l_lock_status,
639                                            x_msg_count              => l_msg_count,
640                                            x_msg_data               => l_msg_data);
641       COMMIT;
642     END IF;
643   END unlock_UI_Template;
644 
645   --
646   -- lock all global UI templates for a given model_id and ui_def_id
647   -- array x_templates_id_tbl will contain locked UI templates
648   --
649   PROCEDURE lock_UI_Templates(p_model_id          IN NUMBER,
650                               p_ui_def_id         IN NUMBER) IS
651     l_needs_to_be_unlocked     BOOLEAN;
652 
653   l_lock_status            VARCHAR2(255);
654     l_msg_count              NUMBER;
655     l_msg_data               VARCHAR2(4000);
656     l_msg_index number;
657   BEGIN
658     FOR i IN(SELECT DISTINCT template_id, detailed_type_id
659                FROM CZ_UITEMPLS_FOR_PSNODES_V
660               WHERE devl_project_id=p_model_id AND
661                     ui_def_id=p_ui_def_id AND
662                     template_ui_def_id=G_GLOBAL_TEMPLATES_UI_DEF_ID AND
663                     deleted_flag = G_NO_FLAG)
664     LOOP
665       IF is_Used_By_Reference(i.detailed_type_id, i.template_id)=FALSE AND
666          NOT(g_locked_templates_id_tbl.EXISTS(i.template_id)) THEN
667 
668         BEGIN
669           --
670           -- lock current UI Template
671           --
672           lock_UI_Template( i.template_id, G_GLOBAL_TEMPLATES_UI_DEF_ID, l_needs_to_be_unlocked);
673           --
674           -- collect only those UI templates
675           -- which really have been locked
676           --
677           IF l_needs_to_be_unlocked THEN
678             g_locked_templates_id_tbl(i.template_id) := i.template_id;
679           END IF;
680         EXCEPTION
681           WHEN FAILED_TO_LOCK_TEMPLATE THEN
682             DEBUG('Failed to lock UI Template with template_id=', i.template_id);
683             g_MSG_COUNT := fnd_msg_pub.COUNT_MSG();
684         END;
685 
686       END IF;
687 
688     END LOOP;
689 
690   END lock_UI_Templates;
691 
692   --
693   -- unlock global UI templates specified by array x_templates_id_tbl
694   --
695   PROCEDURE unlock_UI_Templates IS
696     l_index NUMBER;
697   BEGIN
698 
699     IF  g_locked_templates_id_tbl.Count>0 THEN
700 
701       l_index :=  g_locked_templates_id_tbl.First;
702 
703       LOOP
704         IF l_index IS NULL THEN
705           EXIT;
706         END IF;
707 
708         DEBUG('UI Template to unlock : ',g_locked_templates_id_tbl(l_index));
709         --
710         -- unlock current UI Template
711         --
712         unlock_UI_Template( g_locked_templates_id_tbl(l_index), G_GLOBAL_TEMPLATES_UI_DEF_ID, TRUE);
713         l_index := g_locked_templates_id_tbl.NEXT(l_index);
714       END LOOP;
715 
716     END IF;
717 
718   END unlock_UI_Templates;
719 
720   --
721   -- initialize sequences to use in UI Generation/UI Refresh
722   --
723   PROCEDURE Initialize_Sequences IS
724   BEGIN
725 
726     SELECT CZ_UI_PAGE_ELEMENTS_S.nextval INTO g_currentUINode FROM dual;
727     g_currUISeqVal := g_currentUINode;
728 
729     SELECT CZ_UI_PAGE_REFS_S.nextval INTO g_currentPageRef FROM dual;
730     g_currPageRefSeqVal := g_currentPageRef;
731 
732     SELECT CZ_UI_PAGES_S.nextval INTO g_currentPage FROM dual;
733     g_currPageSeqVal := g_currentPage;
734 
735     SELECT CZ_UI_PAGE_SETS_S.nextval INTO g_currentPageSet FROM dual;
736     g_currPageSetSeqVal := g_currentPageSet;
737 
738     SELECT CZ_UI_ACTIONS_S.nextval INTO g_currentUIAction FROM dual;
739     g_currUIActionSeqVal := g_currentUIAction;
740 
741   END Initialize_Sequences;
742 
743   --
744   -- initialize FND variables/packages
745   --
746   PROCEDURE Initialize(x_return_status OUT NOCOPY VARCHAR2,
747                        x_msg_count     OUT NOCOPY NUMBER,
748                        x_msg_data      OUT NOCOPY VARCHAR2) IS
749   BEGIN
750     g_MSG_COUNT := 0 ;
751     fnd_msg_pub.initialize;
752     x_return_status := FND_API.G_RET_STS_SUCCESS;
753     x_msg_count     := 0;
754     x_msg_data      := NULL;
755     Initialize_Sequences();
756     g_ui_def_nodes_tbl.DELETE;
757     g_ui_pages_counter_tbl.DELETE;
758     g_root_persist_id_tbl.DELETE;
759     g_local_ui_context.DELETE;
760     g_check_boundaries_tbl.DELETE;
761     g_locked_templates_id_tbl.DELETE;
762     g_elements_to_move.DELETE;
763     g_dom_elements_to_move.DELETE;
764     g_tgt_pg_to_src_pg_map.DELETE;
765   END Initialize;
766 
767   --
768   -- add FND error message
769   --
770   PROCEDURE add_Error_Message(p_message_name IN VARCHAR2,
771                               p_fatal_error  IN BOOLEAN) IS
772 
773   BEGIN
774     FND_MESSAGE.SET_NAME('CZ', p_message_name);
775     IF p_fatal_error THEN
776       FND_MSG_PUB.ADD;
777     ELSE
778       fnd_msg_pub.add_detail(p_message_type => FND_MSG_PUB.G_WARNING_MSG);
779     END IF;
780     FND_MSG_PUB.count_and_get(p_count => g_MSG_COUNT,
781                               p_data  => g_MSG_DATA);
782     IF p_fatal_error OR g_RETURN_STATUS=FND_API.G_RET_STS_ERROR THEN
783       g_RETURN_STATUS := FND_API.G_RET_STS_ERROR;
784     ELSE
785       g_RETURN_STATUS := FND_API.G_RET_STS_SUCCESS;
786     END IF;
787 
788   END add_Error_Message;
789 
790   PROCEDURE add_Error_Message(p_message_name IN VARCHAR2,
791                               p_token_name   IN VARCHAR2,
792                               p_token_value  IN VARCHAR2,
793                               p_fatal_error  IN BOOLEAN) IS
794 
795   BEGIN
796     FND_MESSAGE.SET_NAME('CZ', p_message_name);
797     IF p_token_name IS NOT NULL THEN
798       FND_MESSAGE.SET_TOKEN(p_token_name, p_token_value);
799     END IF;
800     IF p_fatal_error THEN
801       FND_MSG_PUB.ADD;
802     ELSE
803       fnd_msg_pub.add_detail(p_message_type => FND_MSG_PUB.G_WARNING_MSG);
804     END IF;
805     FND_MSG_PUB.count_and_get(p_count => g_MSG_COUNT,
806                               p_data  => g_MSG_DATA);
807     IF p_fatal_error OR g_RETURN_STATUS=FND_API.G_RET_STS_ERROR THEN
808       g_RETURN_STATUS := FND_API.G_RET_STS_ERROR;
809     ELSE
810       g_RETURN_STATUS := FND_API.G_RET_STS_SUCCESS;
811     END IF;
812   END add_Error_Message;
813 
814   PROCEDURE add_Error_Message(p_message_name IN VARCHAR2,
815                               p_token_name1   IN VARCHAR2,
816                               p_token_value1  IN VARCHAR2,
817                               p_token_name2   IN VARCHAR2,
818                               p_token_value2  IN VARCHAR,
819                               p_fatal_error   IN BOOLEAN) IS
820 
821   BEGIN
822     FND_MESSAGE.SET_NAME('CZ', p_message_name);
823     IF p_token_name1 IS NOT NULL THEN
824       FND_MESSAGE.SET_TOKEN(p_token_name1, p_token_value1);
825     END IF;
826 
827     IF p_token_name2 IS NOT NULL THEN
828       FND_MESSAGE.SET_TOKEN(p_token_name2, p_token_value2);
829     END IF;
830 
831     IF p_fatal_error THEN
832       FND_MSG_PUB.ADD;
833     ELSE
834       fnd_msg_pub.add_detail(p_message_type => FND_MSG_PUB.G_WARNING_MSG);
835     END IF;
836 
837     FND_MSG_PUB.count_and_get(p_count => g_MSG_COUNT,
838                               p_data  => g_MSG_DATA);
839     IF p_fatal_error OR g_RETURN_STATUS=FND_API.G_RET_STS_ERROR THEN
840       g_RETURN_STATUS := FND_API.G_RET_STS_ERROR;
841     ELSE
842       g_RETURN_STATUS := FND_API.G_RET_STS_SUCCESS;
843     END IF;
844   END add_Error_Message;
845 
846   PROCEDURE add_Error_Message(p_message_name IN VARCHAR2,
847                               p_token_name1   IN VARCHAR2,
848                               p_token_value1  IN VARCHAR2,
849                               p_token_name2   IN VARCHAR2,
850                               p_token_value2  IN VARCHAR,
851                               p_token_name3   IN VARCHAR2,
852                               p_token_value3  IN VARCHAR,
853                               p_fatal_error   IN BOOLEAN) IS
854 
855   BEGIN
856     FND_MESSAGE.SET_NAME('CZ', p_message_name);
857     IF p_token_name1 IS NOT NULL THEN
858       FND_MESSAGE.SET_TOKEN(p_token_name1, p_token_value1);
859     END IF;
860 
861     IF p_token_name2 IS NOT NULL THEN
862       FND_MESSAGE.SET_TOKEN(p_token_name2, p_token_value2);
863     END IF;
864 
865     IF p_token_name3 IS NOT NULL THEN
866       FND_MESSAGE.SET_TOKEN(p_token_name3, p_token_value3);
867     END IF;
868 
869     IF p_fatal_error THEN
870       FND_MSG_PUB.ADD;
871     ELSE
872       fnd_msg_pub.add_detail(p_message_type => FND_MSG_PUB.G_WARNING_MSG);
873     END IF;
874 
875     FND_MSG_PUB.count_and_get(p_count => g_MSG_COUNT,
876                               p_data  => g_MSG_DATA);
877     IF p_fatal_error OR g_RETURN_STATUS=FND_API.G_RET_STS_ERROR THEN
878       g_RETURN_STATUS := FND_API.G_RET_STS_ERROR;
879     ELSE
880       g_RETURN_STATUS := FND_API.G_RET_STS_SUCCESS;
881     END IF;
882   END add_Error_Message;
883 
884   PROCEDURE add_Error_Message(p_message_name IN VARCHAR2,
885                               p_token_name1   IN VARCHAR2,
886                               p_token_value1  IN VARCHAR2,
887                               p_token_name2   IN VARCHAR2,
888                               p_token_value2  IN VARCHAR,
889                               p_token_name3   IN VARCHAR2,
890                               p_token_value3  IN VARCHAR,
891                               p_token_name4   IN VARCHAR2,
892                               p_token_value4  IN VARCHAR,
893                               p_token_name5   IN VARCHAR2,
894                               p_token_value5  IN VARCHAR,
895                               p_fatal_error   IN BOOLEAN) IS
896 
897   BEGIN
898     FND_MESSAGE.SET_NAME('CZ', p_message_name);
899     IF p_token_name1 IS NOT NULL THEN
900       FND_MESSAGE.SET_TOKEN(p_token_name1, p_token_value1);
901     END IF;
902 
903     IF p_token_name2 IS NOT NULL THEN
904       FND_MESSAGE.SET_TOKEN(p_token_name2, p_token_value2);
905     END IF;
906 
907     IF p_token_name3 IS NOT NULL THEN
908       FND_MESSAGE.SET_TOKEN(p_token_name3, p_token_value3);
909     END IF;
910 
911     IF p_token_name4 IS NOT NULL THEN
912       FND_MESSAGE.SET_TOKEN(p_token_name4, p_token_value4);
913     END IF;
914 
915     IF p_token_name5 IS NOT NULL THEN
916       FND_MESSAGE.SET_TOKEN(p_token_name5, p_token_value5);
917     END IF;
918 
919     IF p_fatal_error THEN
920       FND_MSG_PUB.ADD;
921     ELSE
922       fnd_msg_pub.add_detail(p_message_type => FND_MSG_PUB.G_WARNING_MSG);
923     END IF;
924 
925     FND_MSG_PUB.count_and_get(p_count => g_MSG_COUNT,
926                               p_data  => g_MSG_DATA);
927     IF p_fatal_error OR g_RETURN_STATUS=FND_API.G_RET_STS_ERROR THEN
928       g_RETURN_STATUS := FND_API.G_RET_STS_ERROR;
929     ELSE
930       g_RETURN_STATUS := FND_API.G_RET_STS_SUCCESS;
931     END IF;
932   END add_Error_Message;
933 
934   --
935   -- return increment of sequence p_sequence_name which
936   -- is under schema p_sequence_owner
937   --
938   FUNCTION get_Seq_Inc(p_sequence_name  IN VARCHAR2,
939                        p_sequence_owner IN VARCHAR2) RETURN NUMBER IS
940     l_seq_increment NUMBER;
941   BEGIN
942     SELECT increment_by INTO l_seq_increment
943     FROM all_sequences
944     WHERE sequence_owner=p_sequence_owner AND
945           sequence_name=p_sequence_name;
946     RETURN l_seq_increment;
947   END get_Seq_Inc;
948 
949   --
950   -- open XML parser
951   --
952   PROCEDURE Open_Parser IS
953   BEGIN
954     --
955     -- create a new XML parser ( global )
956     --
957     g_PARSER := xmlparser.newParser;
958   END Open_Parser;
959 
960   --
961   -- close XML parser
962   --
963   PROCEDURE Close_Parser IS
964   BEGIN
965     --
966     -- close XML parser ( global )
967     --
968     xmlparser.freeParser(g_PARSER);
969   EXCEPTION
970     WHEN OTHERS THEN
971       IF SQLCODE='-20103' THEN
972         NULL;
973       ELSE
974         DEBUG('Close_Parser() : XML Parser can not be closed : '||SQLERRM);
975         RAISE;
976       END IF;
977   END Close_Parser;
978 
979   FUNCTION cloneNode(p_source_xml_node xmldom.DOMNode, p_target_subtree_xml_node xmldom.DOMNode) RETURN xmldom.DOMNode IS
980 
981     l_xmldoc  xmldom.DOMDocument;
982 
983   BEGIN
984 
985     l_xmldoc := xmldom.getOwnerDocument(p_target_subtree_xml_node);
986 
987     BEGIN
988 
989       CZ_UIOA_PVT.g_temp_xmldoc := l_xmldoc;
990       CZ_UIOA_PVT.g_temp_source_xml_node := p_source_xml_node;
991 
992       EXECUTE IMMEDIATE
993       'BEGIN ' ||
994       '  CZ_UIOA_PVT.g_temp_xml_node := XMLDOM.importNode(CZ_UIOA_PVT.g_temp_xmldoc, CZ_UIOA_PVT.g_temp_source_xml_node, TRUE); ' ||
995       'END;';
996 
997       RETURN CZ_UIOA_PVT.g_temp_xml_node;
998 
999     EXCEPTION
1000       WHEN OTHERS THEN
1001         IF SQLCODE=-6550 THEN -- there is no function importNode() in XMLDOM
1002           RETURN xmldom.cloneNode(p_source_xml_node, TRUE);
1003         ELSE
1004           RAISE;
1005         END IF;
1006     END;
1007 
1008   END cloneNode;
1009 
1010   --
1011   -- generate NEW ID FROM a given sequence
1012   --  Parameters : p_sequence_name - name of DB sequence
1013   --  Return     : next id from sequence
1014   --
1015   FUNCTION allocateId(p_sequence_name IN VARCHAR2) RETURN NUMBER IS
1016     l_id NUMBER;
1017   BEGIN
1018     IF p_sequence_name='CZ_UI_PAGE_ELEMENTS_S' THEN
1019       IF g_currentUINode<g_currUISeqVal+g_UINodeINCREMENT-1 THEN
1020         g_currentUINode := g_currentUINode+1;
1021       ELSE
1022         SELECT CZ_UI_PAGE_ELEMENTS_S.nextval INTO g_currUISeqVal FROM dual;
1023         g_currentUINode := g_currUISeqVal;
1024       END IF;
1025       RETURN g_currentUINode;
1026     ELSIF p_sequence_name='CZ_UI_PAGE_REFS_S' THEN
1027       IF g_currentPageRef<g_currPageRefSeqVal+g_PageRefINCREMENT-1 THEN
1028         g_currentPageRef := g_currentPageRef+1;
1029       ELSE
1030         SELECT CZ_UI_PAGE_REFS_S.nextval INTO g_currPageRefSeqVal FROM dual;
1031         g_currentPageRef := g_currPageRefSeqVal;
1032       END IF;
1033       RETURN g_currentPageRef;
1034     ELSIF p_sequence_name='CZ_UI_PAGES_S' THEN
1035       IF g_currentPage<g_currPageSeqVal+g_PageINCREMENT-1 THEN
1036         g_currentPage := g_currentPage+1;
1037       ELSE
1038         SELECT CZ_UI_PAGES_S.nextval INTO g_currPageSeqVal FROM dual;
1039         g_currentPage := g_currPageSeqVal;
1040       END IF;
1041       RETURN g_currentPage;
1042     ELSIF p_sequence_name='CZ_UI_PAGE_SETS_S' THEN
1043       IF g_currentPageSet<g_currPageSetSeqVal+g_PageSetINCREMENT-1 THEN
1044         g_currentPageSet := g_currentPageSet+1;
1045       ELSE
1046         SELECT CZ_UI_PAGE_SETS_S.nextval INTO g_currPageSetSeqVal FROM dual;
1047         g_currentPageSet := g_currPageSetSeqVal;
1048       END IF;
1049       RETURN g_currentPageSet;
1050     ELSIF p_sequence_name='CZ_UI_ACTIONS_S' THEN
1051       IF g_currentUIAction<g_currUIActionSeqVal+g_UIActionINCREMENT-1 THEN
1052         g_currentUIAction := g_currentUIAction+1;
1053       ELSE
1054         SELECT CZ_UI_ACTIONS_S.nextval INTO g_currUIActionSeqVal FROM dual;
1055         g_currentUIAction := g_currUIActionSeqVal;
1056       END IF;
1057       RETURN g_currentUIAction;
1058     ELSIF p_sequence_name='CZ_INTL_TEXTS_S' THEN
1059       IF g_currentIntlText<g_currIntlTextSeqVal+g_IntlTextINCREMENT-1 THEN
1060         g_currentIntlText := g_currentIntlText+1;
1061       ELSE
1062         SELECT CZ_INTL_TEXTS_S.nextval INTO g_currIntlTextSeqVal FROM dual;
1063         g_currentIntlText := g_currIntlTextSeqVal;
1064       END IF;
1065       RETURN g_currentIntlText;
1066     ELSE
1067       EXECUTE IMMEDIATE 'SELECT ' || p_sequence_name || '.NEXTVAL FROM dual' INTO l_id;
1068       RETURN l_id;
1069     END IF;
1070 
1071   EXCEPTION
1072     WHEN OTHERS THEN
1073       IF SQLCODE='-2289' THEN
1074         DEBUG('allocateId() : sequence '||p_sequence_name||' does not exist.');
1075       ELSE
1076         DEBUG('Sequence '||p_sequence_name||' can not be handled.');
1077       END IF;
1078       RAISE;
1079   END allocateId;
1080 
1081   PROCEDURE set_Local_UI_Context(p_ui_def_id IN NUMBER) IS
1082   BEGIN
1083     IF NOT(g_local_ui_context.EXISTS(p_ui_def_id)) THEN
1084       SELECT * INTO g_local_ui_context(p_ui_def_id) FROM CZ_UI_DEFS
1085       WHERE ui_def_id=p_ui_def_id;
1086     END IF;
1087   END set_Local_UI_Context;
1088 
1089   FUNCTION get_Local_UI_Context(p_ui_def_id IN NUMBER) RETURN CZ_UI_DEFS%ROWTYPE IS
1090   BEGIN
1091     IF NOT(g_local_ui_context.EXISTS(p_ui_def_id)) THEN
1092       SELECT * INTO g_local_ui_context(p_ui_def_id)
1093         FROM CZ_UI_DEFS
1094        WHERE ui_def_id=p_ui_def_id;
1095     END IF;
1096     RETURN g_local_ui_context(p_ui_def_id);
1097   END get_Local_UI_Context;
1098 
1099   --
1100   -- return new element_id
1101   --
1102   FUNCTION get_Element_Id RETURN VARCHAR2 IS
1103   BEGIN
1104     RETURN TO_CHAR(allocateId('CZ_UI_PAGE_ELEMENTS_S'));
1105   END get_Element_Id;
1106 
1107   --
1108   -- mark UI page as deleted
1109   --
1110   PROCEDURE mark_UI_Page_As_Refreshed(p_page_id   IN NUMBER,
1111                                       p_ui_def_id IN NUMBER) IS
1112   BEGIN
1113     UPDATE CZ_UI_PAGES
1114        SET deleted_flag = DECODE(deleted_flag,G_MARK_TO_ADD,
1115            G_MARK_TO_ADD,G_MARK_TO_REFRESH),
1116            page_rev_nbr=page_rev_nbr+1
1117      WHERE page_id=p_page_id AND
1118            ui_def_id=p_ui_def_id AND
1119            deleted_flag IN(G_NO_FLAG, G_MARK_TO_ADD,G_MARK_TO_REFRESH);
1120   END mark_UI_Page_As_Refreshed;
1121 
1122   --
1123   -- mark UI page as deleted
1124   --
1125   PROCEDURE mark_UI_Page_As_Deleted(p_page_id   IN NUMBER,
1126                                     p_ui_def_id IN NUMBER) IS
1127   BEGIN
1128     UPDATE CZ_UI_PAGES
1129        SET deleted_flag = G_MARK_TO_DELETE
1130      WHERE page_id=p_page_id AND
1131            ui_def_id=p_ui_def_id;
1132   END mark_UI_Page_As_Deleted;
1133 
1134   --
1135   -- mark UI as UI with errors
1136   --
1137   PROCEDURE mark_UI(p_ui_def_id IN NUMBER,
1138                     p_ui_status IN VARCHAR2) IS
1139   BEGIN
1140     UPDATE CZ_UI_DEFS
1141        SET ui_status=p_ui_status
1142      WHERE ui_def_id=p_ui_def_id;
1143   END  mark_UI;
1144 
1145   --
1146   -- refresh UI node marks
1147   --
1148   PROCEDURE refresh_UI_Node_Marks(p_page_id IN NUMBER,
1149                                   p_hmode   IN NUMBER) IS
1150   BEGIN
1151 
1152     IF p_hmode = G_DELETE_PAGE THEN
1153 
1154       UPDATE CZ_UI_PAGES
1155          SET page_rev_nbr = page_rev_nbr + 1,
1156              deleted_flag = G_YES_FLAG
1157        WHERE page_id = p_page_id AND
1158              ui_def_id = g_UI_Context.ui_def_id;
1159       --
1160       -- mark elements as already deleted
1161       --
1162       UPDATE CZ_UI_PAGE_ELEMENTS
1163          SET deleted_flag=G_YES_FLAG
1164        WHERE ui_def_id= g_UI_Context.ui_def_id AND
1165              page_id=p_page_id;
1166 
1167     ELSIF p_hmode = G_DELETE_ELEMENTS THEN
1168       --
1169       -- mark elements as already deleted
1170       --
1171       UPDATE CZ_UI_PAGE_ELEMENTS
1172          SET deleted_flag=G_YES_FLAG
1173        WHERE ui_def_id= g_UI_Context.ui_def_id AND
1174              page_id=p_page_id AND
1175              deleted_flag IN(G_MARK_TO_DELETE);
1176 
1177       IF SQL%ROWCOUNT>0 THEN
1178         --
1179         -- update revision of deleted UI page
1180         --
1181         UPDATE CZ_UI_PAGES
1182            SET page_rev_nbr = page_rev_nbr + 1
1183          WHERE page_id = p_page_id AND
1184                ui_def_id =  g_UI_Context.ui_def_id;
1185       END IF;
1186 
1187     ELSIF p_hmode = G_REFRESH_PAGE THEN
1188 
1189       --
1190       -- update page status and page_rev_nbr
1191       --  page_rev_nbr=1 because this is first creation
1192       --
1193       UPDATE CZ_UI_PAGES
1194          SET page_rev_nbr = page_rev_nbr+1,
1195              deleted_flag = G_NO_FLAG
1196        WHERE page_id = p_page_id AND ui_def_id = g_UI_Context.ui_def_id AND
1197              deleted_flag IN(G_MARK_TO_ADD,G_MARK_TO_REFRESH);
1198 
1199       UPDATE CZ_UI_PAGE_ELEMENTS
1200          SET deleted_flag = G_NO_FLAG
1201        WHERE ui_def_id = g_UI_Context.ui_def_id AND
1202              page_id = p_page_id AND
1203              deleted_flag NOT IN(G_NO_FLAG,G_YES_FLAG,G_LIMBO_FLAG);
1204 
1205     ELSIF p_hmode = G_NEW_PAGE THEN
1206 
1207       UPDATE CZ_UI_PAGES
1208          SET page_rev_nbr = 1,
1209              deleted_flag = G_NO_FLAG
1210        WHERE page_id = p_page_id AND ui_def_id =  g_UI_Context.ui_def_id AND
1211              deleted_flag IN(G_MARK_TO_ADD,G_MARK_TO_REFRESH);
1212 
1213       UPDATE CZ_UI_PAGE_ELEMENTS
1214          SET deleted_flag = G_NO_FLAG
1215        WHERE ui_def_id =  g_UI_Context.ui_def_id AND
1216              page_id = p_page_id AND
1217              deleted_flag NOT IN(G_NO_FLAG,G_YES_FLAG,G_LIMBO_FLAG);
1218     ELSE
1219       NULL;
1220       /*
1221       UPDATE CZ_UI_PAGES
1222          SET deleted_flag = G_NO_FLAG
1223        WHERE page_id = p_page_id AND ui_def_id =  g_UI_Context.ui_def_id AND
1224              deleted_flag NOT IN(G_YES_FLAG,G_LIMBO_FLAG,G_MARK_TO_DELETE);
1225 
1226       UPDATE CZ_UI_PAGE_ELEMENTS
1227          SET deleted_flag = G_NO_FLAG
1228        WHERE ui_def_id =  g_UI_Context.ui_def_id AND
1229              page_id = p_page_id AND
1230              deleted_flag NOT IN(G_YES_FLAG,G_LIMBO_FLAG,G_MARK_TO_DELETE);
1231       */
1232     END IF;
1233 
1234   END refresh_UI_Node_Marks;
1235 
1236 
1237   --
1238   -- get and save Transalations for a given JRAD document
1239   --
1240   PROCEDURE translate_JRAD_Doc(p_jrad_doc_name IN VARCHAR2) IS
1241   BEGIN
1242     jdr_docbuilder.refresh;
1243 
1244     g_jrad_trans_list := jdr_utils.getTranslations(p_jrad_doc_name);
1245 
1246     IF g_jrad_trans_list IS NOT NULL THEN
1247       jdr_utils.saveTranslations(p_jrad_doc_name,g_jrad_trans_list);
1248     END IF;
1249   END translate_JRAD_Doc;
1250 
1251   --
1252   -- returns viewname given the prefix
1253   --
1254   FUNCTION get_next_view_name(p_view_name_prefix IN VARCHAR) RETURN VARCHAR2 IS
1255 
1256   BEGIN
1257 
1258     IF p_view_name_prefix='COMP' THEN
1259       g_mandatory_comp_counter := g_mandatory_comp_counter+1;
1260       RETURN p_view_name_prefix || '_' || g_mandatory_comp_counter;
1261     ELSIF p_view_name_prefix='SIM' THEN
1262       g_optional_ref_counter := g_optional_ref_counter+1;
1263       RETURN p_view_name_prefix || '_' || g_optional_ref_counter;
1264     ELSIF p_view_name_prefix='CS' THEN
1265       g_minmax_ref_counter := g_minmax_ref_counter+1;
1266       RETURN p_view_name_prefix || '_' || g_minmax_ref_counter;
1267     ELSIF p_view_name_prefix='OF' THEN
1268       g_of_feature_counter := g_of_feature_counter+1;
1269       RETURN p_view_name_prefix || '_' || g_of_feature_counter;
1270     ELSIF p_view_name_prefix='IF' THEN
1271       g_if_feature_counter := g_if_feature_counter+1;
1272       RETURN p_view_name_prefix || '_' || g_if_feature_counter;
1273     ELSIF p_view_name_prefix='DF' THEN
1274       g_df_feature_counter := g_df_feature_counter+1;
1275       RETURN p_view_name_prefix || '_' || g_df_feature_counter;
1276     ELSIF p_view_name_prefix='BF' THEN
1277       g_bf_feature_counter := g_bf_feature_counter+1;
1278       RETURN p_view_name_prefix || '_' || g_bf_feature_counter;
1279     ELSIF p_view_name_prefix='TF' THEN
1280       g_tf_feature_counter := g_tf_feature_counter+1;
1281       RETURN p_view_name_prefix || '_' || g_tf_feature_counter;
1282     ELSIF p_view_name_prefix='TOT' THEN
1283       g_tot_feature_counter := g_tot_feature_counter+1;
1284       RETURN p_view_name_prefix || '_' || g_tot_feature_counter;
1285     ELSIF p_view_name_prefix='RSC' THEN
1286       g_rsc_feature_counter := g_rsc_feature_counter+1;
1287       RETURN p_view_name_prefix || '_' || g_rsc_feature_counter;
1288     ELSIF p_view_name_prefix='ITOT' THEN
1289       g_itot_feature_counter := g_itot_feature_counter+1;
1290       RETURN p_view_name_prefix || '_' || g_itot_feature_counter;
1291     ELSIF p_view_name_prefix='IRSC' THEN
1292       g_irsc_feature_counter := g_irsc_feature_counter+1;
1293       RETURN p_view_name_prefix || '_' || g_irsc_feature_counter;
1294     ELSIF p_view_name_prefix='REF' THEN
1295       g_mandatory_ref_counter := g_mandatory_ref_counter+1;
1296       RETURN p_view_name_prefix || '_' || g_mandatory_ref_counter;
1297     ELSIF p_view_name_prefix='CON' THEN
1298       g_connector_counter := g_connector_counter+1;
1299       RETURN p_view_name_prefix || '_' || g_connector_counter;
1300     ELSIF p_view_name_prefix='BOMM' THEN
1301       g_bomm_counter := g_bomm_counter+1;
1302       RETURN p_view_name_prefix || '_' || g_bomm_counter;
1303     ELSIF p_view_name_prefix='OPT' THEN
1304       g_opt_counter := g_opt_counter+1;
1305       RETURN p_view_name_prefix || '_' || g_opt_counter;
1306     END IF;
1307   END get_next_view_name;
1308 
1309   --
1310   -- return name of node type
1311   --
1312   FUNCTION get_View_Name(p_ui_node IN CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE,
1313                          x_has_children OUT NOCOPY VARCHAR2) RETURN VARCHAR2 IS
1314     l_view_name VARCHAR2(255);
1315   BEGIN
1316     x_has_children := G_NO_FLAG;
1317 
1318     IF p_ui_node.detailed_type_id IN (CZ_TYPES.UMANDATORY_COMPONENT_TYPEID) THEN
1319 
1320       g_mandatory_comp_counter := g_mandatory_comp_counter + 1;
1321       l_view_name              := 'COMP_' ||
1322                                   TO_CHAR(g_mandatory_comp_counter);
1323       x_has_children           := G_YES_FLAG;
1324 
1325     ELSIF p_ui_node.detailed_type_id IN (CZ_TYPES.UOPTIONAL_COMPONENT_TYPEID) THEN
1326 
1327       g_optional_ref_counter := g_optional_ref_counter + 1;
1328       l_view_name            := 'SIM_' || TO_CHAR(g_optional_ref_counter);
1329       -- x_has_children         := G_YES_FLAG; -- Shantaram's requitement 08/04/2004
1330 
1331     ELSIF p_ui_node.detailed_type_id IN (CZ_TYPES.UMINMAX_COMPONENT_TYPEID) THEN
1332 
1333       g_minmax_ref_counter := g_minmax_ref_counter + 1;
1334       l_view_name          := 'CS_' || TO_CHAR(g_minmax_ref_counter);
1335       x_has_children       := G_YES_FLAG;
1336 
1337     ELSIF p_ui_node.detailed_type_id IN
1338           (CZ_TYPES.UNON_COUNT_FEATURE_TYPEID, CZ_TYPES.UCOUNT_FEATURE_TYPEID,
1339            CZ_TYPES.UCOUNT_FEATURE01_TYPEID, CZ_TYPES.UMINMAX_FEATURE_TYPEID) THEN
1340 
1341       g_of_feature_counter := g_of_feature_counter + 1;
1342       l_view_name          := 'OF_' || TO_CHAR(g_of_feature_counter);
1343       x_has_children       := G_YES_FLAG;
1344 
1345     ELSIF p_ui_node.detailed_type_id IN (CZ_TYPES.UINTEGER_FEATURE_TYPEID) THEN
1346 
1347       g_if_feature_counter := g_if_feature_counter + 1;
1348       l_view_name          := 'IF_' || TO_CHAR(g_if_feature_counter);
1349 
1350     ELSIF p_ui_node.detailed_type_id IN (CZ_TYPES.UDECIMAL_FEATURE_TYPEID) THEN
1351 
1352       g_df_feature_counter := g_df_feature_counter + 1;
1353       l_view_name          := 'DF_' || TO_CHAR(g_df_feature_counter);
1354 
1355     ELSIF p_ui_node.detailed_type_id IN (CZ_TYPES.UBOOLEAN_FEATURE_TYPEID) THEN
1356 
1357       g_bf_feature_counter := g_bf_feature_counter + 1;
1358       l_view_name          := 'BF_' || TO_CHAR(g_bf_feature_counter);
1359 
1360     ELSIF p_ui_node.detailed_type_id IN (CZ_TYPES.UTEXT_FEATURE_TYPEID) THEN
1361 
1362       g_tf_feature_counter := g_tf_feature_counter + 1;
1363       l_view_name          := 'TF_' || TO_CHAR(g_tf_feature_counter);
1364 
1365     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
1366 
1367       g_tot_feature_counter := g_tot_feature_counter + 1;
1368       l_view_name           := 'TOT_' || TO_CHAR(g_tot_feature_counter);
1369 
1370     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
1371 
1372       g_rsc_feature_counter := g_rsc_feature_counter + 1;
1373       l_view_name           := 'RSC_' || TO_CHAR(g_rsc_feature_counter);
1374 
1375     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
1376 
1377       g_itot_feature_counter := g_itot_feature_counter + 1;
1378       l_view_name           := 'ITOT_' || TO_CHAR(g_itot_feature_counter);
1379 
1380     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
1381 
1382       g_irsc_feature_counter := g_irsc_feature_counter + 1;
1383       l_view_name           := 'IRSC_' || TO_CHAR(g_irsc_feature_counter);
1384 
1385     ELSIF p_ui_node.detailed_type_id IN (CZ_TYPES.UMANDATORY_REF_TYPEID) THEN
1386 
1387       g_mandatory_ref_counter := g_mandatory_ref_counter + 1;
1388       l_view_name             := 'REF_' || TO_CHAR(g_mandatory_ref_counter);
1389 
1390     ELSIF p_ui_node.detailed_type_id IN (CZ_TYPES.UOPTIONAL_BOM_REF_TYPEID) THEN
1391 
1392       g_optional_ref_counter := g_optional_ref_counter + 1;
1393       l_view_name            := 'SIM_' || TO_CHAR(g_optional_ref_counter);
1394       --x_has_children         := G_YES_FLAG; -- Shantaram's requitement 09/01/2004
1395     ELSIF p_ui_node.detailed_type_id IN (CZ_TYPES.UMINMAX_BOM_REF_TYPEID) THEN
1396 
1397       g_minmax_ref_counter := g_minmax_ref_counter + 1;
1398       l_view_name          := 'CS_' || TO_CHAR(g_minmax_ref_counter);
1399       x_has_children       := G_YES_FLAG;
1400     ELSIF p_ui_node.detailed_type_id IN (CZ_TYPES.UCONNECTOR_TYPEID) THEN
1401 
1402       g_connector_counter := g_connector_counter + 1;
1403       l_view_name         := 'CON_' || TO_CHAR(g_connector_counter);
1404 
1405     ELSIF p_ui_node.detailed_type_id IN (CZ_TYPES.UMINMAX_CONNECTOR) THEN
1406 
1407       g_connector_counter := g_connector_counter + 1;
1408       l_view_name         := 'CON_' || TO_CHAR(g_connector_counter);
1409       x_has_children      := G_YES_FLAG;
1410     ELSIF p_ui_node.detailed_type_id IN
1411          (CZ_TYPES.UBOM_NSTBOM_NQMTX_TYPEID
1412          ,CZ_TYPES.UBOM_NSTBOM_NQNMTX_TYPEID
1413          ,CZ_TYPES.UBOM_NSTBOM_QNMTX_TYPEID
1414          ,CZ_TYPES.UBOM_NSTBOM_QMTX_TYPEID
1415          ,CZ_TYPES.UBOM_STIO_NQMTX_TYPEID
1416          ,CZ_TYPES.UBOM_STIO_NQNMTX_TYPEID
1417          ,CZ_TYPES.UBOM_STIO_QNMTX_TYPEID
1418          ,CZ_TYPES.UBOM_STIO_QMTX_TYPEID) THEN
1419 
1420       g_bomm_counter := g_bomm_counter + 1;
1421       l_view_name    := 'BOMM_' || TO_CHAR(g_bomm_counter);
1422       x_has_children := G_YES_FLAG;
1423 
1424     ELSIF p_ui_node.detailed_type_id=CZ_TYPES.UBOM_STANDART_ITEM_TYPEID THEN
1425       g_bomm_counter := g_bomm_counter + 1;
1426       l_view_name    := 'BOMM_' || TO_CHAR(g_bomm_counter);
1427 
1428     ELSIF p_ui_node.detailed_type_id=CZ_TYPES.UOPTION_TYPEID THEN
1429       g_opt_counter := g_opt_counter + 1;
1430       l_view_name    := 'OPT_' || TO_CHAR(g_opt_counter);
1431 
1432     ELSE
1433       NULL;
1434     END IF;
1435 
1436     RETURN l_view_name;
1437   END get_View_Name;
1438 
1439   --
1440   -- return COUNT ( of UI pages of a given UI) + 1
1441   --
1442   FUNCTION get_Page_Counter RETURN NUMBER IS
1443     l_page_counter NUMBER;
1444   BEGIN
1445     --
1446     -- if it is cached then get it from cache
1447     --
1448     SELECT COUNT(page_id)
1449       INTO l_page_counter
1450       FROM CZ_UI_PAGES
1451      WHERE ui_def_id = g_UI_Context.ui_def_id;
1452 
1453     RETURN l_page_counter;
1454 
1455   END get_Page_Counter;
1456 
1457   --
1458   -- construct JRAD Page/Region name based on ui_def_id and page_id
1459   --   Parameters : p_page_id - identifies UI page ( -> CZ_UI_PAGES.page_id )
1460   --   Return     : JRAD Page/Region name
1461   --
1462   FUNCTION generate_JRAD_Page_Name(p_page_counter IN NUMBER)
1463     RETURN VARCHAR2 IS
1464 
1465     l_jrad_doc  CZ_UI_PAGES.jrad_doc%TYPE;
1466     l_counter   NUMBER;
1467 
1468   BEGIN
1469 
1470     --
1471     -- generate Page Name based on l_master_template_node.ui_def_id ( global variable - scope is "current UI" )
1472     -- and g_PAGE_COUNTER ( global variable - scope is "current UI" )
1473     --
1474     l_jrad_doc := '/oracle/apps/cz/runtime/oa/webui/regions/ui' ||
1475       TO_CHAR(g_UI_Context.ui_def_id) || '/Page_' ||TO_CHAR(g_UI_Context.ui_def_id)||'_'||
1476       TO_CHAR(p_page_counter);
1477 
1478     SELECT COUNT(*) INTO l_counter FROM CZ_UI_PAGES
1479     WHERE ui_def_id=g_UI_Context.ui_def_id AND jrad_doc=l_jrad_doc;
1480 
1481     IF l_counter>0 THEN
1482       l_counter:=l_counter+1;
1483       l_jrad_doc := l_jrad_doc||'_'||TO_CHAR(l_counter);
1484 
1485       LOOP
1486         SELECT COUNT(*) INTO l_counter FROM CZ_UI_PAGES
1487         WHERE ui_def_id=g_UI_Context.ui_def_id AND jrad_doc=l_jrad_doc;
1488         IF l_counter=0 THEN
1489           EXIT;
1490         ELSE
1491           l_counter:=l_counter+1;
1492           l_jrad_doc := l_jrad_doc||'_'||TO_CHAR(l_counter);
1493         END IF;
1494       END LOOP;
1495     END IF;
1496 
1497     RETURN l_jrad_doc;
1498   END generate_JRAD_Page_Name;
1499 
1500   --
1501   -- get short JRAD name
1502   --
1503   FUNCTION get_Short_JRAD_Name(p_full_jrad_name IN VARCHAR2)
1504     RETURN VARCHAR2 IS
1505     l_str VARCHAR2(4000);
1506     l_num NUMBER;
1507   BEGIN
1508     l_str := p_full_jrad_name;
1509 
1510     LOOP
1511       l_num := INSTR(l_str,'/');
1512       IF l_num > 0 THEN
1513          l_str := SUBSTR(l_str,l_num+1);
1514          IF l_str IS NULL THEN
1515            EXIT;
1516          END IF;
1517       ELSE
1518          EXIT;
1519       END IF;
1520     END LOOP;
1521     RETURN l_str;
1522   END get_Short_JRAD_Name;
1523 
1524   --
1525   -- return CZ_UI_DEFS data of Master Template Settings
1526   --
1527   FUNCTION get_UI_Def_Node(p_ui_def_id IN NUMBER) RETURN CZ_UI_DEFS%ROWTYPE IS
1528   BEGIN
1529     --
1530     -- if cache contains given ui_def_id then get it from cache
1531     --
1532     IF NOT(g_ui_def_nodes_tbl.EXISTS(p_ui_def_id)) THEN
1533       SELECT * INTO g_ui_def_nodes_tbl(p_ui_def_id)
1534         FROM CZ_UI_DEFS
1535        WHERE ui_def_id = p_ui_def_id;
1536     END IF;
1537     RETURN g_ui_def_nodes_tbl(p_ui_def_id);
1538   END get_UI_Def_Node;
1539 
1540   --
1541   -- return data for model node with ps_node_id = p_ps_node_id
1542   -- ( private )
1543   -- Parameters :
1544   --   p_ps_node_id - identifies node in Model tree
1545   --
1546   FUNCTION get_Model_Node(p_ps_node_id IN NUMBER)
1547     RETURN CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE IS
1548   BEGIN
1549     -- if cache is populated then get it from cache
1550     IF NOT(g_model_nodes_tbl.EXISTS(p_ps_node_id)) THEN
1551       SELECT DISTINCT *
1552         INTO g_model_nodes_tbl(p_ps_node_id)
1553         FROM CZ_UITEMPLS_FOR_PSNODES_V
1554        WHERE ps_node_id = p_ps_node_id AND
1555              ui_def_id=g_UI_Context.from_master_template_id AND
1556              deleted_flag = G_NO_FLAG;
1557 
1558 ---Bug6406709
1559       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
1560           g_model_nodes_tbl(p_ps_node_id).ui_omit := G_NO_FLAG;
1561       END IF;
1562 
1563        g_ps_node_persist_id_tbl(g_model_nodes_tbl(p_ps_node_id).persistent_node_id) := p_ps_node_id;
1564     END IF;
1565     RETURN g_model_nodes_tbl(p_ps_node_id);
1566   END get_Model_Node;
1567 
1568   --
1569   -- get persistent_node_id of root node
1570   --
1571   FUNCTION get_Root_Persistent_Node_Id
1572     RETURN NUMBER IS
1573   BEGIN
1574     -- if cache is populated then get it from cache
1575     IF NOT(g_root_persist_id_tbl.EXISTS(g_UI_Context.devl_project_id)) THEN
1576       IF g_model_nodes_tbl.EXISTS(g_UI_Context.devl_project_id) THEN
1577         g_root_persist_id_tbl(g_UI_Context.devl_project_id) := g_model_nodes_tbl(g_UI_Context.devl_project_id).persistent_node_id;
1578       ELSE
1579         SELECT persistent_node_id
1580           INTO g_root_persist_id_tbl(g_UI_Context.devl_project_id)
1581           FROM CZ_PS_NODES
1582          WHERE devl_project_id=g_UI_Context.devl_project_id AND
1583                parent_id IS NULL AND
1584                deleted_flag=G_NO_FLAG;
1585       END IF;
1586     END IF;
1587     RETURN g_root_persist_id_tbl(g_UI_Context.devl_project_id);
1588   END get_Root_Persistent_Node_Id;
1589 
1590   --
1591   -- return data for model node with a given persistent node id
1592   -- ( private )
1593   -- Parameters :
1594   --   p_persistent_node_id - persistent id of model node
1595   --   p_model_id           - identifies model
1596   --   p_ui_def_id          - identifies UI Master Template Setting
1597   --
1598   FUNCTION get_Model_Node_By_Persist_Id(p_persistent_node_id IN NUMBER,
1599                                         p_model_id           IN NUMBER)
1600     RETURN CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE IS
1601     l_node       CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE;
1602     l_ps_node_id NUMBER;
1603   BEGIN
1604     -- if cache is populated then get it from cache
1605     SELECT DISTINCT *
1606       INTO l_node
1607       FROM CZ_UITEMPLS_FOR_PSNODES_V
1608      WHERE devl_project_id = p_model_id AND
1609            persistent_node_id = p_persistent_node_id AND
1610            ui_def_id=g_UI_Context.from_master_template_id AND
1611            deleted_flag = G_NO_FLAG;
1612 
1613 ---Bug6406709
1614       IF l_node.ui_omit = G_YES_FLAG AND  g_UI_Context.show_all_nodes_flag = G_YES_FLAG THEN
1615           l_node.ui_omit := G_NO_FLAG;
1616       END IF;
1617 
1618      RETURN l_node;
1619   EXCEPTION
1620     WHEN OTHERS THEN
1621       RETURN l_node;
1622   END get_Model_Node_By_Persist_Id;
1623   --vsingava IM-ER
1624   FUNCTION getNodeByPersistentAndExplId(p_persistent_node_id IN NUMBER,
1625                                         p_expl_id           IN NUMBER)
1626     RETURN CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE IS
1627     l_node       CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE;
1628     l_reference_id NUMBER;
1629     l_model_id NUMBER;
1630     l_ps_node_type NUMBER;
1631 
1632   BEGIN
1633 
1634     SELECT component_id, model_id, ps_node_type INTO l_reference_id, l_model_id, l_ps_node_type
1635       FROM cz_model_ref_expls
1636      WHERE model_ref_expl_id = p_expl_id
1637        AND deleted_flag = G_NO_FLAG;
1638 
1639     l_node := get_Model_Node_By_Persist_Id(p_persistent_node_id, l_reference_id);
1640 
1641     IF l_node.ps_node_id IS NULL THEN
1642       -- Couldn't find the node in the referenced model. The AMN could be the root
1643       -- node of the referenced model, in which case the persistent_node_Id could
1644       -- be that of the referring node. So, let's look in the model containing the
1645       -- this model_ref_explosion_id
1646       l_node := get_Model_Node_By_Persist_Id(p_persistent_node_id, l_model_id);
1647     END IF;
1648 
1649     IF ( l_node.ps_node_id IS NULL AND l_ps_node_type = G_REFERENCE_TYPE ) THEN
1650       -- This could be a case where Developer sets the explosion_id from the context of
1651       -- the model for the UI being processed, and the persistent_node_id from the context of
1652       -- the model containing the actual reference (263) node
1653 
1654       -- Let's go through the reference chain starting from this model down to the referred model
1655       FOR i in (SELECT model_ref_expl_id, child_model_expl_id, model_id
1656                   FROM cz_model_ref_expls
1657             START WITH model_ref_expl_Id = p_expl_id
1658             CONNECT BY PRIOR child_model_expl_id = model_ref_expl_Id
1659                    AND deleted_flag = G_NO_FLAG)
1660       LOOP
1661         l_node := get_Model_Node_By_Persist_Id(p_persistent_node_id, i.model_id);
1662         IF l_node.ps_node_id IS NOT NULL THEN
1663           RETURN l_node;
1664         END IF;
1665       END LOOP;
1666     END IF;
1667 
1668     RETURN l_node;
1669   EXCEPTION
1670     WHEN OTHERS THEN
1671       RETURN l_node;
1672   END getNodeByPersistentAndExplId;
1673 
1674   --
1675   -- return data for model node with ps_node_id = p_ps_node_id
1676   -- ( private )
1677   --
1678   PROCEDURE  get_Child_Nodes(p_ps_node_id       IN  NUMBER,
1679                              p_show_all_nodes   IN  VARCHAR2 DEFAULT NULL,
1680                              x_seq_nodes_tbl    OUT NOCOPY ui_page_el_int_tbl_type, -- fix for bug 6837809 : skudryav 28-Mar-2008
1681                              x_child_nodes_tbl  OUT NOCOPY model_nodes_tbl_type,
1682                              x_non_deleted_child_nodes_tbl  OUT NOCOPY model_nodes_tbl_type,
1683                              p_include_deleted_nodes IN VARCHAR2 DEFAULT G_NO_FLAG) IS
1684 
1685     l_current_model_node   CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE;
1686     l_ps_node_id           NUMBER;
1687 
1688   BEGIN
1689 
1690     IF g_Use_Cache AND g_model_nodes_tbl.EXISTS(p_ps_node_id) THEN
1691       l_ps_node_id := g_model_nodes_tbl.First;
1692       LOOP
1693         IF l_ps_node_id IS NULL THEN
1694            EXIT;
1695         END IF;
1696         l_current_model_node := g_model_nodes_tbl(l_ps_node_id);
1697         IF l_current_model_node.parent_id=p_ps_node_id  THEN
1698           IF (l_current_model_node.ui_omit=G_NO_FLAG OR p_show_all_nodes = G_YES_FLAG) THEN
1699             x_child_nodes_tbl(l_current_model_node.persistent_node_id) := l_current_model_node;
1700             x_seq_nodes_tbl(x_seq_nodes_tbl.COUNT+1) := l_current_model_node;
1701           END IF;
1702           IF l_current_model_node.deleted_flag = G_NO_FLAG THEN
1703             x_non_deleted_child_nodes_tbl(x_non_deleted_child_nodes_tbl.COUNT+1) := l_current_model_node;
1704           END IF;
1705         END IF;
1706 
1707         l_ps_node_id := g_model_nodes_tbl.NEXT(l_ps_node_id);
1708       END LOOP;
1709 
1710     ELSE  -- cache is not used
1711 
1712       FOR i IN (SELECT DISTINCT *
1713                   FROM CZ_UITEMPLS_FOR_PSNODES_V
1714                  WHERE ui_def_id=g_UI_Context.from_master_template_id AND
1715                        parent_id = p_ps_node_id AND
1716                        (ui_omit = G_NO_FLAG OR p_show_all_nodes = G_YES_FLAG) AND
1717                        (p_include_deleted_nodes = G_YES_FLAG OR deleted_flag = G_NO_FLAG)
1718                  ORDER BY tree_seq)
1719       LOOP
1720         IF i.deleted_flag = G_NO_FLAG AND i.detailed_type_id=G_UNDEFINED_DATA_TYPE THEN
1721            g_WRONG_PS_NODE_ID := i.ps_node_id;
1722            DEBUG('get_Child_Nodes() error message : node with ps_node_id='||TO_CHAR(i.ps_node_id)||
1723                  ' has undefined detailed type.');
1724            RAISE WRONG_EXT_PS_TYPE;
1725         END IF;
1726 
1727 ---Bug6406709
1728         IF (i.ui_omit = G_YES_FLAG AND g_UI_Context.show_all_nodes_flag = G_YES_FLAG) THEN
1729             i.ui_omit := G_NO_FLAG;
1730         END IF;
1731 
1732         x_child_nodes_tbl(i.persistent_node_id) := i;
1733         x_seq_nodes_tbl(x_seq_nodes_tbl.COUNT+1) := i;
1734 
1735         IF i.deleted_flag = G_NO_FLAG THEN
1736           x_non_deleted_child_nodes_tbl(x_non_deleted_child_nodes_tbl.COUNT+1) := i;
1737         END IF;
1738       END LOOP;
1739     END IF;
1740   END get_Child_Nodes;
1741 
1742   --
1743   -- return expl data for model node with ps_node_id = p_ps_node_id
1744   -- ( private )
1745   --
1746   FUNCTION get_Expl_Id(p_model_id     IN NUMBER,
1747                        p_ps_node_id   IN NUMBER,
1748                        p_component_id IN NUMBER,
1749                        p_ps_node_type IN NUMBER) RETURN NUMBER IS
1750 
1751     l_model_ref_expl_id CZ_MODEL_REF_EXPLS.model_ref_expl_id%TYPE;
1752 
1753   BEGIN
1754 
1755     IF p_ps_node_id IS NOT NULL AND (p_component_id IS NULL OR p_component_id=0) THEN
1756       DEBUG('Wrong data in CZ_PS_NODES. Node with ps_node_id='||TO_CHAR(p_ps_node_id)||
1757       ' has invalid component_id='||TO_CHAR(p_component_id));
1758       RETURN 0;
1759     END IF;
1760 
1761     --
1762     -- if cache is populated then get it from cache
1763     --
1764     IF g_ref_expls_tbl.EXISTS(p_ps_node_id) THEN
1765       l_model_ref_expl_id := g_ref_expls_tbl(p_ps_node_id);
1766     ELSE
1767 
1768       IF p_ps_node_type NOT IN(G_REFERENCE_TYPE,G_CONNECTOR_TYPE) AND g_ref_expls_tbl.EXISTS(p_component_id) THEN
1769         l_model_ref_expl_id := g_ref_expls_tbl(p_component_id);
1770         g_ref_expls_tbl(p_ps_node_id) := l_model_ref_expl_id;
1771       ELSE
1772         IF p_ps_node_type IN (G_REFERENCE_TYPE, G_CONNECTOR_TYPE) THEN
1773           SELECT MIN(model_ref_expl_id)
1774             INTO l_model_ref_expl_id
1775             FROM CZ_MODEL_REF_EXPLS a
1776            WHERE model_id = p_model_id AND
1777                  referring_node_id = p_ps_node_id AND
1778                  deleted_flag = G_NO_FLAG;
1779         ELSE
1780           SELECT MIN(model_ref_expl_id)
1781             INTO l_model_ref_expl_id
1782             FROM CZ_MODEL_REF_EXPLS
1783            WHERE model_id = p_model_id AND
1784                  component_id = p_component_id AND
1785                  referring_node_id IS NULL AND
1786                  deleted_flag = G_NO_FLAG;
1787         END IF;
1788       END IF;
1789 
1790     END IF;
1791 
1792     RETURN l_model_ref_expl_id;
1793 
1794   EXCEPTION
1795     WHEN OTHERS THEN
1796       DEBUG('get_Expl_Id() node with ps_node_id='||TO_CHAR(p_ps_node_id)||
1797       ' can not be handled : '||SQLERRM);
1798       RETURN 0;
1799   END get_Expl_Id;
1800 
1801   --
1802   -- return UI page node
1803   --
1804   FUNCTION get_UI_Page_Node(p_page_id IN NUMBER)
1805     RETURN CZ_UI_PAGES%ROWTYPE IS
1806       l_page_node CZ_UI_PAGES%ROWTYPE;
1807   BEGIN
1808     SELECT * INTO l_page_node
1809       FROM CZ_UI_PAGES
1810      WHERE page_id=p_page_id AND
1811            ui_def_id=g_UI_Context.ui_def_id;
1812     RETURN l_page_node;
1813   END get_UI_Page_Node;
1814 
1815   --
1816   -- return UI element with element_id = p_element_id
1817   --
1818   FUNCTION get_UI_Element(p_element_id IN VARCHAR2,
1819                           p_page_id    IN NUMBER)
1820     RETURN CZ_UI_PAGE_ELEMENTS%ROWTYPE IS
1821     l_ui_node         CZ_UI_PAGE_ELEMENTS%ROWTYPE;
1822   BEGIN
1823     SELECT *
1824       INTO l_ui_node
1825       FROM CZ_UI_PAGE_ELEMENTS
1826      WHERE ui_def_id = g_UI_Context.ui_def_id AND
1827            page_id=p_page_id AND
1828            element_id = p_element_id;
1829     RETURN l_ui_node;
1830   END get_UI_Element;
1831 
1832   --
1833   -- return UI element with element_id = p_element_id
1834   --
1835   FUNCTION get_Page_Set(p_page_set_id IN NUMBER)
1836     RETURN CZ_UI_PAGE_SETS%ROWTYPE IS
1837     l_page_set_node CZ_UI_PAGE_SETS%ROWTYPE;
1838   BEGIN
1839     SELECT *
1840       INTO l_page_set_node
1841       FROM CZ_UI_PAGE_SETS
1842      WHERE page_set_id = p_page_set_id AND
1843            ui_def_id=g_UI_Context.ui_def_id;
1844     RETURN l_page_set_node;
1845   END get_Page_Set;
1846 
1847   FUNCTION get_UI_Node_Name(p_page_id       IN NUMBER,
1848                             p_template_id   IN NUMBER,
1849                             p_template_name IN VARCHAR2 DEFAULT NULL) RETURN VARCHAR2 IS
1850 
1851     l_counter      NUMBER;
1852     l_ui_node_name CZ_UI_PAGE_ELEMENTS.name%TYPE;
1853 
1854   BEGIN
1855 
1856     SELECT COUNT(element_id)+1 INTO l_counter FROM CZ_UI_PAGE_ELEMENTS
1857     WHERE ui_def_id=g_UI_Context.ui_def_id AND
1858           page_id=p_page_id AND
1859           ctrl_template_id=p_template_id AND
1860           deleted_flag NOT IN(G_YES_FLAG,G_LIMBO_FLAG,G_MARK_TO_DELETE);
1861 
1862     IF p_template_name IS NULL THEN
1863       BEGIN
1864         SELECT template_name||' - '||TO_CHAR(l_counter)
1865           INTO l_ui_node_name
1866           FROM CZ_UI_TEMPLATES
1867           WHERE template_id=p_template_id AND
1868                 ui_def_id=g_UI_Context.ui_def_id;
1869       EXCEPTION
1870         WHEN NO_DATA_FOUND THEN
1871           SELECT template_name||' - '||TO_CHAR(l_counter)
1872             INTO l_ui_node_name
1873             FROM CZ_UI_TEMPLATES
1874            WHERE template_id=p_template_id AND
1875                 ui_def_id=G_GLOBAL_TEMPLATES_UI_DEF_ID;
1876       END;
1877     ELSE
1878       l_ui_node_name := p_template_name||' - '||TO_CHAR(l_counter);
1879     END IF;
1880 
1881     RETURN l_ui_node_name;
1882   END get_UI_Node_Name;
1883 
1884   --
1885   -- return full JRAD name of UI template
1886   --
1887   FUNCTION get_JRAD_Name(p_template_id        IN NUMBER,
1888                          p_template_ui_def_id IN NUMBER DEFAULT NULL)
1889     RETURN VARCHAR2 IS
1890 
1891   BEGIN
1892     --
1893     -- if it is in cache get it from cache
1894     --
1895     IF g_template_jrad_name_tbl.EXISTS(p_template_id) AND p_template_ui_def_id IS NOT NULL THEN
1896        RETURN  g_template_jrad_name_tbl(p_template_id);
1897     ELSE
1898       IF p_template_ui_def_id IS NOT NULL THEN
1899         SELECT jrad_doc INTO g_template_jrad_name_tbl(p_template_id)
1900           FROM CZ_UI_TEMPLATES
1901          WHERE template_id=p_template_id AND
1902                ui_def_id=p_template_ui_def_id;
1903       ELSE
1904         BEGIN
1905           SELECT jrad_doc INTO g_template_jrad_name_tbl(p_template_id)
1906             FROM CZ_UI_TEMPLATES
1907            WHERE  template_id=p_template_id AND
1908                   ui_def_id=g_UI_Context.ui_def_id;
1909         EXCEPTION
1910           WHEN OTHERS THEN
1911             SELECT jrad_doc INTO g_template_jrad_name_tbl(p_template_id)
1912               FROM CZ_UI_TEMPLATES
1913              WHERE template_id=p_template_id AND
1914                    ui_def_id=G_GLOBAL_TEMPLATES_UI_DEF_ID;
1915         END;
1916       END IF;
1917     END IF;
1918     RETURN g_template_jrad_name_tbl(p_template_id);
1919   END get_JRAD_Name;
1920 
1921   --
1922   -- get UI Action Id associated with a given ui node
1923   --
1924   FUNCTION get_UI_Action_Id(p_ui_node IN CZ_UI_PAGE_ELEMENTS%ROWTYPE)
1925     RETURN NUMBER IS
1926    l_ui_action_id   CZ_UI_ACTIONS.ui_action_id%TYPE;
1927   BEGIN
1928     SELECT ui_action_id
1929       INTO l_ui_action_id
1930       FROM CZ_UI_ACTIONS
1931      WHERE ui_def_id = p_ui_node.ui_def_id AND
1932            source_page_id=p_ui_node.page_id AND
1933            element_id = p_ui_node.element_id AND
1934            deleted_flag=G_NO_FLAG;
1935     RETURN l_ui_action_id;
1936   END get_UI_Action_Id;
1937 
1938   --
1939   -- copy CZ_INTL_TEXTS record
1940   --
1941   FUNCTION copy_Intl_Text(p_intl_text_id     IN NUMBER,
1942                           p_target_ui_def_id IN NUMBER,
1943                           p_page_id          IN NUMBER,
1944                           p_element_id       IN NUMBER) RETURN NUMBER IS
1945 
1946     l_ui_intl_text_id NUMBER;
1947     l_model_id        NUMBER;
1948     l_seeded_flag     VARCHAR2(1);
1949     l_persistent_intl_text_id NUMBER;
1950 
1951   BEGIN
1952 
1953     IF p_intl_text_id IS NULL OR p_intl_text_id=0 THEN
1954       RETURN p_intl_text_id;
1955     ELSE
1956       SELECT seeded_flag INTO l_seeded_flag FROM CZ_INTL_TEXTS
1957       WHERE intl_text_id=p_intl_text_id;
1958     END IF;
1959 
1960     IF l_seeded_flag='0' OR l_seeded_flag IS NULL THEN
1961      IF p_target_ui_def_id IS NOT NULL AND p_target_ui_def_id<>0 THEN
1962        SELECT NVL(devl_project_id,0) INTO l_model_id FROM CZ_UI_DEFS
1963        WHERE ui_def_id=p_target_ui_def_id;
1964      END IF;
1965      l_ui_intl_text_id := allocateId('CZ_INTL_TEXTS_S');
1966 
1967       INSERT INTO CZ_INTL_TEXTS
1968            (INTL_TEXT_ID,
1969             TEXT_STR,
1970             DELETED_FLAG,
1971             SEEDED_FLAG,
1972             UI_DEF_ID,
1973             MODEL_ID,
1974             UI_PAGE_ID,
1975             UI_PAGE_ELEMENT_ID
1976             )
1977       SELECT
1978            l_ui_intl_text_id,
1979            text_str,
1980            G_NO_FLAG,
1981            G_NO_FLAG,
1982            p_target_ui_def_id,
1983            l_model_id,
1984            p_page_id,
1985            p_element_id
1986       FROM CZ_INTL_TEXTS
1987       WHERE intl_text_id=p_intl_text_id;
1988 
1989       SELECT persistent_intl_text_id INTO l_persistent_intl_text_id
1990       FROM CZ_INTL_TEXTS
1991       WHERE INTL_TEXT_ID = l_ui_intl_text_id;
1992 
1993       RETURN l_persistent_intl_text_id;
1994 
1995     ELSE
1996       RETURN p_intl_text_id;
1997     END IF;
1998   END copy_Intl_Text;
1999 
2000   --
2001   -- refresh UI Images in UI based on data from Master Template
2002   --
2003   PROCEDURE refresh_UI_Images(p_ui_def_id IN NUMBER, p_master_template_id IN NUMBER) IS
2004   BEGIN
2005 
2006     INSERT INTO CZ_UI_IMAGES
2007       (UI_DEF_ID
2008        ,MASTER_TEMPLATE_FLAG
2009        ,IMAGE_USAGE_CODE
2010        ,IMAGE_FILE
2011        ,DELETED_FLAG
2012        ,SEEDED_FLAG
2013        ,ENTITY_CODE,
2014        LAST_UPDATE_LOGIN)
2015     SELECT
2016        p_ui_def_id
2017        ,G_NO_FLAG
2018        ,IMAGE_USAGE_CODE
2019        ,IMAGE_FILE
2020        ,DELETED_FLAG
2021        ,G_NO_FLAG
2022        ,ENTITY_CODE
2023        ,-UID
2024      FROM CZ_UI_IMAGES a
2025      WHERE ui_def_id=p_master_template_id
2026            AND deleted_flag=G_NO_FLAG AND
2027            NOT EXISTS(SELECT NULL FROM CZ_UI_IMAGES
2028                       WHERE ui_def_id=p_ui_def_id AND
2029                             IMAGE_USAGE_CODE=a.IMAGE_USAGE_CODE AND
2030                             ENTITY_CODE=a.ENTITY_CODE AND deleted_flag=G_NO_FLAG);
2031     /*
2032     UPDATE CZ_UI_IMAGES a
2033        SET IMAGE_FILE=(SELECT IMAGE_FILE FROM CZ_UI_IMAGES
2034                        WHERE  ui_def_id=p_master_template_id AND
2035                             IMAGE_USAGE_CODE=a.IMAGE_USAGE_CODE AND
2036                             ENTITY_CODE=a.ENTITY_CODE AND deleted_flag=G_NO_FLAG )
2037     WHERE ui_def_id=p_ui_def_id AND deleted_flag=G_NO_FLAG;
2038     */
2039   END refresh_UI_Images;
2040 
2041   PROCEDURE refresh_Cont_Templs
2042   (p_content_type       IN NUMBER,
2043    p_master_template_id IN NUMBER,
2044    p_ui_def_id          IN NUMBER,
2045    p_create_cont_entry  IN BOOLEAN) IS
2046 
2047     l_template_ui_def_id NUMBER;
2048 
2049   BEGIN
2050 
2051     IF p_create_cont_entry THEN
2052       l_template_ui_def_id := g_UI_Context.ui_def_id;
2053     ELSE
2054       l_template_ui_def_id := G_GLOBAL_TEMPLATES_UI_DEF_ID;
2055     END IF;
2056     FOR h IN(SELECT * FROM CZ_UI_CONT_TYPE_TEMPLS
2057              WHERE ui_def_id = p_master_template_id AND
2058                    content_type=p_content_type AND
2059                    deleted_flag=G_NO_FLAG)
2060     LOOP
2061       BEGIN
2062         INSERT INTO CZ_UI_CONT_TYPE_TEMPLS
2063                 (ui_def_id,
2064                  content_type,
2065                  template_id,
2066                  master_template_flag,
2067                  seeded_flag,
2068                  template_ui_def_id,
2069                  deleted_flag)
2070         VALUES(
2071                  p_ui_def_id,
2072                  h.content_type,
2073                  h.template_id,
2074                  G_NO_FLAG,
2075                  G_NO_FLAG,
2076                  l_template_ui_def_id,
2077                  G_NO_FLAG);
2078         --
2079         -- populate cache of UI Templates
2080         --
2081         g_template_id_tbl(h.content_type) := h.template_id;
2082         g_template_ui_def_id_tbl(h.content_type) := l_template_ui_def_id;
2083 
2084       EXCEPTION
2085         WHEN OTHERS THEN
2086           DEBUG(SQLERRM);
2087       END;
2088     END LOOP;
2089   END refresh_Cont_Templs;
2090 
2091   PROCEDURE save_Template_As_Local
2092   (p_template_id IN NUMBER,
2093    p_ui_def_id   IN NUMBER) IS
2094 
2095     l_xmldoc                 xmldom.DOMDocument;
2096     l_jrad_doc               VARCHAR2(4000);
2097     l_template_jrad_doc      CZ_UI_TEMPLATES.jrad_doc%TYPE;
2098 
2099   BEGIN
2100 
2101     l_template_jrad_doc := get_JRAD_Name(p_template_id, G_GLOBAL_TEMPLATES_UI_DEF_ID);
2102 
2103     l_jrad_doc := '/oracle/apps/cz/runtime/oa/webui/regions/ui' ||
2104                   TO_CHAR(p_ui_def_id) || '/' ||
2105                   get_Short_JRAD_Name(l_template_jrad_doc);
2106     BEGIN
2107 
2108       --
2109       -- create UI Template in JRAD repository
2110       --
2111       l_xmldoc := parse_JRAD_Document(p_doc_full_name => l_template_jrad_doc);
2112 
2113       IF xmldom.isNull(l_xmldoc) THEN
2114          add_Error_Message(p_message_name => 'CZ_WRONG_UI_TEMPLATE',
2115                            p_token_name   => 'UI_TEMPLATE',
2116                            p_token_value  => l_template_jrad_doc,
2117                            p_fatal_error  => TRUE);
2118          RAISE WRONG_UI_TEMPLATE;
2119       END IF;
2120 
2121       Save_Document(p_xml_doc   => l_xmldoc,
2122                     p_doc_name  => l_jrad_doc);
2123 
2124     EXCEPTION
2125       WHEN OTHERS THEN
2126          add_Error_Message(p_message_name => 'CZ_WRONG_UI_TEMPLATE',
2127                            p_token_name   => 'UI_TEMPLATE',
2128                            p_token_value  => l_template_jrad_doc,
2129                            p_fatal_error  => TRUE);
2130          RAISE WRONG_UI_TEMPLATE;
2131     END;
2132 
2133     BEGIN
2134       INSERT INTO CZ_UI_TEMPLATES
2135       (TEMPLATE_ID,
2136        UI_DEF_ID,
2137        TEMPLATE_NAME,
2138        TEMPLATE_TYPE,
2139        TEMPLATE_DESC,
2140        PARENT_CONTAINER_TYPE,
2141        JRAD_DOC,
2142        BUTTON_BAR_TEMPLATE_ID,
2143        MESSAGE_TYPE,
2144        MAIN_MESSAGE_ID,
2145        TITLE_ID,
2146        SEEDED_FLAG,
2147        LAYOUT_UI_STYLE,
2148        ROOT_REGION_TYPE,
2149        ROOT_ELEMENT_SIGNATURE_ID,
2150        BUTTON_BAR_TEMPL_UIDEF_ID,
2151        TEMPLATE_USAGE,
2152        AMN_USAGE,
2153        DELETED_FLAG)
2154        SELECT
2155         template_id,
2156         g_UI_Context.ui_def_id,
2157         TEMPLATE_NAME,
2158         TEMPLATE_TYPE,
2159         TEMPLATE_DESC,
2160         PARENT_CONTAINER_TYPE,
2161         l_jrad_doc,
2162         BUTTON_BAR_TEMPLATE_ID,
2163         MESSAGE_TYPE,
2164         MAIN_MESSAGE_ID,
2165         TITLE_ID,
2166         G_NO_FLAG,
2167         LAYOUT_UI_STYLE,
2168         ROOT_REGION_TYPE,
2169         ROOT_ELEMENT_SIGNATURE_ID,
2170         BUTTON_BAR_TEMPL_UIDEF_ID,
2171         TEMPLATE_USAGE,
2172         AMN_USAGE,
2173         G_NO_FLAG
2174        FROM CZ_UI_TEMPLATES
2175        WHERE template_id=p_template_id AND ui_def_id=G_GLOBAL_TEMPLATES_UI_DEF_ID;
2176 
2177       g_template_jrad_name_tbl(p_template_id) := l_jrad_doc;
2178 
2179     EXCEPTION
2180       WHEN OTHERS THEN
2181         DEBUG('save_Template_As_Local() : '||SQLERRM);
2182     END;
2183 
2184   END save_Template_As_Local;
2185 
2186   --
2187   -- check : should new Content type record be added ?
2188   --
2189   FUNCTION must_Add_Content_Type_Record(p_content_type   IN NUMBER,
2190                                         p_it_is_in_model IN BOOLEAN) RETURN BOOLEAN IS
2191 
2192   BEGIN
2193 
2194     IF  p_content_type IN(CZ_TYPES.UMANDATORY_COMPONENT_TYPEID,
2195                             CZ_TYPES.UOPTIONAL_COMPONENT_TYPEID,
2196                             CZ_TYPES.UMINMAX_COMPONENT_TYPEID,
2197                             CZ_TYPES.UNON_COUNT_FEATURE_TYPEID,
2198                             CZ_TYPES.UCOUNT_FEATURE_TYPEID,
2199                             CZ_TYPES.UCOUNT_FEATURE01_TYPEID,
2200                             CZ_TYPES.UMINMAX_FEATURE_TYPEID,
2201                             CZ_TYPES.UINTEGER_FEATURE_TYPEID,
2202                             CZ_TYPES.UDECIMAL_FEATURE_TYPEID,
2203                             CZ_TYPES.UBOOLEAN_FEATURE_TYPEID,
2204                             CZ_TYPES.UTEXT_FEATURE_TYPEID,
2205                             CZ_TYPES.UTOTAL_TYPEID,
2206                             CZ_TYPES.URESOURCE_TYPEID,
2207                             CZ_TYPES.UMANDATORY_REF_TYPEID,
2208                             CZ_TYPES.UCONNECTOR_TYPEID) THEN
2209 
2210           IF g_UI_Context.CTRLTEMPLUSE_NONBOM = G_TEMPLATE_USE_LOCAL_COPY
2211              AND p_it_is_in_model THEN
2212 
2213               RETURN TRUE;
2214 
2215           ELSE
2216 
2217              RETURN FALSE;
2218 
2219           END IF;
2220 
2221 
2222       ELSIF p_content_type IN(CZ_TYPES.UOPTIONAL_BOM_REF_TYPEID
2223                                 ,CZ_TYPES.UMINMAX_BOM_REF_TYPEID
2224                                 ,CZ_TYPES.UBOM_NSTBOM_NQMTX_TYPEID
2225                                 ,CZ_TYPES.UBOM_NSTBOM_NQNMTX_TYPEID
2226                                 ,CZ_TYPES.UBOM_NSTBOM_QNMTX_TYPEID
2227                                 ,CZ_TYPES.UBOM_NSTBOM_QMTX_TYPEID
2228                                 ,CZ_TYPES.UBOM_STIO_NQMTX_TYPEID
2229                                 ,CZ_TYPES.UBOM_STIO_NQNMTX_TYPEID
2230                                 ,CZ_TYPES.UBOM_STIO_QNMTX_TYPEID
2231                                 ,CZ_TYPES.UBOM_STIO_QMTX_TYPEID) THEN
2232 
2233           IF g_UI_Context.CTRLTEMPLUSE_BOM = G_TEMPLATE_USE_LOCAL_COPY
2234               AND p_it_is_in_model THEN
2235 
2236            RETURN TRUE;
2237 
2238           ELSE
2239 
2240            RETURN  FALSE;
2241 
2242           END IF;
2243 
2244       ELSIF (g_UI_Context.CTRLTEMPLUSE_REQDMSG = G_TEMPLATE_USE_LOCAL_COPY AND
2245               p_content_type IN(G_MSGTEMP_RQDMSG_OVRCTRDIC
2246                                 ,G_MSGTEMP_RQDMSG_NOVRCTRDIC
2247                                 ,G_MSGTEMP_RQDMSG_INVLDINP
2248                                 ,G_MSGTEMP_RQDMSG_FATERR)) OR
2249              (g_UI_Context.CTRLTEMPLUSE_OPTMSG = G_TEMPLATE_USE_LOCAL_COPY AND
2250               p_content_type IN(G_MSGTEMP_OPTMSG_VLDNOTIF
2251                                 ,G_MSGTEMP_OPTMSG_CNFRMSAVFIN
2252                                 ,G_MSGTEMP_OPTMSG_CNFRMCANCEL
2253                                 ,G_MSGTEMP_OPTMSG_CNFRMDELINST
2254                                 ,G_MSGTEMP_OPTMSG_CNFRMLDINST
2255                                 ,G_MSGTEMP_OPTMSG_CNFRMEDINST
2256                                 ,G_MSGTEMP_OPTMSG_QRYDELINST)) OR
2257              (g_UI_Context.CTRLTEMPLUSE_COMMON = G_TEMPLATE_USE_LOCAL_COPY AND
2258               p_content_type IN(G_UTILTEMP_BB_NSTXN
2259                                 ,G_UTILTEMP_BB_BASICTXN
2260                                 ,G_UTILTEMP_BB_2PGNVG
2261                                 ,G_UTILTEMP_BB_NPGNVG))  OR
2262              (g_UI_Context.CTRLTEMPLATEUSE_UTILITYPAGE = G_TEMPLATE_USE_LOCAL_COPY AND
2263               p_content_type IN(G_UTILTEMP_PAGLAY_PGSTA
2264                                 ,G_UTILTEMP_BB_PRVWPG
2265                                 ,G_UTILTEMP_UPT_CFGPRV
2266                                 ,G_UTILTEMP_UPT_CXNCHO))  THEN
2267 
2268         RETURN  TRUE;
2269 
2270       END IF;
2271 
2272     RETURN FALSE;
2273 
2274   END  must_Add_Content_Type_Record;
2275 
2276   --
2277   -- create local UI templates
2278   --
2279   PROCEDURE create_Local_UI_Templates IS
2280 
2281     l_handled_templates_tbl  number_tbl_type;
2282     l_detailed_type_id_tbl   number_tbl_type;
2283     l_template_rec           CZ_UI_TEMPLATES%ROWTYPE;
2284     l_jrad_doc               VARCHAR2(4000);
2285     l_template_ui_def_id     NUMBER := G_GLOBAL_TEMPLATES_UI_DEF_ID;
2286     l_create_cont_entry      BOOLEAN := FALSE;
2287 
2288   BEGIN
2289 
2290     IF g_UI_Context.CTRLTEMPLUSE_BOM = G_TEMPLATE_USE_LOCAL_COPY OR
2291        g_UI_Context.CTRLTEMPLUSE_NONBOM = G_TEMPLATE_USE_LOCAL_COPY OR
2292        g_UI_Context.CTRLTEMPLUSE_OPTMSG = G_TEMPLATE_USE_LOCAL_COPY OR
2293        g_UI_Context.CTRLTEMPLUSE_COMMON = G_TEMPLATE_USE_LOCAL_COPY OR
2294        g_UI_Context.CTRLTEMPLUSE_REQDMSG = G_TEMPLATE_USE_LOCAL_COPY THEN
2295 
2296        --
2297        -- open XML parser
2298        --
2299        Open_Parser;
2300     END IF;
2301 
2302     --
2303     -- refresh UI Images in UI based on data from Master Template
2304     --
2305 
2306     refresh_UI_Images(p_ui_def_id          => g_UI_Context.ui_def_id,
2307                       p_master_template_id => g_UI_Context.from_master_template_id);
2308 
2309     IF g_UI_Context.CTRLTEMPLUSE_BOM = G_TEMPLATE_USE_LOCAL_COPY OR
2310        g_UI_Context.CTRLTEMPLUSE_NONBOM = G_TEMPLATE_USE_LOCAL_COPY THEN
2311 
2312       FOR m IN(SELECT DISTINCT detailed_type_id
2313                FROM CZ_UITEMPLS_FOR_PSNODES_V
2314                WHERE devl_project_id=g_UI_Context.devl_project_id AND
2315                      ui_def_id=g_UI_Context.from_master_template_id AND
2316                      deleted_flag=G_NO_FLAG AND ui_omit=G_NO_FLAG)
2317       LOOP
2318         l_detailed_type_id_tbl(m.detailed_type_id) := m.detailed_type_id;
2319       END LOOP;
2320 
2321     END IF;
2322 
2323     FOR k IN(SELECT * FROM CZ_UI_CONT_TYPE_TEMPLS
2324              WHERE ui_def_id = g_UI_Context.from_master_template_id AND
2325                    deleted_flag = G_NO_FLAG)
2326     LOOP
2327 
2328       IF k.content_type = G_PAGE_STATUS_CONTENT_TYPE THEN
2329          g_PAGE_STATUS_TEMPLATE_ID := k.template_id;
2330       END IF;
2331 
2332       l_create_cont_entry := must_Add_Content_Type_Record(k.content_type,
2333                                                           l_detailed_type_id_tbl.EXISTS(k.content_type));
2334 
2335       IF l_create_cont_entry THEN
2336 
2337         save_Template_As_Local(p_template_id => k.template_id,
2338                                p_ui_def_id   => g_UI_Context.ui_def_id);
2339 
2340         refresh_Cont_Templs(p_content_type       => k.content_type,
2341                             p_master_template_id => g_UI_Context.from_master_template_id,
2342                             p_ui_def_id          => g_UI_Context.ui_def_id,
2343                             p_create_cont_entry  => TRUE);
2344 
2345        ELSE
2346          IF NOT(l_detailed_type_id_tbl.EXISTS(k.content_type)) THEN
2347             refresh_Cont_Templs(p_content_type       => k.content_type,
2348                                 p_master_template_id => g_UI_Context.from_master_template_id,
2349                                 p_ui_def_id          => g_UI_Context.ui_def_id,
2350                                 p_create_cont_entry  => FALSE);
2351          END IF;
2352 
2353        END IF;
2354 
2355     END LOOP;
2356 
2357     SELECT template_id INTO g_DRILLDOWN_TEMPLATE_ID
2358       FROM CZ_UI_CONT_TYPE_TEMPLS
2359      WHERE ui_def_id=g_UI_Context.from_master_template_id AND
2360            content_type=2151 AND deleted_flag=G_NO_FLAG;
2361 
2362     -- close XML parser
2363     Close_Parser;
2364 
2365     -- reopen XML parser
2366     Open_Parser;
2367 
2368   END create_Local_UI_Templates;
2369 
2370   --
2371   -- return page_ref node of nearest page
2372   --
2373   FUNCTION get_UI_Page_Ref_Node(p_ui_node  IN CZ_UI_PAGE_ELEMENTS%ROWTYPE)
2374     RETURN CZ_UI_PAGE_REFS%ROWTYPE IS
2375 
2376     l_page_ref_node     CZ_UI_PAGE_REFS%ROWTYPE;
2377 
2378   BEGIN
2379 
2380     IF p_ui_node.page_id IS NULL THEN
2381       RETURN l_page_ref_node;
2382     END IF;
2383 
2384     SELECT *
2385       INTO l_page_ref_node
2386       FROM CZ_UI_PAGE_REFS a
2387      WHERE ui_def_id = p_ui_node.ui_def_id AND
2388            (target_page_id,page_set_id) IN
2389            (SELECT page_id,NVL(page_set_id,a.page_set_id) FROM CZ_UI_PAGES
2390             WHERE page_id=p_ui_node.page_id AND ui_def_id=p_ui_node.ui_def_id AND
2391             deleted_flag NOT IN(G_YES_FLAG)) AND
2392            deleted_flag = G_NO_FLAG;
2393 
2394     RETURN l_page_ref_node;
2395 
2396   END get_UI_Page_Ref_Node;
2397 
2398   --
2399   -- the function returns a Model Path
2400   -- for a given persistent_node_id
2401   --
2402   FUNCTION  get_Page_Path(p_ps_node_id  IN NUMBER,
2403                           p_page_set_id IN NUMBER DEFAULT NULL) RETURN VARCHAR2 IS
2404 
2405     l_model_path              VARCHAR2(32000);
2406     l_persistent_node_id      NUMBER;
2407     l_parent_id               NUMBER;
2408     l_ps_node                 CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE;
2409     l_page_set_node           CZ_UI_PAGE_SETS%ROWTYPE;
2410     l_seq_nbr                 NUMBER;
2411     l_node_depth              NUMBER;
2412 
2413   BEGIN
2414 
2415     IF p_page_set_id IS NOT NULL THEN
2416 
2417       l_page_set_node := get_Page_Set(p_page_set_id);
2418 
2419       IF l_page_set_node.persistent_node_id IS NOT NULL THEN
2420         l_persistent_node_id := l_page_set_node.persistent_node_id;
2421       ELSE
2422         BEGIN
2423          SELECT MIN(node_depth) INTO l_node_depth FROM CZ_UI_PAGE_REFS
2424          WHERE ui_def_id=g_UI_Context.ui_def_id AND page_set_id=p_page_set_id
2425                 AND deleted_flag=G_NO_FLAG;
2426 
2427          SELECT MIN(SEQ_NBR) INTO l_seq_nbr FROM CZ_UI_PAGE_REFS
2428          WHERE ui_def_id=g_UI_Context.ui_def_id AND page_set_id=p_page_set_id
2429                 AND node_depth=l_node_depth AND deleted_flag=G_NO_FLAG;
2430 
2431          SELECT DISTINCT target_persistent_node_id INTO l_persistent_node_id
2432          FROM CZ_UI_PAGE_REFS
2433          WHERE ui_def_id=g_UI_Context.ui_def_id AND page_set_id=p_page_set_id
2434                AND seq_nbr=l_seq_nbr AND
2435                target_persistent_node_id NOT IN
2436               (SELECT  ref_persistent_node_id FROM CZ_UI_REFS WHERE
2437                 ui_def_id=g_UI_Context.ui_def_id AND deleted_flag=G_NO_FLAG) AND
2438                rownum<2;
2439         EXCEPTION
2440           WHEN OTHERS THEN
2441             RETURN '.';
2442         END;
2443       END IF;
2444 
2445      l_ps_node := get_Model_Node_By_Persist_Id(l_persistent_node_id, g_UI_Context.devl_project_id);
2446 
2447     END IF;
2448 
2449     SELECT parent_id INTO l_parent_id FROM CZ_PS_NODES
2450     WHERE ps_node_id=p_ps_node_id;
2451 
2452     IF l_parent_id IS NULL THEN
2453        RETURN '.';
2454     END IF;
2455 
2456     IF p_page_set_id IS NULL THEN
2457       FOR i IN(SELECT persistent_node_id, parent_id FROM CZ_PS_NODES
2458                START WITH ps_node_id=p_ps_node_id AND deleted_flag=G_NO_FLAG
2459                CONNECT BY PRIOR parent_id=ps_node_id AND
2460                PRIOR deleted_flag=G_NO_FLAG AND deleted_flag=G_NO_FLAG)
2461       LOOP
2462         IF l_model_path IS NULL THEN
2463           l_model_path:=TO_CHAR(i.persistent_node_id);
2464         ELSIF i.parent_id IS NOT NULL THEN
2465           l_model_path:=TO_CHAR(i.persistent_node_id)||'.'||l_model_path;
2466         ELSE
2467           NULL;
2468         END IF;
2469       END LOOP;
2470 
2471       RETURN  l_model_path;
2472 
2473     ELSE
2474 
2475       FOR i IN(SELECT ps_node_id,persistent_node_id, parent_id FROM CZ_PS_NODES
2476                START WITH ps_node_id=p_ps_node_id AND deleted_flag=G_NO_FLAG
2477                CONNECT BY PRIOR parent_id=ps_node_id AND
2478                PRIOR deleted_flag=G_NO_FLAG AND deleted_flag=G_NO_FLAG)
2479       LOOP
2480         IF i.ps_node_id = l_ps_node.ps_node_id THEN
2481           EXIT;
2482         END IF;
2483         IF l_model_path IS NULL THEN
2484           l_model_path:=TO_CHAR(i.persistent_node_id);
2485         ELSIF i.parent_id IS NOT NULL THEN
2486           l_model_path:=TO_CHAR(i.persistent_node_id)||'.'||l_model_path;
2487         ELSE
2488           NULL;
2489         END IF;
2490       END LOOP;
2491 
2492       IF l_model_path IS NULL THEN
2493         l_model_path := '.';
2494       END IF;
2495 
2496       RETURN  l_model_path;
2497 
2498 
2499     END IF;
2500   END get_Page_Path;
2501 
2502   --
2503   -- the function retrurns a Model Path
2504   -- for a given persistent_node_id
2505   --
2506   FUNCTION get_Model_Path(p_ui_node IN CZ_UI_PAGE_ELEMENTS%ROWTYPE)
2507     RETURN VARCHAR2 IS
2508 
2509     l_page_path VARCHAR2(32000) := '';
2510     l_parent_ui_node CZ_UI_PAGE_ELEMENTS%ROWTYPE;
2511 
2512     PROCEDURE construct_Path(p_current_ui_node IN CZ_UI_PAGE_ELEMENTS%ROWTYPE) IS
2513       l_ui_node CZ_UI_PAGE_ELEMENTS%ROWTYPE;
2514     BEGIN
2515 
2516       IF p_current_ui_node.pagebase_persistent_node_id <>
2517          p_current_ui_node.persistent_node_id THEN
2518 
2519         l_ui_node := get_UI_Element(p_element_id => p_current_ui_node.parent_element_id,
2520                                     p_page_id    => p_current_ui_node.page_id);
2521 
2522         IF l_ui_node.pagebase_persistent_node_id = l_ui_node.persistent_node_id OR
2523            l_ui_node.parent_element_id IS NULL THEN
2524           RETURN;
2525         ELSE
2526           IF l_ui_node.persistent_node_id IS NOT NULL AND
2527              p_current_ui_node.persistent_node_id <> l_ui_node.persistent_node_id THEN
2528 
2529             l_page_path := TO_CHAR(l_ui_node.persistent_node_id) || '.' ||
2530                            l_page_path;
2531           END IF;
2532           construct_Path(l_ui_node);
2533         END IF;
2534       ELSE
2535         RETURN;
2536       END IF;
2537     END construct_Path;
2538 
2539   BEGIN
2540 
2541     IF p_ui_node.persistent_node_id=0 THEN
2542       RETURN '*';
2543     END IF;
2544 
2545     IF p_ui_node.parent_element_id IS NULL  THEN
2546       RETURN '.';
2547     ELSE
2548 
2549       BEGIN
2550         l_parent_ui_node := get_UI_Element(p_ui_node.parent_element_id, p_ui_node.page_id);
2551 
2552       EXCEPTION
2553         WHEN NO_DATA_FOUND THEN
2554            RETURN '.';
2555       END;
2556 
2557       IF l_parent_ui_node.parent_element_id IS NULL AND
2558          l_parent_ui_node.persistent_node_id=p_ui_node.persistent_node_id THEN
2559         RETURN '.';
2560       END IF;
2561 
2562       l_page_path := TO_CHAR(p_ui_node.persistent_node_id);
2563 
2564       construct_Path(p_ui_node);
2565     END IF;
2566     RETURN l_page_path;
2567   END get_Model_Path;
2568 
2569   --
2570   -- return COUNT ( of UI page sets of a given UI) + 1
2571   --
2572   FUNCTION get_Page_Set_Counter RETURN NUMBER IS
2573     l_page_counter NUMBER;
2574   BEGIN
2575     SELECT COUNT(*)
2576       INTO l_page_counter
2577       FROM CZ_UI_PAGE_SETS
2578      WHERE ui_def_id = g_UI_Context.ui_def_id AND
2579            deleted_flag=G_NO_FLAG;
2580     RETURN l_page_counter;
2581   END get_Page_Set_Counter;
2582 
2583   --
2584   -- return COUNT ( of UI pages of a given UI) + 1
2585   --
2586   FUNCTION get_Last_Seq_Nbr(p_parent_element_id IN VARCHAR2) RETURN NUMBER IS
2587     l_seq_nbr        NUMBER;
2588     l_num_element_id NUMBER;
2589     l_parent_seq_nbr NUMBER;
2590   BEGIN
2591     SELECT NVL(MAX(seq_nbr),0)
2592       INTO l_seq_nbr
2593       FROM CZ_UI_PAGE_ELEMENTS
2594      WHERE ui_def_id=g_UI_Context.ui_def_id AND
2595            parent_element_id=p_parent_element_id AND
2596            deleted_flag NOT IN(G_YES_FLAG,G_MARK_TO_DELETE);
2597     RETURN l_seq_nbr;
2598   END get_Last_Seq_Nbr;
2599 
2600   --
2601   -- return COUNT ( of UI pages of a given UI) + 1
2602   --
2603   FUNCTION get_Last_Split_Page_Nbr(p_page_id IN NUMBER) RETURN NUMBER IS
2604     l_split_seq_nbr        NUMBER;
2605   BEGIN
2606     SELECT NVL(MAX(split_seq_nbr),0)
2607       INTO l_split_seq_nbr
2608       FROM CZ_UI_PAGES
2609      WHERE ui_def_id=g_UI_Context.ui_def_id AND
2610            persistent_node_id IN
2611           (SELECT persistent_node_id FROM CZ_UI_PAGES
2612             WHERE ui_def_id=g_UI_Context.ui_def_id AND page_id=p_page_id);
2613     RETURN l_split_seq_nbr;
2614   END get_Last_Split_Page_Nbr;
2615 
2616   --
2617   -- return COUNT ( of UI pages of a given UI) + 1
2618   --
2619   FUNCTION get_Num_Elements_On_Page(p_page_node IN CZ_UI_PAGE_ELEMENTS%ROWTYPE)
2620     RETURN NUMBER IS
2621     l_counter   NUMBER;
2622   BEGIN
2623     SELECT COUNT(element_id)
2624       INTO l_counter
2625       FROM CZ_UI_PAGE_ELEMENTS
2626      WHERE ui_def_id=p_page_node.ui_def_id AND
2627            page_id=p_page_node.page_id AND ctrl_template_id IS NOT NULL AND
2628            deleted_flag NOT IN(G_YES_FLAG,G_MARK_TO_DELETE);
2629     RETURN l_counter;
2630   END get_Num_Elements_On_Page;
2631 
2632   --
2633   -- create new Page Set
2634   --
2635   PROCEDURE create_Page_Set
2636   (
2637   p_ui_def_id          IN NUMBER,
2638   p_page_set_type      IN NUMBER,
2639   p_persistent_node_id IN NUMBER,
2640   p_model_ref_expl_id  IN NUMBER,
2641   x_page_set_id        OUT NOCOPY NUMBER
2642   ) IS
2643 
2644     l_ui_page_set_node        CZ_UI_PAGE_SETS%ROWTYPE;
2645     l_page_set_name           CZ_UI_PAGE_SETS.name%TYPE;
2646     l_root_persistent_node_id NUMBER;
2647     l_page_set_counter        NUMBER;
2648 
2649   BEGIN
2650 
2651     IF p_page_set_type IN(G_SINGLE_LEVEL_MENU,G_MULTI_LEVEL_MENU,
2652                           G_MODEL_TREE_MENU,G_PAGE_FLOW,G_SUBTABS) THEN
2653 
2654       SELECT COUNT(page_set_id)+1 INTO l_page_set_counter FROM CZ_UI_PAGE_SETS
2655       WHERE ui_def_id=p_ui_def_id AND page_set_type=p_page_set_type AND
2656             deleted_flag=G_NO_FLAG;
2657       IF p_page_set_type IN(G_PAGE_FLOW) THEN
2658         l_page_set_name := 'Page Flow - '|| TO_CHAR(l_page_set_counter);
2659       ELSIF p_page_set_type IN(G_SUBTABS) THEN
2660         l_page_set_name := 'Subtabs - '|| TO_CHAR(l_page_set_counter);
2661       ELSE
2662         l_page_set_name := 'Menu - '|| TO_CHAR(l_page_set_counter);
2663       END IF;
2664     ELSE
2665       l_page_set_counter := get_Page_Set_Counter() + 1;
2666       l_page_set_name := 'Page Set - ' || TO_CHAR(l_page_set_counter);
2667     END IF;
2668 
2669     x_page_set_id := allocateId('CZ_UI_PAGE_SETS_S');
2670 
2671     INSERT INTO CZ_UI_PAGE_SETS
2672         (ui_def_id,
2673          page_set_id,
2674          page_set_type,
2675          NAME,
2676          suppress_refresh_flag,
2677          train_jrad_doc,
2678          persistent_node_id,
2679          pagebase_expl_node_id,
2680          deleted_flag)
2681     VALUES
2682         (p_ui_def_id,
2683          x_page_set_id,
2684          p_page_set_type,
2685          l_page_set_name,
2686          g_suppress_refresh_flag,
2687          NULL,
2688          p_persistent_node_id,
2689          p_model_ref_expl_id,
2690          G_NO_FLAG);
2691 
2692     l_ui_page_set_node.ui_def_id     := p_ui_def_id;
2693     l_ui_page_set_node.page_set_id   := x_page_set_id;
2694     l_ui_page_set_node.page_set_type := p_page_set_type;
2695     l_ui_page_set_node.name          := l_page_set_name;
2696     l_ui_page_set_node.suppress_refresh_flag := g_suppress_refresh_flag;
2697     l_ui_page_set_node.train_jrad_doc:= NULL;
2698     l_ui_page_set_node.persistent_node_id    := p_persistent_node_id;
2699     l_ui_page_set_node.pagebase_expl_node_id := p_model_ref_expl_id;
2700     l_ui_page_set_node.deleted_flag  := G_NO_FLAG;
2701 
2702     g_ui_page_sets_tbl(x_page_set_id) := l_ui_page_set_node;
2703 
2704   END create_Page_Set;
2705 
2706   --
2707   -- check : is it UI Page
2708   --
2709   FUNCTION is_UI_Page(p_node      IN CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE,
2710                       x_drilldown OUT NOCOPY BOOLEAN) RETURN BOOLEAN IS
2711 
2712     l_root_persistent_node_id   NUMBER;
2713   BEGIN
2714 
2715     l_root_persistent_node_id := get_Root_Persistent_Node_Id();
2716 
2717     x_drilldown := FALSE;
2718 
2719     ------- Single Page --------
2720 
2721 
2722     -- If the navigation style is Single_Page, and pagination style is "Subsections"
2723     -- or "Single Page", then create new page for all non virtual P/C/M/OC.
2724     -- All other UI nodes will not have their own page
2725 
2726     IF g_UI_Context.PRIMARY_NAVIGATION=G_SINGLE_PAGE AND
2727        (
2728        (g_UI_Context.PAGIN_NONINST IN(G_SUBSECTIONS_PG_TYPE,G_SINGLE_PG_TYPE) AND
2729        p_node.ps_node_type IN (G_PRODUCT_TYPE, G_COMPONENT_TYPE))
2730        OR
2731        (g_UI_Context.PAGIN_BOMOC IN(G_SUBSECTIONS_PG_TYPE,G_SINGLE_PG_TYPE) AND
2732        p_node.ps_node_type IN (G_BOM_MODEL_TYPE, G_BOM_OPTION_CLASS_TYPE))
2733        )
2734         THEN
2735 
2736       IF p_node.parent_id IS NULL OR p_node.virtual_flag = G_NO_FLAG THEN
2737         RETURN TRUE;
2738       END IF;
2739 
2740       RETURN FALSE;
2741     END IF;
2742 
2743 
2744     -- If the navigation style is "Single Page" and pagination type is "New Pages"
2745     -- then create new Pages for all P/C/M/OC but the immediate children of the root.
2746     -- The immediate children of the root will be created on the page for the root
2747     -- as subsections
2748 
2749     IF g_UI_Context.PRIMARY_NAVIGATION=G_SINGLE_PAGE AND
2750        (
2751        (g_UI_Context.PAGIN_NONINST = G_NEW_PAGES_PG_TYPE AND
2752        p_node.ps_node_type IN (G_PRODUCT_TYPE, G_COMPONENT_TYPE))
2753        OR
2754        (g_UI_Context.PAGIN_BOMOC = G_NEW_PAGES_PG_TYPE AND
2755        p_node.ps_node_type IN (G_BOM_MODEL_TYPE, G_BOM_OPTION_CLASS_TYPE))
2756        ) THEN
2757 
2758       IF p_node.parent_id IS NULL OR p_node.virtual_flag = G_NO_FLAG THEN
2759         RETURN TRUE;
2760       END IF;
2761 
2762       -- If this is child of the root, add it to the root page
2763 
2764       IF p_node.parent_persistent_node_id=l_root_persistent_node_id THEN
2765         RETURN FALSE;
2766       ELSE
2767         x_drilldown := TRUE;
2768         RETURN TRUE;
2769       END IF;
2770 
2771       RETURN FALSE;
2772     END IF;
2773 
2774     -- If the navigation style is "Single Page" and pagination is "Drilldown Pages",
2775     -- then create new page for all non virtual nodes and virtual nodes which are not
2776     -- immediate child of the root. Immediate children of the root will have their
2777     -- UI Nodes on the page for the root
2778 
2779     IF g_UI_Context.PRIMARY_NAVIGATION=G_SINGLE_PAGE AND
2780        (
2781        (g_UI_Context.PAGIN_NONINST = G_DRILLDOWN_PAGES_PG_TYPE AND
2782        p_node.ps_node_type IN (G_PRODUCT_TYPE, G_COMPONENT_TYPE))
2783        OR
2784        (g_UI_Context.PAGIN_BOMOC = G_DRILLDOWN_PAGES_PG_TYPE AND
2785        p_node.ps_node_type IN (G_BOM_MODEL_TYPE, G_BOM_OPTION_CLASS_TYPE))
2786        ) THEN
2787 
2788       IF p_node.parent_id IS NULL OR p_node.virtual_flag = G_NO_FLAG THEN
2789         RETURN TRUE;
2790       END IF;
2791 
2792       IF p_node.parent_persistent_node_id=l_root_persistent_node_id THEN
2793         RETURN FALSE;
2794       ELSE
2795         x_drilldown := TRUE;
2796         RETURN TRUE;
2797       END IF;
2798 
2799       RETURN FALSE;
2800 
2801     END IF;
2802 
2803     ----- Page Flow -------
2804 
2805     -- If the primary navigation is "Page Flow" and pagination is "Single Page",
2806     -- then create new page for root, non virtual nodes and direct children (P/C/M/OC)
2807     -- of the root. All under nodes will be created as subsections
2808 
2809     IF g_UI_Context.PRIMARY_NAVIGATION=G_PAGE_FLOW AND
2810        (
2811        (g_UI_Context.PAGIN_NONINST IN(G_SINGLE_PG_TYPE,G_SUBSECTIONS_PG_TYPE) AND
2812        p_node.ps_node_type IN (G_PRODUCT_TYPE, G_COMPONENT_TYPE))
2813        OR
2814        (g_UI_Context.PAGIN_BOMOC IN(G_SINGLE_PG_TYPE,G_SUBSECTIONS_PG_TYPE) AND
2815        p_node.ps_node_type IN (G_BOM_MODEL_TYPE, G_BOM_OPTION_CLASS_TYPE))
2816        ) THEN
2817 
2818       IF p_node.parent_id IS NULL OR p_node.virtual_flag = G_NO_FLAG OR
2819          p_node.parent_persistent_node_id=l_root_persistent_node_id THEN
2820         RETURN TRUE;
2821       END IF;
2822 
2823       RETURN FALSE;
2824     END IF;
2825 
2826     -- If the primary navigation is "Page Flow" and pagination is "New Pages", then
2827     -- create create new pages for all P/C/M/OC
2828 
2829     IF g_UI_Context.PRIMARY_NAVIGATION=G_PAGE_FLOW AND
2830        (
2831        (g_UI_Context.PAGIN_NONINST = G_NEW_PAGES_PG_TYPE AND
2832        p_node.ps_node_type IN (G_PRODUCT_TYPE, G_COMPONENT_TYPE))
2833        OR
2834        (g_UI_Context.PAGIN_BOMOC = G_NEW_PAGES_PG_TYPE AND
2835        p_node.ps_node_type IN (G_BOM_MODEL_TYPE, G_BOM_OPTION_CLASS_TYPE))
2836        ) THEN
2837 
2838       IF p_node.parent_id IS NULL OR p_node.virtual_flag = G_NO_FLAG THEN
2839         RETURN TRUE;
2840       END IF;
2841 
2842       RETURN TRUE;
2843     END IF;
2844 
2845     -- If the primary navigation is "Page Flow" and pagination is "Drilldown Pages", then
2846     -- create create new pages for all (P/C/M/OC)
2847     -- Further, drilldowns will be created for virtual P/C/M/OC that are not direct children
2848     -- of the root
2849 
2850     IF g_UI_Context.PRIMARY_NAVIGATION=G_PAGE_FLOW AND
2851        (
2852        (g_UI_Context.PAGIN_NONINST = G_DRILLDOWN_PAGES_PG_TYPE AND
2853        p_node.ps_node_type IN (G_PRODUCT_TYPE, G_COMPONENT_TYPE))
2854        OR
2855        (g_UI_Context.PAGIN_BOMOC = G_DRILLDOWN_PAGES_PG_TYPE AND
2856        p_node.ps_node_type IN (G_BOM_MODEL_TYPE, G_BOM_OPTION_CLASS_TYPE))
2857        ) THEN
2858 
2859       IF p_node.parent_id IS NULL OR p_node.virtual_flag = G_NO_FLAG OR
2860          p_node.parent_persistent_node_id=l_root_persistent_node_id THEN
2861         RETURN TRUE;
2862       END IF;
2863 
2864       IF p_node.parent_persistent_node_id<>l_root_persistent_node_id THEN
2865         x_drilldown := TRUE;
2866       END IF;
2867 
2868       RETURN TRUE;
2869     END IF;
2870 
2871     ----- Menu -----
2872 
2873     -- If the navigation style is Side Nav or Tree and pagination type is "Single Page" or
2874     -- "Subsections" then create new pages for root and its direct children.
2875     -- For all other P/C/M/OC, if the node is non virtual then create a new Page with a
2876     -- Drilldown to it. For all other nodes no new page
2877 
2878     IF g_UI_Context.PRIMARY_NAVIGATION IN(G_SINGLE_LEVEL_MENU,G_MULTI_LEVEL_MENU,G_MODEL_TREE_MENU) AND
2879        (
2880        (g_UI_Context.PAGIN_NONINST IN(G_SINGLE_PG_TYPE,G_SUBSECTIONS_PG_TYPE) AND
2881        p_node.ps_node_type IN (G_PRODUCT_TYPE, G_COMPONENT_TYPE))
2882        OR
2883        (g_UI_Context.PAGIN_BOMOC IN(G_SINGLE_PG_TYPE,G_SUBSECTIONS_PG_TYPE) AND
2884        p_node.ps_node_type IN (G_BOM_MODEL_TYPE, G_BOM_OPTION_CLASS_TYPE))
2885        ) THEN
2886 
2887       IF p_node.parent_id IS NULL OR
2888         p_node.parent_persistent_node_id=l_root_persistent_node_id  THEN
2889         RETURN TRUE;
2890       END IF;
2891 
2892       IF p_node.virtual_flag = G_NO_FLAG THEN
2893         x_drilldown := TRUE;
2894         RETURN TRUE;
2895       END IF;
2896 
2897       RETURN FALSE;
2898     END IF;
2899 
2900     -- If the navigation style is "Side Menu" or "Tree", and pagination style is "New Pages"
2901     -- then create new pages for all P/C/M/OC
2902 
2903     IF g_UI_Context.PRIMARY_NAVIGATION IN(G_SINGLE_LEVEL_MENU,G_MULTI_LEVEL_MENU,G_MODEL_TREE_MENU) AND
2904        (
2905        (g_UI_Context.PAGIN_NONINST = G_NEW_PAGES_PG_TYPE AND
2906        p_node.ps_node_type IN (G_PRODUCT_TYPE, G_COMPONENT_TYPE))
2907        OR
2908        (g_UI_Context.PAGIN_BOMOC = G_NEW_PAGES_PG_TYPE AND
2909        p_node.ps_node_type IN (G_BOM_MODEL_TYPE, G_BOM_OPTION_CLASS_TYPE))
2910        ) THEN
2911 
2912       IF p_node.parent_id IS NULL OR p_node.virtual_flag = G_NO_FLAG THEN
2913         RETURN TRUE;
2914       END IF;
2915 
2916       RETURN TRUE;
2917     END IF;
2918 
2919     -- If the navigation style is "Side Menu" or "Tree", and pagination is "Drilldown Pages", then
2920     -- create new new pages for all P/C/M/OC. Further all page for all nodes that are not
2921     -- direct children of the root, will have a Drilldown
2922 
2923     IF g_UI_Context.PRIMARY_NAVIGATION IN(G_SINGLE_LEVEL_MENU,G_MULTI_LEVEL_MENU,G_MODEL_TREE_MENU) AND
2924        (
2925        (g_UI_Context.PAGIN_NONINST = G_DRILLDOWN_PAGES_PG_TYPE AND
2926        p_node.ps_node_type IN (G_PRODUCT_TYPE, G_COMPONENT_TYPE))
2927        OR
2928        (g_UI_Context.PAGIN_BOMOC = G_DRILLDOWN_PAGES_PG_TYPE AND
2929        p_node.ps_node_type IN (G_BOM_MODEL_TYPE, G_BOM_OPTION_CLASS_TYPE))
2930        ) THEN
2931 
2932       IF p_node.parent_id IS NULL OR
2933         p_node.parent_persistent_node_id=l_root_persistent_node_id THEN
2934         RETURN TRUE;
2935       END IF;
2936 
2937       IF p_node.virtual_flag = G_NO_FLAG THEN
2938         x_drilldown := TRUE;
2939         RETURN TRUE;
2940       END IF;
2941 
2942       x_drilldown := TRUE;
2943       RETURN TRUE;
2944     END IF;
2945 
2946     ---- Subtabs -------
2947 
2948     -- If the navigation style is "Subtabs" and pagination is "Single Page" or
2949     -- "Subsections," then create new pages for the root, non virtual nodes and
2950     -- direct P/C/M/OC children of the root.
2951 
2952     IF g_UI_Context.PRIMARY_NAVIGATION = G_SUBTABS AND
2953        (
2954        (g_UI_Context.PAGIN_NONINST IN(G_SINGLE_PG_TYPE,G_SUBSECTIONS_PG_TYPE) AND
2955        p_node.ps_node_type IN (G_PRODUCT_TYPE, G_COMPONENT_TYPE))
2956        OR
2957        (g_UI_Context.PAGIN_BOMOC IN(G_SINGLE_PG_TYPE,G_SUBSECTIONS_PG_TYPE) AND
2958        p_node.ps_node_type IN (G_BOM_MODEL_TYPE, G_BOM_OPTION_CLASS_TYPE))
2959        ) THEN
2960 
2961       IF p_node.parent_id IS NULL OR p_node.virtual_flag = G_NO_FLAG OR
2962          p_node.parent_persistent_node_id = l_root_persistent_node_id THEN
2963         RETURN TRUE;
2964       END IF;
2965 
2966       RETURN FALSE;
2967     END IF;
2968 
2969     -- If navigation style is "Subtabs" and pagination is "New Pages," then create
2970     -- new pages for all P/C/M/OC
2971 
2972     IF g_UI_Context.PRIMARY_NAVIGATION = G_SUBTABS AND
2973        (
2974        (g_UI_Context.PAGIN_NONINST = G_NEW_PAGES_PG_TYPE AND
2975        p_node.ps_node_type IN (G_PRODUCT_TYPE, G_COMPONENT_TYPE))
2976        OR
2977        (g_UI_Context.PAGIN_BOMOC = G_NEW_PAGES_PG_TYPE AND
2978        p_node.ps_node_type IN (G_BOM_MODEL_TYPE, G_BOM_OPTION_CLASS_TYPE))
2979        ) THEN
2980 
2981       IF p_node.parent_id IS NULL OR p_node.virtual_flag = G_NO_FLAG THEN
2982         RETURN TRUE;
2983       END IF;
2984 
2985       RETURN TRUE;
2986 
2987     END IF;
2988 
2989     -- If the navigation style is "Subtabs" and pagination is "Drilldown Pages,"
2990     -- then create new pages for all P/C/M/OC. Node not directly under the root will
2991     -- also have a drilldown
2992 
2993     IF g_UI_Context.PRIMARY_NAVIGATION = G_SUBTABS AND
2994        (
2995        (g_UI_Context.PAGIN_NONINST = G_DRILLDOWN_PAGES_PG_TYPE AND
2996        p_node.ps_node_type IN (G_PRODUCT_TYPE, G_COMPONENT_TYPE))
2997        OR
2998        (g_UI_Context.PAGIN_BOMOC = G_DRILLDOWN_PAGES_PG_TYPE AND
2999        p_node.ps_node_type IN (G_BOM_MODEL_TYPE, G_BOM_OPTION_CLASS_TYPE))
3000        ) THEN
3001 
3002       IF p_node.parent_id IS NULL OR p_node.virtual_flag = G_NO_FLAG OR
3003         p_node.parent_persistent_node_id=l_root_persistent_node_id THEN
3004         RETURN TRUE;
3005       END IF;
3006 
3007       IF p_node.parent_persistent_node_id<>l_root_persistent_node_id THEN
3008         x_drilldown := TRUE;
3009       END IF;
3010 
3011       RETURN TRUE;
3012     END IF;
3013 
3014     -- If none of the above satisfy, then create new pages for all P/C/M/OC
3015 
3016     IF p_node.ps_node_type IN (G_PRODUCT_TYPE, G_COMPONENT_TYPE,
3017                               G_BOM_MODEL_TYPE, G_BOM_OPTION_CLASS_TYPE) THEN
3018       RETURN TRUE;
3019     ELSE
3020       RETURN FALSE;
3021     END IF;
3022   END is_UI_Page;
3023 
3024   --
3025   -- check - is it UI Reference or no
3026   --
3027   FUNCTION is_UI_Reference(p_ui_node IN CZ_UI_PAGE_ELEMENTS%ROWTYPE)
3028     RETURN BOOLEAN IS
3029     l_ui_ref_exists VARCHAR2(1);
3030   BEGIN
3031     SELECT 'x' INTO l_ui_ref_exists
3032       FROM  CZ_UI_REFS
3033      WHERE ui_def_id=p_ui_node.ui_def_id AND
3034            ref_persistent_node_id=p_ui_node.persistent_node_id AND
3035            deleted_flag=G_NO_FLAG AND rownum<2;
3036      RETURN TRUE;
3037   EXCEPTION
3038     WHEN NO_DATA_FOUND THEN
3039       RETURN FALSE;
3040   END is_UI_Reference;
3041 
3042   --
3043   -- remove Instance Management Controls from CZ_UI_PAGE_ELEMENTS
3044   --
3045   PROCEDURE remove_Instance_Controls(p_ui_node IN CZ_UI_PAGE_ELEMENTS%ROWTYPE) IS
3046 
3047     l_changed_pages_tbl number_tbl_type;
3048     l_suppress_refresh_flag CZ_UI_PAGE_ELEMENTS.suppress_refresh_flag%TYPE;
3049     l_mark_flag             CZ_UI_PAGE_ELEMENTS.deleted_flag%TYPE;
3050 
3051   BEGIN
3052 
3053      FOR i IN(SELECT page_id,element_id,parent_element_id,suppress_refresh_flag
3054                 FROM CZ_UI_PAGE_ELEMENTS
3055                WHERE ui_def_id=p_ui_node.ui_def_id AND
3056                      persistent_node_id=p_ui_node.persistent_node_id AND
3057                      element_type IN(G_UI_NONBOMADDINST_NODE_TYPE,G_UI_BOMADDINST_NODE_TYPE) AND
3058                      deleted_flag NOT IN(G_YES_FLAG,G_MARK_TO_DELETE, G_LIMBO_FLAG))
3059     LOOP
3060       IF i.suppress_refresh_flag=G_YES_FLAG THEN
3061           UPDATE CZ_UI_PAGE_ELEMENTS
3062              SET deleted_flag=G_MARK_TO_DEASSOCIATE,
3063                  persistent_node_id=0
3064            WHERE ui_def_id=p_ui_node.ui_def_id AND
3065                 page_id=i.page_id AND
3066                 element_id=i.element_id;
3067       ELSE
3068         SELECT suppress_refresh_flag INTO l_suppress_refresh_flag FROM CZ_UI_PAGE_ELEMENTS
3069         WHERE ui_def_id=p_ui_node.ui_def_id AND page_id=i.page_id AND
3070               element_id=i.parent_element_id;
3071         IF l_suppress_refresh_flag=G_YES_FLAG THEN
3072           UPDATE CZ_UI_PAGE_ELEMENTS
3073              SET deleted_flag=G_MARK_TO_DEASSOCIATE,
3074                  persistent_node_id=0
3075            WHERE ui_def_id=p_ui_node.ui_def_id AND
3076                 page_id=i.page_id AND
3077                 element_id=i.element_id;
3078         ELSE
3079           UPDATE CZ_UI_PAGE_ELEMENTS
3080              SET deleted_flag=G_MARK_TO_DELETE
3081            WHERE ui_def_id=p_ui_node.ui_def_id AND
3082                  page_id=i.page_id AND
3083                  element_id=i.element_id;
3084         END IF;
3085       END IF;
3086 
3087       mark_UI_Page_As_Refreshed(i.page_id, p_ui_node.ui_def_id);
3088 
3089     END LOOP;
3090 
3091   END remove_Instance_Controls;
3092 
3093   --
3094   -- merge two Page Flows - parent and child Page Flows into one Page Flow
3095   -- p_ui_node is a first node of child Page Flow
3096   --
3097   PROCEDURE merge_Page_Flows(p_ui_node IN CZ_UI_PAGE_ELEMENTS%ROWTYPE) IS
3098     TYPE number_tbl_type       IS TABLE OF NUMBER INDEX BY BINARY_INTEGER;
3099     l_changed_target_ids_tbl   number_tbl_type;
3100     l_ui_page_ref_node         CZ_UI_PAGE_REFS%ROWTYPE;
3101     l_target_path              CZ_UI_PAGE_REFS.target_path%TYPE;
3102     l_model_node               CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE;
3103     l_child_page_set_id        NUMBER;
3104     l_child_page_ref_id        NUMBER;
3105     l_parent_page_set_id       NUMBER;
3106     l_parent_page_ref_id       NUMBER;
3107     l_page_ref_type            NUMBER;
3108 
3109   BEGIN
3110     --
3111     -- get Page set id of UI node p_ui_node
3112     --
3113     BEGIN
3114       l_ui_page_ref_node := get_UI_Page_Ref_Node(p_ui_node);
3115       l_child_page_set_id := l_ui_page_ref_node.page_set_id;
3116       l_child_page_ref_id := l_ui_page_ref_node.page_ref_id;
3117     EXCEPTION
3118       WHEN NO_DATA_FOUND THEN
3119         RETURN;
3120     END;
3121 
3122     --
3123     -- get Page set id and page_ref_id of parent Page Flow
3124     --
3125     SELECT MIN(page_ref_id)
3126       INTO l_parent_page_ref_id
3127       FROM CZ_UI_PAGE_REFS
3128      WHERE ui_def_id=p_ui_node.ui_def_id AND
3129            target_persistent_node_id=p_ui_node.parent_persistent_node_id AND
3130            deleted_flag=G_NO_FLAG;
3131 
3132     SELECT page_set_id,page_ref_type
3133       INTO l_parent_page_set_id,l_page_ref_type FROM CZ_UI_PAGE_REFS
3134     WHERE ui_def_id=p_ui_node.ui_def_id AND page_ref_id=l_parent_page_ref_id;
3135 
3136     --
3137     -- attach child Page Flow to the parent Page Flow
3138     --
3139     UPDATE CZ_UI_PAGE_REFS
3140        SET parent_page_ref_id = l_parent_page_ref_id
3141      WHERE ui_def_id=p_ui_node.ui_def_id AND
3142            page_ref_id=l_child_page_ref_id;
3143 
3144     UPDATE CZ_UI_PAGE_REFS
3145        SET page_set_id = l_parent_page_set_id
3146      WHERE ui_def_id=p_ui_node.ui_def_id AND
3147            target_page_id IN
3148            (SELECT target_page_id FROM CZ_UI_PAGE_REFS
3149             START WITH ui_def_id=p_ui_node.ui_def_id AND
3150                        page_ref_id=l_child_page_ref_id
3151             CONNECT BY PRIOR page_ref_id=parent_page_ref_id AND
3152                     ui_def_id=p_ui_node.ui_def_id AND
3153                     page_set_id=l_child_page_set_id AND
3154                     PRIOR page_set_id=l_child_page_set_id AND
3155                     PRIOR ui_def_id=p_ui_node.ui_def_id AND
3156                     deleted_flag=G_NO_FLAG AND PRIOR deleted_flag=G_NO_FLAG)
3157      RETURNING target_persistent_node_id BULK COLLECT INTO l_changed_target_ids_tbl;
3158 
3159      IF l_changed_target_ids_tbl.COUNT>0 THEN
3160        FOR x IN l_changed_target_ids_tbl.First..l_changed_target_ids_tbl.Last
3161        LOOP
3162          UPDATE CZ_UI_PAGES
3163             SET page_set_id=l_parent_page_set_id
3164           WHERE persistent_node_id=l_changed_target_ids_tbl(x) AND
3165                 ui_def_id=p_ui_node.ui_def_id;
3166 
3167      --    IF  l_page_ref_type IN(G_PAGE_FLOW,G_SUBTABS)  THEN
3168            l_model_node := get_Model_Node_By_Persist_Id(l_changed_target_ids_tbl(x), g_UI_Context.devl_project_id);
3169            l_target_path := get_Page_Path(l_model_node.ps_node_id, l_parent_page_set_id);
3170            UPDATE CZ_UI_PAGE_REFS
3171               SET target_path=l_target_path
3172             WHERE ui_def_id=p_ui_node.ui_def_id AND
3173                   page_set_id=l_parent_page_set_id AND
3174                   target_persistent_node_id=l_changed_target_ids_tbl(x) AND
3175                   target_path<>l_target_path;
3176       --   END IF;
3177 
3178        END LOOP;
3179      END IF;
3180 
3181   END merge_Page_Flows;
3182 
3183   --
3184   -- split one Page Flow into two Page Flows - parent and child
3185   --
3186   PROCEDURE split_Page_Flow(p_ui_node IN CZ_UI_PAGE_ELEMENTS%ROWTYPE) IS
3187     TYPE number_tbl_type       IS TABLE OF NUMBER INDEX BY BINARY_INTEGER;
3188     l_changed_target_ids_tbl   number_tbl_type;
3189     l_target_page_ids_tbl      number_tbl_type;
3190     l_ui_page_ref_node         CZ_UI_PAGE_REFS%ROWTYPE;
3191     l_target_path              CZ_UI_PAGE_REFS.target_path%TYPE;
3192     l_model_node               CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE;
3193     l_page_set_type            NUMBER;
3194     l_initial_page_set_id      NUMBER;
3195     l_initial_page_ref_id      NUMBER;
3196     l_page_set_id              NUMBER;
3197 
3198   BEGIN
3199 
3200     --
3201     -- get Page set id of UI node p_ui_node
3202     --
3203     BEGIN
3204      l_ui_page_ref_node := get_UI_Page_Ref_Node(p_ui_node);
3205      l_initial_page_set_id := l_ui_page_ref_node.page_set_id;
3206      l_initial_page_ref_id := l_ui_page_ref_node.page_ref_id;
3207     EXCEPTION
3208       WHEN NO_DATA_FOUND THEN
3209         RETURN;
3210     END;
3211 
3212     /*
3213     IF l_ui_page_ref_node.page_ref_type=G_SUBTABS THEN
3214       l_page_set_type := G_SUBTABS;
3215     ELSE
3216       l_page_set_type := G_PAGE_FLOW;
3217     END IF;
3218     */
3219 
3220     IF l_page_set_type IS NULL THEN
3221       l_page_set_type := g_UI_Context.PRIMARY_NAVIGATION;
3222     END IF;
3223 
3224     create_Page_Set(p_ui_def_id          => p_ui_node.ui_def_id,
3225                     p_page_set_type      => l_page_set_type,
3226                     p_persistent_node_id => p_ui_node.persistent_node_id,
3227                     p_model_ref_expl_id  => p_ui_node.model_ref_expl_id,
3228                     x_page_set_id        => l_page_set_id);
3229 
3230     UPDATE CZ_UI_PAGE_REFS
3231        SET target_path='.',
3232            parent_page_ref_id=NULL,
3233            node_depth=1,
3234            seq_nbr=1
3235      WHERE ui_def_id=p_ui_node.ui_def_id AND
3236            page_ref_id=l_initial_page_ref_id;
3237 
3238     UPDATE CZ_UI_PAGE_REFS
3239        SET page_set_id = l_page_set_id
3240      WHERE ui_def_id=p_ui_node.ui_def_id AND
3241            target_persistent_node_id IN
3242                 (SELECT target_persistent_node_id FROM CZ_UI_PAGE_REFS
3243                  START WITH ui_def_id=p_ui_node.ui_def_id AND
3244                             page_ref_id=l_initial_page_ref_id
3245                  CONNECT BY PRIOR page_ref_id=parent_page_ref_id AND
3246                     ui_def_id=p_ui_node.ui_def_id AND
3247                     page_set_id=l_initial_page_set_id AND
3248                     PRIOR page_set_id=l_initial_page_set_id AND
3249                     PRIOR ui_def_id=p_ui_node.ui_def_id AND
3250                     deleted_flag=G_NO_FLAG AND PRIOR deleted_flag=G_NO_FLAG)
3251      RETURNING target_page_id,target_persistent_node_id
3252      BULK COLLECT INTO l_target_page_ids_tbl,l_changed_target_ids_tbl;
3253 
3254      IF l_changed_target_ids_tbl.COUNT>0 THEN
3255        FOR j in l_changed_target_ids_tbl.First..l_changed_target_ids_tbl.Last
3256        LOOP
3257          UPDATE CZ_UI_PAGES
3258             SET page_set_id=l_page_set_id
3259           WHERE page_id=l_target_page_ids_tbl(j) AND
3260                 ui_def_id=p_ui_node.ui_def_id;
3261 
3262            l_model_node := get_Model_Node_By_Persist_Id(l_changed_target_ids_tbl(j), g_UI_Context.devl_project_id);
3263            l_target_path := get_Page_Path(l_model_node.ps_node_id, l_page_set_id);
3264 
3265            UPDATE CZ_UI_PAGE_REFS
3266               SET target_path=l_target_path
3267             WHERE ui_def_id=p_ui_node.ui_def_id AND
3268                   page_set_id=l_page_set_id AND
3269                   target_persistent_node_id=l_changed_target_ids_tbl(j) AND
3270                   target_path<>l_target_path;
3271 
3272        END LOOP;
3273      END IF;
3274 
3275   END split_Page_Flow;
3276 
3277   --
3278   -- check - is CX valid or no ?
3279   --
3280   FUNCTION get_CX_Button_Status(p_ui_node IN CZ_UI_PAGE_ELEMENTS%ROWTYPE)
3281     RETURN VARCHAR2 IS
3282 
3283     l_model_node         CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE;
3284     l_ui_cx_command_name CZ_EXPRESSION_NODES.data_value%TYPE;
3285     l_undeleted_exist    BOOLEAN;
3286 
3287   BEGIN
3288 
3289     l_model_node := get_Model_Node_By_Persist_Id(p_ui_node.persistent_node_id, g_UI_Context.devl_project_id);
3290 
3291     BEGIN
3292       SELECT cx_command_name
3293         INTO l_ui_cx_command_name
3294         FROM CZ_UI_ACTIONS
3295        WHERE ui_def_id=p_ui_node.ui_def_id AND
3296              element_id=p_ui_node.element_id AND
3297              cx_command_name IS NOT NULL  AND-- fix for bug 3923033
3298              deleted_flag=G_NO_FLAG;
3299     EXCEPTION
3300       WHEN NO_DATA_FOUND THEN
3301         RETURN G_CX_VALID;
3302     END;
3303 
3304     l_undeleted_exist := FALSE;
3305     FOR i IN(SELECT a.deleted_flag, a.invalid_flag, a.disabled_flag ,
3306                      a.INSTANTIATION_SCOPE, b.data_value, a.name
3307              FROM CZ_RULES a, CZ_EXPRESSION_NODES b
3308              WHERE a.devl_project_id=l_model_node.devl_project_id AND
3309                    a.component_id=l_model_node.ps_node_id AND
3310                    a.rule_type=G_CZ_EXTENTSIONS_RULE_TYPE AND
3311                    a.deleted_flag=G_NO_FLAG AND
3312                    b.rule_id=a.rule_id AND
3313                    b.deleted_flag=G_NO_FLAG AND
3314                    b.argument_signature_id=G_EVENT_ON_COMMAND_SIGID AND
3315                    data_value=l_ui_cx_command_name)
3316     LOOP
3317 
3318       IF i.deleted_flag=G_NO_FLAG THEN
3319          l_undeleted_exist := TRUE;
3320       END IF;
3321 
3322       IF i.invalid_flag=G_NO_FLAG AND i.disabled_flag=G_NO_FLAG AND
3323          i.deleted_flag=G_NO_FLAG THEN
3324         RETURN G_CX_VALID;
3325       END IF;
3326     END LOOP;
3327 
3328     IF l_model_node.ps_node_type=G_REFERENCE_TYPE THEN
3329 
3330       FOR i IN(SELECT a.name, a.deleted_flag, a.invalid_flag, a.disabled_flag,
3331                       a.INSTANTIATION_SCOPE, b.data_value
3332              FROM CZ_RULES a, CZ_EXPRESSION_NODES b
3333              WHERE a.devl_project_id=l_model_node.devl_project_id AND
3334                    a.component_id IN
3335                (SELECT ps_node_id FROM CZ_PS_NODES
3336                 WHERE devl_project_id IN
3337                 (SELECT DISTINCT component_id FROM CZ_MODEL_REF_EXPLS
3338                 START WITH model_id=l_model_node.devl_project_id AND
3339                            referring_node_id=l_model_node.ps_node_id
3340                 CONNECT BY PRIOR model_ref_expl_id=parent_expl_node_id AND
3341                          deleted_flag='0' AND PRIOR deleted_flag='0') AND
3342                 deleted_flag='0') AND
3343                    a.rule_type=G_CZ_EXTENTSIONS_RULE_TYPE AND
3344                    b.rule_id=a.rule_id AND
3345                    b.deleted_flag=G_NO_FLAG AND
3346                    b.argument_signature_id=G_EVENT_ON_COMMAND_SIGID AND
3347                    data_value IS NOT NULL)
3348       LOOP
3349 
3350         IF l_model_node.instantiable_flag NOT IN(G_MANDATORY_INST_TYPE) AND
3351            i.INSTANTIATION_SCOPE=1 AND i.disabled_flag=G_NO_FLAG THEN
3352 
3353           add_Error_Message(p_message_name => 'CZ_CX_IS_IN_WRONG_SCOPE',
3354                             p_token_name1  => 'EVENT_NAME',
3355                             p_token_value1 => i.data_value,
3356                             p_token_name2  => 'RULE_NAME',
3357                             p_token_value2 => i.name,
3358                             p_fatal_error  => FALSE);
3359 
3360 
3361           RETURN G_CX_INVALID;
3362         END IF;
3363 
3364         IF i.deleted_flag=G_NO_FLAG THEN
3365            l_undeleted_exist := TRUE;
3366         END IF;
3367 
3368         IF i.invalid_flag=G_NO_FLAG AND i.disabled_flag=G_NO_FLAG AND
3369            i.deleted_flag=G_NO_FLAG THEN
3370           RETURN G_CX_VALID;
3371         END IF;
3372       END LOOP;
3373 
3374     END IF;
3375 
3376     IF l_undeleted_exist=FALSE THEN
3377       RETURN G_CX_MUST_BE_DELETED;
3378     ELSE
3379       RETURN G_CX_INVALID;
3380     END IF;
3381   END get_CX_Button_Status;
3382 
3383   --
3384   -- refresh expl ids in UI tables
3385   --
3386   PROCEDURE sync_Expl_Ids(p_node    IN CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE,
3387                           p_ui_node IN CZ_UI_PAGE_ELEMENTS%ROWTYPE,
3388                           p_expl_id IN NUMBER) IS
3389 
3390   BEGIN
3391 
3392 
3393     IF p_expl_id <> p_ui_node.model_ref_expl_id THEN
3394       UPDATE CZ_UI_PAGE_ELEMENTS
3395          SET model_ref_expl_id=p_expl_id
3396        WHERE ui_def_id=p_ui_node.ui_def_id AND
3397              page_id=p_ui_node.page_id AND
3398              element_id=p_ui_node.element_id;
3399 
3400       IF p_ui_node.parent_element_id IS NULL THEN
3401         UPDATE CZ_UI_PAGES
3402            SET pagebase_expl_node_id=p_expl_id
3403          WHERE page_id=p_ui_node.page_id AND
3404                ui_def_id=p_ui_node.ui_def_id;
3405          IF SQL%ROWCOUNT>0 THEN
3406            UPDATE CZ_UI_PAGE_SETS
3407               SET pagebase_expl_node_id=p_expl_id
3408             WHERE ui_def_id=g_UI_Context.ui_def_id
3409                   AND persistent_node_id=p_ui_node.persistent_node_id
3410                   AND deleted_flag=G_NO_FLAG;
3411          END IF;
3412       END IF;
3413 
3414       UPDATE CZ_UI_PAGE_REFS
3415          SET target_expl_node_id=p_expl_id
3416        WHERE ui_def_id=p_ui_node.ui_def_id AND
3417              target_persistent_node_id=p_node.persistent_node_id;
3418 
3419     END IF;
3420   END sync_Expl_Ids;
3421 
3422   --
3423   -- refresh expl ids in UI tables
3424   --
3425   PROCEDURE sync_Expl_Ids(p_node    IN CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE,
3426                           p_ui_node IN CZ_UI_PAGE_ELEMENTS%ROWTYPE) IS
3427     l_model_ref_expl_id NUMBER;
3428   BEGIN
3429     l_model_ref_expl_id := get_Expl_Id(p_model_id     => p_node.devl_project_id,
3430                                        p_ps_node_id   => p_node.ps_node_id,
3431                                        p_component_id => p_node.component_id,
3432                                        p_ps_node_type => p_node.ps_node_type);
3433     sync_Expl_Ids(p_node, p_ui_node, l_model_ref_expl_id);
3434   END;
3435 
3436 
3437 
3438   --
3439   -- replace Template Id of UI node p_ui_node
3440   --
3441   PROCEDURE replace_Template_Id(p_ui_node          IN CZ_UI_PAGE_ELEMENTS%ROWTYPE,
3442                                 p_model_node       IN CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE) IS
3443 
3444     l_element_signature_id NUMBER;
3445     l_counter              NUMBER;
3446 
3447   BEGIN
3448 
3449     SELECT COUNT(*)+1 INTO l_counter FROM CZ_UI_PAGE_ELEMENTS
3450     WHERE ui_def_id=p_ui_node.ui_def_id AND
3451            page_id=p_ui_node.page_id AND
3452            element_signature_id=p_model_node.root_element_signature_id AND
3453            deleted_flag NOT IN(G_YES_FLAG,G_MARK_TO_DELETE, G_LIMBO_FLAG);
3454 
3455     UPDATE CZ_UI_PAGE_ELEMENTS
3456        SET ctrl_template_id=p_model_node.template_id,
3457            element_signature_id=p_model_node.root_element_signature_id,
3458            deleted_flag=DECODE(deleted_flag,G_MARK_TO_ADD,G_MARK_TO_ADD,G_MARK_TO_REFRESH),
3459            name=p_model_node.template_name||' - '||l_counter
3460      WHERE ui_def_id=p_ui_node.ui_def_id AND
3461            page_id=p_ui_node.page_id AND
3462            element_id=p_ui_node.element_id;
3463 
3464     mark_UI_Page_As_Refreshed(p_ui_node.page_id, p_ui_node.ui_def_id);
3465 
3466   END replace_Template_Id;
3467 
3468   --
3469   -- remove common attributes in case when we attach template
3470   -- starting with DOM node p_node
3471   --   Parameters : p_node - identifies DOM node of subtree's root
3472   --
3473   PROCEDURE remove_TopLevel_Attributes(p_node xmldom.DOMNode) IS
3474     l_root_elem xmldom.DOMElement;
3475   BEGIN
3476     l_root_elem := xmldom.makeElement(p_node);
3477     FOR i IN g_toplevel_attr_tbl.FIRST .. g_toplevel_attr_tbl.LAST
3478     LOOP
3479       BEGIN
3480         xmldom.removeAttribute(l_root_elem, g_toplevel_attr_tbl(i));
3481       EXCEPTION
3482         WHEN OTHERS THEN
3483           NULL;
3484       END;
3485     END LOOP;
3486   END remove_TopLevel_Attributes;
3487 
3488   --
3489   -- remove non user attributes from a given XML node
3490   --
3491   PROCEDURE remove_Non_User_Attributes(p_node xmldom.DOMNode) IS
3492 
3493     l_root_elem    xmldom.DOMElement;
3494     l_node_map_tbl xmldom.DOMNamedNodeMap;
3495     l_node_attr    xmldom.DOMNode;
3496     l_attr_name    VARCHAR2(32000);
3497     l_length       NUMBER;
3498 
3499   BEGIN
3500 
3501     l_root_elem := xmldom.makeElement(p_node);
3502 
3503     l_node_map_tbl := xmldom.getAttributes(p_node);
3504     IF (xmldom.isNull(l_node_map_tbl) = FALSE) THEN
3505       l_length := xmldom.getLength(l_node_map_tbl);
3506       --
3507       -- loop through attributes
3508       --
3509       FOR i IN 0 .. l_length - 1
3510       LOOP
3511         l_node_attr := xmldom.item(l_node_map_tbl, i);
3512 
3513         IF NOT(xmldom.isNull(l_node_attr)) THEN
3514           l_attr_name := xmldom.getNodeName(l_node_attr);
3515           IF (lower(l_attr_name) not like ('user:attribute%') AND
3516              lower(l_attr_name) <> G_ID_ATTRIBUTE) OR
3517              lower(l_attr_name)=G_USER_ATTRIBUTE10_NAME  THEN
3518              xmldom.removeAttribute(l_root_elem, l_attr_name);
3519           END IF;
3520         END IF;
3521       END LOOP;
3522     END IF;
3523 
3524   EXCEPTION
3525     WHEN OTHERS THEN
3526       DEBUG('remove_Non_User_Attributes() : '||SQLERRM);
3527   END remove_Non_User_Attributes;
3528 
3529   --
3530   -- clear the cache
3531   --
3532   PROCEDURE flash_Cache IS
3533   BEGIN
3534     g_model_nodes_tbl.DELETE;
3535     g_ui_page_elements_tbl.DELETE;
3536     g_ps_node_persist_id_tbl.DELETE;
3537     g_ui_pages_tbl.DELETE;
3538     g_ui_page_refs_tbl.DELETE;
3539     g_ui_refs_tbl.DELETE;
3540     g_ui_page_sets_tbl.DELETE;
3541     g_ref_expls_tbl.DELETE;
3542     g_ui_action_ids_tbl.DELETE;
3543   END flash_Cache;
3544 
3545   --
3546   -- cache Mode nodes and UI data
3547   --
3548   PROCEDURE populate_Cache IS
3549 
3550   BEGIN
3551 
3552     flash_Cache;
3553 
3554     FOR i IN (SELECT DISTINCT *
3555                 FROM CZ_UITEMPLS_FOR_PSNODES_V
3556                 WHERE ui_def_id=g_UI_Context.from_master_template_id AND
3557                       devl_project_id = g_UI_Context.devl_project_id)
3558     LOOP
3559       g_model_nodes_tbl(i.ps_node_id) := i;
3560       g_ps_node_persist_id_tbl(i.persistent_node_id) := i.ps_node_id;
3561     END LOOP;
3562 
3563     FOR i IN(SELECT model_ref_expl_id,referring_node_id,component_id
3564                FROM CZ_MODEL_REF_EXPLS
3565               WHERE model_id=g_UI_Context.devl_project_id AND
3566                     deleted_flag=G_NO_FLAG)
3567     LOOP
3568       IF i.referring_node_id IS NOT NULL THEN
3569         g_ref_expls_tbl(i.referring_node_id) := i.model_ref_expl_id;
3570       ELSE
3571         g_ref_expls_tbl(i.component_id) := i.model_ref_expl_id;
3572       END IF;
3573     END LOOP;
3574 
3575     FOR i IN (SELECT *
3576                 FROM CZ_UI_PAGES
3577                WHERE ui_def_id = g_UI_Context.ui_def_id AND
3578                      deleted_flag = G_NO_FLAG)
3579     LOOP
3580       g_ui_pages_tbl(i.page_id) := i;
3581 
3582       IF NOT(g_ui_pages_counter_tbl.EXISTS(g_UI_Context.ui_def_id)) THEN
3583         g_ui_pages_counter_tbl(g_UI_Context.ui_def_id) := 1;
3584       ELSE
3585         g_ui_pages_counter_tbl(g_UI_Context.ui_def_id) := g_ui_pages_counter_tbl(g_UI_Context.ui_def_id) + 1;
3586       END IF;
3587     END LOOP;
3588 
3589     FOR i IN (SELECT *
3590                 FROM CZ_UI_PAGE_ELEMENTS
3591                WHERE ui_def_id = g_UI_Context.ui_def_id AND
3592                      deleted_flag = G_NO_FLAG)
3593     LOOP
3594       BEGIN
3595         g_ui_page_elements_tbl(TO_NUMBER(i.element_id)) := i;
3596       EXCEPTION
3597         WHEN OTHERS THEN
3598           --
3599           -- if element_id is not a number it will not be cached
3600           --
3601           NULL;
3602       END;
3603     END LOOP;
3604 
3605     FOR i IN (SELECT *
3606                 FROM CZ_UI_PAGE_REFS
3607                WHERE ui_def_id = g_UI_Context.ui_def_id AND
3608                      deleted_flag = G_NO_FLAG)
3609     LOOP
3610       g_ui_page_refs_tbl(i.page_ref_id) := i;
3611     END LOOP;
3612 
3613     FOR i IN (SELECT *
3614                 FROM CZ_UI_PAGE_SETS
3615                WHERE ui_def_id = g_UI_Context.ui_def_id AND
3616                      deleted_flag = G_NO_FLAG)
3617     LOOP
3618       g_ui_page_sets_tbl(i.page_set_id) := i;
3619     END LOOP;
3620 
3621     FOR i IN (SELECT ref_persistent_node_id
3622                 FROM CZ_UI_REFS
3623                WHERE ui_def_id = g_UI_Context.ui_def_id AND
3624                      deleted_flag = G_NO_FLAG)
3625     LOOP
3626       g_ui_refs_tbl(i.ref_persistent_node_id) := i.ref_persistent_node_id;
3627     END LOOP;
3628 
3629     FOR i IN (SELECT element_id, ui_action_id
3630                 FROM CZ_UI_ACTIONS
3631                WHERE ui_def_id = g_UI_Context.ui_def_id AND
3632                      deleted_flag = G_NO_FLAG)
3633     LOOP
3634       BEGIN
3635         g_ui_action_ids_tbl(TO_NUMBER(i.element_id)) := i.ui_action_id;
3636       EXCEPTION
3637         WHEN OTHERS THEN
3638           NULL;
3639       END;
3640     END LOOP;
3641 
3642   END populate_Cache;
3643 
3644   ---------------------------------------------------------------------
3645   -------------------------XML Parsing Part ---------------------------
3646   ---------------------------------------------------------------------
3647 
3648   --
3649   -- returns value of a given attribute
3650   -- Parameters :
3651   --   p_node  - DOM node
3652   --   p_attr_name - attribute name
3653   -- Return : attribute value as VARCHAR2 string
3654   --
3655   FUNCTION get_Attribute_Value(p_node      IN xmldom.DOMNode,
3656                                p_attr_name IN VARCHAR2) RETURN VARCHAR2 IS
3657 
3658     l_node_map_tbl xmldom.DOMNamedNodeMap;
3659     l_node_attr    xmldom.DOMNode;
3660     l_attr_value   VARCHAR2(32000);
3661     l_length       NUMBER;
3662 
3663   BEGIN
3664     IF xmldom.IsNull(p_node) THEN
3665       RETURN NULL;
3666     END IF;
3667     l_node_map_tbl := xmldom.getAttributes(p_node);
3668 
3669     IF (xmldom.isNull(l_node_map_tbl) = FALSE) THEN
3670       l_length := xmldom.getLength(l_node_map_tbl);
3671       --
3672       -- loop through attributes
3673       --
3674       FOR i IN 0 .. l_length - 1
3675       LOOP
3676         l_node_attr := xmldom.item(l_node_map_tbl, i);
3677         IF xmldom.getNodeName(l_node_attr) = p_attr_name THEN
3678           l_attr_value := xmldom.getNodeValue(l_node_attr);
3679           EXIT;
3680         END IF;
3681       END LOOP;
3682     END IF;
3683     RETURN l_attr_value;
3684   END get_Attribute_Value;
3685 
3686   FUNCTION attribute_Value(p_node      IN xmldom.DOMNode,
3687                                 p_attr_name IN VARCHAR2) RETURN VARCHAR2 IS
3688 
3689     l_node_map_tbl xmldom.DOMNamedNodeMap;
3690     l_node_attr    xmldom.DOMNode;
3691     l_attr_value   VARCHAR2(32000);
3692     l_length       NUMBER;
3693 
3694   BEGIN
3695     l_node_map_tbl := xmldom.getAttributes(p_node);
3696     IF (xmldom.isNull(l_node_map_tbl) = FALSE) THEN
3697       l_length := xmldom.getLength(l_node_map_tbl);
3698       --
3699       -- loop through attributes
3700       --
3701       FOR i IN 0 .. l_length - 1
3702       LOOP
3703         l_node_attr := xmldom.item(l_node_map_tbl, i);
3704         IF xmldom.getNodeName(l_node_attr) = p_attr_name THEN
3705           l_attr_value := xmldom.getNodeValue(l_node_attr);
3706           IF l_attr_value IS NULL THEN
3707             RETURN NULL;
3708           ELSE
3709             RETURN l_attr_value;
3710           END IF;
3711         END IF;
3712       END LOOP;
3713     END IF;
3714     RETURN '*';
3715   END attribute_Value;
3716 
3717   --
3718   -- return value of specified user atribute
3719   --
3720   FUNCTION get_User_Attribute(p_user_attribute_value IN VARCHAR2,
3721                               p_cz_attribute_name    IN VARCHAR2)
3722     RETURN VARCHAR2 IS
3723 
3724     l_ind1    NUMBER;
3725     l_ind2    NUMBER;
3726     l_substr  VARCHAR2(32000);
3727 
3728   BEGIN
3729 
3730     l_ind1 := INSTR(p_user_attribute_value,p_cz_attribute_name);
3731 
3732     IF l_ind1 > 0 THEN
3733       l_substr := SUBSTR(p_user_attribute_value,l_ind1+LENGTH(p_cz_attribute_name)+LENGTH('='));
3734       l_ind2 := INSTR(l_substr, '|');
3735       IF l_ind2 > 0 THEN
3736         RETURN SUBSTR(l_substr,1,l_ind2-1);
3737       ELSE
3738         RETURN l_substr;
3739       END IF;
3740     ELSE
3741       RETURN NULL;
3742     END IF;
3743   END get_User_Attribute;
3744 
3745   --
3746   -- find DOM node by persistent_node_id
3747   --
3748   FUNCTION find_XML_Node_By_Attribute(p_subtree_doc        xmldom.DOMDocument,
3749                                       p_attribute_name     IN VARCHAR2,
3750                                       p_attribute_value    IN VARCHAR2,
3751                                       p_in_user_attributes IN VARCHAR2 DEFAULT NULL)
3752     RETURN xmldom.DOMNode IS
3753 
3754     l_node            xmldom.DOMNode;
3755     l_nodeslist       xmldom.DOMNodeList;
3756     l_empty_xml_node  xmldom.DOMNode;
3757     l_length          NUMBER;
3758     l_attribute_value VARCHAR2(32000);
3759 
3760   BEGIN
3761 
3762     IF p_attribute_name=G_ID_ATTRIBUTE AND g_page_elements_tbl.EXISTS(p_attribute_value) THEN
3763       RETURN g_page_elements_tbl(p_attribute_value);
3764     END IF;
3765 
3766     --
3767     -- here we don't need to know about hierachy of nodes
3768     -- so we just need to get list of all nodes of XML subtree
3769     --
3770     l_nodeslist := xmldom.getElementsByTagName(p_subtree_doc, '*');
3771     l_length    := xmldom.getLength(l_nodeslist);
3772 
3773     l_node := xmldom.makeNode(xmldom.getDocumentElement(p_subtree_doc));
3774 
3775     l_attribute_value := get_Attribute_Value(l_node, p_attribute_name);
3776 
3777     IF p_in_user_attributes=G_YES_FLAG THEN
3778       l_attribute_value := get_Attribute_Value(l_node, G_USER_ATTRIBUTE4_NAME);
3779       l_attribute_value :=  get_User_Attribute(l_attribute_value, p_attribute_name);
3780     ELSE
3781       l_attribute_value := get_Attribute_Value(l_node, p_attribute_name);
3782     END IF;
3783 
3784     IF l_attribute_value = p_attribute_value THEN
3785       RETURN l_node;
3786     END IF;
3787 
3788     --
3789     -- scan subtree and substitute macros "%" to real values
3790     --
3791     FOR i IN 0 .. l_length - 1
3792     LOOP
3793       l_node            := xmldom.item(l_nodeslist, i);
3794 
3795       IF p_in_user_attributes=G_YES_FLAG THEN
3796         l_attribute_value := get_Attribute_Value(l_node, G_USER_ATTRIBUTE4_NAME);
3797         l_attribute_value :=  get_User_Attribute(l_attribute_value, p_attribute_name);
3798       ELSE
3799         l_attribute_value := get_Attribute_Value(l_node, p_attribute_name);
3800       END IF;
3801 
3802       IF l_attribute_value = p_attribute_value THEN
3803         RETURN l_node;
3804       END IF;
3805     END LOOP;
3806     RETURN l_empty_xml_node;
3807 
3808   END find_XML_Node_By_Attribute;
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 getUIContents(p_node xmldom.DOMNode,
3818                          p_return_empty_node VARCHAR2 DEFAULT NULL) RETURN xmldom.DOMNode IS
3819     l_child_nodes_tbl xmldom.DOMNodeList;
3820     l_child_xml_node  xmldom.DOMNode;
3821     l_empty_xml_node  xmldom.DOMNode;
3822     l_length          NUMBER;
3823   BEGIN
3824     l_child_nodes_tbl := xmldom.getChildNodes(p_node);
3825     l_length          := xmldom.getLength(l_child_nodes_tbl);
3826     FOR k IN 0 .. l_length - 1
3827     LOOP
3828       --
3829       -- get next child DOM node
3830       --
3831       l_child_xml_node := xmldom.item(l_child_nodes_tbl, k);
3832 
3833       IF UPPER(xmldom.getNodeName(l_child_xml_node)) =
3834          UPPER(G_UI_CONTENTS_TAG) THEN
3835         RETURN l_child_xml_node;
3836       END IF;
3837     END LOOP;
3838 
3839     IF p_return_empty_node IS NULL OR p_return_empty_node=G_NO_FLAG THEN
3840       RETURN p_node;
3841     ELSE
3842       RETURN l_empty_xml_node;
3843     END IF;
3844   END getUIContents;
3845 
3846   FUNCTION findChildXMLTag(p_node    xmldom.DOMNode,
3847                            p_xml_tag VARCHAR2) RETURN xmldom.DOMNode IS
3848     l_child_nodes_tbl xmldom.DOMNodeList;
3849     l_child_xml_node  xmldom.DOMNode;
3850     l_empty_xml_node  xmldom.DOMNode;
3851     l_length          NUMBER;
3852   BEGIN
3853     l_child_nodes_tbl := xmldom.getChildNodes(p_node);
3854     l_length          := xmldom.getLength(l_child_nodes_tbl);
3855     FOR k IN 0 .. l_length - 1
3856     LOOP
3857       --
3858       -- get next child DOM node
3859       --
3860       l_child_xml_node := xmldom.item(l_child_nodes_tbl, k);
3861 
3862       IF UPPER(xmldom.getNodeName(l_child_xml_node)) =
3863          UPPER(p_xml_tag) THEN
3864         RETURN l_child_xml_node;
3865       END IF;
3866     END LOOP;
3867 
3868     RETURN l_empty_xml_node;
3869 
3870   END findChildXMLTag;
3871 
3872   --
3873   -- return DOM node of top level tag <ui:contents>
3874   -- if node does not contain p_tag node then return the node itself ( p_node )
3875   -- Parameters :
3876   --  p_node - DOM node
3877   -- Return : top level DOM node with XML tag = p_tag
3878   --
3879   FUNCTION get_Col_UIContents(p_node       xmldom.DOMNode,
3880                               p_col_number NUMBER) RETURN xmldom.DOMNode IS
3881     l_child_nodes_tbl    xmldom.DOMNodeList;
3882     l_child_xml_node     xmldom.DOMNode;
3883     l_first_ui_contents  xmldom.DOMNode;
3884     l_second_ui_contents xmldom.DOMNode;
3885     l_rowlayout          xmldom.DOMNode;
3886     l_length             NUMBER;
3887     l_counter            NUMBER;
3888     l_id_attribute       VARCHAR2(255);
3889   BEGIN
3890 
3891     l_first_ui_contents := getUIContents(p_node);
3892 
3893     l_child_nodes_tbl := xmldom.getChildNodes(l_first_ui_contents);
3894     l_length          := xmldom.getLength(l_child_nodes_tbl);
3895     FOR k IN 0 .. l_length - 1
3896     LOOP
3897       --
3898       -- get next child DOM node
3899       --
3900       l_child_xml_node := xmldom.item(l_child_nodes_tbl, k);
3901 
3902       IF UPPER(xmldom.getNodeName(l_child_xml_node)) =
3903          UPPER('oa:rowLayout') THEN
3904 
3905     l_id_attribute := get_Attribute_Value(l_child_xml_node,
3906                                             G_ID_ATTRIBUTE);
3907 
3908         EXIT;
3909       END IF;
3910     END LOOP;
3911 
3912     l_second_ui_contents := getUIContents(l_child_xml_node);
3913 
3914     l_counter:= 0;
3915 
3916     l_child_nodes_tbl := xmldom.getChildNodes(l_second_ui_contents);
3917     l_length          := xmldom.getLength(l_child_nodes_tbl);
3918     FOR k IN 0 .. l_length - 1
3919     LOOP
3920       --
3921       -- get next child DOM node
3922       --
3923       l_child_xml_node := xmldom.item(l_child_nodes_tbl, k);
3924 
3925       IF UPPER(xmldom.getNodeName(l_child_xml_node)) =
3926          UPPER('oa:cellFormat') THEN
3927         l_counter := l_counter + 1;
3928         IF l_counter=p_col_number THEN
3929 
3930     l_id_attribute := get_Attribute_Value(l_child_xml_node,
3931                                             G_ID_ATTRIBUTE);
3932 
3933           RETURN getUIContents(l_child_xml_node);
3934         END IF;
3935 
3936       END IF;
3937     END LOOP;
3938 
3939     RETURN p_node;
3940 
3941   END get_Col_UIContents;
3942 
3943   --
3944   -- find DOM node by persistent_node_id
3945   --
3946   FUNCTION find_Table_Of_XML_Node(p_parent_xml_node xmldom.DOMNode,
3947                                   p_element_id      IN VARCHAR2)
3948     RETURN xmldom.DOMNode IS
3949 
3950     l_child_xml_node        xmldom.DOMNode;
3951     l_table_child_xml_node  xmldom.DOMNode;
3952     l_empty_xml_node        xmldom.DOMNode;
3953     l_uicont_xml_node       xmldom.DOMNode;
3954     l_ui_contents_xml_node  xmldom.DOMNode;
3955     l_child_nodes_tbl       xmldom.DOMNodeList;
3956     l_table_child_nodes_tbl xmldom.DOMNodeList;
3957     l_length                NUMBER;
3958     l_table_child_length    NUMBER;
3959 
3960   BEGIN
3961 
3962     IF xmldom.getNodeName(p_parent_xml_node) IN('oa:header','oa:stackLayout',
3963                                                 'oa:flowLayout','oa:tableLayout') THEN
3964 
3965       l_ui_contents_xml_node := getUIContents(p_parent_xml_node);
3966     ELSE
3967       l_ui_contents_xml_node := p_parent_xml_node;
3968     END IF;
3969 
3970     --
3971     -- get child nodes of DOM node : p_node
3972     --
3973     l_child_nodes_tbl := xmldom.getChildNodes(l_ui_contents_xml_node);
3974 
3975     --
3976     -- we need to get length of array of child nodes
3977     -- to go through the array in loop
3978     --
3979     l_length := xmldom.getLength(l_child_nodes_tbl);
3980 
3981     FOR k IN 0 .. l_length - 1
3982     LOOP
3983       --
3984       -- get next child DOM node
3985       --
3986       l_child_xml_node := xmldom.item(l_child_nodes_tbl, k);
3987 
3988       IF (get_Attribute_Value(l_child_xml_node, G_USER_ATTRIBUTE5_NAME) = 'TABLELAYOUT_FOR_UI_GEN') THEN
3989 
3990         BEGIN
3991           l_uicont_xml_node := getUIContents(l_child_xml_node);
3992 
3993           l_table_child_nodes_tbl := xmldom.getChildNodes(l_uicont_xml_node);
3994           l_table_child_length := xmldom.getLength(l_table_child_nodes_tbl);
3995 
3996           FOR m IN 0 .. l_table_child_length - 1
3997           LOOP
3998              l_table_child_xml_node := xmldom.item(l_table_child_nodes_tbl, m);
3999 
4000              IF get_Attribute_Value(l_table_child_xml_node, G_ID_ATTRIBUTE) = p_element_id THEN
4001                 RETURN l_uicont_xml_node;
4002              END IF;
4003           END LOOP;
4004         END;
4005       END IF;
4006     END LOOP;
4007     RETURN l_empty_xml_node;
4008   EXCEPTION
4009     WHEN OTHERS THEN
4010       DEBUG('find_Table_Of_XML_Node() : '||SQLERRM);
4011       RETURN l_empty_xml_node;
4012   END find_Table_Of_XML_Node;
4013 
4014   --
4015   -- find a given xml tag up on the tree
4016   --
4017   FUNCTION find_Element_Id_Of_XMLTag(p_xml_node xmldom.DOMNode,
4018                                      p_tag_name VARCHAR2 ) RETURN VARCHAR2 IS
4019     l_node       xmldom.DOMNode;
4020     l_hgrid_node xmldom.DOMNode;
4021     PROCEDURE find_hgrid(p_node xmldom.DOMNode) IS
4022     BEGIN
4023       IF xmldom.isNull(p_node) THEN
4024         RETURN;
4025       END IF;
4026       l_node := xmldom.getParentNode(p_node);
4027       IF lower(xmldom.getNodeName(l_node))=lower(p_tag_name) THEN
4028         l_hgrid_node := l_node;
4029       ELSE
4030         find_hgrid(l_node);
4031       END IF;
4032     END find_hgrid;
4033   BEGIN
4034     find_hgrid(p_xml_node);
4035     RETURN get_Attribute_Value(l_hgrid_node,
4036                                G_ID_ATTRIBUTE);
4037   EXCEPTION
4038     WHEN OTHERS THEN
4039       DEBUG('find_Element_Id_Of_XMLTag() : '||SQLERRM);
4040       RETURN NULL;
4041   END find_Element_Id_Of_XMLTag;
4042 
4043 
4044   FUNCTION find_AMN_Element_Above(p_xml_node xmldom.DOMNode) RETURN VARCHAR2 IS
4045 
4046     l_element_id CZ_UI_PAGE_ELEMENTS.element_id%TYPE;
4047 
4048     PROCEDURE AMN_Element_Above(p_node xmldom.DOMNode) IS
4049 
4050       l_node             xmldom.DOMNode;
4051       l_next_node        xmldom.DOMNode;
4052       l_user_attribute1  VARCHAR2(32000);
4053 
4054     BEGIN
4055 
4056       l_node := xmldom.getParentNode(p_node);
4057 
4058       IF xmldom.isNull(l_node) THEN
4059         l_element_id := get_Attribute_Value(p_node, G_ID_ATTRIBUTE);
4060         RETURN;
4061       END IF;
4062 
4063       l_user_attribute1 := get_Attribute_Value(l_node, G_USER_ATTRIBUTE1_NAME);
4064 
4065       IF NOT(l_user_attribute1='model_path=%modelPath' OR l_user_attribute1 IS NULL) THEN
4066 
4067          l_element_id := get_Attribute_Value(l_node, G_ID_ATTRIBUTE);
4068          RETURN;
4069 
4070       ELSE
4071 
4072          l_next_node := xmldom.getParentNode(l_node);
4073 
4074          IF xmldom.isNull(l_next_node) THEN
4075            l_element_id := get_Attribute_Value(l_node, G_ID_ATTRIBUTE);
4076            RETURN;
4077          ELSE
4078            AMN_Element_Above(l_node);
4079          END IF;
4080 
4081       END IF;
4082 
4083     END AMN_Element_Above;
4084 
4085   BEGIN
4086 
4087     AMN_Element_Above(p_xml_node);
4088 
4089     RETURN l_element_id;
4090 
4091   END find_AMN_Element_Above;
4092 
4093 
4094   --
4095   -- parse or export/parse JRAD document
4096   -- Parameters :
4097   --   p_doc_full_name - full JRAD name of the document
4098   --
4099   FUNCTION parse_JRAD_Document(p_doc_full_name IN VARCHAR2)
4100     RETURN xmldom.DOMDocument IS
4101 
4102     l_buffer         VARCHAR2(32000);
4103     l_lob_loc        CLOB;
4104     l_amount         BINARY_INTEGER;
4105     l_position       INTEGER := 1;
4106     l_xmldoc         xmldom.DOMDocument;
4107     l_exportfinished BOOLEAN;
4108 
4109   BEGIN
4110 
4111     DBMS_LOB.CREATETEMPORARY(l_lob_loc, TRUE);
4112     DBMS_LOB.OPEN(l_lob_loc, DBMS_LOB.LOB_READWRITE);
4113 
4114     l_buffer := jdr_utils.ExportDocument(p_document       => p_doc_full_name,
4115                                          p_exportfinished => l_exportfinished);
4116 
4117     IF l_buffer IS NULL THEN
4118       RETURN l_xmldoc;
4119     END IF;
4120 
4121     l_amount := LENGTH(l_buffer);
4122 
4123     DBMS_LOB.WRITE(l_lob_loc, l_amount, l_position, l_buffer);
4124     l_position := l_position + l_amount;
4125 
4126     IF l_exportfinished=FALSE THEN
4127     LOOP
4128       l_buffer := jdr_utils.ExportDocument(p_document       => NULL,
4129                                            p_exportfinished => l_exportfinished);
4130 
4131       IF l_buffer IS NULL THEN
4132         EXIT;
4133       END IF;
4134 
4135       l_amount := LENGTH(l_buffer);
4136 
4137       DBMS_LOB.WRITE(l_lob_loc, l_amount, l_position, l_buffer);
4138       l_position := l_position + l_amount;
4139 
4140       IF l_buffer IS NULL OR l_exportfinished THEN
4141         EXIT;
4142       END IF;
4143     END LOOP;
4144 
4145     END IF;
4146 
4147     xmlparser.parseCLOB(g_PARSER, l_lob_loc);
4148 
4149     l_xmldoc := xmlparser.getDocument(g_PARSER);
4150 
4151     DBMS_LOB.CLOSE(l_lob_loc);
4152     DBMS_LOB.FREETEMPORARY(l_lob_loc);
4153 
4154     RETURN l_xmldoc;
4155 
4156   EXCEPTION
4157     WHEN OTHERS THEN
4158       add_Error_Message(p_message_name => 'CZ_WRONG_UI_TEMPLATE',
4159                         p_token_name   => 'UI_TEMPLATE',
4160                         p_token_value  => p_doc_full_name,
4161                         p_fatal_error  => TRUE);
4162       RAISE WRONG_UI_TEMPLATE;
4163   END parse_JRAD_Document;
4164 
4165   --
4166   -- set CZ Attributes for a given DOM node
4167   -- Parameters : p_dom_element     - DOM Element which identifies DOM node
4168   --              p_attribute_name  - attribute name
4169   --              p_attribute_value - attribute value
4170   --
4171   PROCEDURE set_Attribute(p_dom_element     xmldom.DOMElement,
4172                           p_attribute_name  IN VARCHAR2,
4173                           p_attribute_value IN VARCHAR2) IS
4174 
4175   BEGIN
4176     xmldom.setAttribute(p_dom_element, p_attribute_name, p_attribute_value);
4177   END set_Attribute;
4178 
4179   --
4180   -- set CZ Attributes for a given DOM node
4181   -- Parameters : p_dom_element     - DOM Element which identifies DOM node
4182   --              p_attribute_name  - attribute name
4183   --              p_attribute_value - attribute value
4184   --
4185   PROCEDURE set_Attribute(p_dom_node        xmldom.DOMNode,
4186                           p_attribute_name  IN VARCHAR2,
4187                           p_attribute_value IN VARCHAR2) IS
4188 
4189   BEGIN
4190     xmldom.setAttribute(xmldom.makeElement(p_dom_node), p_attribute_name, p_attribute_value);
4191   END set_Attribute;
4192 
4193   --
4194   -- set internal CZ attributes within "user:attribute1"
4195   --
4196   PROCEDURE set_User_Attribute(p_cz_attribute_name    IN VARCHAR2,
4197                                p_cz_attribute_value   IN VARCHAR2,
4198                                p_add_if_not_present   IN BOOLEAN DEFAULT FALSE,
4199                                px_xml_attribute_value IN OUT NOCOPY VARCHAR2) IS
4200 
4201     l_str            VARCHAR2(4000);
4202     l_sub_str        VARCHAR2(4000);
4203     l_next_equal_ind NUMBER;
4204     l_next_ind       NUMBER;
4205     l_ind            NUMBER;
4206 
4207   BEGIN
4208 
4209     --
4210     -- get string of CZ user attributes
4211     --
4212     l_str := px_xml_attribute_value;
4213     l_ind := INSTR(l_str, p_cz_attribute_name);
4214 
4215     IF l_ind > 0 THEN
4216 
4217       l_sub_str  := SUBSTR(l_str, l_ind);
4218       l_next_ind := INSTR(l_sub_str, '|');
4219 
4220       l_next_equal_ind := INSTR(l_sub_str, '=');
4221 
4222       IF l_next_equal_ind > 1 THEN
4223 
4224         IF l_next_ind > 0 THEN
4225           px_xml_attribute_value := SUBSTR(l_str, 1,  l_ind + l_next_equal_ind - 1) ||
4226                                     p_cz_attribute_value || SUBSTR(l_sub_str, l_next_ind);
4227         ELSE
4228           px_xml_attribute_value := SUBSTR(l_str, 1,l_ind + l_next_equal_ind - 1) || p_cz_attribute_value;
4229         END IF;
4230 
4231       END IF;
4232     ELSE
4233       NULL;
4234     END IF;
4235 
4236   END set_User_Attribute;
4237   --vsingava IM-ER
4238   PROCEDURE set_user_attribute(p_xml_node xmldom.DOMNode,
4239                                p_jrad_attribute_name VARCHAR2,
4240                                p_cz_attribute_name VARCHAR2,
4241                                p_attribute_value VARCHAR2) IS
4242     l_user_attribute VARCHAR2(2000);
4243     l_xml_node xmldom.DOMNode;
4244   BEGIN
4245 
4246     l_user_attribute := get_Attribute_Value(p_xml_node,
4247                                             p_jrad_attribute_name);
4248 
4249 		set_User_Attribute(p_cz_attribute_name    => p_cz_attribute_name,
4250                        p_cz_attribute_value   => p_attribute_value,
4251                        p_add_if_not_present   => TRUE,
4252                        px_xml_attribute_value => l_user_attribute);
4253 
4254     set_Attribute(p_xml_node,p_jrad_attribute_name, l_user_attribute);
4255 
4256   END set_user_attribute;
4257 
4258   -- Removes the indicated CZ attribute from the indicated Jrad User attribute and set the
4259   -- remainder back on to the node
4260   FUNCTION remove_user_attribute(p_xml_node xmldom.DOMNode,
4261                                  p_jrad_attribute_name VARCHAR2,
4262                                  p_cz_attribute_name VARCHAR2) RETURN VARCHAR2 IS
4263     l_user_attribute VARCHAR2(2000);
4264     l_cz_attr_val VARCHAR2(2000);
4265     l_substr VARCHAR2(2000);
4266     l_length NUMBER;
4267     l_ind1 NUMBER;
4268     l_ind2 NUMBER;
4269   BEGIN
4270 
4271 
4272     l_user_attribute := get_Attribute_Value(p_xml_node,
4273                                             p_jrad_attribute_name);
4274 
4275     l_ind1 := INSTR(l_user_attribute, p_cz_attribute_name);
4276 
4277     IF l_ind1 > 0 THEN
4278       l_length := LENGTH(p_cz_attribute_name)+LENGTH('=');
4279       l_substr := SUBSTR(l_user_attribute,l_ind1+l_length);
4280       l_ind2 := INSTR(l_substr, '|');
4281       IF l_ind2 > 0 THEN
4282         l_cz_attr_val := SUBSTR(l_substr,1,l_ind2-1);
4283         l_user_attribute := SUBSTR(l_user_attribute, 1, l_ind1-1) || SUBSTR(l_user_attribute, l_ind1 + l_length + l_ind2);
4284       ELSE
4285         l_cz_attr_val := l_substr;
4286         l_user_attribute := SUBSTR(l_user_attribute, 1, l_ind1-1);
4287       END IF;
4288     ELSE
4289       l_substr := NULL;
4290     END IF;
4291 
4292     IF l_substr IS NOT NULL THEN
4293       set_Attribute(p_xml_node,p_jrad_attribute_name, l_user_attribute);
4294     END IF;
4295 
4296     RETURN l_substr;
4297 
4298   END remove_user_attribute;
4299 
4300   --
4301   -- this procedure adds CZ_UI_PAGE_ELEMENTS records
4302   -- which correspond to first level UI template references
4303   --
4304   PROCEDURE add_Extends_Refs(p_xml_node        xmldom.DOMNode,
4305                              p_ui_node         IN CZ_UI_PAGE_ELEMENTS%ROWTYPE) IS
4306 
4307     l_seq_nbr                      NUMBER;
4308     l_template_id                  NUMBER;
4309     l_template_name                CZ_UI_TEMPLATES.template_name%TYPE;
4310     l_id_attribute_value           CZ_UI_PAGE_ELEMENTS.element_id%TYPE;
4311     l_element_id                   CZ_UI_PAGE_ELEMENTS.element_id%TYPE;
4312     l_extend_attr_value            VARCHAR2(4000);
4313 
4314   BEGIN
4315 
4316     l_extend_attr_value  := get_Attribute_Value(p_xml_node, 'extends');
4317 
4318     IF l_extend_attr_value IS NULL THEN
4319       RETURN;
4320     END IF;
4321 
4322     l_id_attribute_value := get_Attribute_Value(p_xml_node, G_ID_ATTRIBUTE);
4323 
4324     IF l_id_attribute_value IS NULL THEN
4325       RETURN;
4326     END IF;
4327 
4328     SELECT template_id,template_name INTO l_template_id,l_template_name FROM CZ_UI_TEMPLATES
4329      WHERE ui_def_id=NVL(p_ui_node.ctrl_template_ui_def_id,G_GLOBAL_TEMPLATES_UI_DEF_ID) AND
4330            jrad_doc=l_extend_attr_value AND deleted_flag=G_NO_FLAG;
4331 
4332     SELECT NVL(max(seq_nbr),0)+1 INTO l_seq_nbr FROM CZ_UI_PAGE_ELEMENTS
4333      WHERE ui_def_id=p_ui_node.ui_def_id AND
4334            page_id=p_ui_node.page_id AND
4335            parent_element_id=p_ui_node.element_id AND
4336            deleted_flag NOT IN(G_LIMBO_FLAG,G_MARK_TO_DELETE,G_YES_FLAG);
4337 
4338     l_element_id := get_element_Id();
4339 
4340     INSERT INTO CZ_UI_PAGE_ELEMENTS
4341       (
4342       UI_DEF_ID
4343       ,PAGE_ID
4344       ,PERSISTENT_NODE_ID
4345       ,ELEMENT_ID
4346       ,PARENT_PERSISTENT_NODE_ID
4347       ,REGION_PERSISTENT_NODE_ID
4348       ,PAGEBASE_PERSISTENT_NODE_ID
4349       ,CTRL_TEMPLATE_ID
4350       ,BASE_PAGE_FLAG
4351       ,INSTANTIABLE_FLAG
4352       ,SEQ_NBR
4353       ,DELETED_FLAG
4354       ,CTRL_TEMPLATE_UI_DEF_ID
4355       ,MODEL_REF_EXPL_ID
4356       ,SUPPRESS_REFRESH_FLAG
4357       ,PARENT_ELEMENT_ID
4358       ,ELEMENT_TYPE
4359       ,NAME
4360       ,ELEMENT_SIGNATURE_ID
4361       ,TARGET_PAGE_UI_DEF_ID
4362       ,TARGET_PAGE_ID
4363       )
4364     VALUES
4365       (
4366       p_ui_node.ui_def_id
4367       ,p_ui_node.page_id
4368       ,NULL
4369       ,l_element_id
4370       ,p_ui_node.parent_persistent_node_id
4371       ,p_ui_node.region_persistent_node_id
4372       ,p_ui_node.pagebase_persistent_node_id
4373       ,l_template_id
4374       ,'0'
4375       ,'0'
4376       ,l_seq_nbr
4377       ,G_NO_FLAG
4378       ,p_ui_node.ctrl_template_ui_def_id
4379       ,NULL
4380       ,'0'
4381       ,p_ui_node.element_id
4382       ,NULL
4383       ,l_template_name
4384       ,6011
4385       ,NULL
4386       ,NULL
4387       );
4388 
4389      set_Attribute(p_xml_node, G_ID_ATTRIBUTE, l_element_id);
4390 
4391   END add_Extends_Refs;
4392 
4393   FUNCTION find_Parent_UI_Element
4394    (p_xml_node   xmldom.DOMNode,
4395     p_ui_def_id  IN NUMBER,
4396     p_ui_page_id IN NUMBER) RETURN CZ_UI_PAGE_ELEMENTS%ROWTYPE IS
4397 
4398        l_ui_element CZ_UI_PAGE_ELEMENTS%ROWTYPE;
4399 
4400        PROCEDURE get_Parent_XML(p_check_xml_node xmldom.DOMNode) IS
4401 
4402          l_parent_xml_node xmldom.DOMNode;
4403          l_id_attr_value   VARCHAR2(32000);
4404 
4405        BEGIN
4406 
4407          l_id_attr_value := get_Attribute_Value(p_check_xml_node, G_ID_ATTRIBUTE);
4408 
4409          IF l_id_attr_value IS NOT NULL THEN
4410 
4411            BEGIN
4412              SELECT * INTO l_ui_element FROM CZ_UI_PAGE_ELEMENTS
4413               WHERE ui_def_id=p_ui_def_id AND page_id=p_ui_page_id AND
4414                     element_id=l_id_attr_value;
4415              RETURN;
4416            EXCEPTION
4417              WHEN NO_DATA_FOUND THEN
4418                NULL;
4419            END;
4420 
4421          END IF;
4422 
4423          l_parent_xml_node := xmldom.getParentNode(p_check_xml_node);
4424 
4425 
4426          IF NOT(xmldom.isNull(l_parent_xml_node)) THEN
4427 
4428            l_id_attr_value := get_Attribute_Value(l_parent_xml_node , G_ID_ATTRIBUTE);
4429 
4430 
4431            IF l_id_attr_value IS NOT NULL THEN
4432 
4433            BEGIN
4434              SELECT * INTO l_ui_element FROM CZ_UI_PAGE_ELEMENTS
4435               WHERE ui_def_id=p_ui_def_id AND page_id=p_ui_page_id AND
4436                     element_id=l_id_attr_value;
4437              RETURN;
4438            EXCEPTION
4439              WHEN NO_DATA_FOUND THEN
4440                get_Parent_XML(l_parent_xml_node);
4441            END;
4442 
4443           ELSE
4444                get_Parent_XML(l_parent_xml_node);
4445            END IF;
4446 
4447          ELSE
4448            RETURN;
4449          END IF;
4450 
4451        END get_Parent_XML;
4452 
4453 
4454   BEGIN
4455 
4456     get_Parent_XML(p_xml_node);
4457 
4458     RETURN l_ui_element;
4459 
4460   END find_Parent_UI_Element;
4461 
4462   --
4463   -- replace prefixes which are used by runtime caching
4464   --
4465   FUNCTION replace_Prefix(p_str IN VARCHAR2, p_inline_copy_mode IN VARCHAR2) RETURN VARCHAR2 IS
4466   BEGIN
4467     IF p_inline_copy_mode=G_INLINE_COPY_TMPL THEN
4468       RETURN REPLACE(p_str,'_czt','_czc');
4469     ELSIF p_inline_copy_mode=G_INLINE_COPY_UIPAGE THEN
4470       RETURN REPLACE(REPLACE(p_str,'_czt','_czn'), '_czc','_czn');
4471     ELSE
4472       RETURN p_str;
4473     END IF;
4474   END replace_Prefix;
4475 
4476   --
4477   -- handle special cases ( like "switcher case", "ancestor node" )
4478   --
4479   PROCEDURE handle_Special_XMLCases
4480   (p_xml_node         xmldom.DOMNode,
4481    p_old_xml_node_id  VARCHAR2,
4482    p_new_xml_node_id  VARCHAR2,
4483    p_jrad_doc         VARCHAR2,
4484    px_xml_switcher_id IN OUT NOCOPY VARCHAR2,
4485    p_inline_copy_mode IN VARCHAR2) IS
4486 
4487     l_curr_parent_xml_node  xmldom.DOMNode;
4488     l_ancestor_node_id      VARCHAR2(255);
4489     l_xml_node_name         VARCHAR2(255);
4490     l_parent_xml_node_name  VARCHAR2(255);
4491     l_hgrid_element_id      VARCHAR2(255);
4492     l_switcher_xml_id       VARCHAR2(255);
4493     l_switcher_casename     VARCHAR2(255);
4494     l_uicase_name           VARCHAR2(255);
4495     l_user_attribute3_value VARCHAR2(4000);
4496     l_user_attribute4_value VARCHAR2(4000);
4497 
4498   BEGIN
4499 
4500     l_curr_parent_xml_node := xmldom.getParentNode(p_xml_node);
4501 
4502     l_xml_node_name := xmldom.getNodeName(p_xml_node);
4503     l_parent_xml_node_name := xmldom.getNodeName(l_curr_parent_xml_node);
4504 
4505     l_ancestor_node_id := get_Attribute_Value(p_xml_node,
4506                                           'ancestorNode');
4507 
4508     IF p_old_xml_node_id IS NOT NULL THEN
4509       set_Attribute(p_xml_node, G_ID_ATTRIBUTE, replace_Prefix(p_new_xml_node_id, p_inline_copy_mode));
4510     END IF;
4511 
4512     IF l_ancestor_node_id IS NOT NULL THEN
4513 
4514       l_hgrid_element_id := find_Element_Id_Of_XMLTag(p_xml_node, 'oa:tree');
4515 
4516       IF NOT(xmldom.IsNull(p_xml_node)) THEN
4517 
4518         l_ancestor_node_id := p_jrad_doc||'.'||l_hgrid_element_id;
4519         set_Attribute(p_xml_node,
4520                       'ancestorNode',
4521                       l_ancestor_node_id);
4522 
4523       END IF; -- end of IF NOT(xmldom.IsNull(p_xml_node))
4524 
4525     END IF;  -- end of IF l_ancestor_node IS NOT NULL
4526 
4527     --
4528     -- set value of user attribute "switcherDefaultCaseName" to new jrad id of <oa:switcher>
4529     --
4530     IF l_xml_node_name='oa:switcher' THEN
4531 
4532       px_xml_switcher_id := p_old_xml_node_id;
4533 
4534       l_user_attribute3_value := get_Attribute_Value(p_xml_node, G_USER_ATTRIBUTE3_NAME);
4535       l_switcher_casename := get_User_Attribute(l_user_attribute3_value, 'switcherDefaultCaseName');
4536 
4537       IF l_switcher_casename IS NOT NULL THEN
4538         l_switcher_casename := replace_Prefix(REPLACE(l_switcher_casename, px_xml_switcher_id, p_new_xml_node_id), p_inline_copy_mode);
4539 
4540         set_User_Attribute(p_cz_attribute_name    => 'switcherDefaultCaseName',
4541                            p_cz_attribute_value   => l_switcher_casename,
4542                            px_xml_attribute_value => l_user_attribute3_value);
4543 
4544         set_Attribute(p_xml_node,
4545                       G_USER_ATTRIBUTE3_NAME,
4546                       l_user_attribute3_value);
4547 
4548       END IF;
4549 
4550       set_Attribute(p_xml_node,
4551                     G_ID_ATTRIBUTE,
4552                      replace_Prefix(p_new_xml_node_id, p_inline_copy_mode));
4553 
4554     END IF;  -- end of IF l_xml_node_name='oa:switcher'
4555 
4556     --
4557     -- set value of attribute "name" of <ui:case> to id of parent <oa:switcher>
4558     --
4559     IF l_xml_node_name='ui:case' THEN
4560       IF l_parent_xml_node_name='oa:switcher' THEN
4561 
4562         l_switcher_xml_id := get_Attribute_Value(l_curr_parent_xml_node, G_ID_ATTRIBUTE);
4563         l_uicase_name     := get_Attribute_Value(p_xml_node, 'name');
4564 
4565         set_Attribute(p_xml_node,
4566                       'name',
4567                       replace_Prefix(REPLACE(l_uicase_name, px_xml_switcher_id, l_switcher_xml_id), p_inline_copy_mode));
4568 
4569       END IF;  -- end of IF l_parent_xml_node_name='oa:switcher'
4570 
4571       l_user_attribute4_value := get_Attribute_Value(p_xml_node,
4572                                                      G_USER_ATTRIBUTE4_NAME);
4573 
4574       IF l_user_attribute4_value IS NOT NULL THEN
4575         set_User_Attribute(p_cz_attribute_name    => 'caseId',
4576                            p_cz_attribute_value   => get_Element_Id(),
4577                            px_xml_attribute_value => l_user_attribute4_value);
4578 
4579         set_Attribute(p_xml_node,G_USER_ATTRIBUTE4_NAME,l_user_attribute4_value);
4580       END IF;  -- end of IF l_user_attribute4 IS NOT NULL
4581 
4582     END IF;  -- end of IF l_xml_node_name='ui:case'
4583 
4584     --
4585     -- if current tag is <oa:stackLayout>
4586     -- then replace old id with new one
4587     IF (l_xml_node_name='oa:stackLayout' AND l_parent_xml_node_name='ui:case')  THEN
4588 
4589       set_Attribute(p_xml_node,
4590                     G_ID_ATTRIBUTE,
4591                     replace_Prefix(get_Attribute_Value(l_curr_parent_xml_node, 'name'), p_inline_copy_mode));
4592 
4593     END IF;  -- end of IF (l_xml_node_name='oa:stackLayout' ...
4594 
4595   END handle_Special_XMLCases;
4596 
4597   --
4598   -- refresh Template Ref Counts
4599   --
4600   PROCEDURE refresh_Templ_Ref_Counts
4601  (p_template_xml_doc   xmldom.DOMDocument,
4602   p_template_ui_def_id NUMBER,
4603   p_template_id        NUMBER) IS
4604 
4605     l_xml_node                xmldom.DOMNode;
4606     l_child_nodes_tbl         xmldom.DOMNodeList;
4607     l_extends_attribute       VARCHAR2(2000);
4608     l_ref_tmpls_tbl           number_tbl_type;
4609     l_ref_tmpl_seeded_flag    varchar_tbl_type;
4610     l_ref_template_id         NUMBER;
4611     l_seeded_flag             CZ_UI_REF_TEMPLATES.ref_templ_seeded_flag%TYPE;
4612     l_template_id             CZ_UI_REF_TEMPLATES.template_id%TYPE;
4613     l_length                  NUMBER;
4614 
4615   BEGIN
4616 
4617     l_child_nodes_tbl := xmldom.getElementsByTagName(p_template_xml_doc, '*');
4618     l_length := xmldom.getLength(l_child_nodes_tbl);
4619 
4620     IF (l_length > 0) THEN
4621       FOR k IN 0..l_length-1
4622       LOOP
4623         l_xml_node := xmldom.item(l_child_nodes_tbl, k);
4624         l_extends_attribute := get_Attribute_Value(l_xml_node, 'extends');
4625 
4626         IF l_extends_attribute IS NOT NULL THEN
4627 
4628 
4629           BEGIN
4630             SELECT template_id, seeded_flag
4631               INTO l_ref_template_id, l_seeded_flag
4632               FROM CZ_UI_TEMPLATES
4633              WHERE ui_def_id=p_template_ui_def_id AND
4634                    jrad_doc=l_extends_attribute AND
4635                    deleted_flag=G_NO_FLAG;
4636 
4637             IF l_ref_tmpls_tbl.EXISTS(l_ref_template_id) THEN
4638               l_ref_tmpls_tbl(l_ref_template_id) := l_ref_tmpls_tbl(l_ref_template_id) + 1;
4639             ELSE
4640               l_ref_tmpls_tbl(l_ref_template_id) := 1;
4641             END IF;
4642             l_ref_tmpl_seeded_flag(l_ref_template_id) := l_seeded_flag;
4643          EXCEPTION
4644            WHEN NO_DATA_FOUND THEN
4645              NULL;
4646          END;
4647 
4648         END IF;
4649 
4650       END LOOP;
4651     END IF;
4652 
4653     FOR k IN(SELECT ref_template_id FROM CZ_UI_REF_TEMPLATES
4654               WHERE template_id=p_template_id AND
4655                     template_ui_def_id=p_template_ui_def_id AND
4656                     deleted_flag=G_NO_FLAG)
4657     LOOP
4658       IF NOT(l_ref_tmpls_tbl.EXISTS(k.ref_template_id)) THEN
4659         DELETE FROM CZ_UI_REF_TEMPLATES
4660          WHERE template_id=p_template_id AND
4661                template_ui_def_id=p_template_ui_def_id AND
4662                ref_template_id=k.ref_template_id;
4663       END IF;
4664     END LOOP;
4665 
4666     l_template_id := l_ref_tmpls_tbl.FIRST;
4667     LOOP
4668       IF l_template_id IS NULL THEN
4669         EXIT;
4670       END IF;
4671 
4672       UPDATE CZ_UI_REF_TEMPLATES
4673          SET ref_count = l_ref_tmpls_tbl(l_template_id)
4674        WHERE template_id=p_template_id AND
4675              template_ui_def_id=p_template_ui_def_id AND
4676              ref_template_id=l_template_id AND
4677              deleted_flag=G_NO_FLAG;
4678 
4679       IF SQL%ROWCOUNT=0 THEN
4680           INSERT INTO CZ_UI_REF_TEMPLATES
4681           (
4682           TEMPLATE_ID
4683           ,REF_TEMPLATE_ID
4684           ,DELETED_FLAG
4685           ,TEMPLATE_UI_DEF_ID
4686           ,REF_TEMPLATE_UI_DEF_ID
4687           ,SEEDED_FLAG
4688           ,REF_TEMPL_SEEDED_FLAG
4689           ,REF_COUNT
4690           )
4691           VALUES
4692           (
4693            p_template_id
4694           ,l_template_id
4695           ,G_NO_FLAG
4696           ,p_template_ui_def_id
4697           ,p_template_ui_def_id
4698           ,G_NO_FLAG
4699           ,l_ref_tmpl_seeded_flag(l_template_id)
4700           ,l_ref_tmpls_tbl(l_template_id)
4701           );
4702       END IF;
4703 
4704       l_template_id := l_ref_tmpls_tbl.NEXT(l_template_id);
4705     END LOOP;
4706 
4707   END refresh_Templ_Ref_Counts;
4708 
4709 
4710   --
4711   -- initialize nodeView counters
4712   --
4713   PROCEDURE init_Page_View_Counters IS
4714 
4715     l_view_counter NUMBER;
4716 
4717   BEGIN
4718 
4719     g_bomm_counter           := 1;
4720     g_mandatory_comp_counter := 1;
4721 
4722     g_connector_counter      := 0;
4723     g_mandatory_ref_counter  := 0;
4724     g_minmax_ref_counter     := 0;
4725     g_optional_ref_counter   := 0;
4726     g_of_feature_counter     := 0;
4727     g_if_feature_counter     := 0;
4728     g_df_feature_counter     := 0;
4729     g_bf_feature_counter     := 0;
4730     g_tf_feature_counter     := 0;
4731     g_tot_feature_counter    := 0;
4732     g_rsc_feature_counter    := 0;
4733     g_itot_feature_counter    := 0;
4734     g_irsc_feature_counter    := 0;
4735     g_opt_counter            := 0;
4736 
4737   END init_Page_View_Counters;
4738 
4739 
4740   PROCEDURE init_Page_View_Counters(p_subtree_doc  xmldom.DOMDocument) IS
4741 
4742     l_node            xmldom.DOMNode;
4743     l_nodeslist       xmldom.DOMNodeList;
4744     l_empty_xml_node  xmldom.DOMNode;
4745     l_length          NUMBER;
4746     l_attribute_value VARCHAR2(32000);
4747     l_node_view       VARCHAR2(255);
4748   l_id_attr_value   VARCHAR2(255);
4749 
4750     PROCEDURE set_View_Counter(p_node_view IN VARCHAR2) IS
4751       l_node_view_index NUMBER;
4752       l_underscore_pos  NUMBER;
4753       l_prefix          VARCHAR2(255);
4754     BEGIN
4755 
4756       IF p_node_view IS NOT NULL THEN
4757 
4758         l_underscore_pos := INSTR(p_node_view, '_');
4759         IF (l_underscore_pos > 1) THEN
4760           l_prefix := SUBSTR(p_node_view,1,l_underscore_pos);
4761         ELSE
4762           RETURN;
4763         END IF;
4764 
4765         FOR i IN g_view_prefix_tbl.First..g_view_prefix_tbl.Last
4766         LOOP
4767 
4768           IF l_prefix=g_view_prefix_tbl(i) THEN
4769 
4770             l_node_view_index := TO_NUMBER(SUBSTR(p_node_view, l_underscore_pos+1));
4771 
4772             IF g_view_prefix_tbl(i)='COMP_' THEN
4773               IF l_node_view_index > g_mandatory_comp_counter THEN
4774                 g_mandatory_comp_counter := l_node_view_index;
4775               END IF;
4776 
4777             ELSIF g_view_prefix_tbl(i)='SIM_' THEN
4778               IF l_node_view_index > g_optional_ref_counter THEN
4779                 g_optional_ref_counter := l_node_view_index;
4780               END IF;
4781 
4782             ELSIF g_view_prefix_tbl(i)='CS_' THEN
4783               IF l_node_view_index > g_minmax_ref_counter THEN
4784                 g_minmax_ref_counter := l_node_view_index;
4785               END IF;
4786 
4787             ELSIF g_view_prefix_tbl(i)='OF_' THEN
4788               IF l_node_view_index > g_of_feature_counter THEN
4789                 g_of_feature_counter := l_node_view_index;
4790               END IF;
4791 
4792             ELSIF g_view_prefix_tbl(i)='IF_' THEN
4793               IF l_node_view_index > g_if_feature_counter THEN
4794                 g_if_feature_counter := l_node_view_index;
4795               END IF;
4796 
4797             ELSIF g_view_prefix_tbl(i)='DF_' THEN
4798               IF l_node_view_index > g_df_feature_counter THEN
4799                 g_df_feature_counter := l_node_view_index;
4800               END IF;
4801 
4802             ELSIF g_view_prefix_tbl(i)='BF_' THEN
4803               IF l_node_view_index > g_bf_feature_counter THEN
4804                 g_bf_feature_counter := l_node_view_index;
4805               END IF;
4806 
4807             ELSIF g_view_prefix_tbl(i)='TF_' THEN
4808               IF l_node_view_index > g_tf_feature_counter THEN
4809                 g_tf_feature_counter := l_node_view_index;
4810               END IF;
4811 
4812             ELSIF g_view_prefix_tbl(i)='TOT_' THEN
4813               IF l_node_view_index > g_tot_feature_counter THEN
4814                 g_tot_feature_counter := l_node_view_index;
4815               END IF;
4816 
4817             ELSIF g_view_prefix_tbl(i)='RSC_' THEN
4818               IF l_node_view_index > g_rsc_feature_counter THEN
4819                 g_rsc_feature_counter := l_node_view_index;
4820               END IF;
4821 
4822             ELSIF g_view_prefix_tbl(i)='ITOT_' THEN
4823               IF l_node_view_index > g_itot_feature_counter THEN
4824                 g_itot_feature_counter := l_node_view_index;
4825               END IF;
4826 
4827             ELSIF g_view_prefix_tbl(i)='IRSC_' THEN
4828               IF l_node_view_index > g_irsc_feature_counter THEN
4829                 g_irsc_feature_counter := l_node_view_index;
4830               END IF;
4831 
4832 
4833             ELSIF g_view_prefix_tbl(i)='REF_' THEN
4834               IF l_node_view_index > g_mandatory_ref_counter THEN
4835                 g_mandatory_ref_counter := l_node_view_index;
4836               END IF;
4837 
4838             ELSIF g_view_prefix_tbl(i)='CON_' THEN
4839               IF l_node_view_index > g_connector_counter THEN
4840                 g_connector_counter := l_node_view_index;
4841               END IF;
4842 
4843             ELSIF g_view_prefix_tbl(i)='BOMM_' THEN
4844               IF l_node_view_index > g_bomm_counter THEN
4845                 g_bomm_counter := l_node_view_index;
4846               END IF;
4847 
4848             ELSIF g_view_prefix_tbl(i)='OPT_' THEN
4849               IF l_node_view_index > g_opt_counter THEN
4850                 g_opt_counter := l_node_view_index;
4851               END IF;
4852 
4853             END IF;
4854           END IF;
4855         END LOOP;
4856 
4857       END IF;
4858 
4859     END set_View_Counter;
4860 
4861   BEGIN
4862 
4863     g_bomm_counter           := 0;
4864     g_mandatory_comp_counter := 0;
4865 
4866     g_connector_counter      := 0;
4867     g_mandatory_ref_counter  := 0;
4868     g_minmax_ref_counter     := 0;
4869     g_optional_ref_counter   := 0;
4870     g_of_feature_counter     := 0;
4871     g_if_feature_counter     := 0;
4872     g_df_feature_counter     := 0;
4873     g_bf_feature_counter     := 0;
4874     g_tf_feature_counter     := 0;
4875     g_tot_feature_counter    := 0;
4876     g_rsc_feature_counter    := 0;
4877     g_itot_feature_counter    := 0;
4878     g_irsc_feature_counter    := 0;
4879     g_opt_counter            := 0;
4880 
4881     l_nodeslist := xmldom.getElementsByTagName(p_subtree_doc, '*');
4882     l_length    := xmldom.getLength(l_nodeslist);
4883 
4884     l_node := xmldom.makeNode(xmldom.getDocumentElement(p_subtree_doc));
4885 
4886     l_attribute_value := get_Attribute_Value(l_node, G_USER_ATTRIBUTE3_NAME);
4887     l_node_view :=  get_User_Attribute(l_attribute_value, 'nodeView');
4888 
4889     set_View_Counter(l_node_view);
4890 
4891     FOR i IN 0 .. l_length - 1
4892     LOOP
4893       l_node            := xmldom.item(l_nodeslist, i);
4894       l_attribute_value := get_Attribute_Value(l_node, G_USER_ATTRIBUTE3_NAME);
4895       l_node_view       :=  get_User_Attribute(l_attribute_value, 'nodeView');
4896       set_View_Counter(l_node_view);
4897 
4898       l_id_attr_value := get_Attribute_Value(l_node, G_ID_ATTRIBUTE);
4899       IF l_id_attr_value IS NOT NULL THEN
4900         BEGIN
4901           g_dom_elements_tbl(TO_NUMBER(l_id_attr_value)) := l_node;
4902         EXCEPTION
4903           WHEN OTHERS THEN
4904             --
4905             -- if element_id is not a number it will not be cached
4906             --
4907           NULL;
4908         END;
4909       END IF;
4910     END LOOP;
4911 
4912   END init_Page_View_Counters;
4913 
4914   PROCEDURE resolve_view_names(p_xml_node        IN xmldom.DOMNode,
4915                                p_ui_page_id      IN NUMBER,
4916                                p_counter         IN OUT NOCOPY NUMBER,
4917                                p_element_ids_table IN OUT NOCOPY varchar2_tbl_type) IS
4918 
4919       l_view_name             VARCHAR2(255);
4920       l_children_view_name    VARCHAR2(255);
4921 
4922       l_user_attribute        VARCHAR2(32000);
4923       l_user_attribute_value  VARCHAR2(32000);
4924       l_ind                   NUMBER;
4925       l_child_nodes_tbl       xmldom.DOMNodeList;
4926       l_length                NUMBER;
4927       l_child_xml_node        xmldom.DOMNode;
4928       l_element_id            VARCHAR2(255);
4929 
4930     BEGIN
4931 
4932 
4933       IF p_counter = -1 THEN
4934         SELECT COUNT(element_id) INTO p_counter
4935         FROM CZ_UI_PAGE_ELEMENTS
4936         WHERE ui_def_id=g_UI_Context.ui_def_id
4937         AND page_id=p_ui_page_id AND
4938         deleted_flag NOT IN(G_YES_FLAG,G_MARK_TO_DELETE);
4939       END IF;
4940 
4941       l_element_id := get_Attribute_Value(p_xml_node, G_ID_ATTRIBUTE);
4942       IF l_element_id IS NOT NULL THEN
4943         p_element_ids_table(l_element_id) := l_element_id;
4944       END IF;
4945 
4946       l_user_attribute_value := get_Attribute_Value(p_xml_node, G_USER_ATTRIBUTE3_NAME);
4947       IF l_user_attribute_value IS NOT NULL THEN
4948 
4949         l_view_name := get_User_Attribute(l_user_attribute_value ,'nodeView');
4950 
4951         IF l_view_name <> '%nodeView' AND l_view_name IS NOT NULL THEN
4952           l_ind := INSTR(l_view_name, '_');
4953           l_view_name := SUBSTR(l_view_name,1,l_ind-1);
4954           l_view_name := get_next_view_name(l_view_name);
4955 
4956           set_User_Attribute(p_cz_attribute_name    => 'nodeView',
4957                              p_cz_attribute_value   => l_view_name,
4958                              px_xml_attribute_value => l_user_attribute_value);
4959 
4960           l_children_view_name := get_User_Attribute(l_user_attribute_value ,'nodeChildrenView');
4961 
4962           IF l_children_view_name <> '%nodeChildrenView' AND l_children_view_name IS NOT NULL THEN
4963 
4964             l_children_view_name := l_view_name || '_children';
4965             DEBUG('asp: New children view name = ' || l_children_view_name);
4966 
4967             set_User_Attribute(p_cz_attribute_name    => 'nodeChildrenView',
4968                                p_cz_attribute_value   => l_children_view_name,
4969                                px_xml_attribute_value => l_user_attribute_value);
4970           END IF;
4971 
4972           set_Attribute(p_xml_node,
4973                        G_USER_ATTRIBUTE3_NAME,
4974                        l_user_attribute_value);
4975         END IF;
4976       END IF;
4977 
4978       l_child_nodes_tbl := xmldom.getChildNodes(p_xml_node);
4979       l_length          := xmldom.getLength(l_child_nodes_tbl);
4980 
4981       FOR k IN 0 .. l_length - 1
4982       LOOP
4983         --
4984         -- get next child DOM node
4985         --
4986         l_child_xml_node := xmldom.item(l_child_nodes_tbl, k);
4987 
4988         resolve_view_names(p_xml_node          => l_child_xml_node,
4989                            p_ui_page_id        => p_ui_page_id,
4990                            p_counter           => p_counter,
4991                            p_element_ids_table => p_element_ids_table);
4992 
4993       END LOOP;
4994 
4995 
4996   END resolve_view_names;
4997 
4998 
4999   --
5000   -- set Attributes for Template
5001   --
5002   PROCEDURE set_Template_Attributes(p_xml_root_node        xmldom.DOMNode,
5003                                     p_ui_node              CZ_UI_PAGE_ELEMENTS%ROWTYPE,
5004                                     p_element_signature_id NUMBER DEFAULT NULL) IS
5005 
5006     l_xml_root_element_node xmldom.DOMElement := xmldom.makeElement(p_xml_root_node);
5007     l_node                  CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE;
5008     l_ui_action_id          NUMBER;
5009     l_drilldown_text_id     NUMBER;
5010 
5011     l_view_name             VARCHAR2(255);
5012     l_picklist_view_name    VARCHAR2(255);
5013     l_has_children          VARCHAR2(1);
5014 
5015     l_model_path            VARCHAR2(32000);
5016     l_user_attribute        VARCHAR2(32000);
5017 
5018   BEGIN
5019 
5020     --
5021     -- get Model node by persistent_node_id and project_id
5022     --
5023     l_node := get_Model_Node_By_Persist_Id(p_ui_node.persistent_node_id,
5024                                            g_UI_Context.devl_project_id);
5025 
5026     --
5027     -- get a corresponding view name by detailed_type_id and
5028     -- also get variable has_children
5029     --
5030     IF  p_ui_node.parent_element_id IS NULL THEN
5031       IF l_node.ps_node_type IN(258,259) THEN
5032         l_view_name := 'COMP_1';
5033       ELSE
5034         l_view_name := 'BOMM_1';
5035         l_picklist_view_name := l_view_name || '_children';
5036       END IF;
5037     ELSE
5038       l_view_name := get_View_Name(l_node, l_has_children);
5039     END IF;
5040 
5041     --
5042     -- UI Page or CX associated with an
5043     -- instantiable component must have nodeView='COMP_...'
5044     --
5045     IF p_ui_node.element_type=G_UI_CX_BUTTON_NODE_TYPE OR
5046        p_ui_node.parent_element_id IS NULL THEN
5047         l_view_name := REPLACE(l_view_name,'CS_','COMP_');
5048     END IF;
5049 
5050     IF l_has_children = G_YES_FLAG THEN
5051       l_picklist_view_name := l_view_name || '_children';
5052     END IF;
5053 
5054     IF g_ref_cx_paths_tbl.EXISTS(TO_NUMBER(p_ui_node.element_id)) THEN
5055       l_model_path := g_ref_cx_paths_tbl(TO_NUMBER(p_ui_node.element_id));
5056     ELSE
5057       l_model_path := get_Model_Path(p_ui_node);
5058     END IF;
5059 
5060     --
5061     -- set JRAD id of element
5062     --
5063     set_Attribute(l_xml_root_element_node,
5064                   G_ID_ATTRIBUTE,
5065                   p_ui_node.element_id);
5066 
5067     --
5068     -- attribute1 is always used only for model_path
5069     --
5070     set_Attribute(l_xml_root_element_node,
5071                   G_USER_ATTRIBUTE1_NAME,
5072                   'model_path='||l_model_path);
5073 
5074     IF l_model_path='*' THEN
5075       set_Attribute(l_xml_root_element_node,
5076                     G_USER_ATTRIBUTE2_NAME,
5077                     '0');
5078     ELSE
5079       --
5080       -- set attribute2 to persistent_node_id :
5081       -- THIS ATTRIBUTE MUST BE SET ONLY BY UI GENERATION / UI REFRESH
5082       --
5083       set_Attribute(l_xml_root_element_node,
5084                     G_USER_ATTRIBUTE2_NAME,
5085                     TO_CHAR(p_ui_node.persistent_node_id));
5086     END IF;
5087 
5088     --
5089     -- get value of "user:attribute3"
5090     --
5091     l_user_attribute := get_Attribute_Value(p_xml_root_node,
5092                                             G_USER_ATTRIBUTE3_NAME);
5093 
5094     IF l_user_attribute IS NOT NULL THEN
5095 
5096       IF l_view_name IS NOT NULL THEN
5097         set_User_Attribute(p_cz_attribute_name    => 'nodeView',
5098                            p_cz_attribute_value   => l_view_name,
5099                            px_xml_attribute_value => l_user_attribute);
5100       END IF;
5101       IF l_picklist_view_name IS NOT NULL THEN
5102         set_User_Attribute(p_cz_attribute_name    => 'nodeChildrenView',
5103                            p_cz_attribute_value   => l_picklist_view_name,
5104                            px_xml_attribute_value => l_user_attribute);
5105       END IF;
5106 
5107       IF INSTR(l_user_attribute, 'actionId=')>0 THEN
5108         BEGIN
5109           l_ui_action_id := get_UI_Action_Id(p_ui_node);
5110         EXCEPTION
5111           WHEN OTHERS THEN
5112             NULL;
5113         END;
5114 
5115         IF l_ui_action_id IS NOT NULL THEN
5116           set_User_Attribute(p_cz_attribute_name    => 'actionId',
5117                              p_cz_attribute_value   => TO_CHAR(l_ui_action_id),
5118                              px_xml_attribute_value => l_user_attribute);
5119         END IF;
5120 
5121       END IF;
5122       /* commented out according to request from 8/12/2004
5123       set_User_Attribute(p_cz_attribute_name    => 'blockSize',
5124                           p_cz_attribute_value   => TO_CHAR(g_UI_Context.ROWS_PER_TABLE),
5125                          px_xml_attribute_value => l_user_attribute);
5126       */
5127     END IF; -- end of setting  G_USER_ATTRIBUTE3_NAME
5128 
5129     IF p_ui_node.element_type IN(G_UI_PAGEDRILLDOWN_NODE_TYPE,G_UI_DRILLDOWN_NODE_TYPE) THEN
5130       IF  g_UI_Context.DRILLDOWN_CONTROL_TEXT_ID IS NOT NULL THEN
5131 
5132         l_drilldown_text_id := copy_Intl_Text(g_UI_Context.DRILLDOWN_CONTROL_TEXT_ID,
5133                                               g_UI_Context.ui_def_id,
5134                                               p_ui_node.page_id, p_ui_node.element_id);
5135 
5136         set_User_Attribute(p_cz_attribute_name    => 'captionIntlTextId',
5137                            p_cz_attribute_value   => TO_CHAR(l_drilldown_text_id),
5138                            px_xml_attribute_value => l_user_attribute);
5139 
5140         set_User_Attribute(p_cz_attribute_name    => 'rolloverIntlTextId',
5141                            p_cz_attribute_value   => TO_CHAR(l_drilldown_text_id),
5142                            px_xml_attribute_value => l_user_attribute);
5143 
5144       END IF;
5145       --
5146       -- set "source" for image associated with a drilldown
5147       --
5148       IF g_UI_Context.DRILLDOWN_IMAGE_URL IS NOT NULL THEN
5149         set_Attribute(l_xml_root_element_node,
5150                       'source',
5151                       g_UI_Context.DRILLDOWN_IMAGE_URL);
5152       END IF;
5153     ELSIF p_ui_node.element_type=G_UI_CX_BUTTON_NODE_TYPE THEN
5154       set_User_Attribute(p_cz_attribute_name    => 'captionIntlTextId',
5155                          p_cz_attribute_value   => TO_CHAR(g_cx_names_tbl(TO_NUMBER(p_ui_node.element_id))),
5156                          px_xml_attribute_value => l_user_attribute);
5157 
5158         set_User_Attribute(p_cz_attribute_name    => 'rolloverIntlTextId',
5159                            p_cz_attribute_value   => TO_CHAR(g_cx_names_tbl(TO_NUMBER(p_ui_node.element_id))),
5160                            px_xml_attribute_value => l_user_attribute);
5161 
5162     END IF;
5163 
5164     set_Attribute(l_xml_root_element_node,G_USER_ATTRIBUTE3_NAME,l_user_attribute);
5165 
5166     --
5167     -- get value of "user:attribute4" which is used by Oracle Configurator Developer
5168     --
5169     l_user_attribute := get_Attribute_Value(p_xml_root_node,
5170                                             G_USER_ATTRIBUTE4_NAME);
5171     IF l_user_attribute IS NOT NULL THEN
5172 
5173       set_User_Attribute(p_cz_attribute_name    => 'name',
5174                          p_cz_attribute_value   => p_ui_node.name,
5175                          px_xml_attribute_value => l_user_attribute);
5176 
5177       IF p_element_signature_id IS NOT NULL THEN
5178          set_User_Attribute(p_cz_attribute_name    => 'elementType',
5179                             p_cz_attribute_value   => TO_CHAR(p_element_signature_id),
5180                             px_xml_attribute_value => l_user_attribute);
5181       ELSE
5182          set_User_Attribute(p_cz_attribute_name    => 'elementType',
5183                             p_cz_attribute_value   => TO_CHAR(p_ui_node.element_signature_id),
5184                             px_xml_attribute_value => l_user_attribute);
5185       END IF;
5186 
5187     END IF;
5188 
5189     set_Attribute(l_xml_root_element_node,
5190                   G_USER_ATTRIBUTE4_NAME,
5191                   l_user_attribute);
5192 
5193     set_Attribute(l_xml_root_element_node,
5194                   G_USER_ATTRIBUTE5_NAME,
5195                   'GENERATED_BY_UI_GEN');
5196 
5197   END set_Template_Attributes;
5198 
5199   FUNCTION get_Element_XML_Path(p_xml_doc xmldom.DOMDocument,p_element_id VARCHAR2)  RETURN VARCHAR2 IS
5200 
5201     l_xml_node     xmldom.DOMNode;
5202     l_element_path VARCHAR2(32000);
5203 
5204     PROCEDURE construct_XML_Path(p_xml_node xmldom.DOMNode) IS
5205 
5206       l_parent_node            xmldom.DOMNode;
5207       l_element_id             CZ_UI_PAGE_ELEMENTS.element_id%TYPE;
5208       l_user_attribute4_value  VARCHAR2(32000);
5209       l_node_name              VARCHAR2(32000);
5210 
5211     BEGIN
5212 
5213       IF xmldom.isNull(p_xml_node) THEN
5214         RETURN;
5215       END IF;
5216       l_parent_node := xmldom.getParentNode(p_xml_node);
5217       l_element_id := get_Attribute_Value(p_xml_node, G_ID_ATTRIBUTE);
5218 
5219       IF l_element_id IS NOT NULL AND xmldom.getNodeName(l_parent_node)<>'#document'THEN
5220 
5221         l_user_attribute4_value := get_Attribute_Value(p_xml_node, G_USER_ATTRIBUTE4_NAME);
5222         IF l_user_attribute4_value IS NOT NULL THEN
5223           l_node_name := get_User_Attribute(l_user_attribute4_value ,'name');
5224 
5225           IF l_element_path IS NOT NULL THEN
5226             l_element_path := l_node_name||'.'||l_element_path;
5227           ELSE
5228             l_element_path := l_node_name;
5229           END IF;
5230 
5231         END IF;
5232       END IF;
5233 
5234         IF  NOT(xmldom.IsNull(p_xml_node)) THEN
5235           IF NOT(xmldom.IsNull(l_parent_node)) THEN
5236             construct_XML_Path(l_parent_node);
5237           END IF;
5238         END IF;
5239 
5240     END construct_XML_Path;
5241 
5242   BEGIN
5243 
5244     l_xml_node := find_XML_Node_By_Attribute(p_xml_doc, G_ID_ATTRIBUTE, p_element_id);
5245 
5246     IF NOT(xmldom.IsNull(l_xml_node)) THEN
5247       construct_XML_Path(l_xml_node);
5248     ELSE
5249       RETURN NULL;
5250     END IF;
5251 
5252     RETURN l_element_path;
5253 
5254   END get_Element_XML_Path;
5255 
5256   FUNCTION get_Element_XML_Path(p_xml_node xmldom.DOMNode)  RETURN VARCHAR2 IS
5257 
5258     l_element_path VARCHAR2(32000);
5259 
5260     PROCEDURE construct_XML_Path(p_xml_node xmldom.DOMNode) IS
5261 
5262       l_parent_node            xmldom.DOMNode;
5263       l_element_id             CZ_UI_PAGE_ELEMENTS.element_id%TYPE;
5264       l_user_attribute4_value  VARCHAR2(32000);
5265       l_node_name              VARCHAR2(32000);
5266 
5267     BEGIN
5268 
5269       IF xmldom.isNull(p_xml_node) THEN
5270         RETURN;
5271       END IF;
5272       l_parent_node := xmldom.getParentNode(p_xml_node);
5273       l_element_id := get_Attribute_Value(p_xml_node, G_ID_ATTRIBUTE);
5274 
5275       IF l_element_id IS NOT NULL AND xmldom.getNodeName(l_parent_node)<>'#document'THEN
5276 
5277         l_user_attribute4_value := get_Attribute_Value(p_xml_node, G_USER_ATTRIBUTE4_NAME);
5278         IF l_user_attribute4_value IS NOT NULL THEN
5279           l_node_name := get_User_Attribute(l_user_attribute4_value ,'name');
5280 
5281           IF l_element_path IS NOT NULL THEN
5282             l_element_path := l_node_name||'.'||l_element_path;
5283           ELSE
5284             l_element_path := l_node_name;
5285           END IF;
5286 
5287         END IF;
5288       END IF;
5289 
5290         IF  NOT(xmldom.IsNull(p_xml_node)) THEN
5291           IF NOT(xmldom.IsNull(l_parent_node)) THEN
5292             construct_XML_Path(l_parent_node);
5293           END IF;
5294         END IF;
5295 
5296     END construct_XML_Path;
5297 
5298   BEGIN
5299 
5300     IF NOT(xmldom.IsNull(p_xml_node)) THEN
5301       construct_XML_Path(p_xml_node);
5302     ELSE
5303       RETURN NULL;
5304     END IF;
5305 
5306     RETURN l_element_path;
5307   EXCEPTION
5308     WHEN OTHERS THEN
5309       DEBUG(SQLERRM);
5310       RETURN NULL;
5311   END get_Element_XML_Path;
5312 
5313   --
5314   -- return path for a given UI element
5315   --
5316   FUNCTION get_Element_XML_Path(p_ui_def_id  IN NUMBER,
5317                                 p_page_id    IN NUMBER,
5318                                 p_element_id IN VARCHAR2,
5319                                 p_is_parser_open IN VARCHAR2 DEFAULT NULL) RETURN VARCHAR2 IS
5320 
5321     l_xmldoc        xmldom.DOMDocument;
5322     l_page_jrad_doc CZ_UI_PAGES.jrad_doc%TYPE;
5323     l_ui_name       CZ_UI_DEFS.name%TYPE;
5324     l_page_name     CZ_UI_PAGES.name%TYPE;
5325     l_element_path  VARCHAR2(32000);
5326 
5327   BEGIN
5328 
5329     IF p_is_parser_open IS NULL OR p_is_parser_open='0' THEN
5330       Open_Parser();
5331     END IF;
5332 
5333     SELECT jrad_doc,name INTO l_page_jrad_doc,l_page_name FROM CZ_UI_PAGES
5334     WHERE ui_def_id=p_ui_def_id AND page_id=p_page_id;
5335 
5336     --
5337     -- create UI Template in JRAD repository
5338     --
5339     l_xmldoc := parse_JRAD_Document(p_doc_full_name => l_page_jrad_doc);
5340 
5341     IF xmldom.isNull(l_xmldoc) THEN
5342       -- UI page is already deleted
5343       RETURN NULL;
5344     END IF;
5345 
5346     l_element_path := get_Element_XML_Path(l_xmldoc,p_element_id);
5347 
5348     IF p_is_parser_open IS NULL OR p_is_parser_open='0' THEN
5349       Close_Parser();
5350     END IF;
5351 
5352     SELECT name INTO l_ui_name FROM CZ_UI_DEFS
5353     WHERE ui_def_id=p_ui_def_id;
5354 
5355     IF l_element_path IS NULL OR l_element_path='.' THEN
5356       l_element_path := l_ui_name||'.'||'Pages'||'.'||l_page_name;
5357     ELSE
5358       l_element_path := l_ui_name||'.'||'Pages'||'.'||l_page_name||'.'||l_element_path;
5359     END IF;
5360 
5361     RETURN l_element_path;
5362 
5363   END get_Element_XML_Path;
5364 
5365 
5366   PROCEDURE copy_UI_Rule
5367   (
5368   p_rule_id       IN NUMBER,
5369   x_rule_id       OUT NOCOPY NUMBER,
5370   p_ui_def_id     IN NUMBER,
5371   p_ui_page_id    IN NUMBER,
5372   p_ui_element_id IN VARCHAR2,
5373   p_source_ui_def_id IN NUMBER,
5374   p_new_component_id IN NUMBER DEFAULT NULL, -- passed when copied rule needs to be associated to a different PS Node
5375   p_new_expl_node_id IN NUMBER DEFAULT NULL, -- passed when copied rule needs to be associated to a different PS Node
5376   p_xml_node      IN xmldom.DOMNode DEFAULT g_Null_Xml_Node
5377   ) IS
5378 
5379     l_return_status        VARCHAR2(255);
5380     l_msg_count            NUMBER;
5381     l_msg_data             VARCHAR2(4000);
5382     l_run_id               NUMBER;
5383     l_element_path         VARCHAR2(4000);
5384     l_source_ui_def_id     NUMBER;
5385     l_failure_flag         NUMBER;
5386     l_cp_rule_run_id       NUMBER;
5387     l_copied_rule          BOOLEAN;
5388 
5389   BEGIN
5390     IF p_rule_id IS NOT NULL THEN
5391 
5392       IF p_source_ui_def_id IS NULL THEN
5393         l_source_ui_def_id := 0;
5394       ELSE
5395         l_source_ui_def_id := p_source_ui_def_id;
5396       END IF;
5397       FOR k IN(SELECT rule_id,rule_type,seeded_flag,devl_project_id FROM CZ_RULES
5398                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
5399                      AND deleted_flag=G_NO_FLAG)
5400       LOOP
5401         l_run_id := 0; l_cp_rule_run_id := 0;
5402         l_copied_rule := FALSE;
5403 
5404         IF NVL(k.seeded_flag,G_NO_FLAG)=G_NO_FLAG THEN
5405           CZ_DEVELOPER_UTILS_PVT.copy_Rule
5406           (p_rule_id                  => k.rule_id,
5407            p_init_msg_list            => FND_API.G_FALSE,
5408            p_ui_def_id                => p_ui_def_id,
5409            p_ui_page_id               => p_ui_page_id,
5410            p_ui_page_element_id       => p_ui_element_id,
5411            x_out_new_rule_id          => x_rule_id,
5412            x_run_id                   => l_cp_rule_run_id,
5413            x_return_status            => l_return_status,
5414            x_msg_count                => l_msg_count,
5415            x_msg_data                 => l_msg_data);
5416 
5417            IF p_new_component_id IS NOT NULL THEN
5418 
5419              DEBUG('Associating copied rule to a different PS Node');
5420              -- This rule is being copied and associated to a different component_id
5421              UPDATE CZ_RULES
5422                 SET component_id = p_new_component_id,
5423                     model_ref_expl_id = p_new_expl_node_id
5424               WHERE rule_id = x_rule_id;
5425            l_copied_rule := TRUE;
5426            END IF;
5427         ELSE
5428            x_rule_id := k.rule_id;
5429         END IF;
5430 
5431         l_failure_flag := 0;
5432         IF l_cp_rule_run_id > 0 THEN
5433           SELECT COUNT(*) INTO l_failure_flag FROM CZ_DB_LOGS WHERE run_id=l_cp_rule_run_id;
5434         END IF;
5435 
5436         IF l_failure_flag=0 AND NVL(k.devl_project_id,0) NOT IN(0,1) AND l_copied_rule THEN
5437           CZ_DEVELOPER_UTILS_PVT.verify_special_rule(p_rule_id => x_rule_id,
5438                                                      p_name    => NULL,
5439                                                      x_run_id  => l_run_id);
5440         END IF;
5441 
5442         IF l_run_id > 0 THEN
5443           IF NOT(xmldom.IsNull(p_xml_node)) THEN
5444             l_element_path := get_Element_XML_Path(p_xml_node   => p_xml_node);
5445           ELSE -- UI rule on UI page level
5446             SELECT name INTO l_element_path FROM CZ_UI_PAGES
5447             WHERE page_id=p_ui_page_id AND ui_def_id=p_ui_def_id;
5448           END IF;
5449 
5450           IF k.rule_type=33 THEN
5451                add_Error_Message(p_message_name => 'CZ_DISP_COND_DEL_ND_ERROR',
5452                                  p_token_name   => 'UIELEMENTPATH',
5453                                  p_token_value  => l_element_path,
5454                                  p_fatal_error  => TRUE);
5455           ELSIF k.rule_type=34 THEN
5456               add_Error_Message(p_message_name => 'CZ_ENABLED_CONDITION_ERROR',
5457                                 p_token_name   => 'UIELEMENTPATH',
5458                                 p_token_value  => l_element_path,
5459                                 p_fatal_error  => TRUE);
5460           ELSE
5461               NULL;
5462           END IF;
5463 
5464         END IF;
5465       END LOOP;
5466     ELSE
5467       x_rule_id := NULL;
5468     END IF;
5469   END copy_UI_Rule;
5470 
5471   --vsingava IM-ER
5472   FUNCTION get_Runtime_Relative_Path
5473   (
5474   p_model_id                     NUMBER,
5475   p_base_persistent_node_Id      NUMBER,
5476   p_base_expl_id                 NUMBER,
5477   p_persistent_node_id           NUMBER,
5478   p_ui_node_expl_id              NUMBER DEFAULT NULL
5479   ) RETURN VARCHAR2 IS
5480 
5481     l_model_path         VARCHAR2(32000);
5482     l_pagebase_expl_id   NUMBER;
5483     l_expl_id            NUMBER;
5484     l_expl_node_id       NUMBER;
5485     l_ps_node_id         NUMBER;
5486     l_ps_node_type       NUMBER;
5487     l_component_id       NUMBER;
5488     l_model_ref_expl_id  NUMBER;
5489     l_pagebase_persistent_node_id NUMBER;
5490 
5491   BEGIN
5492 
5493 
5494      BEGIN
5495       --
5496       -- does the current node with persistent_node_id=p_persistent_node_id
5497       -- belongs to model with devl_project_id=p_model_id ?
5498       --
5499       SELECT ps_node_id,ps_node_type,component_id
5500         INTO l_ps_node_id, l_ps_node_type, l_component_id  FROM CZ_PS_NODES
5501        WHERE devl_project_id=p_model_id AND
5502              persistent_node_id=p_persistent_node_id;
5503 
5504     EXCEPTION
5505       WHEN NO_DATA_FOUND THEN
5506          --
5507          -- the current node with persistent_node_id=p_persistent_node_id
5508          -- does not belong to model with devl_project_id=p_model_id
5509          -- and belongs to some referenced model
5510          --
5511          NULL;
5512     END;
5513 
5514 
5515     --
5516     -- AMN of UI node belongs to current model
5517     --
5518      IF l_ps_node_id IS NOT NULL THEN
5519       l_expl_id := get_Expl_Id(p_model_id      => p_model_id,
5520                                p_ps_node_id    => l_ps_node_id,
5521                                p_component_id  => l_component_id,
5522                                p_ps_node_type  => l_ps_node_type);
5523 
5524 
5525       l_model_path := CZ_DEVELOPER_UTILS_PVT.runtime_relative_path(p_base_expl_id => p_base_expl_id,
5526                                                                    p_base_pers_id => p_base_persistent_node_Id,
5527                                                                    p_node_expl_id => l_expl_id,
5528                                                                    p_node_pers_id => p_persistent_node_id);
5529 
5530       IF l_model_path IS NULL THEN
5531         l_model_path := '.';
5532       END IF;
5533 
5534       RETURN l_model_path;
5535     END IF;
5536 
5537 
5538     -- validation of expl_id
5539     SELECT model_ref_expl_id INTO l_model_ref_expl_id
5540       FROM CZ_MODEL_REF_EXPLS
5541      WHERE model_ref_expl_id=p_ui_node_expl_id;
5542 
5543     --
5544     -- AMN of UI node belongs to referenced model
5545     --
5546 
5547 
5548     FOR i IN(SELECT model_ref_expl_id,parent_expl_node_id,ps_node_type,
5549                     component_id,referring_node_id
5550                FROM CZ_MODEL_REF_EXPLS
5551               START WITH model_ref_expl_id=p_ui_node_expl_id
5552               CONNECT BY PRIOR parent_expl_node_id=model_ref_expl_id AND
5553                                deleted_flag='0')
5554     LOOP
5555       -- go up until the nearest reference or the root
5556       IF (i.ps_node_type IN(G_REFERENCE_TYPE,G_CONNECTOR_TYPE) OR i.parent_expl_node_id IS NULL) THEN
5557 
5558 
5559         -- get ps node data for AMN of UI node
5560         SELECT ps_node_id,ps_node_type,component_id
5561           INTO l_ps_node_id, l_ps_node_type,l_component_id
5562           FROM CZ_PS_NODES
5563          WHERE devl_project_id=i.component_id AND
5564                persistent_node_id=p_persistent_node_id AND
5565                deleted_flag=G_NO_FLAG;
5566 
5567         -- If the UI AMN found in the referenced model is not a reference or a connector or we are dealing with the
5568         -- reference node itself (can the second part of this condition ever be true)
5569         IF (l_ps_node_type NOT IN(G_REFERENCE_TYPE,G_CONNECTOR_TYPE) OR p_ui_node_expl_id=i.model_ref_expl_id) THEN
5570 
5571 
5572           SELECT model_ref_expl_id INTO l_expl_id FROM
5573             (SELECT model_ref_expl_id,referring_node_id,component_id FROM CZ_MODEL_REF_EXPLS
5574               START WITH model_ref_expl_id=i.model_ref_expl_id
5575             CONNECT BY PRIOR model_ref_expl_id=parent_expl_node_id AND deleted_flag='0') a
5576           WHERE (l_ps_node_type IN(G_REFERENCE_TYPE,G_CONNECTOR_TYPE) AND a.referring_node_id=l_ps_node_id) OR
5577                 (l_ps_node_type NOT IN(G_REFERENCE_TYPE,G_CONNECTOR_TYPE) AND a.component_id=l_component_id);
5578 
5579 
5580 
5581           l_model_path := CZ_DEVELOPER_UTILS_PVT.runtime_relative_path(p_base_expl_id => p_base_expl_id,
5582                                                                        p_base_pers_id => p_base_persistent_node_id,
5583                                                                        p_node_expl_id => l_expl_id,
5584                                                                        p_node_pers_id => p_persistent_node_id);
5585 
5586 
5587           IF l_model_path IS NULL THEN
5588             l_model_path := '.';
5589           END IF;
5590 
5591           RETURN l_model_path;
5592         END IF;
5593 
5594       END IF;
5595     END LOOP;
5596 
5597   END get_Runtime_Relative_Path;
5598 
5599 
5600   FUNCTION get_Runtime_Relative_Path
5601   (
5602   p_model_id                     NUMBER,
5603   p_persistent_node_id           NUMBER,
5604   p_page_id                      NUMBER,
5605   p_ui_node_expl_id              NUMBER DEFAULT NULL
5606   ) RETURN VARCHAR2 IS
5607 
5608     l_model_path         VARCHAR2(32000);
5609     l_pagebase_expl_id   NUMBER;
5610     l_expl_id            NUMBER;
5611     l_expl_node_id       NUMBER;
5612     l_ps_node_id         NUMBER;
5613     l_ps_node_type       NUMBER;
5614     l_component_id       NUMBER;
5615     l_model_ref_expl_id  NUMBER;
5616     l_pagebase_persistent_node_id NUMBER;
5617 
5618   BEGIN
5619 
5620     SELECT persistent_node_id,pagebase_expl_node_id
5621       INTO l_pagebase_persistent_node_id, l_pagebase_expl_id
5622       FROM CZ_UI_PAGES
5623      WHERE ui_def_id=g_UI_Context.ui_def_id AND page_id=p_page_id;
5624 
5625      RETURN get_Runtime_Relative_Path(p_model_id, l_pagebase_persistent_node_id, l_pagebase_expl_id, p_persistent_node_id, p_ui_node_expl_id);
5626 
5627   END;
5628 
5629   PROCEDURE handle_User_Attributes
5630   (px_user_attribute_value IN OUT NOCOPY VARCHAR2,
5631    p_source_ui_def_id      IN NUMBER,
5632    p_source_ui_page_id     IN NUMBER,
5633    p_target_ui_def_id      IN NUMBER,
5634    p_target_ui_page_id     IN NUMBER,
5635    p_new_element_id        IN VARCHAR2,
5636    p_il_persistent_node_id IN NUMBER DEFAULT NULL, --  AMN of the enclosing instance list
5637    p_il_expl_node_id       IN NUMBER DEFAULT NULL, --  AMN of the enclosing instance list
5638    p_amn_persistent_node_id IN NUMBER DEFAULT NULL, -- AMN of the node (specified or inherited)
5639    p_amn_expl_node_id       IN NUMBER DEFAULT NULL, -- AMN of the node (specified or inherited)
5640    p_source_template_id    IN NUMBER DEFAULT NULL,
5641    p_target_template_id    IN NUMBER DEFAULT NULL,
5642    p_xml_node              IN xmldom.DOMNode DEFAULT g_Null_Xml_Node) IS
5643 
5644     l_cached_elems_tbl        number_tbl_type;
5645     l_cached_source_elems_tbl number_tbl_type;
5646     l_counter                 NUMBER := 0;
5647 
5648     l_id                   NUMBER;
5649     l_new_action_id        NUMBER;
5650     l_new_rule_id          NUMBER;
5651     l_persistent_rule_id   NUMBER;
5652     l_new_intl_text_id     NUMBER;
5653     l_ui_def_node          CZ_UI_DEFS%ROWTYPE;
5654     l_prev_ui_context      CZ_UI_DEFS%ROWTYPE;
5655     l_new_target_node_path CZ_UI_ACTIONS.target_node_path%TYPE;
5656     l_base_persistent_node_id NUMBER;
5657     l_base_expl_node_id      NUMBER;
5658     l_model_node CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE;
5659     l_component_id NUMBER;
5660     l_expl_node_id NUMBER;
5661     l_persistent_intl_text_id NUMBER;
5662     l_persistent_intl_text_id_tmp NUMBER;
5663 
5664   BEGIN
5665 
5666     IF px_user_attribute_value IS NULL THEN
5667       RETURN;
5668     END IF;
5669 
5670 
5671     l_ui_def_node := get_Local_UI_Context(p_target_ui_def_id);
5672     l_prev_ui_context := g_UI_Context;
5673     g_UI_Context := l_ui_def_node;
5674 
5675     BEGIN
5676       l_id := TO_NUMBER(get_User_Attribute(px_user_attribute_value,'actionId'));
5677     EXCEPTION
5678       WHEN OTHERS THEN
5679         l_id := NULL;
5680     END;
5681 
5682     IF l_id IS NOT NULL THEN
5683 
5684       FOR i IN(SELECT * FROM CZ_UI_ACTIONS
5685                 WHERE ui_def_id=p_source_ui_def_id AND
5686                 ui_action_id=l_id AND
5687                 NVL(source_page_id,0)=NVL(p_source_ui_page_id,0)
5688                 AND seeded_flag=G_NO_FLAG)
5689       LOOP
5690 
5691           l_new_action_id := allocateId('CZ_UI_ACTIONS_S');
5692 
5693           IF i.target_persistent_node_id IS NOT NULL THEN
5694             -- If the IL AMN is passed in, then use that else use the AMN on the page. IL AMN will be passed
5695             -- when the caller needs the paths in actions to start from a node different
5696             -- from the page base. This is needed in elements inside and Instance List Region
5697             IF p_il_persistent_node_id IS NOT NULL THEN
5698 
5699               l_base_persistent_node_id := p_il_persistent_node_id;
5700               l_base_expl_node_id := p_il_expl_node_id;
5701 
5702             ELSE
5703               -- base AMN is not passed, so continue using the AMN of the page as earlier
5704               SELECT persistent_node_id, pagebase_expl_node_id
5705                 INTO l_base_persistent_node_id, l_base_expl_node_id
5706                 FROM CZ_UI_PAGES
5707                WHERE ui_def_Id = p_target_ui_def_id
5708                  AND page_Id = p_target_ui_page_id;
5709             END IF;
5710 
5711             l_new_target_node_path := get_Runtime_Relative_Path(p_model_id             => l_ui_def_node.devl_project_id,
5712                                                                 p_base_persistent_node_Id => l_base_persistent_node_id,
5713                                                                 p_base_expl_id      => l_base_expl_node_id,
5714                                                                 p_persistent_node_id     => i.target_persistent_node_id);
5715                                                                 -- This does not seem right. We should pass a value for expl Id here
5716           ELSE
5717             l_new_target_node_path := NULL;
5718           END IF;
5719 
5720           INSERT INTO CZ_UI_ACTIONS
5721           (
5722           UI_ACTION_ID
5723           ,UI_DEF_ID
5724           ,SOURCE_PAGE_ID
5725           ,CONTEXT_COMPONENT_ID
5726           ,ELEMENT_ID
5727           ,RENDER_CONDITION_ID
5728           ,UI_ACTION_TYPE
5729           ,TARGET_UI_DEF_ID
5730           ,TARGET_PERSISTENT_NODE_ID
5731           ,TARGET_NODE_PATH
5732           ,TARGET_PAGE_SET_ID
5733           ,TARGET_PAGE_ID
5734           ,TARGET_URL
5735           ,FRAME_NAME
5736           ,TARGET_ANCHOR
5737           ,DELETED_FLAG
5738           ,SEEDED_FLAG
5739           ,CX_COMMAND_NAME
5740           ,WINDOW_PARAMETERS
5741           ,TARGET_WINDOW_TYPE
5742           ,TARGET_WINDOW_NAME
5743           ,TARGET_EXPL_NODE_ID
5744           ,URL_PROPERTY_ID
5745           ,PROC_PAGE_TEMPL_UI_DEF_ID
5746           ,PAGE_TITLE_TEXT_ID
5747           ,MAIN_MESSAGE_TEXT_ID
5748           ,PROCESSING_CAPTION_TEXT_ID
5749           ,PROCESSING_PAGE_TEMPL_ID
5750 --Processing page ER 9656558
5751           ,PROCESSING_PAGE_ENABLED_FLAG
5752           )
5753           VALUES(
5754           l_new_action_id
5755           ,p_target_ui_def_id
5756           ,p_target_ui_page_id
5757           ,i.CONTEXT_COMPONENT_ID
5758           ,p_new_element_id
5759           ,i.RENDER_CONDITION_ID
5760           ,i.UI_ACTION_TYPE
5761           ,i.TARGET_UI_DEF_ID
5762           ,i.TARGET_PERSISTENT_NODE_ID
5763           ,l_new_target_node_path
5764           ,i.TARGET_PAGE_SET_ID
5765           ,i.TARGET_PAGE_ID
5766           ,i.TARGET_URL
5767           ,i.FRAME_NAME
5768           ,i.TARGET_ANCHOR
5769           ,i.DELETED_FLAG
5770           ,'0'
5771           ,i.CX_COMMAND_NAME
5772           ,i.WINDOW_PARAMETERS
5773           ,i.TARGET_WINDOW_TYPE
5774           ,i.TARGET_WINDOW_NAME
5775           ,i.TARGET_EXPL_NODE_ID
5776           ,i.URL_PROPERTY_ID
5777           ,i.PROC_PAGE_TEMPL_UI_DEF_ID
5778           ,i.PAGE_TITLE_TEXT_ID
5779           ,i.MAIN_MESSAGE_TEXT_ID
5780           ,i.PROCESSING_CAPTION_TEXT_ID
5781           ,i.PROCESSING_PAGE_TEMPL_ID
5782           ,i.PROCESSING_PAGE_ENABLED_FLAG
5783           );
5784 
5785           set_User_Attribute(p_cz_attribute_name    => 'actionId',
5786                              p_cz_attribute_value   => TO_CHAR(l_new_action_id),
5787                              px_xml_attribute_value => px_user_attribute_value);
5788 
5789           IF p_source_template_id IS NOT NULL THEN
5790             l_counter := l_counter + 1;
5791             l_cached_elems_tbl(l_counter) := l_new_action_id;
5792             l_cached_source_elems_tbl(l_counter) := l_id;
5793           END IF;
5794 
5795           END LOOP;
5796 
5797           -- set global UI context to its value before this procedure call
5798           g_UI_Context := l_prev_ui_context;
5799         END IF;
5800         l_component_id := NULL;
5801         l_expl_node_id := NULL;
5802 
5803         FOR i IN g_condition_attr_tbl.First..g_condition_attr_tbl.Last
5804         LOOP
5805           BEGIN
5806             l_id := TO_NUMBER(get_User_Attribute(px_user_attribute_value,g_condition_attr_tbl(i)));
5807           EXCEPTION
5808             WHEN OTHERS THEN
5809               l_id := NULL;
5810           END;
5811           IF l_id IS NOT NULL THEN
5812 
5813             IF p_il_persistent_node_id IS NOT NULL THEN
5814               -- IL AMN passed in is not NULL which means that this element is part of an Instance List
5815               -- Region. We need to set the Component Id as the AMN of the UI element itself
5816               IF p_amn_persistent_node_id IS NOT NULL THEN
5817                 -- UI Conditions for elements inside Instance List regions are associated to the AMN of the element
5818                 -- as opposed to the Page base like in other case. Since this node is under an Instance List, we need
5819                 -- to update the rules component_id to be the AMN's ps_node_id
5820                 l_model_node := getNodeByPersistentAndExplId(p_amn_persistent_node_id, p_amn_expl_node_id);
5821                 l_component_id := l_model_node.ps_node_id;
5822                 l_expl_node_id := p_amn_expl_node_id;
5823               END IF;
5824             END IF;
5825             copy_UI_Rule(l_id,
5826                          l_new_rule_id,
5827                          p_target_ui_def_id,
5828                          p_target_ui_page_id,
5829                          p_new_element_id,
5830                          p_source_ui_def_id,
5831                          l_component_id,
5832                          l_expl_node_id,
5833                          p_xml_node => p_xml_node);
5834 
5835             SELECT persistent_rule_id INTO l_persistent_rule_id
5836             FROM cz_rules
5837             WHERE rule_id = l_new_rule_id;
5838 
5839 
5840             IF p_source_template_id IS NOT NULL THEN
5841               l_counter := l_counter + 1;
5842               l_cached_elems_tbl(l_counter) := l_new_rule_id;
5843               l_cached_source_elems_tbl(l_counter) := l_id;
5844             END IF;
5845 
5846             set_User_Attribute(p_cz_attribute_name    => g_condition_attr_tbl(i),
5847                                p_cz_attribute_value   => TO_CHAR(l_persistent_rule_id),
5848                                px_xml_attribute_value => px_user_attribute_value);
5849 
5850           END IF;
5851         END LOOP;
5852 
5853         FOR i IN g_caption_attr_tbl.First..g_caption_attr_tbl.Last
5854         LOOP
5855           BEGIN
5856             l_id := TO_NUMBER(get_User_Attribute(px_user_attribute_value,g_caption_attr_tbl(i)));
5857           EXCEPTION
5858             WHEN OTHERS THEN
5859               l_id := NULL;
5860           END;
5861 
5862           IF l_id IS NOT NULL THEN
5863 
5864               l_new_intl_text_id := NULL;
5865               l_persistent_intl_text_id := NULL;
5866 
5867               FOR k IN(SELECT * FROM CZ_LOCALIZED_TEXTS
5868                        WHERE intl_text_id=l_id AND seeded_flag=G_NO_FLAG
5869                               AND deleted_flag=G_NO_FLAG)
5870               LOOP
5871                 l_persistent_intl_text_id_tmp := null;
5872                 IF l_new_intl_text_id IS NULL THEN
5873                   l_new_intl_text_id := allocateId('CZ_INTL_TEXTS_S');
5874                 END IF;
5875                 INSERT INTO CZ_LOCALIZED_TEXTS
5876                 (
5877                 LOCALE_ID
5878                 ,LOCALIZED_STR
5879                 ,INTL_TEXT_ID
5880                 ,DELETED_FLAG
5881                 ,EFF_FROM
5882                 ,EFF_TO
5883                 ,SECURITY_MASK
5884                 ,EFF_MASK
5885                 ,CHECKOUT_USER
5886                 ,ORIG_SYS_REF
5887                 ,LANGUAGE
5888                 ,SOURCE_LANG
5889                 ,UI_DEF_ID
5890                 ,MODEL_ID
5891                 ,SEEDED_FLAG
5892                 ,UI_PAGE_ID
5893                 ,UI_PAGE_ELEMENT_ID
5894                 )
5895                 VALUES(
5896                 k.LOCALE_ID
5897                 ,k.LOCALIZED_STR
5898                 ,l_new_intl_text_id
5899                 ,k.DELETED_FLAG
5900                 ,k.EFF_FROM
5901                 ,k.EFF_TO
5902                 ,k.SECURITY_MASK
5903                 ,k.EFF_MASK
5904                 ,k.CHECKOUT_USER
5905                 ,k.ORIG_SYS_REF
5906                 ,k.LANGUAGE
5907                 ,k.SOURCE_LANG
5908                 ,p_target_ui_def_id
5909                 ,l_ui_def_node.devl_project_id
5910                 ,'0'
5911                 ,p_target_ui_page_id
5912                 ,p_new_element_id
5913                 ) RETURNING PERSISTENT_INTL_TEXT_ID INTO l_persistent_intl_text_id_tmp;
5914 
5915                 IF (k.source_lang = k.language) THEN
5916                   l_persistent_intl_text_id := l_persistent_intl_text_id_tmp;
5917                 END IF;
5918               END LOOP;
5919 
5920               IF l_new_intl_text_id IS NOT NULL THEN
5921                 set_User_Attribute(p_cz_attribute_name    => g_caption_attr_tbl(i),
5922                                    p_cz_attribute_value   => TO_CHAR(l_persistent_intl_text_id),
5923                                    px_xml_attribute_value => px_user_attribute_value);
5924 
5925                 IF p_source_template_id IS NOT NULL THEN
5926                   l_counter := l_counter + 1;
5927                   l_cached_elems_tbl(l_counter) := l_new_intl_text_id;
5928                   l_cached_source_elems_tbl(l_counter) := l_id;
5929                 END IF;
5930               END IF;
5931            ELSE -- l_id is NULL
5932 
5933             BEGIN
5934               l_id := g_cx_names_tbl(TO_NUMBER(p_new_element_id));
5935             EXCEPTION
5936               WHEN OTHERS THEN
5937                 NULL;
5938             END;
5939 
5940             IF l_id IS NOT NULL THEN
5941                  set_User_Attribute(p_cz_attribute_name    => g_caption_attr_tbl(i),
5942                                     p_cz_attribute_value   => TO_CHAR(l_id),
5943                                     px_xml_attribute_value => px_user_attribute_value);
5944 
5945             ELSE
5946                  set_User_Attribute(p_cz_attribute_name    => g_caption_attr_tbl(i),
5947                                     p_cz_attribute_value   => TO_CHAR(g_UI_Context.DRILLDOWN_CONTROL_TEXT_ID),
5948                                     px_xml_attribute_value => px_user_attribute_value);
5949             END IF;
5950 
5951           END IF;
5952         END LOOP;
5953 
5954     IF l_cached_elems_tbl.COUNT > 0 THEN
5955       FOR i IN l_cached_elems_tbl.First..l_cached_elems_tbl.Last
5956       LOOP
5957 
5958         INSERT INTO CZ_UI_TEMPLATE_ELEMENTS
5959         (
5960         TEMPLATE_ID
5961         ,UI_DEF_ID
5962         ,ELEMENT_TYPE
5963         ,ELEMENT_ID
5964         ,PERSISTENT_ELEMENT_ID
5965         ,DELETED_FLAG
5966         ,SEEDED_FLAG
5967         )
5968         SELECT
5969          p_target_template_id
5970         ,p_target_ui_def_id
5971         ,ELEMENT_TYPE
5972         ,l_cached_elems_tbl(i)
5973         ,l_cached_elems_tbl(i)
5974         ,G_NO_FLAG
5975         ,G_NO_FLAG
5976         FROM CZ_UI_TEMPLATE_ELEMENTS
5977         WHERE template_id=p_source_template_id AND
5978               ui_def_id=p_source_ui_def_id AND
5979               element_id=l_cached_source_elems_tbl(i) AND
5980               deleted_flag=G_NO_FLAG;
5981       END LOOP;
5982     END IF;
5983 
5984   END handle_User_Attributes;
5985 
5986   --
5987   -- handle user attributes in UI template
5988   --
5989   PROCEDURE handle_Template_Attributes
5990   (px_user_attribute_value IN OUT NOCOPY VARCHAR2,
5991    p_new_element_id        IN VARCHAR2,
5992    p_source_ui_def_id      IN NUMBER,
5993    p_source_template_id    IN NUMBER,
5994    p_target_ui_def_id      IN NUMBER,
5995    p_target_template_id    IN NUMBER,
5996    p_xml_node              IN xmldom.DOMNode DEFAULT g_Null_Xml_Node) IS
5997 
5998     l_cached_elems_tbl        number_tbl_type;
5999     l_cached_source_elems_tbl number_tbl_type;
6000     l_counter                 NUMBER := 0;
6001 
6002     l_id               NUMBER;
6003     l_new_action_id    NUMBER;
6004     l_new_rule_id      NUMBER;
6005     l_persistent_rule_id NUMBER;
6006     l_new_intl_text_id NUMBER;
6007     l_persistent_intl_text_id NUMBER;
6008     l_persistent_intl_text_id_tmp NUMBER;
6009 
6010   BEGIN
6011 
6012     IF px_user_attribute_value IS NULL THEN
6013       RETURN;
6014     END IF;
6015 
6016     BEGIN
6017       l_id := TO_NUMBER(get_User_Attribute(px_user_attribute_value,'actionId'));
6018     EXCEPTION
6019       WHEN OTHERS THEN
6020         l_id := NULL;
6021     END;
6022 
6023     IF l_id IS NOT NULL THEN
6024 
6025       FOR i IN(SELECT * FROM CZ_UI_ACTIONS
6026                 WHERE ui_action_id=l_id AND
6027                       ui_def_id=p_source_ui_def_id AND
6028                       source_page_id=0 AND
6029                       seeded_flag=G_NO_FLAG)
6030       LOOP
6031 
6032           l_new_action_id := allocateId('CZ_UI_ACTIONS_S');
6033 
6034           INSERT INTO CZ_UI_ACTIONS
6035           (
6036           UI_ACTION_ID
6037           ,UI_DEF_ID
6038           ,SOURCE_PAGE_ID
6039           ,CONTEXT_COMPONENT_ID
6040           ,ELEMENT_ID
6041           ,RENDER_CONDITION_ID
6042           ,UI_ACTION_TYPE
6043           ,TARGET_UI_DEF_ID
6044           ,TARGET_PERSISTENT_NODE_ID
6045           ,TARGET_NODE_PATH
6046           ,TARGET_PAGE_SET_ID
6047           ,TARGET_PAGE_ID
6048           ,TARGET_URL
6049           ,FRAME_NAME
6050           ,TARGET_ANCHOR
6051           ,DELETED_FLAG
6052           ,SEEDED_FLAG
6053           ,CX_COMMAND_NAME
6054           ,WINDOW_PARAMETERS
6055           ,TARGET_WINDOW_TYPE
6056           ,TARGET_WINDOW_NAME
6057           ,TARGET_EXPL_NODE_ID
6058           ,URL_PROPERTY_ID
6059           ,PROC_PAGE_TEMPL_UI_DEF_ID
6060           ,PAGE_TITLE_TEXT_ID
6061           ,MAIN_MESSAGE_TEXT_ID
6062           ,PROCESSING_CAPTION_TEXT_ID
6063           ,PROCESSING_PAGE_TEMPL_ID
6064 --Processing page ER 9656558
6065        		,PROCESSING_PAGE_ENABLED_FLAG
6066           )
6067           VALUES(
6068           l_new_action_id
6069           ,p_target_ui_def_id
6070           ,0
6071           ,i.CONTEXT_COMPONENT_ID
6072           ,p_new_element_id
6073           ,i.RENDER_CONDITION_ID
6074           ,i.UI_ACTION_TYPE
6075           ,i.TARGET_UI_DEF_ID
6076           ,i.TARGET_PERSISTENT_NODE_ID
6077           ,i.TARGET_NODE_PATH
6078           ,i.TARGET_PAGE_SET_ID
6079           ,i.TARGET_PAGE_ID
6080           ,i.TARGET_URL
6081           ,i.FRAME_NAME
6082           ,i.TARGET_ANCHOR
6083           ,i.DELETED_FLAG
6084           ,'0'
6085           ,i.CX_COMMAND_NAME
6086           ,i.WINDOW_PARAMETERS
6087           ,i.TARGET_WINDOW_TYPE
6088           ,i.TARGET_WINDOW_NAME
6089           ,i.TARGET_EXPL_NODE_ID
6090           ,i.URL_PROPERTY_ID
6091           ,i.PROC_PAGE_TEMPL_UI_DEF_ID
6092           ,i.PAGE_TITLE_TEXT_ID
6093           ,i.MAIN_MESSAGE_TEXT_ID
6094           ,i.PROCESSING_CAPTION_TEXT_ID
6095           ,i.PROCESSING_PAGE_TEMPL_ID
6096           ,i.PROCESSING_PAGE_ENABLED_FLAG
6097           );
6098 
6099           set_User_Attribute(p_cz_attribute_name    => 'actionId',
6100                              p_cz_attribute_value   => TO_CHAR(l_new_action_id),
6101                              px_xml_attribute_value => px_user_attribute_value);
6102 
6103           IF p_source_template_id IS NOT NULL THEN
6104             l_counter := l_counter + 1;
6105             l_cached_elems_tbl(l_counter) := l_new_action_id;
6106             l_cached_source_elems_tbl(l_counter) := l_id;
6107           END IF;
6108 
6109           END LOOP;
6110         END IF;
6111 
6112         FOR i IN g_condition_attr_tbl.FIRST..g_condition_attr_tbl.LAST
6113         LOOP
6114           BEGIN
6115             l_id := TO_NUMBER(get_User_Attribute(px_user_attribute_value,g_condition_attr_tbl(i)));
6116           EXCEPTION
6117             WHEN OTHERS THEN
6118               l_id := NULL;
6119           END;
6120           IF l_id IS NOT NULL THEN
6121             copy_UI_Rule(l_id, l_new_rule_id,0 , 0, p_new_element_id,p_source_ui_def_id, p_xml_node => p_xml_node);
6122 
6123             SELECT persistent_rule_id INTO l_persistent_rule_id
6124             FROM cz_rules
6125             WHERE rule_id = l_new_rule_id;
6126 
6127 
6128             IF p_source_template_id IS NOT NULL THEN
6129               l_counter := l_counter + 1;
6130               l_cached_elems_tbl(l_counter) := l_new_rule_id;
6131               l_cached_source_elems_tbl(l_counter) := l_id;
6132             END IF;
6133 
6134             set_User_Attribute(p_cz_attribute_name    => g_condition_attr_tbl(i),
6135                                p_cz_attribute_value   => TO_CHAR(l_persistent_rule_id),
6136                                px_xml_attribute_value => px_user_attribute_value);
6137 
6138           END IF;
6139         END LOOP;
6140 
6141         FOR i IN g_caption_attr_tbl.FIRST..g_caption_attr_tbl.LAST
6142         LOOP
6143 
6144           BEGIN
6145             l_id := TO_NUMBER(get_User_Attribute(px_user_attribute_value,g_caption_attr_tbl(i)));
6146           EXCEPTION
6147             WHEN OTHERS THEN
6148               l_id := NULL;
6149           END;
6150 
6151           IF l_id IS NOT NULL THEN
6152 
6153               l_new_intl_text_id := NULL;
6154               l_persistent_intl_text_id := NULL;
6155 
6156               FOR k IN(SELECT * FROM CZ_LOCALIZED_TEXTS
6157                        WHERE intl_text_id=l_id AND seeded_flag=G_NO_FLAG
6158                               AND deleted_flag=G_NO_FLAG)
6159               LOOP
6160                 IF l_new_intl_text_id IS NULL THEN
6161                 l_persistent_intl_text_id_tmp := null;
6162                   l_new_intl_text_id := allocateId('CZ_INTL_TEXTS_S');
6163                 END IF;
6164                 INSERT INTO CZ_LOCALIZED_TEXTS
6165                 (
6166                 LOCALE_ID
6167                 ,LOCALIZED_STR
6168                 ,INTL_TEXT_ID
6169                 ,DELETED_FLAG
6170                 ,EFF_FROM
6171                 ,EFF_TO
6172                 ,SECURITY_MASK
6173                 ,EFF_MASK
6174                 ,CHECKOUT_USER
6175                 ,ORIG_SYS_REF
6176                 ,LANGUAGE
6177                 ,SOURCE_LANG
6178                 ,UI_DEF_ID
6179                 ,MODEL_ID
6180                 ,SEEDED_FLAG
6181                 ,UI_PAGE_ID
6182                 ,UI_PAGE_ELEMENT_ID
6183                 )
6184                 VALUES(
6185                 k.LOCALE_ID
6186                 ,k.LOCALIZED_STR
6187                 ,l_new_intl_text_id
6188                 ,k.DELETED_FLAG
6189                 ,k.EFF_FROM
6190                 ,k.EFF_TO
6191                 ,k.SECURITY_MASK
6192                 ,k.EFF_MASK
6193                 ,k.CHECKOUT_USER
6194                 ,k.ORIG_SYS_REF
6195                 ,k.LANGUAGE
6196                 ,k.SOURCE_LANG
6197                 ,p_target_ui_def_id
6198                 ,NVL(k.model_id,0)
6199                 ,'0'
6200                 ,0
6201                 ,p_new_element_id
6202                 ) RETURNING PERSISTENT_INTL_TEXT_ID INTO l_persistent_intl_text_id_tmp;
6203 
6204                 IF (k.source_lang = k.language) THEN
6205                   l_persistent_intl_text_id := l_persistent_intl_text_id_tmp;
6206                 END IF;
6207 
6208               END LOOP;
6209 
6210               IF l_new_intl_text_id IS NOT NULL THEN
6211                 set_User_Attribute(p_cz_attribute_name    => g_caption_attr_tbl(i),
6212                                    p_cz_attribute_value   => TO_CHAR(l_persistent_intl_text_id),
6213                                    px_xml_attribute_value => px_user_attribute_value);
6214 
6215                 IF p_source_template_id IS NOT NULL THEN
6216                   l_counter := l_counter + 1;
6217                   l_cached_elems_tbl(l_counter) := l_new_intl_text_id;
6218                   l_cached_source_elems_tbl(l_counter) := l_id;
6219                 END IF;
6220               END IF;
6221 
6222           END IF;
6223         END LOOP;
6224 
6225     IF l_cached_elems_tbl.COUNT > 0 THEN
6226       FOR i IN l_cached_elems_tbl.FIRST..l_cached_elems_tbl.LAST
6227       LOOP
6228         INSERT INTO CZ_UI_TEMPLATE_ELEMENTS
6229         (
6230         TEMPLATE_ID
6231         ,UI_DEF_ID
6232         ,ELEMENT_TYPE
6233         ,ELEMENT_ID
6234         ,PERSISTENT_ELEMENT_ID
6235         ,DELETED_FLAG
6236         ,SEEDED_FLAG
6237         )
6238         SELECT
6239          p_target_template_id
6240         ,p_target_ui_def_id
6241         ,ELEMENT_TYPE
6242         ,l_cached_elems_tbl(i)
6243         ,l_cached_elems_tbl(i)
6244         ,G_NO_FLAG
6245         ,G_NO_FLAG
6246         FROM CZ_UI_TEMPLATE_ELEMENTS
6247         WHERE template_id=p_source_template_id AND
6248               ui_def_id=p_source_ui_def_id AND
6249               element_id=l_cached_source_elems_tbl(i) AND
6250               deleted_flag=G_NO_FLAG;
6251       END LOOP;
6252     END IF;
6253 
6254   END handle_Template_Attributes;
6255 
6256    PROCEDURE copy_Node_Related_Entities(p_ui_def_id         NUMBER,
6257                                        p_ui_page_id        NUMBER,
6258                                        p_xml_node          xmldom.DOMNode,
6259                                        p_target_ui_def_id  NUMBER DEFAULT NULL,
6260                                        p_source_ui_page_id        NUMBER DEFAULT NULL,
6261                                        p_source_ui_def_id        NUMBER DEFAULT NULL) IS
6262 
6263     l_user_attribute_value VARCHAR2(4000);
6264     l_element_id           VARCHAR2(255);
6265     l_target_ui_def_id     NUMBER;
6266     l_source_ui_page_id     NUMBER;
6267     l_source_ui_def_id      Number;
6268 
6269   BEGIN
6270 
6271     IF p_target_ui_def_id IS NULL THEN
6272       l_target_ui_def_id := p_ui_def_id;
6273     ELSE
6274       l_target_ui_def_id := p_target_ui_def_id;
6275     END IF;
6276 
6277     IF p_source_ui_def_id IS NULL THEN
6278       l_source_ui_def_id := p_ui_def_id;
6279     ELSE
6280       l_source_ui_def_id := p_source_ui_def_id;
6281     END IF;
6282 
6283     if p_source_ui_page_id IS NULL THEN
6284       l_source_ui_page_id := p_ui_page_id;
6285     ELSE
6286       l_source_ui_page_id := p_source_ui_page_id;
6287     END IF;
6288 
6289     l_element_id := get_Attribute_Value(p_xml_node, G_ID_ATTRIBUTE);
6290 
6291     l_user_attribute_value := get_Attribute_Value(p_xml_node, G_USER_ATTRIBUTE3_NAME);
6292 
6293     IF l_user_attribute_value IS NOT NULL THEN
6294       handle_User_Attributes
6295       (px_user_attribute_value => l_user_attribute_value,
6296        p_source_ui_def_id      => l_source_ui_def_id,
6297        p_source_ui_page_id     => l_source_ui_page_id,
6298        p_target_ui_def_id      => l_target_ui_def_id,
6299        p_target_ui_page_id     => p_ui_page_id,
6300        p_new_element_id        => l_element_id,
6301        p_xml_node              => p_xml_node);
6302 
6303        set_Attribute(p_xml_node,
6304                      G_USER_ATTRIBUTE3_NAME,
6305                      l_user_attribute_value);
6306     END IF;
6307 
6308   END copy_Node_Related_Entities;
6309 
6310 
6311   PROCEDURE handle_UI_CASE_Id(p_xml_node xmldom.DOMNode) IS
6312     l_user_attribute4  VARCHAR2(4000);
6313   BEGIN
6314     IF xmldom.getNodeName(p_xml_node)='ui:case' THEN
6315 
6316       l_user_attribute4 := get_Attribute_Value(p_xml_node,
6317                                                G_USER_ATTRIBUTE4_NAME);
6318       IF l_user_attribute4 IS NOT NULL THEN
6319         set_User_Attribute(p_cz_attribute_name    => 'caseId',
6320                            p_cz_attribute_value   => get_Element_Id(),
6321                            px_xml_attribute_value => l_user_attribute4);
6322 
6323         set_Attribute(p_xml_node,G_USER_ATTRIBUTE4_NAME,l_user_attribute4);
6324 
6325       END IF;
6326     END IF;
6327   END handle_UI_CASE_Id;
6328 
6329    PROCEDURE handle_USER_ATTRIBUTE10
6330    (p_xml_root_node xmldom.DOMNode,
6331     p_ui_def_id     NUMBER,
6332     p_ui_page_id    NUMBER,
6333     p_ui_element_id VARCHAR2) IS
6334 
6335      l_user_attribute3_value  VARCHAR2(4000);
6336      l_user_attribute10_value VARCHAR2(4000);
6337      l_refenabledCondnId      VARCHAR2(255);
6338      l_refenabledCondnComp    VARCHAR2(255);
6339      l_refenabledCondnValue   VARCHAR2(255);
6340      l_new_refenabledCondnId  NUMBER;
6341      l_refdisplayCondnId      VARCHAR2(255);
6342      l_refdisplayCondnComp    VARCHAR2(255);
6343      l_refdisplayCondnValue   VARCHAR2(255);
6344      l_new_refdisplayCondnId  NUMBER;
6345      l_persistent_rule_id     NUMBER;
6346 
6347    BEGIN
6348 
6349      l_user_attribute3_value := get_Attribute_Value(p_xml_root_node,
6350                                                     G_USER_ATTRIBUTE3_NAME);
6351 
6352      IF INSTR(l_user_attribute3_value,'enabledCondnId=')=0 THEN
6353 
6354        l_user_attribute10_value := get_Attribute_Value(p_xml_root_node, G_USER_ATTRIBUTE10_NAME);
6355 
6356        IF INSTR(l_user_attribute10_value,'refenabledCondnId')>0 THEN
6357          l_refenabledCondnId    := get_User_Attribute(l_user_attribute10_value, 'refenabledCondnId');
6358          l_refenabledCondnComp  := get_User_Attribute(l_user_attribute10_value, 'refenabledCondnComp');
6359          l_refenabledCondnValue := get_User_Attribute(l_user_attribute10_value, 'refenabledCondnValue');
6360 
6361          copy_UI_Rule(p_rule_id       => TO_NUMBER(l_refenabledCondnId),
6362                       x_rule_id       => l_new_refenabledCondnId,
6363                       p_ui_def_id     => p_ui_def_id,
6364                       p_ui_page_id    => p_ui_page_id,
6365                       p_ui_element_id => p_ui_element_id,
6366                       p_source_ui_def_id => p_ui_def_id);
6367 
6368             SELECT persistent_rule_id INTO l_persistent_rule_id
6369             FROM cz_rules
6370             WHERE rule_id = l_new_refenabledCondnId;
6371 
6372 
6373          l_user_attribute3_value := l_user_attribute3_value||'|enabledCondnId='||TO_CHAR(l_persistent_rule_id)||
6374              '|enabledCondnComp=' || l_refenabledCondnComp || '|enabledCondnValue='||l_refenabledCondnValue;
6375 
6376          xmldom.removeAttribute(xmldom.makeElement(p_xml_root_node), G_USER_ATTRIBUTE10_NAME);
6377          set_Attribute(p_xml_root_node,G_USER_ATTRIBUTE3_NAME,l_user_attribute3_value);
6378 
6379        END IF;  -- end of IF INSTR(l_user_attribute10_value,'refenabledCondnId')>0
6380 
6381      END IF; -- end of IF INSTR(l_user_attribute3_value,'enabledCondnId=')=0
6382 
6383      IF INSTR(l_user_attribute3_value,'displayCondnId=')=0 THEN
6384        IF INSTR(l_user_attribute10_value,'refdisplayCondnId')>0 THEN
6385          l_refdisplayCondnId    := get_User_Attribute(l_user_attribute10_value, 'refdisplayCondnId');
6386          l_refdisplayCondnComp  := get_User_Attribute(l_user_attribute10_value, 'refdisplayCondnComp');
6387          l_refdisplayCondnValue := get_User_Attribute(l_user_attribute10_value, 'refdisplayCondnValue');
6388 
6389 
6390          copy_UI_Rule(p_rule_id          => TO_NUMBER(l_refdisplayCondnId),
6391                       x_rule_id          => l_new_refdisplayCondnId,
6392                       p_ui_def_id        => p_ui_def_id,
6393                       p_ui_page_id       => p_ui_page_id,
6394                       p_ui_element_id    => p_ui_element_id,
6395                       p_source_ui_def_id => p_ui_def_id);
6396 
6397             l_persistent_rule_id := null;
6398             SELECT persistent_rule_id INTO l_persistent_rule_id
6399             FROM cz_rules
6400             WHERE rule_id = l_new_refdisplayCondnId;
6401 
6402          l_user_attribute3_value := l_user_attribute3_value||'|displayCondnId='||TO_CHAR(l_persistent_rule_id)||
6403            '|displayCondnComp=' || l_refdisplayCondnComp || '|displayCondnValue='||l_refdisplayCondnValue;
6404          xmldom.removeAttribute(xmldom.makeElement(p_xml_root_node), G_USER_ATTRIBUTE10_NAME);
6405          set_Attribute(p_xml_root_node,G_USER_ATTRIBUTE3_NAME,l_user_attribute3_value);
6406 
6407        END IF;  -- end of IF INSTR(l_user_attribute10_value,'refdisplayCondnId')>0
6408 
6409      END IF; -- end of IF INSTR(l_user_attribute10_value,'refdisplayCondnId')>0
6410 
6411   END handle_USER_ATTRIBUTE10;
6412 
6413   PROCEDURE create_wrapper_table_layout(x_xml_table_node          OUT NOCOPY xmldom.DOMNode,
6414                                         x_xml_tabuicontent_node   OUT NOCOPY xmldom.DOMNode,
6415                                         p_target_subtree_xml_node xmldom.DOMNode) IS
6416 
6417     l_doc                   xmldom.DOMDocument;
6418     l_xml_table_node        xmldom.DOMNode;
6419 
6420   BEGIN
6421     l_doc := parse_JRAD_Document(G_TABLELAYOUT_TEMPLATE);
6422 
6423     l_xml_table_node :=xmldom.makeNode(xmldom.getDocumentElement(l_doc));
6424 
6425     remove_TopLevel_Attributes(l_xml_table_node);
6426 
6427     --x_xml_table_node := xmldom.cloneNode(l_xml_table_node,TRUE);
6428     x_xml_table_node := cloneNode(l_xml_table_node, p_target_subtree_xml_node);
6429 
6430     set_Attribute(xmldom.makeElement(x_xml_table_node),G_ID_ATTRIBUTE,get_Element_Id());
6431     set_Attribute(xmldom.makeElement(x_xml_table_node),G_USER_ATTRIBUTE5_NAME,'TABLELAYOUT_FOR_UI_GEN');
6432 
6433     x_xml_tabuicontent_node := getUIContents(x_xml_table_node);
6434 
6435   END create_wrapper_table_layout;
6436 
6437   FUNCTION insert_before(p_parent_xml_node  IN xmldom.DOMNode,
6438                          p_new_xml_node     IN xmldom.DOMNode,
6439              p_ref_xml_node     IN xmldom.DOMNode)
6440     RETURN xmldom.DOMNode IS
6441   l_new_xml_node xmldom.DOMNode;
6442   BEGIN
6443 
6444     IF xmldom.isNull(p_ref_xml_node) THEN
6445       l_new_xml_node := xmldom.appendChild(p_parent_xml_node, p_new_xml_node);
6446     ELSE
6447     l_new_xml_node := xmldom.insertBefore(p_parent_xml_node, p_new_xml_node, p_ref_xml_node);
6448   END IF;
6449 
6450     return l_new_xml_node;
6451   END insert_before;
6452 
6453   FUNCTION insert_node(p_ui_node             IN CZ_UI_PAGE_ELEMENTS%ROWTYPE,
6454                        p_new_xml_node        IN xmldom.DOMNode,
6455                        p_parent_xml_node     IN xmldom.DOMNode)
6456    RETURN xmldom.DOMNode IS
6457 
6458   l_node                  CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE;
6459     l_doc                   xmldom.DOMDocument;
6460     l_anchor_doc            xmldom.DOMDocument;
6461     l_subtree_doc           xmldom.DOMDocument;
6462     l_xml_root_node         xmldom.DOMNode;
6463     l_new_xml_root_node     xmldom.DOMNode;
6464     l_out_xml_node          xmldom.DOMNode;
6465     l_xml_table_node        xmldom.DOMNode;
6466     l_new_xml_table_node    xmldom.DOMNode;
6467     l_xml_anchor_node       xmldom.DOMNode;
6468     l_new_xml_anchor_node   xmldom.DOMNode;
6469     l_xml_node              xmldom.DOMNode;
6470     l_xml_tabuicontent_node xmldom.DOMNode;
6471     l_ui_contents_xml_node  xmldom.DOMNode;
6472     l_prev_node             xmldom.DOMNode;
6473     l_next_node             xmldom.DOMNode;
6474     l_prev_node_parent      xmldom.DOMNode;
6475     l_next_node_parent      xmldom.DOMNode;
6476     l_prev_node_parent_ui_cnt    xmldom.DOMNode;
6477     l_next_node_parent_ui_cnt    xmldom.DOMNode;
6478     l_grand_parent          xmldom.DOMNode;
6479     l_next_sibling_of_parent xmldom.DOMNode;
6480     l_child_nodes_tbl       xmldom.DOMNodeList;
6481     l_attribute_value       VARCHAR2(4000);
6482     l_attribute_source      VARCHAR2(4000);
6483     l_user_attribute        VARCHAR2(4000);
6484     l_user_attribute4       VARCHAR2(4000);
6485     l_prev_element_id       VARCHAR2(255);
6486     l_next_element_id       VARCHAR2(255);
6487     l_prev_element_template_id NUMBER;
6488     l_next_element_template_id NUMBER;
6489     l_prev_elt_lyt_ui_style VARCHAR2(1);
6490     l_next_elt_lyt_ui_style VARCHAR2(1);
6491     l_lyt_ui_style          VARCHAR2(1);
6492     l_old_ui_element_id     VARCHAR2(255);
6493     l_new_ui_element_id     VARCHAR2(255);
6494     l_switcher_element_id   VARCHAR2(255);
6495     l_user_attribute3_value VARCHAR2(4000);
6496     l_switcher_casename     VARCHAR2(255);
6497     l_length                NUMBER;
6498     l_ui_action_id          NUMBER;
6499     l_element_signature_id  NUMBER;
6500     l_wrap_it               BOOLEAN;
6501     l_drilldown_text_id     NUMBER;
6502     l_wrap_with_links       BOOLEAN := FALSE;
6503     l_template_is_used_by_ref BOOLEAN := TRUE;
6504 
6505   BEGIN
6506 
6507 
6508     l_node := get_Model_Node_By_Persist_Id(p_ui_node.persistent_node_id,g_UI_Context.devl_project_id);
6509     l_new_xml_root_node := p_new_xml_node;
6510 
6511   --DEBUG('asp:insert_node ' || l_node.name);
6512 
6513     BEGIN
6514 
6515       SELECT element_id, ctrl_template_id INTO l_prev_element_id, l_prev_element_template_id
6516       FROM CZ_UI_PAGE_ELEMENTS
6517       WHERE ui_def_id=p_ui_node.ui_def_id AND
6518             page_id = p_ui_node.page_id AND
6519             parent_element_id = p_ui_node.parent_element_id AND
6520             deleted_flag NOT IN (G_YES_FLAG, G_LIMBO_FLAG) AND
6521             seq_nbr = (SELECT max(seq_nbr)
6522                        FROM CZ_UI_PAGE_ELEMENTS
6523                        WHERE ui_def_id=p_ui_node.ui_def_id AND
6524                              page_id = p_ui_node.page_id AND
6525                              parent_element_id = p_ui_node.parent_element_id AND
6526                              seq_nbr<p_ui_node.seq_nbr AND
6527                              deleted_flag NOT IN (G_YES_FLAG, G_LIMBO_FLAG) AND
6528                              NOT (element_type = G_UI_DRILLDOWN_NODE_TYPE AND
6529                                   ctrl_template_id IS NULL) AND
6530                              NOT (element_signature_id IS NULL AND ctrl_template_id IS NULL))
6531             AND rownum < 2;
6532 
6533     EXCEPTION
6534       WHEN NO_DATA_FOUND THEN
6535            NULL;
6536     END;
6537 
6538     --DEBUG('asp:Here 1');
6539 
6540     BEGIN
6541       SELECT element_id, ctrl_template_id INTO l_next_element_id, l_next_element_template_id
6542       FROM CZ_UI_PAGE_ELEMENTS
6543       WHERE ui_def_id=p_ui_node.ui_def_id AND
6544             page_id = p_ui_node.page_id AND
6545             parent_element_id = p_ui_node.parent_element_id AND
6546             deleted_flag NOT IN (G_YES_FLAG, G_LIMBO_FLAG, G_MARK_TO_DELETE) AND
6547             seq_nbr = ( SELECT min(seq_nbr)
6548                         FROM CZ_UI_PAGE_ELEMENTS
6549                         WHERE ui_def_id=p_ui_node.ui_def_id AND
6550                               page_id = p_ui_node.page_id AND
6551                               parent_element_id = p_ui_node.parent_element_id AND
6552                               seq_nbr>p_ui_node.seq_nbr AND
6553                               deleted_flag NOT IN (G_YES_FLAG, G_LIMBO_FLAG, G_MARK_TO_DELETE, G_MARK_TO_ADD, G_MARK_TO_MOVE) AND
6554                               NOT (element_type = G_UI_DRILLDOWN_NODE_TYPE AND
6555                                    ctrl_template_id IS NULL) AND
6556                               NOT (element_signature_id IS NULL AND ctrl_template_id IS NULL))
6557             AND rownum < 2;
6558 
6559     EXCEPTION
6560       WHEN NO_DATA_FOUND THEN
6561            NULL;
6562     END;
6563 
6564     --DEBUG('Here 2');
6565 
6566   IF l_prev_element_id IS NOT NULL THEN
6567     l_prev_node := g_dom_elements_tbl(TO_NUMBER(l_prev_element_id));
6568 
6569     l_prev_node_parent_ui_cnt := xmldom.getParentNode(l_prev_node);
6570     l_prev_node_parent := xmldom.getParentNode(l_prev_node_parent_ui_cnt);
6571     BEGIN
6572         SELECT layout_ui_style INTO l_prev_elt_lyt_ui_style
6573       FROM CZ_UI_TEMPLATES
6574       WHERE template_id = l_prev_element_template_id
6575       AND ui_def_id = 0
6576     AND deleted_flag = G_NO_FLAG;
6577 
6578     EXCEPTION
6579       WHEN NO_DATA_FOUND THEN
6580       NULL;
6581     END;
6582   END IF;
6583 
6584   --DEBUG('Here 3');
6585 
6586   IF l_next_element_id IS NOT NULL THEN
6587     l_next_node := g_dom_elements_tbl(TO_NUMBER(l_next_element_id));
6588     l_next_node_parent_ui_cnt := xmldom.getParentNode(l_next_node);
6589     l_next_node_parent := xmldom.getParentNode(l_next_node_parent_ui_cnt);
6590     BEGIN
6591         SELECT layout_ui_style INTO l_next_elt_lyt_ui_style
6592       FROM CZ_UI_TEMPLATES
6593       WHERE template_id = l_next_element_template_id
6594       AND ui_def_id = 0
6595     AND deleted_flag = G_NO_FLAG;
6596 
6597     EXCEPTION
6598       WHEN NO_DATA_FOUND THEN
6599       NULL;
6600     END;
6601   END IF;
6602 
6603   --DEBUG('Here 4');
6604 
6605   IF p_ui_node.ctrl_template_id IS NOT NULL THEN
6606 
6607     SELECT layout_ui_style INTO l_lyt_ui_style
6608   FROM CZ_UI_TEMPLATES
6609   WHERE template_id = p_ui_node.ctrl_template_id
6610     AND ui_def_id = 0
6611     AND deleted_flag = G_NO_FLAG;
6612 
6613     IF l_lyt_ui_style = G_LABEL_PAIR_LAYOUT_STYLE THEN
6614       l_wrap_it := TRUE;
6615   ELSE
6616     l_wrap_it := FALSE;
6617     END IF;
6618   END IF;
6619 
6620   --DEBUG('Here 5');
6621 
6622   IF l_prev_element_id IS NOT NULL
6623         OR l_next_element_id IS NOT NULL THEN
6624       IF l_wrap_it THEN
6625         IF l_prev_element_id IS NOT NULL AND
6626           NVL(l_prev_elt_lyt_ui_style, G_OTHER_LAYOUT_STYLE) = G_LABEL_PAIR_LAYOUT_STYLE THEN
6627             l_next_node := xmldom.getNextSibling(l_prev_node);
6628         l_new_xml_root_node := insert_before(l_prev_node_parent_ui_cnt, l_new_xml_root_node, l_next_node);
6629         ELSIF l_next_element_id IS NOT NULL AND
6630              NVL(l_next_elt_lyt_ui_style, G_OTHER_LAYOUT_STYLE) = G_LABEL_PAIR_LAYOUT_STYLE THEN
6631           l_new_xml_root_node := insert_before(l_next_node_parent_ui_cnt, l_new_xml_root_node, l_next_node);
6632         ELSE
6633           create_wrapper_table_layout(l_xml_table_node, l_xml_tabuicontent_node, p_parent_xml_node);
6634           l_new_xml_root_node := xmldom.appendChild(l_xml_tabuicontent_node, l_new_xml_root_node);
6635           IF l_prev_element_id IS NOT NULL THEN
6636             l_next_node := xmldom.getNextSibling(l_prev_node);
6637             l_xml_table_node := insert_before(l_prev_node_parent_ui_cnt, l_xml_table_node, l_next_node);
6638           ELSIF l_next_element_id IS NOT NULL THEN
6639             l_xml_table_node := insert_before(l_next_node_parent_ui_cnt, l_xml_table_node, l_next_node);
6640           ELSE
6641             l_ui_contents_xml_node := getUIContents(p_parent_xml_node);
6642             l_xml_table_node := xmldom.appendChild(l_ui_contents_xml_node, l_xml_table_node);
6643           END IF;
6644         END IF;
6645       ELSE -- new element is not LABEL_DATA_PAIR
6646 
6647         IF l_prev_element_id IS NOT NULL AND l_next_element_id IS NOT NULL AND
6648         NVL(l_prev_elt_lyt_ui_style, G_OTHER_LAYOUT_STYLE) = G_LABEL_PAIR_LAYOUT_STYLE AND
6649       NVL(l_next_elt_lyt_ui_style, G_OTHER_LAYOUT_STYLE) = G_LABEL_PAIR_LAYOUT_STYLE THEN
6650 
6651 
6652           IF get_Attribute_Value(l_prev_node_parent, G_ID_ATTRIBUTE) = get_Attribute_Value(l_next_node_parent, G_ID_ATTRIBUTE) THEN
6653             IF xmldom.getNodeName(l_prev_node_parent) = 'oa:tableLayout' THEN
6654               l_grand_parent := xmldom.getParentNode(l_prev_node_parent);
6655               create_wrapper_table_layout(l_xml_table_node, l_xml_tabuicontent_node,  p_parent_xml_node);
6656               l_next_sibling_of_parent := xmldom.getNextSibling(l_prev_node_parent);
6657               l_xml_table_node := insert_before(l_grand_parent, l_xml_table_node, l_next_sibling_of_parent);
6658               l_next_node := xmldom.removeChild(l_prev_node_parent_ui_cnt, l_next_node);
6659               l_next_node := xmldom.appendChild(l_xml_tabuicontent_node, l_next_node);
6660               l_next_node := l_xml_table_node;
6661             END IF;
6662             l_next_node := xmldom.insertBefore(l_grand_parent, l_new_xml_root_node, l_next_node);
6663           ELSE
6664             l_grand_parent := xmldom.getParentNode(l_prev_node_parent);
6665             l_next_sibling_of_parent := xmldom.getNextSibling(l_prev_node_parent);
6666             l_new_xml_root_node := insert_before(l_grand_parent, l_new_xml_root_node, l_next_sibling_of_parent);
6667           END IF;
6668         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
6669           l_next_node := xmldom.getNextSibling(l_prev_node);
6670           l_new_xml_root_node := insert_before(l_prev_node_parent_ui_cnt, l_new_xml_root_node, l_next_node);
6671         ELSIF l_next_element_id IS NOT NULL AND
6672           NVL(l_next_elt_lyt_ui_style, G_OTHER_LAYOUT_STYLE) <> G_LABEL_PAIR_LAYOUT_STYLE THEN
6673           l_new_xml_root_node := insert_before(l_next_node_parent_ui_cnt, l_new_xml_root_node, l_next_node);
6674         ELSIF l_prev_element_id IS NOT NULL THEN
6675           l_grand_parent := xmldom.getParentNode(l_prev_node_parent);
6676           l_next_sibling_of_parent := xmldom.getNextSibling(l_prev_node_parent);
6677           l_new_xml_root_node := insert_before(l_grand_parent, l_new_xml_root_node, l_next_sibling_of_parent);
6678         ELSE
6679           l_grand_parent := xmldom.getParentNode(l_next_node_parent);
6680           l_new_xml_root_node := insert_before(l_grand_parent, l_new_xml_root_node, l_next_node_parent);
6681     END IF;
6682       END IF;
6683   ELSE
6684     -- If neither prev_element and next_element is found
6685     -- Insert at the end
6686       --DEBUG('asp:Append at the end');
6687 
6688    IF l_wrap_it THEN
6689        l_ui_contents_xml_node := getUIContents(p_parent_xml_node);
6690        create_wrapper_table_layout(l_xml_table_node, l_xml_tabuicontent_node, p_parent_xml_node);
6691        l_xml_table_node := xmldom.appendChild(l_ui_contents_xml_node, l_xml_table_node);
6692        l_new_xml_root_node := xmldom.appendChild(l_xml_tabuicontent_node, l_new_xml_root_node);
6693      ELSE
6694        l_ui_contents_xml_node := getUIContents(p_parent_xml_node);
6695        l_new_xml_root_node := xmldom.appendChild(l_ui_contents_xml_node, l_new_xml_root_node);
6696      END IF;
6697   END IF;
6698 
6699   g_dom_elements_tbl(TO_NUMBER(p_ui_node.element_id)) := l_new_xml_root_node;
6700   RETURN l_new_xml_root_node;
6701 
6702   END insert_node;
6703 
6704   FUNCTION pluck_XML_node(p_jrad_doc    CZ_UI_TEMPLATES.jrad_doc%TYPE,
6705                           p_page_id     NUMBER,
6706                           p_element_id  VARCHAR2)
6707     RETURN xmldom.DOMNode IS
6708 
6709   l_xml_node_to_pluck  xmldom.DOMNode;
6710   l_parent_xml_node    xmldom.DOMNode;
6711   l_subtree_doc        xmldom.DOMDocument;
6712   l_element_id         NUMBER;
6713 
6714   BEGIN
6715 
6716     l_element_id := TO_NUMBER(p_element_id);
6717 
6718     IF g_dom_elements_to_move.EXISTS(l_element_id) THEN
6719       l_xml_node_to_pluck := g_dom_elements_to_move(l_element_id);
6720 
6721     ELSE
6722       l_subtree_doc := parse_JRAD_Document(p_jrad_doc);
6723 
6724       l_xml_node_to_pluck := find_XML_Node_By_Attribute(l_subtree_doc,
6725                                                         G_ID_ATTRIBUTE,
6726                                                         p_element_id,
6727                                                         G_NO_FLAG);
6728 
6729       l_parent_xml_node := xmldom.getParentNode(l_xml_node_to_pluck);
6730 
6731       l_xml_node_to_pluck := xmldom.removeChild(l_parent_xml_node, l_xml_node_to_pluck);
6732 
6733       Save_Document(l_subtree_doc, p_jrad_doc);
6734     END IF;
6735 
6736     RETURN l_xml_node_to_pluck;
6737 
6738   END pluck_XML_node;
6739 
6740 
6741   FUNCTION move_XML_Node(p_ui_node             IN CZ_UI_PAGE_ELEMENTS%ROWTYPE,
6742                          p_parent_xml_node     xmldom.DOMNode)
6743   RETURN xmldom.DOMNode IS
6744 
6745   l_src_page_id        NUMBER;
6746   l_xml_node_to_move   xmldom.DOMNode;
6747     l_jrad_doc           CZ_UI_TEMPLATES.jrad_doc%TYPE;
6748   l_counter            NUMBER;
6749   l_element_ids_tbl    varchar2_tbl_type;
6750   l_id                 VARCHAR2(255);
6751   l_component_id       NUMBER;
6752   l_old_component_id   NUMBER;
6753 
6754   BEGIN
6755 
6756   l_src_page_id := g_tgt_pg_to_src_pg_map(p_ui_node.page_id)(TO_NUMBER(p_ui_node.element_id));
6757 
6758   SELECT jrad_doc INTO l_jrad_doc
6759     FROM CZ_UI_PAGES
6760     WHERE ui_def_id= g_UI_Context.ui_def_id AND
6761           page_id=l_src_page_id;
6762 
6763   l_xml_node_to_move := pluck_XML_node(l_jrad_doc, l_src_page_id, p_ui_node.element_id);
6764   l_xml_node_to_move := cloneNode(l_xml_node_to_move, p_parent_xml_node);
6765 
6766   l_counter := -1;
6767   resolve_view_names(l_xml_node_to_move, p_ui_node.page_id, l_counter, l_element_ids_tbl);
6768 
6769 
6770   SELECT ps_node_id INTO l_component_id
6771     FROM CZ_PS_NODES
6772    WHERE devl_project_id = g_UI_Context.devl_project_id
6773      AND persistent_node_Id = p_ui_node.pagebase_persistent_node_id;
6774 
6775   SELECT ps_node_id INTO l_old_component_id
6776     FROM CZ_PS_NODES
6777    WHERE devl_project_id = g_UI_Context.devl_project_id
6778      AND persistent_node_id = (SELECT persistent_node_id
6779                                  FROM CZ_UI_PAGES
6780                                 WHERE ui_def_id = g_UI_Context.ui_Def_id
6781                                   AND page_id = l_src_page_id);
6782 
6783 
6784 
6785   FOR i in (SELECT rule_id, ui_page_element_id
6786               FROM CZ_RULES
6787              WHERE devl_project_id = g_UI_Context.devl_project_id
6788                AND ui_def_id = g_UI_Context.ui_def_id
6789                AND ui_page_id = l_src_page_id
6790                AND component_id = l_old_component_id
6791                AND deleted_flag = G_NO_FLAG)
6792   LOOP
6793     DEBUG('asp: Found rule ' || i.rule_id || ', for element ' || i.ui_page_element_Id);
6794     IF l_element_ids_tbl.EXISTS(i.ui_page_element_id) THEN
6795       DEBUG('asp: Updating rule ' || i.rule_id || ' for element_id ' || i.ui_page_element_id);
6796       UPDATE CZ_RULES
6797          SET component_id = l_component_id,
6798              ui_page_id = p_ui_node.page_id
6799        WHERE devl_project_id = g_UI_Context.devl_project_id
6800          AND rule_id = i.rule_id;
6801     END IF;
6802   END LOOP;
6803 
6804   FOR i in (SELECT intl_text_id, ui_page_element_id
6805               FROM CZ_INTL_TEXTS
6806              WHERE model_id = g_UI_Context.devl_project_id
6807                AND ui_def_id = g_UI_Context.ui_def_id
6808                AND ui_page_id = l_src_page_id
6809                AND deleted_flag = G_NO_FLAG)
6810   LOOP
6811     IF l_element_ids_tbl.EXISTS(i.ui_page_element_id) THEN
6812       DEBUG('asp: Updating intl_text ' || i.intl_text_id || ' for element_id ' || i.ui_page_element_id);
6813       UPDATE CZ_LOCALIZED_TEXTS
6814          SET ui_page_id = p_ui_node.page_id
6815        WHERE intl_text_id = i.intl_text_id;
6816     END IF;
6817   END LOOP;
6818   l_xml_node_to_move := insert_node(p_ui_node, l_xml_node_to_move, p_parent_xml_node);
6819 
6820   RETURN l_xml_node_to_move;
6821 
6822   END move_XML_Node;
6823 
6824   --
6825   -- replace numeric suffix at the end of p_jrad_id with p_root_jrad_id
6826   -- if there is no numeric suffix then it just adds '_'||p_root_jrad_id to p_jrad_id
6827   -- Ex. : if  p_jrad_id="_czabcd_100" and p_root_jrad_id="12345"
6828   -- then function will return "_czabcd_12345"
6829   --
6830   FUNCTION handle_JRAD_Id(p_jrad_id      IN VARCHAR2,
6831                           p_root_jrad_id IN VARCHAR2) RETURN VARCHAR2 IS
6832     l_ind      NUMBER;
6833     l_num      NUMBER;
6834     l_jrad_id  VARCHAR2(4000);
6835     l_next_str VARCHAR2(4000);
6836   BEGIN
6837     l_jrad_id := p_jrad_id;
6838     l_ind := INSTR(l_jrad_id,'_');
6839     LOOP
6840       l_next_str := SUBSTR(l_jrad_id,l_ind+1);
6841       l_ind := INSTR(l_next_str,'_');
6842       IF l_ind=0 THEN
6843         BEGIN
6844           l_num     := TO_NUMBER(l_next_str);
6845           l_jrad_id := REPLACE(p_jrad_id,l_next_str,p_root_jrad_id);
6846           RETURN l_jrad_id;
6847         EXCEPTION
6848           WHEN OTHERS THEN
6849             RETURN p_jrad_id||'_'||p_root_jrad_id;
6850         END;
6851       ELSE
6852         l_jrad_id:= l_next_str;
6853       END IF;
6854     END LOOP;
6855   END handle_JRAD_Id;
6856 
6857   FUNCTION create_UIXML_Element_new(p_ui_node             IN CZ_UI_PAGE_ELEMENTS%ROWTYPE,
6858                                     p_parent_xml_node     xmldom.DOMNode)
6859     RETURN xmldom.DOMNode IS
6860 
6861     l_node                       CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE;
6862     l_ctrl_template_name         CZ_UI_TEMPLATES.template_name%TYPE;
6863     l_doc                        xmldom.DOMDocument;
6864     l_anchor_doc                 xmldom.DOMDocument;
6865     l_subtree_doc                xmldom.DOMDocument;
6866     l_xml_root_node              xmldom.DOMNode;
6867     l_new_xml_root_node          xmldom.DOMNode;
6868     l_out_xml_node               xmldom.DOMNode;
6869     l_xml_table_node             xmldom.DOMNode;
6870     l_new_xml_table_node         xmldom.DOMNode;
6871     l_xml_anchor_node            xmldom.DOMNode;
6872     l_new_xml_anchor_node        xmldom.DOMNode;
6873     l_xml_node                   xmldom.DOMNode;
6874     l_xml_tabuicontent_node      xmldom.DOMNode;
6875     l_ui_contents_xml_node       xmldom.DOMNode;
6876     l_prev_node                  xmldom.DOMNode;
6877     l_next_node                  xmldom.DOMNode;
6878     l_prev_node_parent           xmldom.DOMNode;
6879     l_next_node_parent           xmldom.DOMNode;
6880     l_prev_node_parent_ui_cnt    xmldom.DOMNode;
6881     l_next_node_parent_ui_cnt    xmldom.DOMNode;
6882     l_grand_parent               xmldom.DOMNode;
6883     l_next_sibling_of_parent     xmldom.DOMNode;
6884 
6885     l_curr_parent_xml_node  xmldom.DOMNode;
6886     l_xml_node_name         VARCHAR2(255);
6887     l_new_attribute_value   VARCHAR2(255);
6888 
6889     l_child_nodes_tbl            xmldom.DOMNodeList;
6890     l_attribute_value            VARCHAR2(4000);
6891     l_attribute_source           VARCHAR2(4000);
6892     l_user_attribute             VARCHAR2(4000);
6893     l_user_attribute4            VARCHAR2(4000);
6894     l_prev_element_id            VARCHAR2(255);
6895     l_next_element_id            VARCHAR2(255);
6896     l_jrad_doc                   VARCHAR2(255);
6897     l_ancestor_node              VARCHAR2(255);
6898     l_hgrid_element_id           VARCHAR2(255);
6899     l_old_switcher_xml_id        VARCHAR2(255);
6900     l_prev_element_template_id   NUMBER;
6901     l_next_element_template_id   NUMBER;
6902     l_prev_elt_lyt_ui_style      VARCHAR2(1);
6903     l_next_elt_lyt_ui_style      VARCHAR2(1);
6904     l_old_ui_element_id          VARCHAR2(255);
6905     l_new_ui_element_id          VARCHAR2(255);
6906     l_switcher_element_id        VARCHAR2(255);
6907     l_user_attribute3_value      VARCHAR2(4000);
6908     l_switcher_casename          VARCHAR2(255);
6909     l_switcher_xml_id            VARCHAR2(255);
6910     l_uicase_name                VARCHAR2(255);
6911     l_length                     NUMBER;
6912     l_ui_action_id               NUMBER;
6913     l_element_signature_id       NUMBER;
6914     l_wrap_it                    BOOLEAN;
6915     l_drilldown_text_id          NUMBER;
6916     l_wrap_with_links            BOOLEAN := FALSE;
6917     l_template_is_used_by_ref    BOOLEAN := TRUE;
6918     l_user_attribute10_value     VARCHAR2(4000); --BUG12563210
6919 
6920   BEGIN
6921     --DEBUG('asp:Create UI XML Element new started...');
6922     IF p_ui_node.ctrl_template_id IS NULL THEN
6923       RETURN l_xml_node;
6924     END IF;
6925 
6926     l_node := get_Model_Node_By_Persist_Id(p_ui_node.persistent_node_id,g_UI_Context.devl_project_id);
6927 
6928     --DEBUG('asp:Create_ui_xml_new ' || l_node.name || ', element_id ' || p_ui_node.element_id);
6929 
6930     l_template_is_used_by_ref := is_Used_By_Reference(l_node.detailed_type_id,p_ui_node.ctrl_template_id);
6931 
6932     BEGIN
6933       SELECT element_id, ctrl_template_id INTO l_prev_element_id, l_prev_element_template_id
6934       FROM CZ_UI_PAGE_ELEMENTS
6935       WHERE ui_def_id=p_ui_node.ui_def_id AND
6936             page_id = p_ui_node.page_id AND
6937             parent_element_id = p_ui_node.parent_element_id AND
6938             deleted_flag NOT IN (G_YES_FLAG, G_LIMBO_FLAG) AND
6939 --jonatara:bug fix7307460
6940      	    NOT (element_type = G_UI_DRILLDOWN_NODE_TYPE AND ctrl_template_id IS NULL) AND
6941      	    NOT (element_signature_id IS NULL AND ctrl_template_id IS NULL ) AND
6942             seq_nbr = (SELECT max(seq_nbr)
6943                        FROM CZ_UI_PAGE_ELEMENTS
6944                        WHERE ui_def_id=p_ui_node.ui_def_id AND
6945                              page_id = p_ui_node.page_id AND
6946                              parent_element_id = p_ui_node.parent_element_id AND
6947                              seq_nbr<p_ui_node.seq_nbr AND
6948                              deleted_flag NOT IN (G_YES_FLAG, G_LIMBO_FLAG) AND
6949                              NOT (element_type = G_UI_DRILLDOWN_NODE_TYPE AND
6950                                   ctrl_template_id IS NULL) AND
6951                              NOT (element_signature_id IS NULL AND ctrl_template_id IS NULL))
6952             AND rownum < 2;
6953 
6954     EXCEPTION
6955       WHEN NO_DATA_FOUND THEN
6956            NULL;
6957     END;
6958 
6959     BEGIN
6960 
6961       SELECT element_id, ctrl_template_id INTO l_next_element_id, l_next_element_template_id
6962       FROM CZ_UI_PAGE_ELEMENTS
6963       WHERE ui_def_id=p_ui_node.ui_def_id AND
6964             page_id = p_ui_node.page_id AND
6965             parent_element_id = p_ui_node.parent_element_id AND
6966             deleted_flag NOT IN (G_YES_FLAG, G_LIMBO_FLAG, G_MARK_TO_DELETE) AND
6967 --jonatara:bug fix7307460
6968 	    NOT (element_type = G_UI_DRILLDOWN_NODE_TYPE AND ctrl_template_id IS NULL) AND
6969 	    NOT (element_signature_id IS NULL AND ctrl_template_id IS NULL) AND
6970             seq_nbr = ( SELECT min(seq_nbr)
6971                         FROM CZ_UI_PAGE_ELEMENTS
6972                         WHERE ui_def_id=p_ui_node.ui_def_id AND
6973                               page_id = p_ui_node.page_id AND
6974                               parent_element_id = p_ui_node.parent_element_id AND
6975                               seq_nbr>p_ui_node.seq_nbr AND
6976                               deleted_flag NOT IN (G_YES_FLAG, G_LIMBO_FLAG, G_MARK_TO_DELETE, G_MARK_TO_ADD, G_MARK_TO_MOVE) AND
6977                               NOT (element_type = G_UI_DRILLDOWN_NODE_TYPE AND
6978                                    ctrl_template_id IS NULL) AND
6979                               NOT (element_signature_id IS NULL AND ctrl_template_id IS NULL))
6980             AND rownum < 2;
6981 
6982 
6983     EXCEPTION
6984       WHEN NO_DATA_FOUND THEN
6985            NULL;
6986     END;
6987 
6988 
6989   -- Now lets get the new element ready for insertion. Once the new node
6990   -- is ready, we will insert it int he appropriate place
6991 
6992     --
6993     -- drilldowns will be handled by special way ( bug #3271034 )
6994     --
6995     IF p_ui_node.ctrl_template_id IN(G_DRILLDOWN_BUTTON_TEMPLATE_ID,G_DRILLDOWN_IMAGE_TEMPLATE_ID,
6996        G_DRILLDOWN_LABEL_TEMPLATE_ID) THEN
6997        IF g_UI_Context.DRILLDOWN_IMAGE_URL IS NOT NULL THEN
6998          l_ctrl_template_name := get_JRAD_Name(p_template_id => G_DRILLDOWN_IMAGE_TEMPLATE_ID);
6999        ELSE
7000          l_ctrl_template_name := get_JRAD_Name(p_template_id => p_ui_node.ctrl_template_id);
7001        END IF;
7002     ELSE
7003        l_ctrl_template_name := get_JRAD_Name(p_template_id => p_ui_node.ctrl_template_id);
7004     END IF;
7005 
7006     --
7007     -- parse document(template) which is going to be nested element
7008     --
7009     l_subtree_doc := parse_JRAD_Document(l_ctrl_template_name);
7010 
7011     IF xmldom.isNull(l_subtree_doc) THEN
7012       add_Error_Message(p_message_name => 'CZ_WRONG_UI_TEMPLATE',
7013                         p_token_name   => 'UI_TEMPLATE',
7014                         p_token_value  => l_ctrl_template_name,
7015                         p_fatal_error  => TRUE);
7016 
7017        RAISE WRONG_UI_TEMPLATE;
7018     END IF;
7019 
7020     --
7021     -- get subdocument's root node
7022     --
7023     l_xml_root_node := xmldom.makeNode(xmldom.getDocumentElement(l_subtree_doc));
7024 
7025     --
7026     -- remove common attributes of container and subtree
7027     --
7028     remove_TopLevel_Attributes(l_xml_root_node);
7029 
7030     IF l_template_is_used_by_ref THEN
7031       l_element_signature_id := 6011;
7032     ELSE
7033       l_element_signature_id := p_ui_node.element_signature_id;
7034     END IF;
7035 
7036 
7037     --
7038     -- set Attributes for this subtree = Template
7039     --
7040     set_Template_Attributes(p_xml_root_node        => l_xml_root_node,
7041                             p_ui_node              => p_ui_node,
7042                             p_element_signature_id => l_element_signature_id);
7043 
7044     --
7045     -- set a special attribute "blockSize" if it is Table control
7046     --
7047     /* commented out according to request from 8/12/2004
7048     IF  xmldom.getNodeName(l_xml_root_node) IN('oa:table') THEN
7049       set_Attribute(l_xml_root_node,
7050                     'blockSize',
7051                     TO_CHAR(g_UI_Context.ROWS_PER_TABLE));
7052     END IF;
7053     */
7054 
7055     --DEBUG('Here 7');
7056     IF l_template_is_used_by_ref THEN
7057 
7058       --
7059       -- returns cloned DOM subtree
7060       --
7061       --l_new_xml_root_node := xmldom.cloneNode(l_xml_root_node,TRUE);
7062       l_new_xml_root_node := cloneNode(l_xml_root_node, p_parent_xml_node);
7063 
7064       -- Check if l_new_xml_root_node is NOT null - bug 11712366
7065       IF (xmldom.isNull(l_new_xml_root_node) = FALSE) THEN
7066         --DEBUG('asp:Adding ' || p_ui_node.element_id || ' to table');
7067         g_dom_elements_tbl(TO_NUMBER(p_ui_node.element_id)) := l_new_xml_root_node;
7068         --
7069         -- remove non user attributes from top tag
7070         --
7071         remove_Non_User_Attributes(l_new_xml_root_node);
7072 
7073         -- Remove user:Attribute10 if it exists -- Fix for USS Bug 12563210
7074         l_user_attribute10_value := get_Attribute_Value(l_new_xml_root_node,G_USER_ATTRIBUTE10_NAME);
7075         IF (l_user_attribute10_value IS NOT NULL) THEN
7076            xmldom.removeAttribute(xmldom.makeElement(l_new_xml_root_node),G_USER_ATTRIBUTE10_NAME);
7077         END IF;
7078 
7079         --
7080         -- set "extends" attribute
7081         --
7082         xmldom.setAttribute(xmldom.makeElement(l_new_xml_root_node),'extends',l_ctrl_template_name);
7083 
7084         --
7085         -- remove content of template subtree
7086         --
7087         l_child_nodes_tbl:=xmldom.getChildNodes(l_new_xml_root_node);
7088 
7089         --
7090         -- we need to get length of array of child nodes
7091         -- to go through the array in loop
7092         -- Bug 11712366 - check if l_child_nodes_table is not empty
7093         IF (xmldom.isNull(l_child_nodes_tbl) = FALSE) THEN
7094           l_length := xmldom.getLength(l_child_nodes_tbl);
7095           FOR k IN 0..l_length-1
7096           LOOP
7097             --
7098             -- get next child DOM node
7099             --
7100             l_xml_node := xmldom.item(l_child_nodes_tbl, k);
7101             l_out_xml_node:=xmldom.removeChild(l_new_xml_root_node,l_xml_node);
7102           END LOOP;
7103         END IF;
7104       --ELSE
7105         --DEBUG('asp:l_new_xml_root_node is null !!');
7106       END IF;
7107     ELSE -- use UI Template by Copy
7108 
7109       l_child_nodes_tbl := xmldom.getElementsByTagName(l_subtree_doc, '*');
7110 
7111       l_length := xmldom.getLength(l_child_nodes_tbl);
7112       IF (l_length > 0) THEN
7113         FOR k IN 0..l_length-1
7114         LOOP
7115           --
7116           -- get next child DOM node
7117           --
7118           l_xml_node := xmldom.item(l_child_nodes_tbl, k);
7119 
7120           l_curr_parent_xml_node := xmldom.getParentNode(l_xml_node);
7121 
7122           IF k > 0 THEN
7123             l_attribute_value := get_Attribute_Value(l_xml_node, G_ID_ATTRIBUTE);
7124 
7125             l_xml_node_name := xmldom.getNodeName(l_xml_node);
7126 
7127             IF l_attribute_value IS NOT NULL THEN
7128               l_new_attribute_value := handle_JRAD_Id(l_attribute_value,p_ui_node.element_id);
7129               l_new_attribute_value := REPLACE(REPLACE(l_new_attribute_value,'_czt','_czn'), '_czc','_czn');
7130               set_Attribute(xmldom.makeElement(l_xml_node),G_ID_ATTRIBUTE, l_new_attribute_value);
7131             END IF;
7132 
7133             l_ancestor_node := get_Attribute_Value(l_xml_node,
7134                                                    'ancestorNode');
7135             IF l_ancestor_node IS NOT NULL THEN
7136 
7137               SELECT jrad_doc INTO l_jrad_doc FROM CZ_UI_PAGES
7138               WHERE page_id=p_ui_node.page_id AND ui_def_id=p_ui_node.ui_def_id;
7139 
7140               l_hgrid_element_id := find_Element_Id_Of_XMLTag(l_xml_node, 'oa:tree');
7141               IF NOT(xmldom.IsNull(l_xml_node)) THEN
7142                 l_ancestor_node := l_jrad_doc||'.'||l_hgrid_element_id;
7143 
7144                 set_Attribute(l_xml_node,
7145                               'ancestorNode',
7146                               l_ancestor_node);
7147               END IF;
7148             END IF;
7149 
7150             --
7151             -- set value of user attribute "switcherDefaultCaseName" to new jrad id of <oa:switcher>
7152             --
7153             IF xmldom.getNodeName(l_xml_node)='oa:switcher' THEN
7154               l_old_switcher_xml_id := l_attribute_value;
7155               l_user_attribute3_value := get_Attribute_Value(l_xml_node, G_USER_ATTRIBUTE3_NAME);
7156               l_switcher_casename := get_User_Attribute(l_user_attribute3_value ,'switcherDefaultCaseName');
7157               l_switcher_casename := REPLACE(l_switcher_casename,l_attribute_value, l_new_attribute_value);
7158               l_switcher_casename := REPLACE(REPLACE(l_switcher_casename,'_czt','_czn'), '_czc','_czn');
7159               set_User_Attribute(p_cz_attribute_name    => 'switcherDefaultCaseName',
7160                                  p_cz_attribute_value   => l_switcher_casename,
7161                                  px_xml_attribute_value => l_user_attribute3_value);
7162 
7163               set_Attribute(l_xml_node,
7164                             G_USER_ATTRIBUTE3_NAME,
7165                             l_user_attribute3_value);
7166             END IF;
7167 
7168             --
7169             -- set value of attribute "name" of <ui:case> to id of parent <oa:switcher>
7170             --
7171             IF (l_xml_node_name='ui:case' AND xmldom.getNodeName(l_curr_parent_xml_node)='oa:switcher') THEN
7172               l_switcher_xml_id := get_Attribute_Value(l_curr_parent_xml_node, G_ID_ATTRIBUTE);
7173               l_uicase_name     :=  get_Attribute_Value(l_xml_node, 'name');
7174               set_Attribute(xmldom.makeElement(l_xml_node),
7175                             'name',
7176                             REPLACE(REPLACE(REPLACE(l_uicase_name,l_old_switcher_xml_id,l_switcher_xml_id),'_czt','_czn'), '_czc', '_czn'));
7177               handle_UI_CASE_Id(l_xml_node);
7178             END IF;
7179 
7180             --
7181             -- if current tag is <oa:stackLayout>
7182             -- then replace old id with new one
7183             --
7184             IF (l_xml_node_name='oa:stackLayout' AND
7185                xmldom.getNodeName(l_curr_parent_xml_node)='ui:case') AND l_attribute_value IS NOT NULL THEN
7186               set_Attribute(xmldom.makeElement(l_xml_node),
7187                             G_ID_ATTRIBUTE,
7188                            REPLACE(REPLACE(get_Attribute_Value(l_curr_parent_xml_node, 'name'),'_czt','_czn'),'_czc','_czn'));
7189             END IF;
7190 
7191             IF l_attribute_value IS NOT NULL THEN
7192               --
7193               -- create a new copies for corresponding entities ( captions, rules ,... )
7194               --
7195               copy_Node_Related_Entities(p_ui_def_id   => p_ui_node.ui_def_id,
7196                                          p_ui_page_id  => p_ui_node.page_id,
7197                                          p_xml_node    => l_xml_node);
7198             END IF;
7199 
7200             IF p_ui_node.ctrl_template_id=g_DRILLDOWN_TEMPLATE_ID THEN
7201               IF attribute_Value(l_xml_node, 'source') IS NULL AND
7202                  g_UI_Context.DRILLDOWN_IMAGE_URL IS NOT NULL THEN
7203                  set_Attribute(l_xml_node,
7204                                'source',
7205                                 g_UI_Context.DRILLDOWN_IMAGE_URL);
7206               END IF;
7207 
7208               l_user_attribute := get_Attribute_Value(l_xml_node,
7209                                                      G_USER_ATTRIBUTE3_NAME);
7210 
7211               IF l_user_attribute IS NOT NULL THEN
7212 
7213                 IF p_ui_node.element_type=G_UI_CX_BUTTON_NODE_TYPE THEN
7214 
7215                    set_User_Attribute(p_cz_attribute_name    => 'captionIntlTextId',
7216                                       p_cz_attribute_value   => TO_CHAR(g_cx_names_tbl(TO_NUMBER(p_ui_node.element_id))),
7217                                       px_xml_attribute_value => l_user_attribute);
7218 
7219                    set_User_Attribute(p_cz_attribute_name    => 'rolloverIntlTextId',
7220                                       p_cz_attribute_value   => TO_CHAR(g_cx_names_tbl(TO_NUMBER(p_ui_node.element_id))),
7221                                       px_xml_attribute_value => l_user_attribute);
7222                 ELSE
7223                    IF  g_UI_Context.DRILLDOWN_CONTROL_TEXT_ID IS NOT NULL THEN
7224 
7225                      l_drilldown_text_id := copy_Intl_Text(g_UI_Context.DRILLDOWN_CONTROL_TEXT_ID,
7226                                                            g_UI_Context.ui_def_id,
7227                                                            p_ui_node.page_id, p_ui_node.element_id);
7228 
7229                      set_User_Attribute(p_cz_attribute_name    => 'captionIntlTextId',
7230                                         p_cz_attribute_value   => TO_CHAR(l_drilldown_text_id),
7231                                         px_xml_attribute_value => l_user_attribute);
7232 
7233                      set_User_Attribute(p_cz_attribute_name    => 'rolloverIntlTextId',
7234                                         p_cz_attribute_value   => TO_CHAR(l_drilldown_text_id),
7235                                         px_xml_attribute_value => l_user_attribute);
7236 
7237                    END IF;
7238                 END IF;   -- end of p_ui_node.element_type=G_UI_CX_BUTTON_NODE_TYPE THEN
7239 
7240                 BEGIN
7241                   l_ui_action_id := get_UI_Action_Id(p_ui_node);
7242                 EXCEPTION
7243                   WHEN OTHERS THEN
7244                      NULL;
7245                 END;
7246 
7247                 IF l_ui_action_id IS NOT NULL THEN
7248 
7249                   set_User_Attribute(p_cz_attribute_name    => 'actionId',
7250                                      p_cz_attribute_value   => TO_CHAR(l_ui_action_id),
7251                                      px_xml_attribute_value => l_user_attribute);
7252 
7253                 END IF;
7254 
7255                 set_Attribute(l_xml_node,G_USER_ATTRIBUTE3_NAME,l_user_attribute);
7256 
7257               END IF;     -- end of IF l_user_attribute IS NOT NULL
7258 
7259             END IF;  -- end of IF p_ui_node.ctrl_template_id=g_DRILLDOWN_TEMPLATE_ID
7260 
7261             --++++++ add template references ++++++
7262             add_Extends_Refs(p_xml_node  => l_xml_node,
7263                              p_ui_node   => p_ui_node);
7264 
7265           END IF; -- end of  IF k > 0 THEN
7266         END LOOP;
7267       END IF;
7268 
7269       --l_new_xml_root_node := xmldom.cloneNode(l_xml_root_node, TRUE);
7270       l_new_xml_root_node := cloneNode(l_xml_root_node, p_parent_xml_node);
7271 
7272       --DEBUG('asp:Adding ' || p_ui_node.element_id || ' to table 2');
7273       g_dom_elements_tbl(TO_NUMBER(p_ui_node.element_id)) := l_new_xml_root_node;
7274     END IF;
7275 
7276     -- The new element is now ready. It is
7277   -- l_new_xml_root_node, the root of the subtree to be added
7278   -- We need to add this root node to an appropriate location
7279   -- int the XML DOM.
7280 
7281 
7282   -- we have to decide if we want to add this new element
7283   -- after the prev element, before the next element or as the
7284   -- last element of the given parent region
7285 
7286   IF l_prev_element_id IS NOT NULL THEN
7287     l_prev_node := g_dom_elements_tbl(TO_NUMBER(l_prev_element_id));
7288     l_prev_node_parent_ui_cnt := xmldom.getParentNode(l_prev_node);
7289     l_prev_node_parent := xmldom.getParentNode(l_prev_node_parent_ui_cnt);
7290     BEGIN
7291         SELECT layout_ui_style INTO l_prev_elt_lyt_ui_style
7292       FROM CZ_UI_TEMPLATES
7293       WHERE template_id = l_prev_element_template_id
7294       AND ui_def_id = 0
7295     AND deleted_flag = G_NO_FLAG;
7296 
7297     EXCEPTION
7298       WHEN NO_DATA_FOUND THEN
7299       NULL;
7300     END;
7301   END IF;
7302 
7303   IF l_next_element_id IS NOT NULL THEN
7304     --DEBUG('Here 8.11 ' || l_next_element_id);
7305     IF g_dom_elements_tbl.EXISTS(TO_NUMBER(l_next_element_id)) THEN
7306       l_next_node := g_dom_elements_tbl(TO_NUMBER(l_next_element_id));
7307       --DEBUG('Here 8.12');
7308       l_next_node_parent_ui_cnt := xmldom.getParentNode(l_next_node);
7309       --DEBUG('Here 8.13');
7310       l_next_node_parent := xmldom.getParentNode(l_next_node_parent_ui_cnt);
7311       --DEBUG('Here 8.14');
7312       BEGIN
7313         SELECT layout_ui_style INTO l_next_elt_lyt_ui_style
7314         FROM CZ_UI_TEMPLATES
7315         WHERE template_id = l_next_element_template_id
7316         AND ui_def_id = 0
7317         AND deleted_flag = G_NO_FLAG;
7318 
7319       EXCEPTION
7320         WHEN NO_DATA_FOUND THEN
7321           NULL;
7322       END;
7323     ELSE
7324       l_next_element_id := NULL;
7325     END IF;
7326   END IF;
7327 
7328   --DEBUG('Here 9' || l_node.detailed_type_id);
7329   IF l_node.detailed_type_id IN(CZ_TYPES.UNON_COUNT_FEATURE_TYPEID,
7330                                   CZ_TYPES.UCOUNT_FEATURE_TYPEID,
7331                                   CZ_TYPES.UCOUNT_FEATURE01_TYPEID,
7332                                   CZ_TYPES.UMINMAX_FEATURE_TYPEID,
7333                                   CZ_TYPES.UINTEGER_FEATURE_TYPEID,
7334                                   CZ_TYPES.UDECIMAL_FEATURE_TYPEID,
7335                                   CZ_TYPES.UBOOLEAN_FEATURE_TYPEID,
7336                                   CZ_TYPES.UTEXT_FEATURE_TYPEID,
7337                                   CZ_TYPES.UTOTAL_TYPEID,
7338                                   CZ_TYPES.URESOURCE_TYPEID) AND
7339        NVL(l_node.layout_ui_style,G_LABEL_PAIR_LAYOUT_STYLE) IN(G_LABEL_PAIR_LAYOUT_STYLE,G_WRAPPED_LAYOUT_STYLE) THEN
7340 
7341        --DEBUG('asp:Wrap it 1 ' || l_node.name);
7342        l_wrap_it  := TRUE;
7343 
7344   ELSIF l_node.ps_node_type IN(G_BOM_MODEL_TYPE,G_BOM_OPTION_CLASS_TYPE) OR
7345           l_node.detailed_type_id IN(CZ_TYPES.UOPTIONAL_BOM_REF_TYPEID,CZ_TYPES.UMINMAX_BOM_REF_TYPEID) THEN
7346 
7347        IF NVL(l_node.layout_ui_style,G_TABLE_LAYOUT_STYLE) = G_TABLE_LAYOUT_STYLE  OR
7348          l_node.detailed_type_id IN(CZ_TYPES.UOPTIONAL_BOM_REF_TYPEID,CZ_TYPES.UMINMAX_BOM_REF_TYPEID) THEN
7349          l_wrap_it := FALSE;
7350 
7351        ELSIF l_node.layout_ui_style IN(G_LABEL_PAIR_LAYOUT_STYLE,G_WRAPPED_LAYOUT_STYLE) AND
7352          l_node.detailed_type_id NOT IN(CZ_TYPES.UOPTIONAL_BOM_REF_TYPEID,CZ_TYPES.UMINMAX_BOM_REF_TYPEID) THEN
7353          l_wrap_it := TRUE;
7354        ELSE
7355          l_wrap_it := FALSE;
7356        END IF;
7357 
7358        IF g_UI_Context.PRIMARY_NAVIGATION IN(G_SINGLE_PAGE) OR
7359           g_UI_Context.PAGIN_BOMOC IN(G_SINGLE_PG_TYPE,G_SUBSECTIONS_PG_TYPE) THEN
7360          l_wrap_with_links := TRUE;
7361        END IF;
7362 
7363     ELSIF l_node.detailed_type_id IN(CZ_TYPES.UCOUNT_FEATURE01_TYPEID,
7364                                      CZ_TYPES.UCOUNT_FEATURE_TYPEID,
7365                                      CZ_TYPES.UMINMAX_FEATURE_TYPEID) THEN
7366       l_wrap_it         := FALSE;
7367     END IF;
7368 
7369     IF l_prev_element_id IS NOT NULL
7370         OR l_next_element_id IS NOT NULL THEN
7371       IF l_wrap_it THEN
7372         IF l_prev_element_id IS NOT NULL AND
7373           NVL(l_prev_elt_lyt_ui_style, G_OTHER_LAYOUT_STYLE) = G_LABEL_PAIR_LAYOUT_STYLE THEN
7374             l_next_node := xmldom.getNextSibling(l_prev_node);
7375         l_new_xml_root_node := insert_before(l_prev_node_parent_ui_cnt, l_new_xml_root_node, l_next_node);
7376         ELSIF l_next_element_id IS NOT NULL AND
7377              NVL(l_next_elt_lyt_ui_style, G_OTHER_LAYOUT_STYLE) = G_LABEL_PAIR_LAYOUT_STYLE THEN
7378           l_new_xml_root_node := insert_before(l_next_node_parent_ui_cnt, l_new_xml_root_node, l_next_node);
7379         ELSE
7380           create_wrapper_table_layout(l_xml_table_node, l_xml_tabuicontent_node, p_parent_xml_node);
7381           l_new_xml_root_node := xmldom.appendChild(l_xml_tabuicontent_node, l_new_xml_root_node);
7382           IF l_prev_element_id IS NOT NULL THEN
7383             l_next_node := xmldom.getNextSibling(l_prev_node);
7384             l_xml_table_node := insert_before(l_prev_node_parent_ui_cnt, l_xml_table_node, l_next_node);
7385           ELSIF l_next_element_id IS NOT NULL THEN
7386             l_xml_table_node := insert_before(l_next_node_parent_ui_cnt, l_xml_table_node, l_next_node);
7387           ELSE
7388             l_ui_contents_xml_node := getUIContents(p_parent_xml_node);
7389             l_xml_table_node := xmldom.appendChild(l_ui_contents_xml_node, l_xml_table_node);
7390           END IF;
7391         END IF;
7392       ELSE -- new element is not LABEL_DATA_PAIR
7393 
7394         IF l_prev_element_id IS NOT NULL AND l_next_element_id IS NOT NULL AND
7395           NVL(l_prev_elt_lyt_ui_style, G_OTHER_LAYOUT_STYLE) = G_LABEL_PAIR_LAYOUT_STYLE AND
7396           NVL(l_next_elt_lyt_ui_style, G_OTHER_LAYOUT_STYLE) = G_LABEL_PAIR_LAYOUT_STYLE THEN
7397 
7398 
7399           IF get_Attribute_Value(l_prev_node_parent, G_ID_ATTRIBUTE) = get_Attribute_Value(l_next_node_parent, G_ID_ATTRIBUTE) THEN
7400             IF xmldom.getNodeName(l_prev_node_parent) = 'oa:tableLayout' THEN
7401               l_grand_parent := xmldom.getParentNode(l_prev_node_parent);
7402               create_wrapper_table_layout(l_xml_table_node, l_xml_tabuicontent_node, p_parent_xml_node);
7403               l_next_sibling_of_parent := xmldom.getNextSibling(l_prev_node_parent);
7404               l_xml_table_node := insert_before(l_grand_parent, l_xml_table_node, l_next_sibling_of_parent);
7405               l_next_node := xmldom.removeChild(l_prev_node_parent_ui_cnt, l_next_node);
7406               l_next_node := xmldom.appendChild(l_xml_tabuicontent_node, l_next_node);
7407               l_next_node := l_xml_table_node;
7408             END IF;
7409             l_next_node := xmldom.insertBefore(l_grand_parent, l_new_xml_root_node, l_next_node);
7410           ELSE
7411             l_grand_parent := xmldom.getParentNode(l_prev_node_parent);
7412             l_next_sibling_of_parent := xmldom.getNextSibling(l_prev_node_parent);
7413             l_new_xml_root_node := insert_before(l_grand_parent, l_new_xml_root_node, l_next_sibling_of_parent);
7414           END IF;
7415         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
7416           l_next_node := xmldom.getNextSibling(l_prev_node);
7417           l_new_xml_root_node := insert_before(l_prev_node_parent_ui_cnt, l_new_xml_root_node, l_next_node);
7418         ELSIF l_next_element_id IS NOT NULL AND
7419           NVL(l_next_elt_lyt_ui_style, G_OTHER_LAYOUT_STYLE) <> G_LABEL_PAIR_LAYOUT_STYLE THEN
7420           l_new_xml_root_node := insert_before(l_next_node_parent_ui_cnt, l_new_xml_root_node, l_next_node);
7421         ELSIF l_prev_element_id IS NOT NULL THEN
7422           l_grand_parent := xmldom.getParentNode(l_prev_node_parent);
7423           l_next_sibling_of_parent := xmldom.getNextSibling(l_prev_node_parent);
7424           l_new_xml_root_node := insert_before(l_grand_parent, l_new_xml_root_node, l_next_sibling_of_parent);
7425         ELSE
7426           l_grand_parent := xmldom.getParentNode(l_next_node_parent);
7427           l_new_xml_root_node := insert_before(l_grand_parent, l_new_xml_root_node, l_next_node_parent);
7428     END IF;
7429       END IF;
7430   ELSE
7431     -- If neither prev_element and next_element is found
7432     -- Insert at the end
7433     --DEBUG('asp:Append at the end');
7434 
7435     IF l_wrap_it THEN
7436        --DEBUG('Append at the end. Wrapping ' || xmldom.getNodeName(p_parent_xml_node));
7437        l_ui_contents_xml_node := getUIContents(p_parent_xml_node);
7438        --DEBUG('Append at the end. Wrapping ' || xmldom.getNodeName(l_ui_contents_xml_node));
7439        create_wrapper_table_layout(l_xml_table_node, l_xml_tabuicontent_node, p_parent_xml_node);
7440        l_xml_table_node := xmldom.appendChild(l_ui_contents_xml_node, l_xml_table_node);
7441        l_new_xml_root_node := xmldom.appendChild(l_xml_tabuicontent_node, l_new_xml_root_node);
7442     ELSE
7443        --DEBUG('Append at the end. Not wrapping');
7444        l_ui_contents_xml_node := getUIContents(p_parent_xml_node);
7445        l_new_xml_root_node := xmldom.appendChild(l_ui_contents_xml_node, l_new_xml_root_node);
7446     END IF;
7447   END IF;
7448 
7449   RETURN l_new_xml_root_node;
7450 
7451   END create_UIXML_Element_new;
7452 
7453   --
7454   -- create new XML JRAD element
7455   --
7456   FUNCTION create_UIXML_Element(p_ui_node             IN CZ_UI_PAGE_ELEMENTS%ROWTYPE,
7457                                 p_parent_xml_node     xmldom.DOMNode)
7458     RETURN xmldom.DOMNode IS
7459 
7460     l_node                  CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE;
7461     l_ctrl_template_name    CZ_UI_TEMPLATES.template_name%TYPE;
7462     l_doc                   xmldom.DOMDocument;
7463     l_anchor_doc            xmldom.DOMDocument;
7464     l_subtree_doc           xmldom.DOMDocument;
7465     l_xml_root_node         xmldom.DOMNode;
7466     l_new_xml_root_node     xmldom.DOMNode;
7467     l_out_xml_node          xmldom.DOMNode;
7468     l_xml_table_node        xmldom.DOMNode;
7469     l_new_xml_table_node    xmldom.DOMNode;
7470     l_xml_anchor_node       xmldom.DOMNode;
7471     l_new_xml_anchor_node   xmldom.DOMNode;
7472     l_xml_node              xmldom.DOMNode;
7473     l_xml_tabuicontent_node xmldom.DOMNode;
7474     l_ui_contents_xml_node  xmldom.DOMNode;
7475 
7476     l_curr_parent_xml_node  xmldom.DOMNode;
7477     l_xml_node_name         VARCHAR2(255);
7478     l_new_attribute_value   VARCHAR2(255);
7479 
7480     l_child_nodes_tbl       xmldom.DOMNodeList;
7481     l_attribute_value       VARCHAR2(4000);
7482     l_attribute_source      VARCHAR2(4000);
7483     l_user_attribute        VARCHAR2(4000);
7484     l_user_attribute4       VARCHAR2(4000);
7485     l_jrad_doc              VARCHAR2(255);
7486     l_ancestor_node         VARCHAR2(255);
7487     l_hgrid_element_id      VARCHAR2(255);
7488     l_prev_element_id       VARCHAR2(255);
7489     l_old_ui_element_id     VARCHAR2(255);
7490     l_new_ui_element_id     VARCHAR2(255);
7491     l_switcher_element_id   VARCHAR2(255);
7492     l_user_attribute3_value VARCHAR2(4000);
7493     l_switcher_casename     VARCHAR2(255);
7494     l_old_switcher_xml_id   VARCHAR2(255);
7495     l_switcher_xml_id       VARCHAR2(255);
7496     l_uicase_name           VARCHAR2(255);
7497     l_length                NUMBER;
7498     l_ui_action_id          NUMBER;
7499     l_element_signature_id  NUMBER;
7500     l_non_bom_content       BOOLEAN;
7501     l_wrap_it               BOOLEAN;
7502     l_drilldown_text_id     NUMBER;
7503     l_wrap_with_links       BOOLEAN := FALSE;
7504     l_template_is_used_by_ref BOOLEAN := TRUE;
7505     l_user_attribute10_value VARCHAR2(4000); -- Added for USS bug 12563210
7506 
7507   BEGIN
7508 
7509   IF g_using_new_UI_refresh THEN
7510     RETURN create_UIXML_Element_new(p_ui_node, p_parent_xml_node);
7511   END IF;
7512 
7513     IF p_ui_node.ctrl_template_id IS NULL THEN
7514       RETURN l_xml_node;
7515     END IF;
7516 
7517     l_node := get_Model_Node_By_Persist_Id(p_ui_node.persistent_node_id,g_UI_Context.devl_project_id);
7518 
7519     l_template_is_used_by_ref := is_Used_By_Reference(l_node.detailed_type_id,p_ui_node.ctrl_template_id);
7520 
7521     BEGIN
7522       SELECT element_id INTO l_prev_element_id
7523         FROM CZ_UI_PAGE_ELEMENTS
7524        WHERE ui_def_id=p_ui_node.ui_def_id AND
7525              parent_persistent_node_id=p_ui_node.parent_persistent_node_id AND
7526              seq_nbr=p_ui_node.seq_nbr-1 AND
7527              deleted_flag<>G_YES_FLAG;
7528 
7529       l_xml_tabuicontent_node := find_Table_Of_XML_Node(p_parent_xml_node, l_prev_element_id);
7530 
7531     EXCEPTION
7532       WHEN OTHERS THEN
7533            NULL;
7534     END;
7535 
7536     --
7537     -- drilldowns will be handled by special way ( bug #3271034 )
7538     --
7539     IF p_ui_node.ctrl_template_id IN(G_DRILLDOWN_BUTTON_TEMPLATE_ID,G_DRILLDOWN_IMAGE_TEMPLATE_ID,
7540        G_DRILLDOWN_LABEL_TEMPLATE_ID) THEN
7541        IF g_UI_Context.DRILLDOWN_IMAGE_URL IS NOT NULL THEN
7542          l_ctrl_template_name := get_JRAD_Name(p_template_id => G_DRILLDOWN_IMAGE_TEMPLATE_ID);
7543        ELSE
7544          l_ctrl_template_name := get_JRAD_Name(p_template_id => p_ui_node.ctrl_template_id);
7545        END IF;
7546     ELSE
7547        l_ctrl_template_name := get_JRAD_Name(p_template_id => p_ui_node.ctrl_template_id);
7548     END IF;
7549 
7550     IF l_node.detailed_type_id IN(CZ_TYPES.UNON_COUNT_FEATURE_TYPEID,
7551                                   CZ_TYPES.UCOUNT_FEATURE_TYPEID,
7552                                   CZ_TYPES.UCOUNT_FEATURE01_TYPEID,
7553                                   CZ_TYPES.UMINMAX_FEATURE_TYPEID,
7554                                   CZ_TYPES.UINTEGER_FEATURE_TYPEID,
7555                                   CZ_TYPES.UDECIMAL_FEATURE_TYPEID,
7556                                   CZ_TYPES.UBOOLEAN_FEATURE_TYPEID,
7557                                   CZ_TYPES.UTEXT_FEATURE_TYPEID,
7558                                   CZ_TYPES.UTOTAL_TYPEID,
7559                                   CZ_TYPES.URESOURCE_TYPEID) AND
7560        NVL(l_node.layout_ui_style,G_LABEL_PAIR_LAYOUT_STYLE) IN(G_LABEL_PAIR_LAYOUT_STYLE,G_WRAPPED_LAYOUT_STYLE) THEN
7561 
7562        l_non_bom_content := TRUE;
7563        l_wrap_it  := TRUE;
7564 
7565        --
7566        -- add TableLayout
7567        --
7568        IF xmldom.isNull(l_xml_tabuicontent_node) THEN
7569 
7570          BEGIN
7571            l_doc := parse_JRAD_Document(G_TABLELAYOUT_TEMPLATE);
7572 
7573            l_xml_table_node :=xmldom.makeNode(xmldom.getDocumentElement(l_doc));
7574 
7575            remove_TopLevel_Attributes(l_xml_table_node);
7576 
7577            --l_new_xml_table_node := xmldom.cloneNode(l_xml_table_node,TRUE);
7578            l_new_xml_table_node := cloneNode(l_xml_table_node, p_parent_xml_node);
7579 
7580            set_Attribute(xmldom.makeElement(l_new_xml_table_node),G_ID_ATTRIBUTE,get_Element_Id());
7581            set_Attribute(xmldom.makeElement(l_new_xml_table_node),G_USER_ATTRIBUTE5_NAME,'TABLELAYOUT_FOR_UI_GEN');
7582 
7583            l_xml_tabuicontent_node := getUIContents(l_new_xml_table_node);
7584 
7585            IF xmldom.getNodeName(p_parent_xml_node) IN('oa:header','oa:stackLayout',
7586                                                        'oa:flowLayout','oa:tableLayout') THEN
7587 
7588              l_ui_contents_xml_node := getUIContents(p_parent_xml_node);
7589              l_out_xml_node := xmldom.appendChild(l_ui_contents_xml_node,l_new_xml_table_node);
7590            ELSE
7591              l_out_xml_node := xmldom.appendChild(p_parent_xml_node,l_new_xml_table_node);
7592            END IF;
7593 
7594         EXCEPTION
7595           WHEN OTHERS THEN
7596             NULL;
7597         END;
7598       END IF;
7599 
7600     --
7601     -- BOM part
7602     --
7603     ELSIF l_node.ps_node_type IN(G_BOM_MODEL_TYPE,G_BOM_OPTION_CLASS_TYPE) OR
7604           l_node.detailed_type_id IN(CZ_TYPES.UOPTIONAL_BOM_REF_TYPEID,CZ_TYPES.UMINMAX_BOM_REF_TYPEID) THEN
7605 
7606        l_non_bom_content := TRUE;
7607 
7608        IF NVL(l_node.layout_ui_style,G_TABLE_LAYOUT_STYLE) = G_TABLE_LAYOUT_STYLE  OR
7609          l_node.detailed_type_id IN(CZ_TYPES.UOPTIONAL_BOM_REF_TYPEID,CZ_TYPES.UMINMAX_BOM_REF_TYPEID) THEN
7610          l_wrap_it := FALSE;
7611 
7612        ELSIF l_node.layout_ui_style IN(G_LABEL_PAIR_LAYOUT_STYLE,G_WRAPPED_LAYOUT_STYLE) AND
7613          l_node.detailed_type_id NOT IN(CZ_TYPES.UOPTIONAL_BOM_REF_TYPEID,CZ_TYPES.UMINMAX_BOM_REF_TYPEID) THEN
7614          --
7615          -- add TableLayout
7616          --
7617          IF xmldom.isNull(l_xml_tabuicontent_node) THEN
7618            BEGIN
7619              l_doc := parse_JRAD_Document(G_TABLELAYOUT_TEMPLATE);
7620 
7621              l_xml_table_node :=xmldom.makeNode(xmldom.getDocumentElement(l_doc));
7622 
7623              remove_TopLevel_Attributes(l_xml_table_node);
7624 
7625              --l_new_xml_table_node := xmldom.cloneNode(l_xml_table_node,TRUE);
7626              l_new_xml_table_node := cloneNode(l_xml_table_node, p_parent_xml_node);
7627 
7628              set_Attribute(xmldom.makeElement(l_new_xml_table_node),G_ID_ATTRIBUTE,get_Element_Id());
7629              set_Attribute(xmldom.makeElement(l_new_xml_table_node),G_USER_ATTRIBUTE5_NAME,'TABLELAYOUT_FOR_UI_GEN');
7630 
7631              l_xml_tabuicontent_node := getUIContents(l_new_xml_table_node);
7632 
7633              IF xmldom.getNodeName(p_parent_xml_node) IN('oa:header','oa:stackLayout',
7634                                                          'oa:flowLayout','oa:tableLayout') THEN
7635 
7636                l_ui_contents_xml_node := getUIContents(p_parent_xml_node);
7637 
7638                l_out_xml_node := xmldom.appendChild(l_ui_contents_xml_node,l_new_xml_table_node);
7639              ELSE
7640                l_out_xml_node := xmldom.appendChild(p_parent_xml_node,l_new_xml_table_node);
7641              END IF;
7642            EXCEPTION
7643              WHEN OTHERS THEN
7644                DEBUG('create_UIXML_Element : '||SQLERRM);
7645            END;
7646          END IF;
7647          l_wrap_it := TRUE;
7648        ELSE
7649          l_wrap_it := FALSE;
7650        END IF;
7651 
7652        IF g_UI_Context.PRIMARY_NAVIGATION IN(G_SINGLE_PAGE) OR
7653           g_UI_Context.PAGIN_BOMOC IN(G_SINGLE_PG_TYPE,G_SUBSECTIONS_PG_TYPE) THEN
7654          l_wrap_with_links := TRUE;
7655        END IF;
7656 
7657     ELSIF l_node.detailed_type_id IN(CZ_TYPES.UCOUNT_FEATURE01_TYPEID,
7658                                      CZ_TYPES.UCOUNT_FEATURE_TYPEID,
7659                                      CZ_TYPES.UMINMAX_FEATURE_TYPEID) THEN
7660       l_non_bom_content := FALSE;
7661       l_wrap_it         := FALSE;
7662     ELSE
7663       l_non_bom_content := FALSE;
7664     END IF;
7665 
7666     --
7667     -- parse document(template) which is going to be nested element
7668     --
7669     l_subtree_doc := parse_JRAD_Document(l_ctrl_template_name);
7670 
7671     IF xmldom.isNull(l_subtree_doc) THEN
7672       add_Error_Message(p_message_name => 'CZ_WRONG_UI_TEMPLATE',
7673                         p_token_name   => 'UI_TEMPLATE',
7674                         p_token_value  => l_ctrl_template_name,
7675                         p_fatal_error  => TRUE);
7676 
7677        RAISE WRONG_UI_TEMPLATE;
7678     END IF;
7679 
7680     --
7681     -- get subdocument's root node
7682     --
7683     l_xml_root_node := xmldom.makeNode(xmldom.getDocumentElement(l_subtree_doc));
7684 
7685     IF l_template_is_used_by_ref=FALSE THEN
7686       handle_USER_ATTRIBUTE10(p_xml_root_node => l_xml_root_node,
7687                               p_ui_def_id     => p_ui_node.ui_def_id,
7688                               p_ui_page_id    => p_ui_node.page_id,
7689                               p_ui_element_id => p_ui_node.element_id);
7690     END IF;
7691 
7692     --
7693     -- remove common attributes of container and subtree
7694     --
7695     remove_TopLevel_Attributes(l_xml_root_node);
7696 
7697     IF l_template_is_used_by_ref THEN
7698       l_element_signature_id := 6011;
7699     ELSE
7700       l_element_signature_id := p_ui_node.element_signature_id;
7701     END IF;
7702 
7703     --
7704     -- set Attributes for this subtree = Template
7705     --
7706     set_Template_Attributes(p_xml_root_node        => l_xml_root_node,
7707                             p_ui_node              => p_ui_node,
7708                             p_element_signature_id => l_element_signature_id);
7709 
7710     --
7711     -- set a special attribute "blockSize" if it is Table control
7712     --
7713     /* commented out according to request from 8/12/2004
7714     IF  xmldom.getNodeName(l_xml_root_node) IN('oa:table') THEN
7715       set_Attribute(l_xml_root_node,
7716                     'blockSize',
7717                     TO_CHAR(g_UI_Context.ROWS_PER_TABLE));
7718     END IF;
7719     */
7720     IF l_template_is_used_by_ref THEN
7721 
7722       --
7723       -- returns cloned DOM subtree
7724       --
7725       -- l_new_xml_root_node := xmldom.cloneNode(l_xml_root_node,TRUE);
7726       l_new_xml_root_node := cloneNode(l_xml_root_node, p_parent_xml_node);
7727 
7728       --
7729       -- remove non user attributes from top tag
7730       --
7731       remove_Non_User_Attributes(l_new_xml_root_node);
7732 
7733       -- Remove user:Attribute10 if it exists -- Fix for USS Bug 12563210
7734       l_user_attribute10_value := get_Attribute_Value(l_new_xml_root_node,G_USER_ATTRIBUTE10_NAME);
7735       IF (l_user_attribute10_value IS NOT NULL) THEN
7736          xmldom.removeAttribute(xmldom.makeElement(l_new_xml_root_node),G_USER_ATTRIBUTE10_NAME);
7737       END IF;
7738 
7739       --
7740       -- set "extends" attribute
7741       --
7742       xmldom.setAttribute(xmldom.makeElement(l_new_xml_root_node),'extends',l_ctrl_template_name);
7743 
7744       --
7745       -- remove content of template subtree
7746       --
7747       l_child_nodes_tbl:=xmldom.getChildNodes(l_new_xml_root_node);
7748 
7749       --
7750       -- we need to get length of array of child nodes
7751       -- to go through the array in loop
7752       --
7753       l_length := xmldom.getLength(l_child_nodes_tbl);
7754       FOR k IN 0..l_length-1
7755       LOOP
7756         --
7757         -- get next child DOM node
7758         --
7759         l_xml_node := xmldom.item(l_child_nodes_tbl, k);
7760         l_out_xml_node:=xmldom.removeChild(l_new_xml_root_node,l_xml_node);
7761       END LOOP;
7762 
7763     ELSE -- use UI Template by Copy
7764 
7765       l_child_nodes_tbl := xmldom.getElementsByTagName(l_subtree_doc, '*');
7766 
7767       l_length := xmldom.getLength(l_child_nodes_tbl);
7768       IF (l_length > 0) THEN
7769         FOR k IN 0..l_length-1
7770         LOOP
7771           --
7772           -- get next child DOM node
7773           --
7774           l_xml_node := xmldom.item(l_child_nodes_tbl, k);
7775           l_curr_parent_xml_node := xmldom.getParentNode(l_xml_node);
7776 
7777           IF k > 0 THEN
7778             l_attribute_value := get_Attribute_Value(l_xml_node, G_ID_ATTRIBUTE);
7779 
7780             l_xml_node_name := xmldom.getNodeName(l_xml_node);
7781 
7782             IF l_attribute_value IS NOT NULL THEN
7783               l_new_attribute_value := handle_JRAD_Id(l_attribute_value,p_ui_node.element_id);
7784               set_Attribute(xmldom.makeElement(l_xml_node),G_ID_ATTRIBUTE,REPLACE(REPLACE(l_new_attribute_value,'_czt','_czn'),'_czc','_czn'));
7785             END IF;
7786 
7787             l_ancestor_node := get_Attribute_Value(l_xml_node,
7788                                                    'ancestorNode');
7789             IF l_ancestor_node IS NOT NULL THEN
7790 
7791               SELECT jrad_doc INTO l_jrad_doc FROM CZ_UI_PAGES
7792               WHERE page_id=p_ui_node.page_id AND ui_def_id=p_ui_node.ui_def_id;
7793 
7794               l_hgrid_element_id := find_Element_Id_Of_XMLTag(l_xml_node, 'oa:tree');
7795               IF NOT(xmldom.IsNull(l_xml_node)) THEN
7796                 l_ancestor_node := l_jrad_doc||'.'||l_hgrid_element_id;
7797 
7798                 set_Attribute(l_xml_node,
7799                               'ancestorNode',
7800                               l_ancestor_node);
7801               END IF;
7802             END IF;
7803 
7804             --
7805             -- set value of user attribute "switcherDefaultCaseName" to new jrad id of <oa:switcher>
7806             --
7807             IF xmldom.getNodeName(l_xml_node)='oa:switcher' THEN
7808               l_old_switcher_xml_id := l_attribute_value;
7809               l_user_attribute3_value := get_Attribute_Value(l_xml_node, G_USER_ATTRIBUTE3_NAME);
7810               l_switcher_casename := get_User_Attribute(l_user_attribute3_value ,'switcherDefaultCaseName');
7811               l_switcher_casename := REPLACE(REPLACE(REPLACE(l_switcher_casename,l_attribute_value, l_new_attribute_value),'_czt','_czn'),'_czc','_czn');
7812               set_User_Attribute(p_cz_attribute_name    => 'switcherDefaultCaseName',
7813                                  p_cz_attribute_value   => l_switcher_casename,
7814                                  px_xml_attribute_value => l_user_attribute3_value);
7815 
7816               set_Attribute(l_xml_node,
7817                             G_USER_ATTRIBUTE3_NAME,
7818                             l_user_attribute3_value);
7819             END IF;
7820 
7821             --
7822             -- set value of attribute "name" of <ui:case> to id of parent <oa:switcher>
7823             --
7824             IF (l_xml_node_name='ui:case' AND xmldom.getNodeName(l_curr_parent_xml_node)='oa:switcher') THEN
7825               l_switcher_xml_id := get_Attribute_Value(l_curr_parent_xml_node, G_ID_ATTRIBUTE);
7826               l_uicase_name     :=  get_Attribute_Value(l_xml_node, 'name');
7827               set_Attribute(xmldom.makeElement(l_xml_node),
7828                             'name',
7829                             REPLACE(REPLACE(REPLACE(l_uicase_name,l_old_switcher_xml_id,l_switcher_xml_id),'_czt','_czn'),'_czc','_czn'));
7830               handle_UI_CASE_Id(l_xml_node);
7831             END IF;
7832 
7833             --
7834             -- if current tag is <oa:stackLayout>
7835             -- then replace old id with new one
7836             --
7837             IF (l_xml_node_name='oa:stackLayout' AND
7838                xmldom.getNodeName(l_curr_parent_xml_node)='ui:case') AND l_attribute_value IS NOT NULL THEN
7839               set_Attribute(xmldom.makeElement(l_xml_node),
7840                             G_ID_ATTRIBUTE,
7841                            REPLACE(REPLACE(get_Attribute_Value(l_curr_parent_xml_node, 'name'),'_czt','_czn'),'_czc','_czn'));
7842             END IF;
7843 
7844             IF l_attribute_value IS NOT NULL THEN
7845               --
7846               -- create a new copies for corresponding entities ( captions, rules ,... )
7847               --
7848               copy_Node_Related_Entities(p_ui_def_id   => p_ui_node.ui_def_id,
7849                                          p_ui_page_id  => p_ui_node.page_id,
7850                                          p_xml_node    => l_xml_node);
7851             END IF;
7852 
7853             IF p_ui_node.ctrl_template_id=g_DRILLDOWN_TEMPLATE_ID THEN
7854               IF attribute_Value(l_xml_node, 'source') IS NULL AND
7855                  g_UI_Context.DRILLDOWN_IMAGE_URL IS NOT NULL THEN
7856                  set_Attribute(l_xml_node,
7857                                'source',
7858                                 g_UI_Context.DRILLDOWN_IMAGE_URL);
7859               END IF;
7860 
7861               l_user_attribute := get_Attribute_Value(l_xml_node,
7862                                                      G_USER_ATTRIBUTE3_NAME);
7863 
7864               IF l_user_attribute IS NOT NULL THEN
7865 
7866                 IF p_ui_node.element_type=G_UI_CX_BUTTON_NODE_TYPE THEN
7867 
7868                    set_User_Attribute(p_cz_attribute_name    => 'captionIntlTextId',
7869                                       p_cz_attribute_value   => TO_CHAR(g_cx_names_tbl(TO_NUMBER(p_ui_node.element_id))),
7870                                       px_xml_attribute_value => l_user_attribute);
7871 
7872                    set_User_Attribute(p_cz_attribute_name    => 'rolloverIntlTextId',
7873                                       p_cz_attribute_value   => TO_CHAR(g_cx_names_tbl(TO_NUMBER(p_ui_node.element_id))),
7874                                       px_xml_attribute_value => l_user_attribute);
7875                 ELSE
7876                    IF  g_UI_Context.DRILLDOWN_CONTROL_TEXT_ID IS NOT NULL THEN
7877 
7878                      l_drilldown_text_id := copy_Intl_Text(g_UI_Context.DRILLDOWN_CONTROL_TEXT_ID,
7879                                                            g_UI_Context.ui_def_id,
7880                                                            p_ui_node.page_id, p_ui_node.element_id);
7881 
7882                      set_User_Attribute(p_cz_attribute_name    => 'captionIntlTextId',
7883                                         p_cz_attribute_value   => TO_CHAR(l_drilldown_text_id),
7884                                         px_xml_attribute_value => l_user_attribute);
7885 
7886                      set_User_Attribute(p_cz_attribute_name    => 'rolloverIntlTextId',
7887                                         p_cz_attribute_value   => TO_CHAR(l_drilldown_text_id),
7888                                         px_xml_attribute_value => l_user_attribute);
7889 
7890                    END IF;
7891                 END IF;   -- end of p_ui_node.element_type=G_UI_CX_BUTTON_NODE_TYPE THEN
7892 
7893                 BEGIN
7894                   l_ui_action_id := get_UI_Action_Id(p_ui_node);
7895                 EXCEPTION
7896                   WHEN OTHERS THEN
7897                      NULL;
7898                 END;
7899 
7900                 IF l_ui_action_id IS NOT NULL THEN
7901 
7902                   set_User_Attribute(p_cz_attribute_name    => 'actionId',
7903                                      p_cz_attribute_value   => TO_CHAR(l_ui_action_id),
7904                                      px_xml_attribute_value => l_user_attribute);
7905 
7906                 END IF;
7907 
7908                 set_Attribute(l_xml_node,G_USER_ATTRIBUTE3_NAME,l_user_attribute);
7909 
7910               END IF;     -- end of IF l_user_attribute IS NOT NULL
7911 
7912             END IF;  -- end of IF p_ui_node.ctrl_template_id=g_DRILLDOWN_TEMPLATE_ID
7913 
7914             --++++++ add template references ++++++
7915             add_Extends_Refs(p_xml_node  => l_xml_node,
7916                              p_ui_node   => p_ui_node);
7917 
7918           END IF; -- end of  IF k > 0 THEN
7919         END LOOP;
7920       END IF;
7921 
7922       --l_new_xml_root_node := xmldom.cloneNode(l_xml_root_node, TRUE);
7923       l_new_xml_root_node := cloneNode(l_xml_root_node, p_parent_xml_node);
7924 
7925     END IF;
7926 
7927     IF l_wrap_it THEN
7928 
7929       IF l_wrap_with_links THEN
7930 
7931         BEGIN
7932           l_anchor_doc := parse_JRAD_Document(G_ANCHOR_TEMPLATE);
7933 
7934           l_xml_anchor_node :=xmldom.makeNode(xmldom.getDocumentElement(l_anchor_doc));
7935 
7936            remove_TopLevel_Attributes(l_xml_anchor_node);
7937 
7938            --l_new_xml_anchor_node := xmldom.cloneNode(l_xml_anchor_node,TRUE);
7939            l_new_xml_anchor_node := cloneNode(l_xml_anchor_node, p_parent_xml_node);
7940 
7941            set_Attribute(xmldom.makeElement(l_new_xml_anchor_node),G_ID_ATTRIBUTE,get_Element_Id());
7942            set_Attribute(xmldom.makeElement(l_new_xml_anchor_node),G_USER_ATTRIBUTE5_NAME,'ANCHOR_GENERATED_BY_UI_GEN');
7943 
7944            l_out_xml_node := xmldom.appendChild(l_xml_tabuicontent_node,
7945                                                 l_new_xml_anchor_node);
7946 
7947            l_out_xml_node := xmldom.appendChild(l_xml_tabuicontent_node,
7948                                                 l_new_xml_root_node);
7949 
7950         EXCEPTION
7951           WHEN OTHERS THEN
7952             DEBUG('create_UIXML_Element() : '||SQLERRM);
7953          END;
7954 
7955       ELSE -- don't wrap it with rowLayout+Link
7956 
7957         l_out_xml_node := xmldom.appendChild(l_xml_tabuicontent_node,
7958                                              l_new_xml_root_node);
7959 
7960       END IF;
7961 
7962       RETURN l_out_xml_node;
7963 
7964     ELSE -- don't wrap with TableLayout
7965 
7966       IF l_wrap_with_links THEN
7967         BEGIN
7968           l_anchor_doc := parse_JRAD_Document(G_LINK_TEMPLATE);
7969 
7970           l_xml_anchor_node :=xmldom.makeNode(xmldom.getDocumentElement(l_anchor_doc));
7971 
7972           remove_TopLevel_Attributes(l_xml_anchor_node);
7973 
7974           --l_new_xml_anchor_node := xmldom.cloneNode(l_xml_anchor_node,TRUE);
7975           l_new_xml_anchor_node := cloneNode(l_xml_anchor_node, p_parent_xml_node);
7976 
7977           set_Attribute(xmldom.makeElement(l_new_xml_anchor_node),G_ID_ATTRIBUTE,
7978             '_czt'||to_char(p_ui_node.persistent_node_id)); -- fix for bug #4047136
7979           set_Attribute(xmldom.makeElement(l_new_xml_anchor_node),G_USER_ATTRIBUTE5_NAME,'LINK_GENERATED_BY_UI_GEN');
7980         EXCEPTION
7981           WHEN OTHERS THEN
7982             DEBUG('create_UIXML_Element() : '||SQLERRM);
7983         END;
7984       END IF;
7985 
7986       IF xmldom.getNodeName(p_parent_xml_node) IN('oa:header','oa:stackLayout',
7987          'oa:flowLayout','oa:tableLayout') THEN
7988 
7989 
7990          l_ui_contents_xml_node := getUIContents(p_parent_xml_node);
7991 
7992          IF l_wrap_with_links THEN
7993            l_out_xml_node := xmldom.appendChild(l_ui_contents_xml_node,
7994                                                 l_new_xml_anchor_node);
7995          END IF;
7996          l_out_xml_node := xmldom.appendChild(l_ui_contents_xml_node,
7997                                               l_new_xml_root_node);
7998       ELSE
7999 
8000          IF l_wrap_with_links THEN
8001            l_out_xml_node := xmldom.appendChild(p_parent_xml_node,
8002                                                 l_new_xml_anchor_node);
8003          END IF;
8004 
8005         l_out_xml_node := xmldom.appendChild(p_parent_xml_node,
8006                                              l_new_xml_root_node);
8007       END IF;
8008       RETURN l_out_xml_node;
8009     END IF;
8010 
8011   END create_UIXML_Element;
8012 
8013   --
8014   -- add new XML region
8015   --
8016   FUNCTION create_UIXML_Region(p_ui_node             IN CZ_UI_PAGE_ELEMENTS%ROWTYPE,
8017                                p_parent_xml_node     xmldom.DOMNode)
8018     RETURN xmldom.DOMNode IS
8019 
8020     l_subtree_doc          xmldom.DOMDocument;
8021     l_xml_root_node        xmldom.DOMNode;
8022     l_new_xml_root_node    xmldom.DOMNode;
8023     l_out_xml_node         xmldom.DOMNode;
8024     l_ui_contents_xml_node xmldom.DOMNode;
8025     l_jrad_doc             CZ_UI_TEMPLATES.jrad_doc%TYPE;
8026 
8027   BEGIN
8028 
8029     l_jrad_doc := get_JRAD_Name(G_NSTD_CONTAINER_TEMPLATE_ID, G_GLOBAL_TEMPLATES_UI_DEF_ID);
8030 
8031     --
8032     -- parse document(template) which is going to be nested element
8033     --
8034     l_subtree_doc := parse_JRAD_Document(l_jrad_doc);
8035 
8036     IF xmldom.isNull(l_subtree_doc) THEN
8037        add_Error_Message(p_message_name => 'CZ_WRONG_UI_TEMPLATE',
8038                          p_token_name   => 'UI_TEMPLATE',
8039                          p_token_value  => l_jrad_doc,
8040                          p_fatal_error  => TRUE);
8041        RAISE WRONG_UI_TEMPLATE;
8042     END IF;
8043 
8044     --
8045     -- get subdocument's root node
8046     --
8047     l_xml_root_node := xmldom.makeNode(xmldom.getDocumentElement(l_subtree_doc));
8048 
8049     --
8050     -- remove common attributes of container and subtree
8051     --
8052     remove_TopLevel_Attributes(l_xml_root_node);
8053 
8054     --
8055     -- set Attributes for this subtree = Template
8056     --
8057     set_Template_Attributes(p_xml_root_node => l_xml_root_node,
8058                             p_ui_node       => p_ui_node);
8059 
8060     --
8061     -- this is a requirement from cz runtime : controllerClass must be =NULL
8062     --
8063     set_Attribute(l_xml_root_node,'controllerClass','');
8064 
8065     --
8066     -- returns cloned DOM subtree
8067     --
8068     --l_new_xml_root_node := xmldom.cloneNode(l_xml_root_node, TRUE);
8069     l_new_xml_root_node := cloneNode(l_xml_root_node, p_parent_xml_node);
8070 
8071     g_dom_elements_tbl(TO_NUMBER(p_ui_node.element_id)) := l_new_xml_root_node;
8072 
8073     IF xmldom.getNodeName(p_parent_xml_node) IN('oa:header','oa:stackLayout',
8074       'oa:flowLayout','oa:tableLayout','oa:rowLayout') THEN
8075 
8076       l_ui_contents_xml_node := getUIContents(p_parent_xml_node);
8077       l_out_xml_node := xmldom.appendChild(l_ui_contents_xml_node,
8078                                            l_new_xml_root_node);
8079     ELSE
8080       l_out_xml_node := xmldom.appendChild(p_parent_xml_node,
8081                                            l_new_xml_root_node);
8082     END IF;
8083 
8084     RETURN l_out_xml_node;
8085 
8086   END create_UIXML_Region;
8087 
8088   --
8089   -- replace XML JRAD element
8090   --
8091   FUNCTION replace_UIXML_Element(p_ui_node             IN CZ_UI_PAGE_ELEMENTS%ROWTYPE,
8092                                  p_parent_xml_node     xmldom.DOMNode,
8093                                  p_xml_node_to_replace xmldom.DOMNode)
8094     RETURN xmldom.DOMNode IS
8095 
8096     l_subtree_doc           xmldom.DOMDocument;
8097     l_xml_root_node         xmldom.DOMNode;
8098     l_new_xml_root_node     xmldom.DOMNode;
8099     l_out_xml_node          xmldom.DOMNode;
8100     l_tabxml_uicontens_node xmldom.DOMNode;
8101     l_tabxml_node           xmldom.DOMNode;
8102     l_xml_node              xmldom.DOMNode;
8103     l_parent_xml_node       xmldom.DOMNode;
8104     l_child_nodes_tbl       xmldom.DOMNodeList;
8105     l_jrad_doc              CZ_UI_TEMPLATES.jrad_doc%TYPE;
8106     l_node                  CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE;
8107     l_user_attribute4       VARCHAR2(4000);
8108     l_user_attribute        VARCHAR2(4000);
8109     l_drilldown_text_id     NUMBER;
8110     l_ui_action_id          NUMBER;
8111     l_length                NUMBER;
8112     l_use_by_reference      BOOLEAN;
8113     l_curr_parent_xml_node    xmldom.DOMNode;
8114     l_attribute_value           VARCHAR2(32000);
8115     l_xml_node_name             VARCHAR2(4000);
8116     l_old_switcher_xml_id       VARCHAR2(4000);
8117     l_user_attribute3_value     VARCHAR2(32000);
8118     l_switcher_casename         VARCHAR2(4000);
8119     l_new_attribute_value       VARCHAR2(32000);
8120     l_switcher_xml_id           VARCHAR2(4000);
8121     l_uicase_name               VARCHAR2(4000);
8122 
8123 
8124   BEGIN
8125 
8126     l_node := get_Model_Node_By_Persist_Id(p_ui_node.persistent_node_id,g_UI_Context.devl_project_id);
8127 
8128     IF p_ui_node.ctrl_template_id IS NULL AND p_ui_node.element_type=G_UI_DRILLDOWN_NODE_TYPE THEN
8129       BEGIN
8130         l_new_xml_root_node := xmldom.removeChild(p_parent_xml_node,p_xml_node_to_replace);
8131       EXCEPTION
8132         WHEN OTHERS THEN
8133           l_tabxml_node := find_Table_Of_XML_Node(p_parent_xml_node, p_ui_node.element_id);
8134           IF NOT(xmldom.IsNull(l_tabxml_node)) THEN
8135             l_tabxml_uicontens_node := getUIContents(l_tabxml_node);
8136             l_new_xml_root_node := xmldom.removeChild(l_tabxml_uicontens_node,p_xml_node_to_replace);
8137           END IF;
8138       END;
8139       RETURN p_parent_xml_node;
8140     END IF;
8141 
8142     l_use_by_reference := is_Used_By_Reference(p_detailed_type_id => l_node.detailed_type_id,
8143                                                p_ctrl_template_id => p_ui_node.ctrl_template_id);
8144 
8145     l_user_attribute4 := get_Attribute_Value(p_xml_node_to_replace, G_USER_ATTRIBUTE4_NAME);
8146     l_user_attribute :=  get_User_Attribute(l_user_attribute4, 'elementType');
8147 
8148     IF l_user_attribute IS NOT NULL AND (NOT l_user_attribute = '6011') THEN
8149       l_use_by_reference := FALSE;
8150     END IF;
8151 
8152     l_jrad_doc := get_JRAD_Name(p_template_id => p_ui_node.ctrl_template_id);
8153 
8154     l_subtree_doc := parse_JRAD_Document(l_jrad_doc);
8155 
8156     IF xmldom.isNull(l_subtree_doc) THEN
8157       add_Error_Message(p_message_name => 'CZ_WRONG_UI_TEMPLATE',
8158                         p_token_name   => 'UI_TEMPLATE',
8159                         p_token_value  => l_jrad_doc,
8160                         p_fatal_error  => TRUE);
8161        RAISE WRONG_UI_TEMPLATE;
8162     END IF;
8163 
8164     --
8165     -- get subdocument's root node
8166     --
8167     l_xml_root_node := xmldom.makeNode(xmldom.getDocumentElement(l_subtree_doc));
8168 
8169     --
8170     -- remove common attributes of container and subtree
8171     --
8172     remove_TopLevel_Attributes(l_xml_root_node);
8173 
8174     --
8175     -- set Attributes for this subtree = Template
8176     --
8177     set_Template_Attributes(p_xml_root_node => l_xml_root_node,
8178                             p_ui_node       => p_ui_node);
8179 
8180    IF l_use_by_reference  THEN
8181       --
8182       -- returns cloned DOM subtree
8183       --
8184       --l_new_xml_root_node := xmldom.cloneNode(l_xml_root_node,TRUE);
8185       l_new_xml_root_node := cloneNode(l_xml_root_node, p_parent_xml_node);
8186 
8187 
8188       --
8189       -- set "extends" attribute
8190       --
8191       xmldom.setAttribute(xmldom.makeElement(l_new_xml_root_node),'extends',l_jrad_doc);
8192 
8193       l_user_attribute4 := get_Attribute_Value(l_new_xml_root_node,
8194                                                G_USER_ATTRIBUTE4_NAME);
8195       IF l_user_attribute4 IS NOT NULL THEN
8196         set_User_Attribute(p_cz_attribute_name    => 'name',
8197                            p_cz_attribute_value   => p_ui_node.name,
8198                            px_xml_attribute_value => l_user_attribute4);
8199         IF p_ui_node.element_signature_id IS NOT NULL THEN
8200            set_User_Attribute(p_cz_attribute_name    => 'elementType',
8201                               p_cz_attribute_value   => '6011',
8202                               px_xml_attribute_value => l_user_attribute4);
8203 
8204         END IF;
8205         set_Attribute(l_new_xml_root_node,
8206                       G_USER_ATTRIBUTE4_NAME,
8207                       l_user_attribute4);
8208 
8209       END IF;
8210 
8211       --
8212       -- remove content of template subtree
8213       --
8214       l_child_nodes_tbl:=xmldom.getChildNodes(l_new_xml_root_node);
8215 
8216       --
8217       -- we need to get length of array of child nodes
8218       -- to go through the array in loop
8219       --
8220       l_length := xmldom.getLength(l_child_nodes_tbl);
8221       FOR k IN 0..l_length-1
8222       LOOP
8223         --
8224         -- get next child DOM node
8225         --
8226         l_xml_node := xmldom.item(l_child_nodes_tbl, k);
8227         l_out_xml_node:=xmldom.removeChild(l_new_xml_root_node,l_xml_node);
8228       END LOOP;
8229 
8230     ELSE  -- use by Copy
8231       l_child_nodes_tbl := xmldom.getElementsByTagName(xmldom.makeElement(l_xml_root_node), '*');
8232       l_length := xmldom.getLength(l_child_nodes_tbl);
8233       IF (l_length > 0) THEN
8234         FOR k IN 0..l_length-1
8235         LOOP
8236           --
8237           -- get next child DOM node
8238           --
8239           l_xml_node := xmldom.item(l_child_nodes_tbl, k);
8240 
8241           IF p_ui_node.ctrl_template_id=g_DRILLDOWN_TEMPLATE_ID THEN
8242 
8243             IF attribute_Value(l_xml_node, 'source') IS NULL AND
8244                g_UI_Context.DRILLDOWN_IMAGE_URL IS NOT NULL THEN
8245                set_Attribute(l_xml_node,
8246                              'source',
8247                               g_UI_Context.DRILLDOWN_IMAGE_URL);
8248             END IF;
8249 
8250             l_user_attribute := get_Attribute_Value(l_xml_node,
8251                                                    G_USER_ATTRIBUTE3_NAME);
8252 
8253             IF l_user_attribute IS NOT NULL THEN
8254 
8255               IF  g_UI_Context.DRILLDOWN_CONTROL_TEXT_ID IS NOT NULL THEN
8256 
8257                  l_drilldown_text_id := copy_Intl_Text(g_UI_Context.DRILLDOWN_CONTROL_TEXT_ID,
8258                                                        g_UI_Context.ui_def_id,
8259                                                        p_ui_node.page_id, p_ui_node.element_id);
8260 
8261                  set_User_Attribute(p_cz_attribute_name    => 'captionIntlTextId',
8262                                     p_cz_attribute_value   => TO_CHAR(l_drilldown_text_id),
8263                                     px_xml_attribute_value => l_user_attribute);
8264 
8265                  set_User_Attribute(p_cz_attribute_name    => 'rolloverIntlTextId',
8266                                     p_cz_attribute_value   => TO_CHAR(l_drilldown_text_id),
8267                                     px_xml_attribute_value => l_user_attribute);
8268 
8269                END IF;
8270 
8271 
8272                BEGIN
8273                  l_ui_action_id := get_UI_Action_Id(p_ui_node);
8274                EXCEPTION
8275                  WHEN OTHERS THEN
8276                     NULL;
8277                END;
8278 
8279                IF l_ui_action_id IS NOT NULL THEN
8280 
8281                  set_User_Attribute(p_cz_attribute_name    => 'actionId',
8282                                     p_cz_attribute_value   => TO_CHAR(l_ui_action_id),
8283                                     px_xml_attribute_value => l_user_attribute);
8284 
8285                END IF;
8286 
8287                set_Attribute(l_xml_node,G_USER_ATTRIBUTE3_NAME,l_user_attribute);
8288 
8289              END IF;     -- end of IF l_user_attribute IS NOT NULL
8290           END IF;   -- end of IF p_ui_node.ctrl_template_id=g_DRILLDOWN_TEMPLATE_ID THEN
8291 
8292           IF k > 0 THEN
8293 
8294             l_curr_parent_xml_node := xmldom.getParentNode(l_xml_node);
8295 
8296             l_attribute_value := get_Attribute_Value(l_xml_node, G_ID_ATTRIBUTE);
8297 
8298             l_xml_node_name := xmldom.getNodeName(l_xml_node);
8299 
8300             IF l_attribute_value IS NOT NULL THEN
8301               l_new_attribute_value := handle_JRAD_Id(l_attribute_value,p_ui_node.element_id);
8302               l_new_attribute_value := REPLACE(REPLACE(l_new_attribute_value,'_czt','_czn'), '_czc','_czn');
8303               set_Attribute(xmldom.makeElement(l_xml_node),G_ID_ATTRIBUTE, l_new_attribute_value);
8304             END IF;
8305 
8306             --
8307             -- set value of user attribute "switcherDefaultCaseName" to new jrad id of <oa:switcher>
8308             --
8309             IF xmldom.getNodeName(l_xml_node)='oa:switcher' THEN
8310               l_old_switcher_xml_id := l_attribute_value;
8311               l_user_attribute3_value := get_Attribute_Value(l_xml_node, G_USER_ATTRIBUTE3_NAME);
8312               l_switcher_casename := get_User_Attribute(l_user_attribute3_value ,'switcherDefaultCaseName');
8313               l_switcher_casename := REPLACE(l_switcher_casename,l_attribute_value, l_new_attribute_value);
8314               l_switcher_casename := REPLACE(REPLACE(l_switcher_casename,'_czt','_czn'), '_czc','_czn');
8315               set_User_Attribute(p_cz_attribute_name    => 'switcherDefaultCaseName',
8316                                  p_cz_attribute_value   => l_switcher_casename,
8317                                  px_xml_attribute_value => l_user_attribute3_value);
8318 
8319               set_Attribute(l_xml_node,
8320                             G_USER_ATTRIBUTE3_NAME,
8321                             l_user_attribute3_value);
8322             END IF;
8323 
8324             --
8325             -- set value of attribute "name" of <ui:case> to id of parent <oa:switcher>
8326             --
8327             IF (l_xml_node_name='ui:case' AND xmldom.getNodeName(l_curr_parent_xml_node)='oa:switcher') THEN
8328               l_switcher_xml_id := get_Attribute_Value(l_curr_parent_xml_node, G_ID_ATTRIBUTE);
8329               l_uicase_name     :=  get_Attribute_Value(l_xml_node, 'name');
8330               set_Attribute(xmldom.makeElement(l_xml_node),
8331                             'name',
8332                             REPLACE(REPLACE(REPLACE(l_uicase_name,l_old_switcher_xml_id,l_switcher_xml_id),'_czt','_czn'), '_czc', '_czn'));
8333               handle_UI_CASE_Id(l_xml_node);
8334             END IF;
8335 
8336             --
8337             -- if current tag is <oa:stackLayout>
8338             -- then replace old id with new one
8339             --
8340             IF (l_xml_node_name='oa:stackLayout' AND
8341                xmldom.getNodeName(l_curr_parent_xml_node)='ui:case') AND l_attribute_value IS NOT NULL THEN
8342               set_Attribute(xmldom.makeElement(l_xml_node),
8343                             G_ID_ATTRIBUTE,
8344                            REPLACE(REPLACE(get_Attribute_Value(l_curr_parent_xml_node, 'name'),'_czt','_czn'),'_czc','_czn'));
8345             END IF;
8346           END IF; -- end of  IF k > 0 THEN
8347 
8348         END LOOP;
8349       END IF; -- end of IF (l_length > 0) THEN
8350 
8351       --l_new_xml_root_node := xmldom.cloneNode(l_xml_root_node, TRUE);
8352       l_new_xml_root_node := cloneNode(l_xml_root_node, p_parent_xml_node);
8353 
8354 
8355       l_user_attribute4 := get_Attribute_Value(l_new_xml_root_node,
8356                                                G_USER_ATTRIBUTE4_NAME);
8357       IF l_user_attribute4 IS NOT NULL THEN
8358 
8359         set_User_Attribute(p_cz_attribute_name    => 'name',
8360                            p_cz_attribute_value   => p_ui_node.name,
8361                            px_xml_attribute_value => l_user_attribute4);
8362 
8363         IF p_ui_node.element_signature_id IS NOT NULL THEN
8364            set_User_Attribute(p_cz_attribute_name    => 'elementType',
8365                               p_cz_attribute_value   => TO_CHAR(p_ui_node.element_signature_id),
8366                               px_xml_attribute_value => l_user_attribute4);
8367 
8368         END IF;
8369 
8370         set_Attribute(l_new_xml_root_node,
8371                       G_USER_ATTRIBUTE4_NAME,
8372                       l_user_attribute4);
8373 
8374       END IF;
8375 
8376     END IF; -- end of use by Copy
8377 
8378     l_parent_xml_node := xmldom.getParentNode(p_xml_node_to_replace);
8379     IF g_using_new_UI_refresh THEN
8380       g_dom_elements_tbl.DELETE(TO_NUMBER(p_ui_node.element_id));
8381       g_dom_elements_tbl(TO_NUMBER(p_ui_node.element_id)) := l_new_xml_root_node;
8382       l_new_xml_root_node := xmldom.replaceChild(l_parent_xml_node,l_new_xml_root_node, p_xml_node_to_replace);
8383     ELSE
8384     BEGIN
8385       l_new_xml_root_node := xmldom.replaceChild(p_parent_xml_node,l_new_xml_root_node, p_xml_node_to_replace);
8386     EXCEPTION
8387       WHEN OTHERS THEN
8388         l_tabxml_node := find_Table_Of_XML_Node(p_parent_xml_node, p_ui_node.element_id);
8389         IF NOT(xmldom.IsNull(l_tabxml_node)) THEN
8390           l_tabxml_uicontens_node := getUIContents(l_tabxml_node);
8391           l_new_xml_root_node := xmldom.replaceChild(l_tabxml_uicontens_node, l_new_xml_root_node, p_xml_node_to_replace);
8392         END IF;
8393     END;
8394     END IF;
8395     RETURN p_parent_xml_node;
8396 
8397   EXCEPTION
8398     WHEN OTHERS THEN
8399       DEBUG('replace_UIXML_Element() : '||SQLERRM);
8400       RETURN p_parent_xml_node;
8401   END replace_UIXML_Element;
8402 
8403   --vsingava IM-ER
8404   PROCEDURE change_to_basic_Layout(p_xml_node xmldom.DOMNode,
8405                                    p_user_attribute4 VARCHAR2,
8406                                    p_page_id NUMBER,
8407                                    p_amn_node CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE) IS
8408     l_layout_region_type VARCHAR2(10);
8409     l_element_type VARCHAR2(10);
8410     l_new_element_type VARCHAR2(10);
8411     l_view_name VARCHAR2(255);
8412     l_user_attribute1 VARCHAR2(2000);
8413     l_temp_value VARCHAR2(255);
8414   BEGIN
8415 
8416     l_layout_region_type := get_User_Attribute(p_user_attribute4, 'layoutRegionType');
8417     l_element_type := get_User_Attribute(p_user_attribute4, 'elementType');
8418 
8419     IF l_element_type = '6079' THEN
8420       l_new_element_type := '6006';
8421     ELSIF l_element_type = '6080' THEN
8422       l_new_element_type := '6004';
8423     ELSIF l_element_type = '6081' THEN
8424       l_new_element_type := '6007';
8425     ELSIF l_element_type = '6082' THEN
8426       l_new_element_type := '6003';
8427     ELSE
8428       -- l_element_type = '6083'
8429       l_new_element_type := '6001';
8430     END IF;
8431 
8432     set_user_attribute(p_xml_node,
8433                        G_USER_ATTRIBUTE4_NAME,
8434                        'layoutRegionType',
8435                        '0');
8436 
8437     set_user_attribute(p_xml_node,
8438                        G_USER_ATTRIBUTE4_NAME,
8439                        'elementType',
8440                        l_new_element_type);
8441 
8442     l_user_attribute1 := get_Attribute_Value(p_xml_node, G_USER_ATTRIBUTE1_NAME);
8443 
8444     IF NOT(l_user_attribute1='model_path=%modelPath' OR l_user_attribute1 IS NULL) THEN
8445       -- This element has an AMN. So we need to change the view names also
8446       l_temp_value := remove_user_attribute(p_xml_node, G_USER_ATTRIBUTE3_NAME, 'nodeChildrenView');
8447       l_view_name := get_View_Name(p_amn_node, l_temp_value);
8448       set_user_attribute(p_xml_node,
8449                          G_USER_ATTRIBUTE3_NAME,
8450                          'nodeView',
8451                          l_view_name);
8452 
8453     END IF;
8454 
8455 
8456   END change_to_basic_Layout;
8457 
8458 
8459 
8460   PROCEDURE refresh_Model_Path(p_ui_element_id       VARCHAR2,
8461                                p_ui_page_id          NUMBER,
8462                                p_base_persistent_node_id NUMBER, --vsingava IM-ER
8463                                p_base_expl_id NUMBER,
8464                                p_persistent_node_id  NUMBER,
8465                                p_xml_node_to_refresh xmldom.DOMNode) IS
8466 
8467     l_new_model_path        VARCHAR2(32000);
8468     l_current_model_path    VARCHAR2(32000);
8469     l_user_attribute3       VARCHAR2(32000);
8470     l_ui_node_expl_id       NUMBER;
8471     l_ui_action_id          NUMBER;
8472 
8473   BEGIN
8474 
8475     IF p_persistent_node_id IS NOT NULL THEN
8476       --
8477       -- get value of "user:attribute1"
8478       --
8479       l_current_model_path  := get_Attribute_Value(p_xml_node_to_refresh,
8480                                                  G_USER_ATTRIBUTE1_NAME);
8481 
8482       IF l_current_model_path IS NOT NULL THEN
8483 
8484         SELECT model_ref_expl_id INTO l_ui_node_expl_id FROM CZ_UI_PAGE_ELEMENTS
8485          WHERE ui_def_id=g_UI_Context.ui_def_id AND page_id=p_ui_page_id AND element_id=p_ui_element_id;
8486 
8487         l_new_model_path := get_Runtime_Relative_Path(p_model_id             => g_UI_Context.devl_project_id,
8488                                                       p_base_persistent_node_id => p_base_persistent_node_id,
8489                                                       p_base_expl_id         => p_base_expl_id,
8490                                                       p_persistent_node_id   => p_persistent_node_id,
8491                                                       p_ui_node_expl_id      => l_ui_node_expl_id);
8492 
8493 
8494          IF l_new_model_path IS NOT NULL THEN
8495           --
8496           -- attribute1 is always used only for model_path
8497           --
8498           set_Attribute(p_xml_node_to_refresh,
8499                         G_USER_ATTRIBUTE1_NAME,
8500                         'model_path='||l_new_model_path);
8501          END IF;
8502 
8503       END IF; -- end of IF l_current_model_path IS NOT NULL
8504     END IF; -- end of IF p_persistent_node_id IS NOT NULL
8505 
8506     l_user_attribute3  := get_Attribute_Value(p_xml_node_to_refresh,
8507                                               G_USER_ATTRIBUTE3_NAME);
8508 
8509     IF l_user_attribute3 IS NOT NULL THEN
8510 
8511       BEGIN
8512         l_ui_action_id := TO_NUMBER(get_User_Attribute(l_user_attribute3,'actionId'));
8513       EXCEPTION
8514         WHEN OTHERS THEN
8515           l_ui_action_id := NULL;
8516       END;
8517 
8518       IF l_ui_action_id IS NOT NULL THEN
8519         FOR i IN(SELECT target_persistent_node_id,target_expl_node_id FROM CZ_UI_ACTIONS
8520                  WHERE ui_def_id=g_UI_Context.ui_def_id AND
8521                        source_page_id=p_ui_page_id AND
8522                        element_id=p_ui_element_id AND
8523                        target_node_path IS NOT NULL AND
8524                        deleted_flag=G_NO_FLAG)
8525         LOOP
8526           l_new_model_path := get_Runtime_Relative_Path(p_model_id             => g_UI_Context.devl_project_id,
8527                                                         p_base_persistent_node_id => p_base_persistent_node_id,
8528                                                         p_base_expl_id         => p_base_expl_id,
8529                                                         p_persistent_node_id   => i.target_persistent_node_id,
8530                                                         p_ui_node_expl_id      => i.target_expl_node_id);
8531           IF l_new_model_path IS NOT NULL THEN
8532             UPDATE CZ_UI_ACTIONS
8533                SET target_node_path=l_new_model_path
8534              WHERE ui_def_id=g_UI_Context.ui_def_id AND
8535                    source_page_id=p_ui_page_id AND
8536                    element_id=p_ui_element_id AND
8537                    target_node_path<>l_new_model_path;
8538           END IF;
8539         END LOOP;
8540       END IF; -- end of IF l_action_id IS NOT NULL ...
8541 
8542     END IF;  -- end of IF l_user_attribute3 IS NOT NULL
8543 
8544   EXCEPTION
8545     WHEN OTHERS THEN
8546       NULL;
8547   END refresh_Model_Path;
8548 
8549   --vsingava IM-ER
8550   PROCEDURE refresh_All_Model_Paths(p_xml_doc     xmldom.DOMDocument,
8551                                     p_page_id     NUMBER) IS
8552 
8553     l_root_node                   xmldom.DOMNode;
8554     l_pagebase_persistent_node_id NUMBER;
8555     l_pagebase_expl_id            NUMBER;
8556 
8557     PROCEDURE refresh_paths_recursive(p_xml_node                xmldom.DOMNode,
8558                                       p_base_persistent_node_id NUMBER,
8559                                       p_base_expl_id            NUMBER,
8560                                       p_inherited_persistent_id NUMBER,
8561                                       p_inherited_expl_id       NUMBER) IS
8562 
8563       l_node                    xmldom.DOMNode;
8564       l_nodeslist               xmldom.DOMNodeList;
8565       l_empty_xml_node          xmldom.DOMNode;
8566       l_length                  NUMBER;
8567       l_element_id              VARCHAR2(32000);
8568       l_base_persistent_node_Id NUMBER;
8569       l_base_expl_id            NUMBER;
8570       l_inherited_persistent_id NUMBER;
8571       l_inherited_expl_id       NUMBER;
8572 
8573       l_persistent_node_Id NUMBER;
8574       l_expl_id            NUMBER;
8575 
8576       l_user_attribute4_value   VARCHAR2(2000);
8577       l_layout_region_type      VARCHAR2(255);
8578       l_is_instance_list_layout BOOLEAN := FALSE;
8579       l_AMN_set                 BOOLEAN := FALSE;
8580       l_model_node              CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE; --vsingava IM-ER
8581     BEGIN
8582 
8583 
8584 
8585       l_nodeslist := xmldom.getChildrenByTagName(xmldom.makeElement(p_xml_node), '*');
8586       l_length    := xmldom.getLength(l_nodeslist);
8587 
8588       FOR i IN 0..l_length-1
8589       LOOP
8590 
8591           l_base_persistent_node_Id := p_base_persistent_node_Id;
8592           l_base_expl_id            := p_base_expl_id;
8593           l_inherited_persistent_id := p_inherited_persistent_id;
8594           l_inherited_expl_id       := p_inherited_expl_id;
8595           l_AMN_set := FALSE;
8596           l_is_instance_list_layout := FALSE;
8597 
8598           l_node := xmldom.item(l_nodeslist, i);
8599           l_element_id := get_Attribute_Value(l_node, G_ID_ATTRIBUTE);
8600           IF l_element_id IS NOT NULL THEN
8601              BEGIN
8602 
8603                l_user_attribute4_value := get_Attribute_Value(l_node, G_USER_ATTRIBUTE4_NAME);
8604                l_layout_region_type    := get_User_Attribute(l_user_attribute4_value, 'layoutRegionType');
8605 
8606                IF l_layout_region_type = '6078' THEN
8607                  -- The node are dealing with is an Instance List Layout Region
8608                  l_is_instance_list_layout := TRUE;
8609                  DEBUG('Found an instance list layout region');
8610                END IF;
8611 
8612                BEGIN
8613 
8614                  SELECT persistent_node_id, model_ref_expl_id INTO l_persistent_node_id, l_expl_id
8615                    FROM CZ_UI_PAGE_ELEMENTS
8616                  WHERE ui_def_id=g_UI_Context.ui_def_id AND
8617                        page_id=p_page_id AND
8618                        element_id=l_element_id;
8619 
8620                  -- This element has an AMN associated to it directly
8621                  l_inherited_persistent_id := l_persistent_node_id;
8622                  l_inherited_expl_id := l_expl_id;
8623                  l_AMN_set := TRUE;
8624 
8625                EXCEPTION
8626                  WHEN NO_DATA_FOUND THEN
8627                    -- This node does not have an AMN set directly. So use the inherited values
8628                    l_persistent_node_id := p_inherited_persistent_id;
8629                    l_expl_id := p_inherited_expl_id;
8630                END;
8631 
8632                IF l_is_instance_list_layout THEN
8633                  -- check if the AMN is still instantiable
8634                  l_model_node := getNodeByPersistentAndExplId(l_persistent_node_id, l_expl_id);
8635                  IF( l_model_node.instantiable_flag = G_MANDATORY_INST_TYPE ) THEN
8636                    DEBUG('Element ' || l_element_id || ' changes from instance list to basic layout');
8637 
8638                    -- The element should be changed from Instance List Layout to basic layout
8639                    change_to_basic_Layout(l_node, l_user_attribute4_value, p_page_id, l_model_node);
8640                  ELSE
8641                    -- The AMN is still instantiable. Change the base node ids for the next level of recursion.
8642                    l_base_persistent_node_Id := l_persistent_node_id;
8643                    l_base_expl_id := l_expl_id;
8644                  END IF;
8645 
8646                END IF;
8647 
8648                IF l_AMN_set THEN
8649                  refresh_Model_Path(p_ui_element_id      => l_element_id,
8650                                     p_ui_page_id          => p_page_id,
8651                                     p_base_persistent_node_id => p_base_persistent_node_Id,
8652                                     p_base_expl_id => p_base_expl_id,
8653                                     p_persistent_node_id  => l_persistent_node_id,
8654                                     p_xml_node_to_refresh => l_node);
8655                ELSE
8656                  refresh_Model_Path(p_ui_element_id       => l_element_id,
8657                                     p_ui_page_id          => p_page_id,
8658                                     p_base_persistent_node_id => p_base_persistent_node_Id,
8659                                     p_base_expl_id => p_base_expl_id,
8660                                     p_persistent_node_id  => NULL,
8661                                     p_xml_node_to_refresh => l_node);
8662                END IF;
8663              END;
8664 
8665           END IF;
8666 
8667           refresh_paths_recursive(l_node,
8668                                   l_base_persistent_node_Id,
8669                                   l_base_expl_id,
8670                                   l_inherited_persistent_id,
8671                                   l_inherited_expl_id);
8672 
8673       END LOOP;
8674 
8675     END refresh_paths_recursive;
8676 
8677   BEGIN
8678 
8679     l_root_node := xmldom.makeNode(xmldom.getDocumentElement(p_xml_doc));
8680 
8681     DEBUG('In refresh all model paths: ' || p_page_Id);
8682 
8683     SELECT persistent_node_id,pagebase_expl_node_id
8684       INTO l_pagebase_persistent_node_id, l_pagebase_expl_id
8685       FROM CZ_UI_PAGES
8686      WHERE ui_def_id=g_UI_Context.ui_def_id AND page_id=p_page_id;
8687 
8688     refresh_paths_recursive (l_root_node,
8689                              l_pagebase_persistent_node_id,
8690                              l_pagebase_expl_id,
8691                              l_pagebase_persistent_node_id,
8692                              l_pagebase_expl_id);
8693 
8694   END refresh_All_Model_Paths;
8695 
8696   ---------------------------------------------------------------------
8697   ------------------- JDR DOC BUILDER / XML Parsing -------------------
8698   ---------------------------------------------------------------------
8699 
8700   --
8701   -- get attributes of a given DOM node
8702   -- Parameters : p_node - DOM node
8703   -- Return     : array of attributes in format of  attributes_tbl_type array
8704   --
8705   FUNCTION get_Attributes(p_node IN xmldom.DOMNode)
8706     RETURN attributes_tbl_type IS
8707 
8708     l_attr_tbl     attributes_tbl_type;
8709     l_node_map_tbl xmldom.DOMNamedNodeMap;
8710     l_node_attr    xmldom.DOMNode;
8711     l_index        NUMBER;
8712     l_length       NUMBER;
8713 
8714   BEGIN
8715     l_node_map_tbl := xmldom.getAttributes(p_node);
8716     IF (xmldom.isNull(l_node_map_tbl) = FALSE) THEN
8717       l_length := xmldom.getLength(l_node_map_tbl);
8718       --
8719       -- loop through attributes
8720       --
8721       l_index := 1;
8722       FOR i IN 0 .. l_length - 1
8723       LOOP
8724         l_node_attr := xmldom.item(l_node_map_tbl, i);
8725         l_attr_tbl(l_index).NAME := xmldom.getNodeName(l_node_attr);
8726         l_attr_tbl(l_index).VALUE := xmldom.getNodeValue(l_node_attr);
8727         l_index := l_index + 1;
8728       END LOOP;
8729     END IF;
8730     RETURN l_attr_tbl;
8731   END get_Attributes;
8732 
8733   --
8734   -- set attributes for JRAD doc builder element p_jraddoc_node
8735   -- to attributes of DOM node p_node
8736   -- so this means that we just copy all attributes from DOM Node p_node
8737   -- to attributes of jdr_docbuilder.Element p_jraddoc_node
8738   -- it is used when DOM tree is converted to JRAD document
8739   --  Parameters : p_node - DOM node
8740   --               p_jraddoc_node - JRAD doc builder element
8741   -- Notes : it is not used in UI Generation/UI Refresh process directly
8742   --
8743   PROCEDURE set_Attributes(p_node         xmldom.DOMNode,
8744                            p_jraddoc_node jdr_docbuilder.Element) IS
8745 
8746     l_attr_tbl attributes_tbl_type;
8747 
8748   BEGIN
8749     l_attr_tbl := get_Attributes(p_node);
8750     IF l_attr_tbl.COUNT > 0 THEN
8751       FOR l IN l_attr_tbl.FIRST .. l_attr_tbl.LAST
8752       LOOP
8753         jdr_docbuilder.setAttribute(p_jraddoc_node,
8754                                     l_attr_tbl(l).NAME,
8755                                     l_attr_tbl(l).VALUE);
8756       END LOOP;
8757       l_attr_tbl.DELETE;
8758     END IF;
8759   END set_Attributes;
8760 
8761   --
8762   -- create JRAD element based on a given VARCHAR2 string
8763   -- which must be in the following form :
8764   --  <NS>:<Tag>
8765   -- Example : 'oa:button'
8766   --
8767   -- Parameters : p_node_name - VARCHAR2 string which contains string
8768   -- described above
8769   --
8770   FUNCTION createElement(p_node_name IN VARCHAR2)
8771     RETURN jdr_docbuilder.Element IS
8772 
8773     l_ns VARCHAR2(255);
8774     l_el VARCHAR2(255);
8775 
8776   BEGIN
8777     l_ns := SUBSTR(p_node_name, 1, INSTR(p_node_name, ':'));
8778     l_el := SUBSTR(p_node_name, INSTR(p_node_name, ':') + 1);
8779 
8780     RETURN jdr_docbuilder.createElement(l_ns, l_el);
8781   END createElement;
8782 
8783   --
8784   -- recursive procedure which
8785   -- scans DOM tree and create a corresponding JRAD document
8786   -- Parameters :
8787   --  p_nodeList - list of DOM nodes of the current level in DOM tree
8788   --  p_groupingTag - identifies XML grouping tag
8789   --  p_parent      - identifes parent JRAD docbuilder element
8790   --
8791   PROCEDURE traverse_DOM_Tree(p_nodeList    xmldom.DOMNodeList,
8792                               p_groupingTag VARCHAR2,
8793                               p_parent      jdr_docbuilder.Element) IS
8794 
8795     l_next_level_tbl xmldom.DOMNodeList;
8796     l_node           xmldom.DOMNode;
8797     l_parent_xml_node xmldom.DOMNode;
8798     l_attr_tbl       attributes_tbl_type;
8799     l_child          jdr_docbuilder.Element;
8800     l_tag_name       VARCHAR2(255);
8801     l_parent_tag_name VARCHAR2(255);
8802     l_grouping_tag   VARCHAR2(255);
8803     l_ns             VARCHAR2(255);
8804     l_gr             VARCHAR2(255);
8805     l_attr_value     VARCHAR2(32000);
8806     l_st             VARCHAR2(1) := '';
8807     l_length         NUMBER;
8808 
8809   BEGIN
8810 
8811     --
8812     -- now we have a DOM tree of the target JRAD document
8813     -- and we need to populate JRAD tables by using jdr_docbuilder API
8814     --
8815     l_length := xmldom.getLength(p_nodeList);
8816 
8817     FOR i IN 0 .. l_length - 1
8818     LOOP
8819       l_node := xmldom.item(p_nodeList, i);
8820 
8821       l_tag_name := xmldom.getNodeName(l_node);
8822 
8823       l_parent_xml_node := xmldom.getParentNode(l_node);
8824 
8825       IF NOT(xmldom.isNull(l_parent_xml_node)) THEN
8826         l_parent_tag_name := xmldom.getNodeName(l_parent_xml_node);
8827       END IF;
8828 
8829       l_grouping_tag := '';
8830 
8831       l_attr_tbl     := get_Attributes(l_node);
8832 
8833       IF l_attr_tbl.COUNT = 0 AND l_tag_name NOT IN('ui:firePartialAction') THEN
8834 
8835         --
8836         -- this is grouping tag
8837         --
8838         l_grouping_tag := l_tag_name;
8839 
8840       END IF;
8841 
8842       l_st := NULL;
8843 
8844       IF p_groupingTag IS NOT NULL THEN
8845 
8846         l_child := createElement(l_tag_name);
8847 
8848         l_st := G_YES_FLAG;
8849 
8850         IF l_attr_tbl.COUNT > 0 THEN
8851           FOR l IN l_attr_tbl.FIRST .. l_attr_tbl.LAST
8852           LOOP
8853             l_attr_value := l_attr_tbl(l).VALUE;
8854 
8855               l_attr_value := REPLACE(l_attr_value, G_UMPERS, G_UMPERS||'amp;');
8856               l_attr_value := REPLACE(l_attr_value, '<', G_UMPERS||'lt;');
8857               l_attr_value := REPLACE(l_attr_value, '>', G_UMPERS||'gt;');
8858               l_attr_value := REPLACE(l_attr_value, '"', G_UMPERS||'quot;');
8859               l_attr_value := REPLACE(l_attr_value, '''', G_UMPERS||'apos;');
8860 
8861             jdr_docbuilder.setAttribute(l_child,
8862                                         l_attr_tbl(l).NAME,
8863                                         l_attr_value);
8864           END LOOP;
8865           l_attr_tbl.DELETE;
8866         END IF; -- end of IF l_attr_tbl.COUNT > 0 THEN
8867 
8868         l_ns := SUBSTR(p_groupingTag, 1, INSTR(p_groupingTag, ':'));
8869         l_gr := SUBSTR(p_groupingTag, INSTR(p_groupingTag, ':') + 1);
8870 
8871         IF l_ns IS NULL THEN
8872           l_ns := 'jrad:';
8873         END IF;
8874         jdr_docbuilder.addChild(p_parent, l_ns, l_gr, l_child);
8875 
8876         /* new jdr_docbuilder function */
8877 
8878       ELSE
8879        IF (l_tag_name='ui:case' AND
8880          l_parent_tag_name IN('oa:switcher')) OR
8881          (l_tag_name='oa:stackLayout' AND l_parent_tag_name = 'ui:case') THEN
8882 
8883           l_child := createElement(l_tag_name);
8884 
8885           l_st := G_YES_FLAG;
8886           IF l_attr_tbl.COUNT > 0 THEN
8887             FOR l IN l_attr_tbl.FIRST .. l_attr_tbl.LAST
8888             LOOP
8889               l_attr_value := l_attr_tbl(l).VALUE;
8890 
8891               l_attr_value := REPLACE(l_attr_value, G_UMPERS, G_UMPERS||'amp;');
8892               l_attr_value := REPLACE(l_attr_value, '<', G_UMPERS||'lt;');
8893               l_attr_value := REPLACE(l_attr_value, '>', G_UMPERS||'gt;');
8894               l_attr_value := REPLACE(l_attr_value, '"', G_UMPERS||'quot;');
8895               l_attr_value := REPLACE(l_attr_value, '''', G_UMPERS||'apos;');
8896 
8897               jdr_docbuilder.setAttribute(l_child,
8898                                           l_attr_tbl(l).NAME,
8899                                           l_attr_value);
8900 
8901             END LOOP;
8902             l_attr_tbl.DELETE;
8903           END IF;
8904 
8905           jdr_docbuilder.addChild(p_parent, l_child);
8906 
8907         END IF;
8908 
8909         NULL;
8910       END IF; -- end of IF p_groupingTag IS NOT NULL THEN
8911 
8912       l_next_level_tbl := xmldom.getChildNodes(l_node);
8913       IF NOT(xmldom.isNull(l_next_level_tbl)) AND
8914          xmldom.getLENGTH(l_next_level_tbl) <> 0 THEN
8915 
8916         IF l_st IS NULL THEN
8917           traverse_DOM_Tree(l_next_level_tbl,
8918                             l_grouping_tag,
8919                             p_parent);
8920         ELSE
8921           traverse_DOM_Tree(l_next_level_tbl,
8922                             l_grouping_tag,
8923                             l_child);
8924         END IF;
8925       END IF;
8926 
8927     END LOOP;
8928 
8929   END traverse_DOM_Tree;
8930 
8931   FUNCTION get_JRADNLS_Lang RETURN VARCHAR2 IS
8932     l_lang VARCHAR2(255);
8933   BEGIN
8934     SELECT ISO_LANGUAGE||'-'||
8935            ISO_TERRITORY
8936       INTO l_lang
8937       FROM FND_LANGUAGES_VL
8938      WHERE language_code=USERENV('LANG');
8939     RETURN l_lang;
8940   EXCEPTION
8941     WHEN OTHERS THEN
8942       RETURN 'EN-US';
8943   END get_JRADNLS_Lang;
8944 
8945   --
8946   -- convert DOM Tree to JRAD record sets
8947   -- by ising DOM methods AND jdr_docbuilder API
8948   -- Parameters : p_jrad_doc_name - specifies full JRAD name of
8949   --              document that will be created from DOM tree
8950   --              which is identified by global DOM Document variable g_DOC
8951   --
8952   PROCEDURE convert_DOM_to_JRAD(p_dom_root_node xmldom.DOMNode,
8953                                 p_jrad_doc_name IN VARCHAR2) IS
8954 
8955     l_topLevel      jdr_docbuilder.Element;
8956     l_status        PLS_INTEGER;
8957     l_lang          VARCHAR2(255);
8958   BEGIN
8959 
8960     --g_DOC := p_doc;
8961 
8962     --
8963     -- refresh global jdr_docbuilder's structures
8964     --
8965     jdr_docbuilder.refresh;
8966 
8967     --
8968     -- remove top level xml attributes - jdrdocbuilder always adds these attributes
8969     -- so we don't need to have a duplicates
8970     --
8971     remove_TopLevel_Attributes(p_dom_root_node);
8972 
8973     l_lang := get_JRADNLS_Lang();
8974     --
8975     -- create a target JRAD document
8976     --
8977     g_JRADDOC := jdr_docbuilder.createDocument(p_jrad_doc_name, l_lang);
8978 
8979     --
8980     -- create root element of the target JRAD document
8981     --
8982     l_topLevel := createElement(xmldom.getNodeName(p_dom_root_node));
8983 
8984     --
8985     -- set top level attributes
8986     --
8987     set_Attributes(p_dom_root_node, l_topLevel);
8988 
8989     --
8990     -- set JRAD top level node
8991     --
8992     jdr_docbuilder.setTopLevelElement(g_JRADDOC, l_topLevel);
8993 
8994     --
8995     -- modify the source DOM tree and create the target JRAD document
8996     -- traverse_DOM_Tree() is recursive procedure
8997     --
8998     traverse_DOM_Tree(xmldom.getChildNodes(p_dom_root_node),
8999                       '',
9000                       l_topLevel);
9001 
9002     --
9003     -- finally SAVE the target JRAD document
9004     --
9005     l_status := jdr_docbuilder.SAVE;
9006 
9007   END convert_DOM_to_JRAD;
9008 
9009   --
9010   -- save JRAD document
9011   --
9012   PROCEDURE Save_Document(p_xml_doc  xmldom.DOMDocument,
9013                           p_doc_name IN VARCHAR2) IS
9014     l_dom_root_node xmldom.DOMNode;
9015   BEGIN
9016 
9017     --
9018     -- get Document's root node
9019     --
9020     l_dom_root_node := xmldom.makeNode(xmldom.getDocumentElement(p_xml_doc));
9021     convert_DOM_to_JRAD(p_dom_root_node => l_dom_root_node, p_jrad_doc_name => p_doc_name);
9022 
9023   END Save_Document;
9024 
9025   --
9026   -- save JRAD document
9027   --
9028   PROCEDURE Save_As_Document(p_xml_root_node  xmldom.DOMNode,
9029                              p_doc_name IN VARCHAR2) IS
9030   BEGIN
9031 
9032     convert_DOM_to_JRAD(p_dom_root_node => p_xml_root_node, p_jrad_doc_name => p_doc_name);
9033 
9034   END Save_As_Document;
9035 
9036   ---------------------------------------------------------------------
9037   ----------  end of JDR DOC BUILDER / XML Parsing Part ---------------
9038   ---------------------------------------------------------------------
9039 
9040   PROCEDURE set_UI_Global_Entities IS
9041   BEGIN
9042 
9043     IF NVL(g_UI_Context.preserve_model_hierarchy,G_YES_FLAG) = G_YES_FLAG THEN
9044       g_suppress_refresh_flag := G_NO_FLAG;
9045     ELSE
9046       g_suppress_refresh_flag := G_YES_FLAG;
9047     END IF;
9048 
9049     SELECT root_element_signature_id
9050       INTO g_DRILLDOWN_ELEM_SIGNATURE_ID
9051       FROM CZ_UI_TEMPLATES
9052      WHERE template_id=g_DRILLDOWN_TEMPLATE_ID AND
9053            ui_def_id=G_GLOBAL_TEMPLATES_UI_DEF_ID AND
9054            deleted_flag=G_NO_FLAG;
9055 
9056     IF g_DRILLDOWN_TEMPLATE_ID=G_DRILLDOWN_BUTTON_TEMPLATE_ID THEN
9057        g_DRILLDOWN_B_SIGNATURE_ID := g_DRILLDOWN_ELEM_SIGNATURE_ID;
9058     ELSE
9059       SELECT root_element_signature_id
9060         INTO g_DRILLDOWN_B_SIGNATURE_ID
9061         FROM CZ_UI_TEMPLATES
9062        WHERE ui_def_id=G_GLOBAL_TEMPLATES_UI_DEF_ID AND
9063              template_id=G_DRILLDOWN_BUTTON_TEMPLATE_ID AND
9064              deleted_flag=G_NO_FLAG;
9065     END IF;
9066 
9067     SELECT TEMPLATE_TOKEN INTO G_CAPTION_RULE_TOKENNAME FROM CZ_RULES
9068     WHERE rule_id=G_DEFAULT_CAPTION_RULE_ID;
9069 
9070   END set_UI_Global_Entities;
9071 
9072   --
9073   -- get UI context
9074   --
9075   FUNCTION get_UI_Context(p_ui_def_id IN NUMBER) RETURN CZ_UI_DEFS%ROWTYPE IS
9076   BEGIN
9077     RETURN get_UI_Def_Node(p_ui_def_id);
9078   END get_UI_Context;
9079 
9080   --
9081   -- set global UI context
9082   --
9083   PROCEDURE set_UI_Context(p_ui_def_id IN NUMBER) IS
9084     l_ui_def_id          NUMBER;
9085   BEGIN
9086     l_ui_def_id := p_ui_def_id; -- this is to handle bug in 9i PL/SQL
9087     g_UI_Context := get_UI_Context(l_ui_def_id);
9088 
9089     IF g_UI_Context.ROWS_PER_TABLE=-1 THEN
9090       g_UI_Context.ROWS_PER_TABLE := 1000000;
9091     END IF;
9092 
9093     IF g_UI_CONTEXT.PAGIN_MAXCONTROLS=-1 THEN
9094       g_UI_CONTEXT.PAGIN_MAXCONTROLS := 1000000;
9095     END IF;
9096 
9097   END set_UI_Context;
9098 
9099   --
9100   -- set current global UI Context
9101   -- ( UI Generation mode )
9102   --
9103   FUNCTION create_UI_Context(p_model_id           IN NUMBER,
9104                              p_master_template_id IN NUMBER DEFAULT NULL,
9105                              p_ui_name            IN VARCHAR2 DEFAULT NULL,
9106                              p_description        IN VARCHAR2 DEFAULT NULL,
9107                              p_show_all_nodes     IN VARCHAR2 DEFAULT NULL,
9108                              p_create_empty_ui    IN VARCHAR2 DEFAULT NULL)
9109     RETURN CZ_UI_DEFS%ROWTYPE IS
9110 
9111     l_node                        CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE;
9112     l_page_ui_node                CZ_UI_PAGE_ELEMENTS%ROWTYPE;
9113     l_page_set_id                 CZ_UI_PAGE_SETS.page_set_id%TYPE;
9114     l_page_ref_id                 CZ_UI_PAGE_REFS.page_ref_id%TYPE;
9115     l_page_set_type               CZ_UI_PAGE_SETS.page_set_type%TYPE;
9116     l_master_template_id          NUMBER;
9117 
9118   BEGIN
9119     l_master_template_id := p_master_template_id;  -- this is to handle bug in 9i PL/SQL
9120 
9121     --
9122     -- set UI context as UI Master Template Setting
9123     --
9124     set_UI_Context(l_master_template_id);
9125     g_UI_Context.from_master_template_id := l_master_template_id;
9126 
9127     IF g_UI_Context.ROWS_PER_TABLE=-1 THEN
9128       g_UI_Context.ROWS_PER_TABLE := 1000000;
9129     END IF;
9130     IF g_UI_CONTEXT.PAGIN_MAXCONTROLS=-1 THEN
9131       g_UI_CONTEXT.PAGIN_MAXCONTROLS := 1000000;
9132     END IF;
9133 
9134     --
9135     -- allocate a new ui_def_id for new UI
9136     --
9137     g_UI_Context.ui_def_id               := allocateId('CZ_UI_DEFS_S');
9138     g_UI_Context.devl_project_id         := p_model_id;
9139     g_UI_Context.component_id            := p_model_id;
9140     g_UI_Context.master_template_flag    := G_NO_FLAG;
9141     g_UI_Context.seeded_flag             := G_NO_FLAG;
9142     g_UI_Context.ui_style                := G_OA_STYLE_UI;
9143     g_UI_Context.from_master_template_id := NVL(l_master_template_id,G_DEFAULT_MASTER_TEMPLATE_ID);
9144     g_UI_Context.empty_ui_flag           := NVL(p_create_empty_ui,G_NO_FLAG);
9145 
9146     IF p_create_empty_ui IS NULL OR p_create_empty_ui='0' THEN
9147       g_UI_Context.suppress_refresh_flag   := '0';
9148     ELSE
9149       g_UI_Context.suppress_refresh_flag   := '1';
9150     END IF;
9151 
9152     g_UI_Context.persistent_ui_def_id    := g_UI_Context.ui_def_id;
9153     g_UI_Context.desc_text               := p_description;
9154     g_UI_Context.model_timestamp         := SYSDATE;
9155     g_UI_Context.ui_status               := G_NEW_UI_STATUS;
9156     g_UI_Context.show_all_nodes_flag     := NVL(p_show_all_nodes,G_NO_FLAG);
9157 
9158     IF g_UI_Context.start_url IS NULL THEN
9159       g_UI_Context.start_url := G_DEFAULT_START_URL;
9160     END IF;
9161 
9162     IF g_UI_Context.page_layout IS NULL THEN
9163       g_UI_Context.page_layout := G_DEFAULT_PAGE_LAYOUT;
9164     END IF;
9165 
9166     g_ui_def_nodes_tbl(g_UI_Context.ui_def_id) := g_UI_Context;
9167 
9168     --
9169     -- count number of UIs for a given model
9170     --
9171     SELECT COUNT(ui_def_id) + 1
9172       INTO g_UI_Context.tree_seq
9173       FROM CZ_UI_DEFS
9174      WHERE component_id = p_model_id AND
9175            deleted_flag = G_NO_FLAG;
9176 
9177     IF p_ui_name IS NULL THEN
9178       SELECT NAME || ' User Interface (' || TO_CHAR(g_UI_Context.tree_seq) || ')'
9179         INTO g_UI_Context.NAME
9180         FROM CZ_DEVL_PROJECTS
9181        WHERE devl_project_id = p_model_id;
9182     ELSE
9183       g_UI_Context.NAME      := p_ui_name;
9184     END IF;
9185 
9186     set_UI_Global_Entities();
9187 
9188     --
9189     -- create local UI Templates if they need to be created
9190     --
9191     create_Local_UI_Templates();
9192 
9193     INSERT INTO CZ_UI_DEFS
9194       (UI_DEF_ID,
9195        DESC_TEXT,
9196        NAME,
9197        DEVL_PROJECT_ID,
9198        COMPONENT_ID,
9199        TREE_SEQ,
9200        UI_STYLE,
9201        GEN_VERSION,
9202        TREENODE_DISPLAY_SOURCE,
9203        GEN_HEADER,
9204        LOOK_AND_FEEL,
9205        CONTROLS_PER_SCREEN,
9206        PRIMARY_NAVIGATION,
9207        PERSISTENT_UI_DEF_ID,
9208        MODEL_TIMESTAMP,
9209        UI_STATUS,
9210        PAGE_SET_ID,
9211        START_PAGE_ID,
9212        ERR_RUN_ID,
9213        START_URL,
9214        PAGE_LAYOUT,
9215        PRICE_UPDATE,
9216        SEEDED_FLAG,
9217        MASTER_TEMPLATE_FLAG,
9218        PRICE_DISPLAY,
9219        FROM_MASTER_TEMPLATE_ID,
9220        PAGIN_MAXCONTROLS,
9221        PAGIN_NONINST,
9222        PAGIN_NONINST_REFCOMP,
9223        CONTROL_LAYOUT,
9224        PAGIN_DRILLDOWNCTRL,
9225        OUTER_TEMPLATE_USAGE,
9226        PAGIN_BOMOC,
9227        BOMUI_LAYOUT,
9228        BOMQTYINPUTCTRLS,
9229        CTRLTEMPLUSE_BOM,
9230        CTRLTEMPLUSE_NONBOM,
9231        NONBOM_UILAYOUT,
9232        CTRLTEMPLUSE_COMMON,
9233        CTRLTEMPLUSE_REQDMSG,
9234        CTRLTEMPLUSE_OPTMSG,
9235        MENU_CAPTION_RULE_ID,
9236        PAGE_CAPTION_RULE_ID,
9237        PRESERVE_MODEL_HIERARCHY,
9238        EMPTY_UI_FLAG,
9239        SHOW_TRAIN,
9240        PAGINATION_SLOT,
9241        DRILLDOWN_CONTROL_TEXT_ID,
9242        DRILLDOWN_IMAGE_URL,
9243        ROWS_PER_TABLE,
9244        CTRLTEMPLATEUSE_BUTTONBAR,
9245        CTRLTEMPLATEUSE_UTILITYPAGE,
9246        OPTION_SORT_SELECT_FIRST,
9247        OPTION_SORT_ORDER,
9248        OPTION_SORT_METHOD,
9249        SHOW_ALL_NODES_FLAG,
9250        PAGE_STATUS_TEMPLATE_USAGE,
9251        suppress_refresh_flag,
9252        DELETED_FLAG,
9253        UI_TIMESTAMP_REFRESH,
9254        DRILLDOWN_TX_TYPE,
9255        CONTENT_LAST_UPDATE_DATE,
9256        DISABLE_AUTOOVERRIDE_FLAG
9257       )
9258       SELECT g_UI_Context.ui_def_id,
9259              g_UI_Context.desc_text,
9260              g_UI_Context.NAME,
9261              g_UI_Context.devl_project_id,
9262              g_UI_Context.component_id,
9263              g_UI_Context.tree_seq,
9264              g_UI_Context.ui_style,
9265              G_GEN_VERSION,
9266              TREENODE_DISPLAY_SOURCE,
9267              G_GEN_HEADER,
9268              LOOK_AND_FEEL,
9269              CONTROLS_PER_SCREEN,
9270              PRIMARY_NAVIGATION,
9271              g_UI_Context.persistent_ui_def_id,
9272              g_UI_Context.model_timestamp,
9273              g_UI_Context.ui_status,
9274              g_UI_Context.page_set_id,
9275              g_UI_Context.start_page_id,
9276              g_UI_Context.err_run_id,
9277              g_UI_Context.start_url,
9278              g_UI_Context.page_layout,
9279              G_DEFAULT_PRICE_UPDATE,
9280              '0',
9281              '0',
9282              G_DEFAULT_PRICE_DISPLAY,
9283              g_UI_Context.from_master_template_id,
9284              PAGIN_MAXCONTROLS,
9285              PAGIN_NONINST,
9286              PAGIN_NONINST_REFCOMP,
9287              CONTROL_LAYOUT,
9288              PAGIN_DRILLDOWNCTRL,
9289              OUTER_TEMPLATE_USAGE,
9290              PAGIN_BOMOC,
9291              BOMUI_LAYOUT,
9292              BOMQTYINPUTCTRLS,
9293              CTRLTEMPLUSE_BOM,
9294              CTRLTEMPLUSE_NONBOM,
9295              NONBOM_UILAYOUT,
9296              CTRLTEMPLUSE_COMMON,
9297              CTRLTEMPLUSE_REQDMSG,
9298              CTRLTEMPLUSE_OPTMSG,
9299              MENU_CAPTION_RULE_ID,
9300              PAGE_CAPTION_RULE_ID,
9301              PRESERVE_MODEL_HIERARCHY,
9302              NVL(p_create_empty_ui, G_NO_FLAG),
9303              SHOW_TRAIN,
9304              PAGINATION_SLOT,
9305              DRILLDOWN_CONTROL_TEXT_ID,
9306              DRILLDOWN_IMAGE_URL,
9307              ROWS_PER_TABLE,
9308              CTRLTEMPLATEUSE_BUTTONBAR,
9309              CTRLTEMPLATEUSE_UTILITYPAGE,
9310              OPTION_SORT_SELECT_FIRST,
9311              OPTION_SORT_ORDER,
9312              OPTION_SORT_METHOD,
9313              p_show_all_nodes,
9314              PAGE_STATUS_TEMPLATE_USAGE,
9315              g_UI_Context.suppress_refresh_flag,
9316              DELETED_FLAG,
9317              SYSDATE,
9318              DRILLDOWN_TX_TYPE,
9319              CONTENT_LAST_UPDATE_DATE,
9320              DISABLE_AUTOOVERRIDE_FLAG
9321     FROM CZ_UI_DEFS
9322     WHERE ui_def_id = g_UI_Context.from_master_template_id;
9323 
9324     --
9325     -- get root model node
9326     --
9327     l_node := get_Model_Node(p_model_id);
9328 
9329     --
9330     -- create root UI page
9331     --
9332     l_page_ui_node  := create_UI_Page(p_node          => l_node,
9333                                       x_page_set_id   => l_page_set_id,
9334                                       x_page_set_type => l_page_set_type,
9335                                       x_page_ref_id   => l_page_ref_id);
9336 
9337     g_UI_Context.start_page_id := l_page_ui_node.page_id;
9338     g_UI_Context.page_set_id   := l_page_set_id;
9339 
9340     UPDATE CZ_UI_DEFS
9341        SET start_page_id=g_UI_Context.start_page_id,
9342            page_set_id=g_UI_Context.page_set_id
9343      WHERE ui_def_id=g_UI_Context.ui_def_id;
9344 
9345     RETURN g_UI_Context;
9346 
9347   END create_UI_Context;
9348 
9349   --
9350   -- get UI context of target UI
9351   --
9352   FUNCTION get_Target_UI_Context(p_ui_def_node  IN CZ_UI_DEFS%ROWTYPE,
9353                                  p_reference_id IN NUMBER)
9354    RETURN CZ_UI_DEFS%ROWTYPE IS
9355     l_init_ui_def_id     NUMBER;
9356     l_target_ui_def_node CZ_UI_DEFS%ROWTYPE;
9357     l_old_context        CZ_UI_DEFS%ROWTYPE;
9358   BEGIN
9359     l_init_ui_def_id := p_ui_def_node.ui_def_id;
9360     l_old_context    := g_UI_Context;
9361 
9362     SELECT *
9363       INTO l_target_ui_def_node
9364       FROM CZ_UI_DEFS
9365      WHERE ui_def_id = (SELECT MAX(ui_def_id)
9366                           FROM CZ_UI_DEFS
9367                          WHERE devl_project_id = p_reference_id AND
9368                                ui_status IN (G_PROCESSED_UI_STATUS,G_NEW_UI_STATUS) AND
9369                                deleted_flag = G_NO_FLAG);
9370 
9371     /* ***  bug #3848809 ***
9372     IF g_UI_Context.PRIMARY_NAVIGATION=G_MODEL_TREE_MENU AND
9373        l_target_ui_def_node.PRIMARY_NAVIGATION <> G_MODEL_TREE_MENU THEN
9374 
9375       l_target_ui_def_node := create_UI_Context(p_model_id           => p_reference_id,
9376                                                 p_master_template_id => p_ui_def_node.from_master_template_id,
9377                                                 p_show_all_nodes     => p_ui_def_node.show_all_nodes_flag,
9378                                                 p_create_empty_ui    =>  p_ui_def_node.empty_ui_flag);
9379       --
9380       -- set global UI context
9381       --
9382       set_UI_Context(l_init_ui_def_id);
9383 
9384       RETURN l_target_ui_def_node;
9385 
9386     ELSE
9387     */
9388       RETURN l_target_ui_def_node;
9389     -- END IF;
9390 
9391   EXCEPTION
9392     WHEN NO_DATA_FOUND THEN
9393 
9394       l_target_ui_def_node := create_UI_Context(p_model_id           => p_reference_id,
9395                                                 p_master_template_id => p_ui_def_node.from_master_template_id,
9396                                                 p_show_all_nodes     => p_ui_def_node.show_all_nodes_flag,
9397                                                 p_create_empty_ui    => p_ui_def_node.empty_ui_flag);
9398       --
9399       -- set global UI context
9400       --
9401       --set_UI_Context(l_init_ui_def_id);
9402       g_UI_Context := l_old_context;
9403 
9404       RETURN l_target_ui_def_node;
9405   END get_Target_UI_Context;
9406 
9407   FUNCTION find_CX_On_UI_Page(p_page_id      IN NUMBER,
9408                               p_component_id IN NUMBER,
9409                               p_command_name IN VARCHAR2)
9410     RETURN VARCHAR2 IS
9411 
9412     l_page_persistent_node_id NUMBER;
9413 
9414   BEGIN
9415 
9416     SELECT persistent_node_id INTO l_page_persistent_node_id
9417     FROM CZ_UI_PAGES
9418     WHERE page_id=p_page_id AND ui_def_id=g_UI_Context.ui_def_id;
9419 
9420     FOR i IN (SELECT element_id FROM CZ_UI_PAGE_ELEMENTS
9421               WHERE ui_def_id=g_UI_Context.ui_def_id AND
9422                     page_id IN(SELECT page_id FROM CZ_UI_PAGES
9423                     WHERE ui_def_id=g_UI_Context.ui_def_id AND
9424                     persistent_node_id=l_page_persistent_node_id AND deleted_flag NOT IN(G_YES_FLAG,G_MARK_TO_DELETE)) AND
9425                     element_type=G_UI_CX_BUTTON_NODE_TYPE AND
9426                     persistent_node_id=(SELECT persistent_node_id FROM CZ_PS_NODES
9427                     WHERE ps_node_id=p_component_id)
9428                     AND deleted_flag NOT IN(G_YES_FLAG,G_MARK_TO_DELETE))
9429    LOOP
9430      FOR k IN(SELECT ui_action_id FROM CZ_UI_ACTIONS
9431               WHERE ui_def_id=g_UI_Context.ui_def_id AND element_id=i.element_id AND
9432                     cx_command_name=p_command_name AND deleted_flag=G_NO_FLAG)
9433      LOOP
9434        RETURN i.element_id;
9435      END LOOP;
9436    END LOOP;
9437    -- no CX on the page
9438    RETURN G_NO_FLAG;
9439   END find_CX_On_UI_Page;
9440 
9441   --
9442   -- create new CX button
9443   --
9444   PROCEDURE add_CX_Button(p_node                IN CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE,
9445                           p_ui_node             IN CZ_UI_PAGE_ELEMENTS%ROWTYPE) IS
9446 
9447     l_element_id             CZ_UI_PAGE_ELEMENTS.element_id%TYPE;
9448     l_parent_element_id      CZ_UI_PAGE_ELEMENTS.parent_element_id%TYPE;
9449     l_ui_action_id           CZ_UI_ACTIONS.ui_action_id%TYPE;
9450     l_name                   CZ_UI_PAGE_ELEMENTS.name%TYPE;
9451     l_page_path              VARCHAR2(32000);
9452     l_ui_intl_text_id        INTEGER;
9453     l_counter                INTEGER;
9454     l_new_node               BOOLEAN := FALSE;
9455 
9456     l_pb_model_ref_expl_id   NUMBER;
9457     l_pb_persistent_node_id  NUMBER;
9458     l_persistent_id          NUMBER;
9459     l_ref_model_id           NUMBER;
9460     l_persistent_intl_text_id NUMBER;
9461   BEGIN
9462 
9463     IF p_ui_node.suppress_refresh_flag=G_YES_FLAG THEN
9464       RETURN;
9465     END IF;
9466 
9467     FOR i IN(SELECT DISTINCT b.data_value, b.expr_node_id, a.INSTANTIATION_SCOPE, a.name
9468              FROM CZ_RULES a, CZ_EXPRESSION_NODES b
9469              WHERE a.devl_project_id=p_node.devl_project_id AND
9470                    a.component_id=p_node.ps_node_id AND
9471                    a.rule_type=G_CZ_EXTENTSIONS_RULE_TYPE AND
9472                    a.deleted_flag=G_NO_FLAG AND
9473                    a.disabled_flag=G_NO_FLAG AND
9474                    a.invalid_flag=G_NO_FLAG AND
9475                    b.rule_id=a.rule_id AND
9476                    b.deleted_flag=G_NO_FLAG AND
9477                    b.argument_signature_id=G_EVENT_ON_COMMAND_SIGID AND
9478                    data_value IS NOT NULL)
9479     LOOP
9480       -- do not create a CX for instantiable reference with
9481       -- instantiation_scope= INSTANCE
9482       IF p_node.ps_node_type=G_REFERENCE_TYPE AND
9483          p_node.instantiable_flag NOT IN(G_MANDATORY_INST_TYPE) AND
9484          i.INSTANTIATION_SCOPE=1 THEN
9485          add_Error_Message(p_message_name => 'CZ_CX_IS_IN_WRONG_SCOPE',
9486                             p_token_name1  => 'EVENT_NAME',
9487                             p_token_value1 => i.data_value,
9488                             p_token_name2  => 'RULE_NAME',
9489                             p_token_value2 => i.name,
9490                             p_fatal_error  => FALSE);
9491         RETURN;
9492       END IF;
9493       IF find_CX_On_UI_Page(p_ui_node.page_id, p_node.ps_node_id, i.data_value) = G_NO_FLAG THEN
9494 
9495         l_element_id := get_Element_Id();
9496         l_ui_intl_text_id := allocateId('CZ_INTL_TEXTS_S');
9497         INSERT INTO CZ_INTL_TEXTS
9498            (INTL_TEXT_ID,
9499             TEXT_STR,
9500             DELETED_FLAG,
9501             SEEDED_FLAG,
9502             UI_DEF_ID,
9503             MODEL_ID,
9504             UI_PAGE_ID,
9505             UI_PAGE_ELEMENT_ID
9506             )
9507         VALUES
9508            (l_ui_intl_text_id,
9509             i.data_value,
9510             G_NO_FLAG,
9511             G_NO_FLAG,
9512             g_UI_Context.ui_def_id,
9513             g_UI_Context.devl_project_id,
9514             p_ui_node.page_id,
9515             l_element_id
9516            );
9517 
9518         SELECT persistent_intl_text_id INTO l_persistent_intl_text_id
9519         FROM CZ_INTL_TEXTS
9520         WHERE INTL_TEXT_ID = l_ui_intl_text_id;
9521 
9522         g_cx_names_tbl(TO_NUMBER(l_element_id)) := l_persistent_intl_text_id;
9523 
9524         IF p_ui_node.parent_element_id IS NULL THEN
9525           l_parent_element_id := p_ui_node.element_id;
9526         ELSE
9527           l_parent_element_id := p_ui_node.parent_element_id;
9528         END IF;
9529         l_new_node := TRUE;
9530 
9531         SELECT COUNT(element_id)+1 INTO l_counter FROM CZ_UI_PAGE_ELEMENTS
9532         WHERE ui_def_id=g_UI_Context.ui_def_id AND
9533               page_id=p_ui_node.page_id AND
9534               ctrl_template_id=G_DRILLDOWN_BUTTON_TEMPLATE_ID AND
9535              deleted_flag NOT IN(G_YES_FLAG,G_MARK_TO_DELETE);
9536 
9537        l_name := G_DRILLDOWN_TEMPLATE_NAME||' - '||TO_CHAR(l_counter);
9538 
9539        INSERT INTO CZ_UI_PAGE_ELEMENTS
9540          (ui_def_id,
9541          persistent_node_id,
9542          parent_persistent_node_id,
9543          region_persistent_node_id,
9544          pagebase_persistent_node_id,
9545          page_id,
9546          base_page_flag,
9547          seq_nbr,
9548          ctrl_template_id,
9549          ctrl_template_ui_def_id,
9550          element_id,
9551          parent_element_id,
9552          element_type,
9553          instantiable_flag,
9554          model_ref_expl_id,
9555          element_signature_id,
9556          name,
9557          deleted_flag)
9558        VALUES
9559         (p_ui_node.ui_def_id,
9560          p_node.persistent_node_id,
9561          p_node.parent_persistent_node_id,
9562          p_ui_node.region_persistent_node_id,
9563          p_ui_node.pagebase_persistent_node_id,
9564          p_ui_node.page_id,
9565          NULL,
9566          p_ui_node.seq_nbr+1,
9567          G_DRILLDOWN_BUTTON_TEMPLATE_ID,
9568          G_GLOBAL_TEMPLATES_UI_DEF_ID,
9569          l_element_id,
9570          l_parent_element_id,
9571          G_UI_CX_BUTTON_NODE_TYPE,
9572          NULL,
9573          p_ui_node.model_ref_expl_id,
9574          g_DRILLDOWN_B_SIGNATURE_ID,
9575          l_name,
9576          G_MARK_TO_ADD);
9577 
9578          l_ui_action_id := allocateId('CZ_UI_ACTIONS_S');
9579 
9580          INSERT INTO CZ_UI_ACTIONS
9581          (
9582          ui_action_id
9583          ,ui_def_id
9584          ,source_page_id
9585          ,context_component_id
9586          ,element_id
9587          ,render_condition_id
9588          ,ui_action_type
9589          ,target_ui_def_id
9590          ,target_persistent_node_id
9591          ,target_node_path
9592          ,target_page_set_id
9593          ,target_page_id
9594          ,target_url
9595          ,frame_name
9596          ,target_anchor
9597          ,seeded_flag
9598          ,cx_command_name
9599          ,window_parameters
9600          ,target_window_type
9601          ,target_window_name
9602          ,target_expl_node_id
9603          ,deleted_flag
9604          )
9605          VALUES
9606          (
9607          l_ui_action_id
9608          ,p_ui_node.ui_def_id
9609          ,p_ui_node.page_id
9610          ,p_node.persistent_node_id
9611          ,l_element_id
9612          ,NULL
9613          ,G_CX_BUTTON_ACTION_TYPE
9614          ,NULL
9615          ,NULL
9616          ,NULL
9617          ,NULL
9618          ,NULL
9619          ,NULL
9620          ,NULL
9621          ,NULL
9622          ,'0'
9623          ,i.data_value
9624          ,NULL
9625          ,NULL
9626          ,NULL
9627          ,NULL
9628          ,G_NO_FLAG
9629          );
9630 
9631       END IF;
9632 
9633     END LOOP;
9634 
9635     IF p_node.ps_node_type=G_REFERENCE_TYPE THEN
9636 
9637     FOR i IN(SELECT a.model_ref_expl_id, b.data_value, a.component_id, b.expr_node_id, a.name, a.INSTANTIATION_SCOPE
9638              FROM CZ_RULES a, CZ_EXPRESSION_NODES b
9639              WHERE a.devl_project_id=p_node.devl_project_id AND
9640                    a.component_id IN
9641                (SELECT ps_node_id FROM CZ_PS_NODES
9642                 WHERE devl_project_id IN
9643                 (SELECT DISTINCT component_id FROM CZ_MODEL_REF_EXPLS
9644                 START WITH model_id=p_node.devl_project_id AND
9645                            referring_node_id=p_node.ps_node_id AND
9646                            deleted_flag='0'
9647                 CONNECT BY PRIOR model_ref_expl_id=parent_expl_node_id AND
9648                          deleted_flag='0' AND PRIOR deleted_flag='0') AND
9649                 deleted_flag='0') AND
9650                    a.rule_type=G_CZ_EXTENTSIONS_RULE_TYPE AND
9651                    a.deleted_flag=G_NO_FLAG AND
9652                    a.disabled_flag=G_NO_FLAG AND
9653                    a.invalid_flag=G_NO_FLAG AND
9654                    b.rule_id=a.rule_id AND
9655                    b.deleted_flag=G_NO_FLAG AND
9656                    b.argument_signature_id=G_EVENT_ON_COMMAND_SIGID AND
9657                    data_value IS NOT NULL)
9658       LOOP
9659 
9660         -- do not create a CX for instantiable reference with
9661         -- instantiation_scope= INSTANCE
9662         IF p_node.ps_node_type=G_REFERENCE_TYPE AND
9663            p_node.instantiable_flag NOT IN(G_MANDATORY_INST_TYPE) AND
9664            i.INSTANTIATION_SCOPE=1 THEN
9665           add_Error_Message(p_message_name => 'CZ_CX_IS_IN_WRONG_SCOPE',
9666                             p_token_name1  => 'EVENT_NAME',
9667                             p_token_value1 => i.data_value,
9668                             p_token_name2  => 'RULE_NAME',
9669                             p_token_value2 => i.name,
9670                             p_fatal_error  => FALSE);
9671           RETURN;
9672         END IF;
9673 
9674         IF find_CX_On_UI_Page(p_ui_node.page_id, p_node.ps_node_id, i.data_value) = G_NO_FLAG THEN
9675 
9676           l_element_id := get_Element_Id();
9677           l_ui_intl_text_id := allocateId('CZ_INTL_TEXTS_S');
9678           INSERT INTO CZ_INTL_TEXTS
9679            (INTL_TEXT_ID,
9680             TEXT_STR,
9681             DELETED_FLAG,
9682             SEEDED_FLAG,
9683             UI_DEF_ID,
9684             MODEL_ID,
9685             UI_PAGE_ID,
9686             UI_PAGE_ELEMENT_ID)
9687           VALUES
9688            (l_ui_intl_text_id,
9689             i.data_value,
9690             G_NO_FLAG,
9691             G_NO_FLAG,
9692             g_UI_Context.ui_def_id,
9693             g_UI_Context.devl_project_id,
9694             p_ui_node.page_id,
9695             l_element_id
9696            );
9697 
9698           SELECT persistent_intl_text_id INTO l_persistent_intl_text_id
9699           FROM CZ_INTL_TEXTS
9700           WHERE INTL_TEXT_ID = l_ui_intl_text_id;
9701 
9702           g_cx_names_tbl(TO_NUMBER(l_element_id)) := l_persistent_intl_text_id;
9703 
9704           IF p_ui_node.parent_element_id IS NULL THEN
9705             l_parent_element_id := p_ui_node.element_id;
9706           ELSE
9707             l_parent_element_id := p_ui_node.parent_element_id;
9708           END IF;
9709 
9710           l_new_node := TRUE;
9711 
9712           INSERT INTO CZ_UI_PAGE_ELEMENTS
9713          (ui_def_id,
9714          persistent_node_id,
9715          parent_persistent_node_id,
9716          region_persistent_node_id,
9717          pagebase_persistent_node_id,
9718          page_id,
9719          base_page_flag,
9720          seq_nbr,
9721          ctrl_template_id,
9722          ctrl_template_ui_def_id,
9723          element_id,
9724          parent_element_id,
9725          element_type,
9726          instantiable_flag,
9727          model_ref_expl_id,
9728          element_signature_id,
9729          name,
9730          deleted_flag)
9731        VALUES
9732         (p_ui_node.ui_def_id,
9733          p_node.persistent_node_id,
9734          p_node.parent_persistent_node_id,
9735          p_ui_node.region_persistent_node_id,
9736          p_ui_node.pagebase_persistent_node_id,
9737          p_ui_node.page_id,
9738          NULL,
9739          p_ui_node.seq_nbr+1,
9740          G_DRILLDOWN_BUTTON_TEMPLATE_ID,
9741          G_GLOBAL_TEMPLATES_UI_DEF_ID,
9742          l_element_id,
9743          l_parent_element_id,
9744          G_UI_CX_BUTTON_NODE_TYPE,
9745          NULL,
9746          p_ui_node.model_ref_expl_id,
9747          g_DRILLDOWN_B_SIGNATURE_ID,
9748          'Button - '||i.data_value,
9749          G_MARK_TO_ADD);
9750 
9751          l_ui_action_id := allocateId('CZ_UI_ACTIONS_S');
9752 
9753          INSERT INTO CZ_UI_ACTIONS
9754          (
9755          ui_action_id
9756          ,ui_def_id
9757          ,source_page_id
9758          ,context_component_id
9759          ,element_id
9760          ,render_condition_id
9761          ,ui_action_type
9762          ,target_ui_def_id
9763          ,target_persistent_node_id
9764          ,target_node_path
9765          ,target_page_set_id
9766          ,target_page_id
9767          ,target_url
9768          ,frame_name
9769          ,target_anchor
9770          ,seeded_flag
9771          ,cx_command_name
9772          ,window_parameters
9773          ,target_window_type
9774          ,target_window_name
9775          ,target_expl_node_id
9776          ,deleted_flag
9777          )
9778          VALUES
9779          (
9780          l_ui_action_id
9781          ,p_ui_node.ui_def_id
9782          ,p_ui_node.page_id
9783          ,p_node.persistent_node_id
9784          ,l_element_id
9785          ,NULL
9786          ,G_CX_BUTTON_ACTION_TYPE
9787          ,NULL
9788          ,NULL
9789          ,NULL
9790          ,NULL
9791          ,NULL
9792          ,NULL
9793          ,NULL
9794          ,NULL
9795          ,'0'
9796          ,i.data_value
9797          ,NULL
9798          ,NULL
9799          ,NULL
9800          ,NULL
9801          ,G_NO_FLAG
9802          );
9803 
9804          -- find model to which model ref expl node with i.model_ref_expl_id belongs to
9805          FOR k IN(SELECT component_id, ps_node_type FROM CZ_MODEL_REF_EXPLS
9806                    START WITH model_ref_expl_id=i.model_ref_expl_id
9807                   CONNECT BY PRIOR parent_expl_node_id=model_ref_expl_id AND deleted_flag='0')
9808          LOOP
9809            IF k.ps_node_type = CZ_TYPES.PS_NODE_TYPE_REFERENCE THEN
9810              l_ref_model_id := k.component_id;
9811              EXIT;
9812            END IF;
9813          END LOOP;
9814 
9815          -- find persistent_node_id of PS node which is used in CX binding
9816          SELECT persistent_node_id INTO l_persistent_id FROM CZ_PS_NODES
9817           WHERE devl_project_id=l_ref_model_id AND ps_node_id=i.component_id;
9818 
9819          -- find model_ref_expl_id and persistent_node_id of pagebase
9820          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
9821           WHERE ui_def_id=p_ui_node.ui_def_id AND page_id=p_ui_node.page_id AND
9822                 element_id=p_ui_node.parent_element_id;
9823 
9824          -- save runtime relative path of CX button in associative array g_ref_cx_paths_tbl ( UI element_id <-> runtime relative path )
9825          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,
9826                                                                                                      p_base_pers_id => l_pb_persistent_node_id,
9827                                                                                                      p_node_expl_id => i.model_ref_expl_id,
9828                                                                                                      p_node_pers_id => l_persistent_id);
9829 
9830         END IF;
9831 
9832       END LOOP;
9833 
9834     END IF;
9835 
9836     --
9837     -- if CX button is added then mark UI page as page
9838     -- to refresh
9839     --
9840     IF l_new_node THEN
9841       --
9842       -- mark UI Page as refreshed
9843       --
9844       mark_UI_Page_As_Refreshed(p_ui_node.page_id, p_ui_node.ui_def_id);
9845     END IF;
9846 
9847   END add_CX_Button;
9848 
9849   --
9850   -- handle CX for those nodes which have no corresponding
9851   -- records in table CZ_UI_PAGE_ELEMENTS
9852   --
9853   PROCEDURE handle_CXs_For_nonUINodes IS
9854 
9855     l_ui_intl_text_id   CZ_INTL_TEXTS.intl_text_id%TYPE;
9856     l_element_id        CZ_UI_PAGE_ELEMENTS.element_id%TYPE;
9857     l_parent_element_id CZ_UI_PAGE_ELEMENTS.element_id%TYPE;
9858     l_ui_action_id      CZ_UI_ACTIONS.ui_action_id%TYPE;
9859     l_persistent_intl_text_id NUMBER;
9860   BEGIN
9861 
9862      FOR option_node IN(SELECT ps_node_id,persistent_node_id,
9863                                parent_persistent_node_id FROM CZ_UITEMPLS_FOR_PSNODES_V a
9864                          WHERE devl_project_id=g_UI_Context.devl_project_id AND
9865                                ui_def_id=g_UI_Context.from_master_template_id AND
9866                                ps_node_type IN(G_OPTION_TYPE, G_BOM_STANDART_ITEM_TYPE) AND
9867                                ui_omit=G_NO_FLAG AND deleted_flag=G_NO_FLAG AND
9868                                EXISTS(SELECT NULL FROM CZ_RULES
9869                                        WHERE devl_project_id=g_UI_Context.devl_project_id AND
9870                                              component_id=a.ps_node_id AND
9871                                              disabled_flag=G_NO_FLAG AND
9872                                              deleted_flag=G_NO_FLAG))
9873      LOOP
9874        FOR parent_ui_node IN(SELECT *
9875                                FROM CZ_UI_PAGE_ELEMENTS
9876                               WHERE ui_def_id=g_UI_Context.ui_def_id AND
9877                                     persistent_node_id=option_node.parent_persistent_node_id AND
9878                                     deleted_flag NOT IN(G_YES_FLAG, G_MARK_TO_DELETE, G_LIMBO_FLAG))
9879        LOOP
9880 
9881          FOR i IN(SELECT DISTINCT b.data_value, b.expr_node_id, a.INSTANTIATION_SCOPE, a.NAME
9882                     FROM CZ_RULES a, CZ_EXPRESSION_NODES b
9883                    WHERE a.devl_project_id=g_UI_Context.devl_project_id AND
9884                          a.component_id=option_node.ps_node_id AND
9885                          a.rule_type=G_CZ_EXTENTSIONS_RULE_TYPE AND
9886                          a.deleted_flag=G_NO_FLAG AND
9887                          a.disabled_flag=G_NO_FLAG AND
9888                          a.invalid_flag=G_NO_FLAG AND
9889                          b.rule_id=a.rule_id AND
9890                          b.deleted_flag=G_NO_FLAG AND
9891                          b.argument_signature_id=G_EVENT_ON_COMMAND_SIGID AND
9892                          b.data_value IS NOT NULL)
9893          LOOP
9894            IF find_CX_On_UI_Page(parent_ui_node.page_id, option_node.ps_node_id, i.data_value) = G_NO_FLAG THEN
9895              l_element_id := get_Element_Id();
9896 
9897              l_ui_intl_text_id := allocateId('CZ_INTL_TEXTS_S');
9898              INSERT INTO CZ_INTL_TEXTS
9899               (INTL_TEXT_ID,
9900                TEXT_STR,
9901                DELETED_FLAG,
9902                SEEDED_FLAG,
9903                UI_DEF_ID,
9904                MODEL_ID,
9905                UI_PAGE_ID,
9906                UI_PAGE_ELEMENT_ID
9907               )
9908              VALUES
9909              (l_ui_intl_text_id,
9910               i.data_value,
9911               G_NO_FLAG,
9912               G_NO_FLAG,
9913               g_UI_Context.ui_def_id,
9914               g_UI_Context.devl_project_id,
9915               parent_ui_node.page_id,
9916               l_element_id
9917              );
9918 
9919             SELECT persistent_intl_text_id INTO l_persistent_intl_text_id
9920             FROM CZ_INTL_TEXTS
9921             WHERE INTL_TEXT_ID = l_ui_intl_text_id;
9922 
9923             g_cx_names_tbl(TO_NUMBER(l_element_id)) := l_persistent_intl_text_id;
9924             g_ref_cx_paths_tbl(TO_NUMBER(l_element_id)) := get_Model_Path(parent_ui_node)||
9925             '.'||TO_CHAR(option_node.persistent_node_id);
9926 
9927             IF parent_ui_node.parent_element_id IS NULL THEN
9928               l_parent_element_id := parent_ui_node.element_id;
9929             ELSE
9930               l_parent_element_id := parent_ui_node.parent_element_id;
9931             END IF;
9932 
9933             INSERT INTO CZ_UI_PAGE_ELEMENTS
9934              (ui_def_id,
9935              persistent_node_id,
9936              parent_persistent_node_id,
9937              region_persistent_node_id,
9938              pagebase_persistent_node_id,
9939              page_id,
9940              base_page_flag,
9941              seq_nbr,
9942              ctrl_template_id,
9943              ctrl_template_ui_def_id,
9944              element_id,
9945              parent_element_id,
9946              element_type,
9947              instantiable_flag,
9948              model_ref_expl_id,
9949              element_signature_id,
9950              NAME,
9951              deleted_flag)
9952             VALUES
9953              (g_UI_Context.ui_def_id,
9954              option_node.persistent_node_id,
9955              option_node.parent_persistent_node_id,
9956              parent_ui_node.region_persistent_node_id,
9957              parent_ui_node.pagebase_persistent_node_id,
9958              parent_ui_node.page_id,
9959              NULL,
9960              parent_ui_node.seq_nbr+1,
9961              G_DRILLDOWN_BUTTON_TEMPLATE_ID,
9962              G_GLOBAL_TEMPLATES_UI_DEF_ID,
9963              l_element_id,
9964              l_parent_element_id,
9965              G_UI_CX_BUTTON_NODE_TYPE,
9966              NULL,
9967              parent_ui_node.model_ref_expl_id,
9968              g_DRILLDOWN_B_SIGNATURE_ID,
9969              G_DRILLDOWN_TEMPLATE_NAME||' - '||l_element_id,
9970              G_MARK_TO_ADD);
9971 
9972             l_ui_action_id := allocateId('CZ_UI_ACTIONS_S');
9973 
9974             INSERT INTO CZ_UI_ACTIONS
9975             (
9976              ui_action_id
9977              ,ui_def_id
9978              ,source_page_id
9979              ,context_component_id
9980              ,element_id
9981              ,render_condition_id
9982              ,ui_action_type
9983              ,target_ui_def_id
9984              ,target_persistent_node_id
9985              ,target_node_path
9986              ,target_page_set_id
9987              ,target_page_id
9988              ,target_url
9989              ,frame_name
9990              ,target_anchor
9991              ,seeded_flag
9992              ,cx_command_name
9993              ,window_parameters
9994              ,target_window_type
9995              ,target_window_name
9996              ,target_expl_node_id
9997              ,deleted_flag
9998              )
9999              VALUES
10000              (
10001              l_ui_action_id
10002              ,g_UI_Context.ui_def_id
10003              ,parent_ui_node.page_id
10004              ,option_node.persistent_node_id
10005              ,l_element_id
10006              ,NULL
10007              ,G_CX_BUTTON_ACTION_TYPE
10008             ,NULL
10009              ,NULL
10010              ,NULL
10011              ,NULL
10012              ,NULL
10013              ,NULL
10014              ,NULL
10015              ,NULL
10016              ,'0'
10017              ,i.data_value
10018              ,NULL
10019              ,NULL
10020              ,NULL
10021              ,NULL
10022              ,G_NO_FLAG
10023              );
10024 
10025              mark_UI_Page_As_Refreshed(parent_ui_node.page_id, g_UI_Context.ui_def_id);
10026            END IF;  -- end of IF find_CX_On_UI_Page
10027 
10028          END LOOP; -- end of loop with index i
10029 
10030        END LOOP; -- end of loop with index parent_ui_node
10031 
10032      END LOOP; -- end of loop with index option_node
10033 
10034   END handle_CXs_For_nonUINodes;
10035 
10036 
10037   FUNCTION disabled_for_refresh(p_page_element IN CZ_UI_PAGE_ELEMENTS%ROWTYPE) RETURN BOOLEAN
10038   IS
10039     l_dummy VARCHAR2(1);
10040   BEGIN
10041 
10042     SELECT '1' INTO l_dummy
10043     FROM DUAL
10044     WHERE '1' IN (SELECT suppress_refresh_flag
10045                   FROM cz_ui_page_elements
10046                   START WITH ui_def_Id = p_page_element.ui_def_id
10047                   AND page_id = p_page_element.page_id
10048                   AND element_id = p_page_element.element_id
10049                   CONNECT BY PRIOR parent_element_id IS NOT NULL
10050                   AND prior suppress_refresh_flag = G_NO_FLAG
10051                   AND ui_def_Id = p_page_element.ui_def_id
10052                   AND page_id = p_page_element.page_id
10053                   AND prior parent_element_id = element_id);
10054     RETURN TRUE;
10055   EXCEPTION
10056     WHEN NO_DATA_FOUND THEN
10057       RETURN FALSE;
10058   END disabled_for_refresh;
10059 
10060   --
10061   -- handle CX for those nodes which have no corresponding
10062   -- records in table CZ_UI_PAGE_ELEMENTS
10063   --
10064   PROCEDURE handle_CXs IS
10065 
10066     l_ui_intl_text_id   CZ_INTL_TEXTS.intl_text_id%TYPE;
10067     l_element_id        CZ_UI_PAGE_ELEMENTS.element_id%TYPE;
10068     l_parent_element_id CZ_UI_PAGE_ELEMENTS.element_id%TYPE;
10069     l_ui_action_id      CZ_UI_ACTIONS.ui_action_id%TYPE;
10070     l_ps_node           CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE;
10071     l_invalid_flag      VARCHAR2(1);
10072 
10073   BEGIN
10074 
10075 
10076      FOR i in (SELECT DISTINCT page_id
10077                FROM cz_ui_page_elements
10078                WHERE ui_def_Id = g_UI_Context.ui_def_id
10079                AND element_type = G_UI_CX_BUTTON_NODE_TYPE
10080                AND deleted_flag = G_NO_FLAG)
10081      LOOP
10082        --DEBUG('asp: Marking page ' || i.page_id || ', ' || g_UI_Context.ui_def_id || ' for refresh ');
10083        mark_UI_Page_As_Refreshed(i.page_id, g_UI_Context.ui_def_id);
10084      END LOOP;
10085 
10086 
10087      FOR i in (SELECT b.data_value, b.expr_node_id, a.INSTANTIATION_SCOPE, a.NAME,
10088                  (SELECT persistent_node_id
10089                   FROM CZ_PS_NODES
10090                   WHERE devl_project_id = g_UI_Context.devl_project_id
10091                   AND ps_node_id = a.component_id) persistent_node_Id
10092                FROM CZ_RULES a, CZ_EXPRESSION_NODES b
10093                WHERE a.devl_project_id=g_UI_Context.devl_project_id AND
10094                      a.rule_type=G_CZ_EXTENTSIONS_RULE_TYPE AND
10095                      b.rule_id=a.rule_id AND
10096                      b.argument_signature_id=G_EVENT_ON_COMMAND_SIGID AND
10097                      b.data_value IS NOT NULL AND
10098                      b.last_update_date > g_UI_Context.UI_TIMESTAMP_REFRESH)
10099      LOOP
10100        BEGIN
10101 
10102          SELECT e.element_id INTO l_element_id
10103          FROM CZ_UI_PAGE_ELEMENTS e
10104          WHERE ui_def_id = g_UI_Context.ui_def_id AND
10105                persistent_node_id = i.persistent_node_id AND
10106                element_type = G_UI_CX_BUTTON_NODE_TYPE AND
10107                deleted_flag NOT IN (G_YES_FLAG, G_MARK_TO_DELETE) AND
10108                EXISTS (SELECT NULL FROM CZ_UI_ACTIONS a
10109                        WHERE a.ui_def_id = e.ui_def_id AND
10110                              a.source_page_id = e.page_id AND
10111                              a.element_id = e.element_id AND
10112                              a.deleted_flag NOT IN (G_YES_FLAG, G_MARK_TO_DELETE) AND
10113                              a.cx_command_name = i.data_value);
10114        EXCEPTION
10115          WHEN NO_DATA_FOUND THEN
10116            -- No button for the action; Create one
10117            FOR j in (SELECT *
10118                      FROM CZ_UI_PAGE_ELEMENTS e
10119                      WHERE ui_def_id = g_UI_Context.ui_def_id AND
10120                            persistent_node_id = i.persistent_node_id AND
10121                            deleted_flag NOT IN (G_YES_FLAG, G_MARK_TO_DELETE))
10122           LOOP
10123             IF NOT disabled_for_refresh(j) THEN
10124               l_ps_node := get_Model_Node_By_Persist_id(i.persistent_node_id, g_UI_Context.devl_project_id);
10125               add_CX_button(l_ps_node, j);
10126               EXIT;
10127             END IF;
10128           END LOOP;
10129        END;
10130      END LOOP;
10131   END handle_CXs;
10132 
10133   --
10134   -- create single UI element
10135   --
10136   FUNCTION create_UI_Element(p_node                 IN CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE,
10137                              p_parent_ui_node       IN CZ_UI_PAGE_ELEMENTS%ROWTYPE,
10138                              p_insert_index         IN NUMBER DEFAULT -1)
10139     RETURN CZ_UI_PAGE_ELEMENTS%ROWTYPE IS
10140 
10141     l_ui_node                 CZ_UI_PAGE_ELEMENTS%ROWTYPE;
10142     l_node_exists_in_ui       VARCHAR2(1);
10143     l_counter                 NUMBER;
10144     l_parent_seq_nbr          NUMBER;
10145     l_max_prev_seq_nbr        NUMBER;
10146 
10147   BEGIN
10148 
10149     IF p_parent_ui_node.suppress_refresh_flag=G_YES_FLAG THEN
10150       RETURN l_ui_node;
10151     END IF;
10152 
10153     BEGIN
10154       SELECT G_YES_FLAG INTO l_node_exists_in_ui FROM dual
10155       WHERE EXISTS(SELECT NULL FROM CZ_UI_PAGE_ELEMENTS
10156       WHERE ui_def_id=g_UI_Context.ui_def_id AND
10157             page_id=p_parent_ui_node.page_id AND
10158             parent_element_id=p_parent_ui_node.element_id AND
10159             persistent_node_id=p_node.persistent_node_id AND
10160             element_type IS NULL AND deleted_flag=G_NO_FLAG);
10161       RETURN l_ui_node;
10162     EXCEPTION
10163       WHEN NO_DATA_FOUND THEN
10164         NULL;
10165     END;
10166 
10167     l_ui_node.ui_def_id                   := p_parent_ui_node.ui_def_id;
10168     l_ui_node.persistent_node_id          := p_node.persistent_node_id;
10169     l_ui_node.parent_persistent_node_id   := p_node.parent_persistent_node_id;
10170 
10171     l_ui_node.region_persistent_node_id   := p_parent_ui_node.region_persistent_node_id;
10172     l_ui_node.pagebase_persistent_node_id := p_parent_ui_node.pagebase_persistent_node_id;
10173     l_ui_node.page_id                     := p_parent_ui_node.page_id;
10174 
10175     IF p_insert_index > 0 THEN
10176       l_max_prev_seq_nbr := p_insert_index-1;
10177       l_ui_node.seq_nbr := p_insert_index;
10178     ELSE
10179     SELECT NVL(MAX(seq_nbr),0) INTO l_max_prev_seq_nbr  FROM CZ_UI_PAGE_ELEMENTS
10180     START WITH ui_def_id=g_UI_Context.ui_def_id AND
10181                page_id=p_parent_ui_node.page_id AND
10182                element_id=p_parent_ui_node.element_id AND
10183                deleted_flag NOT IN(G_YES_FLAG,G_MARK_TO_DELETE)
10184     CONNECT BY PRIOR ui_def_id=g_UI_Context.ui_def_id AND
10185        ui_def_id=g_UI_Context.ui_def_id AND PRIOR page_id= p_parent_ui_node.page_id
10186         AND page_id=p_parent_ui_node.page_id AND PRIOR element_id=parent_element_id AND
10187         PRIOR deleted_flag NOT IN(G_YES_FLAG,G_MARK_TO_DELETE) AND
10188         deleted_flag NOT IN(G_YES_FLAG,G_MARK_TO_DELETE);
10189 
10190     l_ui_node.seq_nbr  := l_max_prev_seq_nbr + 1;
10191     END IF;
10192 
10193     UPDATE CZ_UI_PAGE_ELEMENTS
10194        SET seq_nbr=seq_nbr+1
10195      WHERE ui_def_id=g_UI_Context.ui_def_id AND
10196            page_id=p_parent_ui_node.page_id AND
10197            seq_nbr>l_max_prev_seq_nbr AND
10198            deleted_flag NOT IN(G_YES_FLAG,G_MARK_TO_DELETE);
10199 
10200     l_ui_node.element_id                  := get_Element_Id();
10201 
10202     l_ui_node.parent_element_id           := p_parent_ui_node.element_id;
10203 
10204     l_ui_node.ctrl_template_id            := p_node.template_id;
10205     l_ui_node.ctrl_template_ui_def_id     := p_node.template_ui_def_id;
10206 
10207     l_ui_node.element_type                := G_UI_REGULAR_NODE_TYPE;
10208 
10209     IF p_node.detailed_type_id=CZ_TYPES.UNON_COUNT_FEATURE_TYPEID THEN
10210       l_ui_node.element_type              := G_UNON_COUNT_FEATURE_TYPEID;
10211     ELSIF p_node.detailed_type_id=CZ_TYPES.UCOUNT_FEATURE_TYPEID THEN
10212       l_ui_node.element_type              := G_UCOUNT_FEATURE_TYPEID;
10213     ELSIF p_node.detailed_type_id=CZ_TYPES.UCOUNT_FEATURE01_TYPEID THEN
10214       l_ui_node.element_type              := G_UCOUNT_FEATURE01_TYPEID;
10215     ELSIF p_node.detailed_type_id=CZ_TYPES.UMINMAX_FEATURE_TYPEID THEN
10216       l_ui_node.element_type              := G_UMINMAX_FEATURE_TYPEID;
10217     ELSIF p_node.detailed_type_id=CZ_TYPES.UMINMAX_CONNECTOR THEN
10218       l_ui_node.element_type              := G_UMINMAX_CONNECTOR_TYPEID;
10219     ELSE
10220       l_ui_node.element_type              := G_UI_REGULAR_NODE_TYPE;
10221     END IF;
10222 
10223     l_ui_node.instantiable_flag           := p_node.instantiable_flag;
10224 
10225     IF p_node.detailed_type_id=CZ_TYPES.UMINMAX_CONNECTOR THEN
10226       IF (p_node.maximum=1 AND p_node.minimum=0) THEN
10227         l_ui_node.instantiable_flag := G_OPTIONAL_INST_TYPE;
10228       ELSE
10229         l_ui_node.instantiable_flag := G_MINMAX_INST_TYPE;
10230       END IF;
10231     END IF;
10232 
10233     l_ui_node.model_ref_expl_id           := get_Expl_Id(p_model_id     => p_node.devl_project_id,
10234                                                          p_ps_node_id   => p_node.ps_node_id,
10235                                                          p_component_id => p_node.component_id,
10236                                                          p_ps_node_type => p_node.ps_node_type);
10237     l_ui_node.element_signature_id        := p_node.root_element_signature_id;
10238     l_ui_node.deleted_flag                := G_MARK_TO_ADD;
10239 
10240     SELECT COUNT(element_id)+1 INTO l_counter FROM CZ_UI_PAGE_ELEMENTS
10241     WHERE ui_def_id=g_UI_Context.ui_def_id AND
10242           page_id=l_ui_node.page_id AND
10243           ctrl_template_id=l_ui_node.ctrl_template_id AND
10244           deleted_flag NOT IN(G_YES_FLAG,G_MARK_TO_DELETE);
10245 
10246     l_ui_node.name := p_node.template_name||' - '||TO_CHAR(l_counter);
10247 
10248     --DEBUG('asp:Inserting ' || l_ui_node.element_id || ' at seq ' || l_ui_node.seq_nbr);
10249 
10250     INSERT INTO CZ_UI_PAGE_ELEMENTS
10251       (ui_def_id,
10252        persistent_node_id,
10253        parent_persistent_node_id,
10254        region_persistent_node_id,
10255        pagebase_persistent_node_id,
10256        page_id,
10257        seq_nbr,
10258        ctrl_template_id,
10259        element_id,
10260        parent_element_id,
10261        element_type,
10262        instantiable_flag,
10263        ctrl_template_ui_def_id,
10264        model_ref_expl_id,
10265        element_signature_id,
10266        name,
10267        deleted_flag)
10268     VALUES
10269       (l_ui_node.ui_def_id,
10270        l_ui_node.persistent_node_id,
10271        l_ui_node.parent_persistent_node_id,
10272        l_ui_node.region_persistent_node_id,
10273        l_ui_node.pagebase_persistent_node_id,
10274        l_ui_node.page_id,
10275        l_ui_node.seq_nbr,
10276        l_ui_node.ctrl_template_id,
10277        l_ui_node.element_id,
10278        l_ui_node.parent_element_id,
10279        l_ui_node.element_type,
10280        l_ui_node.instantiable_flag,
10281        l_ui_node.ctrl_template_ui_def_id,
10282        l_ui_node.model_ref_expl_id,
10283        l_ui_node.element_signature_id,
10284        l_ui_node.name,
10285        l_ui_node.deleted_flag);
10286 
10287     --
10288     -- mark UI Page as refreshed
10289     --
10290     mark_UI_Page_As_Refreshed(l_ui_node.page_id, l_ui_node.ui_def_id);
10291     add_CX_Button(p_node     => p_node,
10292                   p_ui_node  => l_ui_node);
10293 
10294     RETURN l_ui_node;
10295 
10296   END create_UI_Element;
10297 
10298   --
10299   -- add Instance Management Controls
10300   --
10301   PROCEDURE add_Instance_Controls(p_ui_node          IN CZ_UI_PAGE_ELEMENTS%ROWTYPE,
10302                                   p_parent_ui_node   IN CZ_UI_PAGE_ELEMENTS%ROWTYPE,
10303                                   p_node             IN CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE) IS
10304 
10305     l_element_id                  CZ_UI_PAGE_ELEMENTS.element_id%TYPE;
10306     l_element_type                CZ_UI_PAGE_ELEMENTS.element_type%TYPE;
10307     l_ui_node_name                CZ_UI_PAGE_ELEMENTS.name%TYPE;
10308     l_parent_seq_nbr              NUMBER;
10309     l_seq_nbr                     NUMBER;
10310     l_counter                     NUMBER;
10311     l_max_prev_seq_nbr            NUMBER;
10312 
10313   BEGIN
10314 
10315     IF p_parent_ui_node.suppress_refresh_flag=G_YES_FLAG THEN
10316       RETURN;
10317     END IF;
10318 
10319     SELECT NVL(MAX(seq_nbr),0) INTO l_max_prev_seq_nbr  FROM CZ_UI_PAGE_ELEMENTS
10320     START WITH ui_def_id=g_UI_Context.ui_def_id AND
10321                page_id=p_parent_ui_node.page_id AND
10322                element_id=p_parent_ui_node.element_id AND
10323                deleted_flag NOT IN(G_YES_FLAG,G_MARK_TO_DELETE)
10324     CONNECT BY PRIOR ui_def_id=g_UI_Context.ui_def_id AND
10325        ui_def_id=g_UI_Context.ui_def_id AND PRIOR page_id= p_parent_ui_node.page_id
10326         AND page_id=p_parent_ui_node.page_id AND PRIOR element_id=parent_element_id AND
10327         PRIOR deleted_flag NOT IN(G_YES_FLAG,G_MARK_TO_DELETE) AND
10328         deleted_flag NOT IN(G_YES_FLAG,G_MARK_TO_DELETE);
10329 
10330     l_seq_nbr  := l_max_prev_seq_nbr + 1;
10331 
10332     UPDATE CZ_UI_PAGE_ELEMENTS
10333        SET seq_nbr=seq_nbr+1
10334      WHERE ui_def_id=g_UI_Context.ui_def_id AND
10335            page_id=p_parent_ui_node.page_id AND
10336            seq_nbr>l_max_prev_seq_nbr AND
10337            deleted_flag NOT IN(G_YES_FLAG,G_MARK_TO_DELETE);
10338 
10339     IF p_node.detailed_type_id IN(CZ_TYPES.UOPTIONAL_COMPONENT_TYPEID,CZ_TYPES.UMINMAX_COMPONENT_TYPEID) THEN
10340        l_element_type := G_UI_NONBOMADDINST_NODE_TYPE;
10341     ELSIF p_node.detailed_type_id IN(CZ_TYPES.UOPTIONAL_BOM_REF_TYPEID,CZ_TYPES.UMINMAX_BOM_REF_TYPEID) THEN
10342       l_element_type := G_UI_BOMADDINST_NODE_TYPE;
10343     ELSE
10344       NULL;
10345     END IF;
10346 
10347     l_element_id := get_Element_Id();
10348 
10349     l_ui_node_name := get_UI_Node_Name(p_page_id       => p_parent_ui_node.page_id,
10350                                        p_template_id   => p_node.template_id,
10351                                        p_template_name => p_node.template_name);
10352 
10353     INSERT INTO CZ_UI_PAGE_ELEMENTS
10354               (ui_def_id,
10355                persistent_node_id,
10356                parent_persistent_node_id,
10357                region_persistent_node_id,
10358                pagebase_persistent_node_id,
10359                page_id,
10360                seq_nbr,
10361                ctrl_template_id,
10362                element_id,
10363                parent_element_id,
10364                element_type,
10365                instantiable_flag,
10366                ctrl_template_ui_def_id,
10367                model_ref_expl_id,
10368                element_signature_id,
10369                name,
10370                deleted_flag)
10371        VALUES
10372               (p_ui_node.ui_def_id,
10373                p_ui_node.persistent_node_id,
10374                p_ui_node.parent_persistent_node_id,
10375                p_parent_ui_node.region_persistent_node_id,
10376                p_parent_ui_node.pagebase_persistent_node_id,
10377                p_parent_ui_node.page_id,
10378                l_seq_nbr,
10379                p_node.template_id,
10380                l_element_id,
10381                p_parent_ui_node.element_id,
10382                l_element_type,
10383                p_ui_node.instantiable_flag,
10384                p_node.template_ui_def_id,
10385                p_ui_node.model_ref_expl_id,
10386                p_node.root_element_signature_id,
10387                l_ui_node_name,
10388                G_MARK_DO_NOT_REFRESH);
10389 
10390     -- delete drilldown associated with the same persistent_node_id
10391     --
10392     UPDATE CZ_UI_PAGE_ELEMENTS
10393        SET deleted_flag=G_MARK_TO_DELETE
10394      WHERE ui_def_id = p_parent_ui_node.ui_def_id AND
10395            persistent_node_id=p_ui_node.persistent_node_id AND
10396            element_type=G_UI_PAGEDRILLDOWN_NODE_TYPE AND
10397            deleted_flag=G_NO_FLAG;
10398 
10399     mark_UI_Page_As_Refreshed(p_parent_ui_node.page_id, p_parent_ui_node.ui_def_id);
10400 
10401   END add_Instance_Controls;
10402 
10403   --
10404   -- create Drilldown button
10405   --
10406   PROCEDURE create_Drilldown_Button(p_parent_ui_node  IN CZ_UI_PAGE_ELEMENTS%ROWTYPE,
10407                                     p_ui_node         IN CZ_UI_PAGE_ELEMENTS%ROWTYPE,
10408                                     p_page_set_id     IN NUMBER) IS
10409 
10410       l_element_id              CZ_UI_PAGE_ELEMENTS.element_id%TYPE;
10411       l_ui_action_id            CZ_UI_ACTIONS.ui_action_id%TYPE;
10412       l_seq_nbr                 CZ_UI_PAGE_ELEMENTS.seq_nbr%TYPE;
10413       l_ui_node_name            CZ_UI_PAGE_ELEMENTS.name%TYPE;
10414 
10415   BEGIN
10416 
10417     IF p_parent_ui_node.suppress_refresh_flag=G_YES_FLAG THEN
10418       RETURN;
10419     END IF;
10420 
10421     l_seq_nbr := get_Last_Seq_Nbr(p_parent_ui_node.element_id)+1;
10422 
10423     l_element_id := get_Element_Id();
10424 
10425     g_ELEMENT_COUNTER := g_ELEMENT_COUNTER + 1;
10426 
10427     l_ui_node_name := 'Drilldown Button - '||TO_CHAR(l_seq_nbr);
10428 
10429     IF g_DRILLDOWN_TEMPLATE_ID = G_DRILLDOWN_IMAGE_TEMPLATE_ID THEN
10430       l_ui_node_name := 'Drilldown Image - '||TO_CHAR(l_seq_nbr);
10431     ELSIF g_DRILLDOWN_TEMPLATE_ID = G_DRILLDOWN_LABEL_TEMPLATE_ID THEN
10432       l_ui_node_name := 'Drilldown Label - '||TO_CHAR(l_seq_nbr);
10433     ELSE
10434       l_ui_node_name := 'Drilldown Button - '||TO_CHAR(l_seq_nbr);
10435     END IF;
10436 
10437     INSERT INTO CZ_UI_PAGE_ELEMENTS
10438       (ui_def_id,
10439        persistent_node_id,
10440        parent_persistent_node_id,
10441        region_persistent_node_id,
10442        pagebase_persistent_node_id,
10443        page_id,
10444        seq_nbr,
10445        ctrl_template_id,
10446        element_id,
10447        parent_element_id,
10448        element_type,
10449        instantiable_flag,
10450        ctrl_template_ui_def_id,
10451        model_ref_expl_id,
10452        name,
10453        element_signature_id,
10454        deleted_flag)
10455     VALUES
10456       (p_parent_ui_node.ui_def_id,
10457        p_ui_node.persistent_node_id,
10458        p_ui_node.parent_persistent_node_id,
10459        p_parent_ui_node.region_persistent_node_id,
10460        p_parent_ui_node.pagebase_persistent_node_id,
10461        p_parent_ui_node.page_id,
10462        l_seq_nbr,
10463        g_DRILLDOWN_TEMPLATE_ID,
10464        l_element_id,
10465        p_parent_ui_node.element_id,
10466        G_UI_PAGEDRILLDOWN_NODE_TYPE,
10467        NULL,
10468        G_GLOBAL_TEMPLATES_UI_DEF_ID,
10469        NULL,
10470        l_ui_node_name,
10471        g_DRILLDOWN_ELEM_SIGNATURE_ID,
10472        G_MARK_TO_ADD);
10473 
10474     l_ui_action_id := allocateId('CZ_UI_ACTIONS_S');
10475     INSERT INTO CZ_UI_ACTIONS
10476       (ui_action_id,
10477        ui_def_id,
10478        source_page_id,
10479        context_component_id,
10480        element_id,
10481        ui_action_type,
10482        target_ui_def_id,
10483        target_persistent_node_id,
10484        target_node_path,
10485        target_page_set_id,
10486        target_page_id,
10487        target_expl_node_id,
10488        seeded_flag,
10489        deleted_flag)
10490     VALUES
10491       (l_ui_action_id,
10492        p_parent_ui_node.ui_def_id,
10493        p_parent_ui_node.page_id,
10494        p_parent_ui_node.region_persistent_node_id,
10495        l_element_id,
10496        G_ACTION_CONFIGURE_SUBCOMP,
10497        NULL,
10498        p_ui_node.persistent_node_id,
10499        TO_CHAR(p_ui_node.persistent_node_id),
10500        p_page_set_id,
10501        p_ui_node.page_id,
10502        p_ui_node.model_ref_expl_id,
10503        G_NO_FLAG,
10504        G_NO_FLAG);
10505 
10506     mark_UI_Page_As_Refreshed(p_parent_ui_node.page_id, p_parent_ui_node.ui_def_id);
10507 
10508   END create_Drilldown_Button;
10509 
10510   --
10511   -- check : does this BOM node contain child BOM nodes
10512   --
10513   FUNCTION contains_BOM_Nodes(p_ps_node_id IN NUMBER)
10514     RETURN BOOLEAN IS
10515     l_ps_node_type NUMBER;
10516   BEGIN
10517    BEGIN
10518      -- Handle No data Found Exeption BUG 11712366
10519      SELECT ps_node_type INTO l_ps_node_type FROM CZ_PS_NODES
10520      WHERE ps_node_id=p_ps_node_id AND deleted_flag=G_NO_FLAG;
10521    EXCEPTION
10522      WHEN NO_DATA_FOUND THEN
10523      RETURN FALSE;
10524    END;
10525 
10526     IF l_ps_node_type=G_REFERENCE_TYPE THEN
10527       RETURN TRUE;
10528     END IF;
10529 
10530     FOR i IN (SELECT DISTINCT ps_node_type,reference_id FROM CZ_PS_NODES
10531               WHERE parent_id=p_ps_node_id AND
10532                     deleted_flag=G_NO_FLAG AND ui_omit=G_NO_FLAG AND
10533                     (ps_node_type IN(G_BOM_MODEL_TYPE,G_BOM_OPTION_CLASS_TYPE,G_BOM_STANDART_ITEM_TYPE) OR
10534                      ps_node_type=G_REFERENCE_TYPE))
10535     LOOP
10536       IF i.ps_node_type=G_REFERENCE_TYPE THEN
10537          SELECT ps_node_type INTO l_ps_node_type FROM CZ_PS_NODES
10538          WHERE ps_node_id=i.reference_id;
10539          IF l_ps_node_type=G_BOM_MODEL_TYPE THEN
10540            RETURN TRUE;
10541          END IF;
10542       ELSE
10543         RETURN TRUE;
10544       END IF;
10545     END LOOP;
10546     RETURN FALSE;
10547   END contains_BOM_Nodes;
10548 
10549   PROCEDURE add_BOM_Node
10550   (
10551   p_node                  IN CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE,
10552   p_page_id               IN NUMBER,
10553   p_pagebase_expl_node_id IN NUMBER,
10554   p_parent_element_id     IN VARCHAR2,
10555   p_pagebase_persistent_node_id IN NUMBER,
10556   p_check_child_bom_nodes       IN VARCHAR2 DEFAULT NULL) IS
10557 
10558     l_bom_element_id  CZ_UI_PAGE_ELEMENTS.element_id%TYPE;
10559     l_ui_node_name    CZ_UI_PAGE_ELEMENTS.name%TYPE;
10560   BEGIN
10561 
10562       IF p_check_child_bom_nodes IS NULL OR p_check_child_bom_nodes=G_YES_FLAG THEN
10563         IF NOT(contains_BOM_Nodes(p_node.ps_node_id)) THEN
10564           RETURN;
10565         END IF;
10566       END IF;
10567 
10568       l_bom_element_id := get_Element_Id();
10569 
10570       l_ui_node_name := p_node.template_name||' - 1';
10571 
10572       --DEBUG('asp:Inserting BOM Node ' || l_bom_element_id|| ' at seq ' || 1);
10573       --
10574       -- shift all UI elements down , because BOM table will have seq_nbr=1
10575       --
10576       UPDATE CZ_UI_PAGE_ELEMENTS
10577          SET seq_nbr=seq_nbr+1
10578        WHERE ui_def_id=g_UI_Context.ui_def_id AND page_id=p_page_id AND
10579              deleted_flag NOT IN(G_YES_FLAG, G_LIMBO_FLAG);
10580 
10581 
10582       INSERT INTO CZ_UI_PAGE_ELEMENTS
10583       (ui_def_id,
10584        persistent_node_id,
10585        parent_persistent_node_id,
10586        region_persistent_node_id,
10587        pagebase_persistent_node_id,
10588        page_id,
10589        seq_nbr,
10590        ctrl_template_id,
10591        element_id,
10592        parent_element_id,
10593        element_type,
10594        instantiable_flag,
10595        ctrl_template_ui_def_id,
10596        model_ref_expl_id,
10597        element_signature_id,
10598        name,
10599        deleted_flag)
10600       VALUES
10601       (g_UI_Context.ui_def_id,
10602        p_node.persistent_node_id,
10603        p_node.parent_persistent_node_id,
10604        p_node.persistent_node_id,
10605        p_pagebase_persistent_node_id,
10606        p_page_id,
10607        1,
10608        p_node.template_id,
10609        l_bom_element_id,
10610        p_parent_element_id,
10611        G_UI_BOMADDINST_NODE_TYPE,
10612        p_node.instantiable_flag,
10613        p_node.template_ui_def_id,
10614        p_pagebase_expl_node_id,
10615        p_node.root_element_signature_id,
10616        l_ui_node_name,
10617        G_MARK_TO_ADD);
10618 
10619     mark_UI_Page_As_Refreshed(p_page_id, g_UI_Context.ui_def_id);
10620 
10621   END add_BOM_Node;
10622 
10623   --
10624   -- get Parent Page Data ( page_set_id and page_id )
10625   --
10626   PROCEDURE get_Parent_Page_Data
10627   (
10628   p_parent_persistent_node_id IN NUMBER,
10629   p_parent_page_id            IN NUMBER,
10630   x_page_set_id               OUT NOCOPY NUMBER,
10631   x_page_id                   OUT NOCOPY NUMBER,
10632   x_parent_page_set_type      OUT NOCOPY NUMBER,
10633   x_parent_page_ref_id        OUT NOCOPY NUMBER,
10634   x_parent_node_depth         OUT NOCOPY NUMBER
10635   ) IS
10636 
10637   BEGIN
10638 
10639     IF p_parent_persistent_node_id IS NOT NULL THEN
10640 
10641       IF p_parent_page_id IS NULL THEN
10642 
10643         SELECT MIN(page_id)
10644           INTO x_page_id
10645           FROM CZ_UI_PAGES
10646          WHERE ui_def_id = g_UI_Context.ui_def_id AND
10647                persistent_node_id = p_parent_persistent_node_id AND
10648                NVL(split_seq_nbr,1)=1 AND
10649                deleted_flag IN(G_NO_FLAG,G_MARK_TO_ADD,G_MARK_TO_REFRESH);
10650 
10651         IF x_page_id IS NULL THEN
10652           NULL;
10653         ELSE
10654           SELECT page_set_id INTO x_page_set_id
10655             FROM CZ_UI_PAGES
10656            WHERE page_id=x_page_id AND
10657                  ui_def_id = g_UI_Context.ui_def_id;
10658         END IF;
10659 
10660       ELSE
10661 
10662         x_page_id := p_parent_page_id;
10663 
10664         SELECT page_set_id INTO x_page_set_id
10665           FROM CZ_UI_PAGES
10666          WHERE page_id=p_parent_page_id AND
10667                ui_def_id = g_UI_Context.ui_def_id;
10668 
10669       END IF;
10670 
10671       BEGIN
10672 
10673         SELECT MIN(page_ref_id)
10674           INTO x_parent_page_ref_id
10675           FROM CZ_UI_PAGE_REFS
10676          WHERE ui_def_id = g_UI_Context.ui_def_id AND
10677                NVL(page_set_id,-1)=NVL(x_page_set_id,-1) AND
10678                target_page_id=x_page_id AND deleted_flag=G_NO_FLAG;
10679 
10680         SELECT node_depth,page_ref_type INTO x_parent_node_depth,  x_parent_page_set_type
10681           FROM CZ_UI_PAGE_REFS
10682          WHERE ui_def_id = g_UI_Context.ui_def_id AND
10683                page_ref_id=x_parent_page_ref_id;
10684       EXCEPTION
10685         WHEN NO_DATA_FOUND THEN
10686           IF x_page_set_id IS NOT NULL THEN
10687             SELECT page_set_type INTO x_parent_page_set_type FROM CZ_UI_PAGE_SETS
10688             WHERE ui_def_id = g_UI_Context.ui_def_id AND page_set_id=x_page_set_id;
10689           END IF;
10690           x_parent_node_depth := 1;
10691       END;
10692 
10693     ELSE
10694 
10695       x_page_set_id := NULL;
10696       x_page_id     := NULL;
10697       x_parent_page_ref_id := NULL;
10698       x_parent_node_depth := 1;
10699       x_parent_page_set_type := NULL;
10700 
10701     END IF;
10702 
10703   END get_Parent_Page_Data;
10704 
10705 
10706   FUNCTION get_new_page_ref_seq(p_node      IN CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE,
10707                                 p_page_set_id IN NUMBER,
10708                                 p_parent_page_ref_id NUMBER) RETURN NUMBER IS
10709 
10710     l_seq_nbr                   NUMBER;
10711 
10712   BEGIN
10713 
10714     --DEBUG('asp: Getting seq_nbr for ps node ' || p_node.name);
10715 
10716     IF NOT g_using_new_UI_refresh THEN
10717       SELECT COUNT(*)+1 INTO l_seq_nbr
10718         FROM CZ_UI_PAGE_REFS
10719        WHERE ui_def_id=g_UI_Context.ui_def_id AND
10720              page_set_id = p_page_set_id AND
10721              parent_page_ref_id=p_parent_page_ref_id AND
10722              deleted_flag=G_NO_FLAG;
10723 
10724       RETURN l_seq_nbr;
10725     END IF;
10726 
10727     IF p_node.tree_seq = 1 THEN
10728       RETURN 1;
10729     ELSE
10730       BEGIN
10731         --DEBUG('asp: Getting seq_nbr for ps node ' || p_node.name || ', tree_seq ' || p_node.tree_seq);
10732         FOR i IN 1..p_node.tree_seq-1
10733         LOOP
10734           FOR j in (SELECT persistent_node_id
10735                     FROM CZ_PS_NODES
10736                     WHERE devl_project_id = g_UI_Context.devl_project_id
10737                     AND parent_id = p_node.parent_id
10738                     AND tree_seq = p_node.tree_seq-i
10739                     AND deleted_flag = G_NO_FLAG)
10740           LOOP
10741           --DEBUG('asp: predecessor persistent_node_id = ' || l_predecessor_persistent_id);
10742 
10743             SELECT NVL(max(seq_nbr), 0) INTO l_seq_nbr
10744             FROM CZ_UI_PAGE_REFS
10745             WHERE ui_def_id = g_UI_Context.ui_def_id
10746             AND page_set_id = p_page_set_id
10747             AND parent_page_ref_id = p_parent_page_ref_id
10748             AND target_persistent_node_id = j.persistent_node_id
10749             AND deleted_flag = G_NO_FLAG;
10750 
10751             --DEBUG('asp: max predecessorseq_nbr = ' || l_seq_nbr);
10752 
10753             IF l_seq_nbr > 0 THEN
10754               l_seq_nbr := l_seq_nbr + 1;
10755               RETURN l_seq_nbr;
10756             END IF;
10757           END LOOP;
10758         END LOOP;
10759 
10760         -- node of the predecesors found in cz_ui_page_refs
10761         RETURN 1;
10762 
10763       EXCEPTION
10764         WHEN NO_DATA_FOUND THEN
10765           -- seq_nbrs in cz_ps_nodes are not correct
10766           SELECT NVL(count(*), 0) + 1 INTO l_seq_nbr
10767           FROM CZ_UI_PAGE_REFS
10768           WHERE ui_def_id = g_UI_Context.ui_def_Id
10769           AND page_set_id = p_page_set_id
10770           AND parent_page_ref_id = p_parent_page_ref_id
10771           AND deleted_flag = G_NO_FLAG;
10772 
10773           RETURN l_seq_nbr;
10774       END;
10775     END IF;
10776 
10777   END get_new_page_ref_seq;
10778 
10779   --
10780   -- create new UI page
10781   --
10782   FUNCTION create_UI_Page(p_node                  IN CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE,
10783                           x_page_set_id           OUT NOCOPY NUMBER,
10784                           x_page_set_type         OUT NOCOPY NUMBER,
10785                           x_page_ref_id           OUT NOCOPY NUMBER,
10786                           p_parent_page_id        IN NUMBER DEFAULT NULL)
10787     RETURN CZ_UI_PAGE_ELEMENTS%ROWTYPE IS
10788 
10789     l_page_node                 CZ_UI_PAGES%ROWTYPE;
10790     l_bom_element_id            CZ_UI_PAGE_ELEMENTS.element_id%TYPE;
10791     l_page_ui_node              CZ_UI_PAGE_ELEMENTS%ROWTYPE;
10792     l_page_ref_id               CZ_UI_PAGE_REFS.page_ref_id%TYPE;
10793     l_parent_page_ref_id        CZ_UI_PAGE_REFS.page_ref_id%TYPE;
10794     l_seq_nbr                   CZ_UI_PAGE_REFS.seq_nbr%TYPE;
10795     l_node_depth                CZ_UI_PAGE_REFS.node_depth%TYPE;
10796     l_page_set_id               CZ_UI_PAGE_SETS.page_set_id%TYPE;
10797     l_last_page_id              CZ_UI_PAGES.page_id%TYPE;
10798     l_parent_page_id            CZ_UI_PAGES.page_id%TYPE;
10799     l_page_set_type             CZ_UI_PAGE_SETS.page_set_type%TYPE;
10800     l_ui_node_name              CZ_UI_PAGE_ELEMENTS.name%TYPE;
10801     l_ref_pagebase_path         CZ_UI_PAGE_REFS.target_path%TYPE;
10802     l_parent_ui_page_node       CZ_UI_PAGES%ROWTYPE;
10803     l_ui_page_set_node          CZ_UI_PAGE_SETS%ROWTYPE;
10804     l_parent_page_persistent_id NUMBER;
10805     l_page_counter              NUMBER;
10806     l_pagebase_expl_node_id     NUMBER;
10807     l_is_inst_node              BOOLEAN := FALSE;
10808     l_is_drilldown_node         BOOLEAN := FALSE;
10809     l_create_page_ref           BOOLEAN := TRUE;
10810     l_is_page                   BOOLEAN := TRUE;
10811 
10812   BEGIN
10813 
10814     l_is_page := is_UI_Page(p_node, l_is_drilldown_node);
10815 
10816     IF l_is_page=FALSE THEN
10817       RETURN l_page_ui_node ;
10818     END IF;
10819 
10820     IF g_UI_Context.control_layout=1 THEN
10821       G_CONTAINER_TEMPLATE_ID := G_2COLS_CONTAINER_TEMPLATE_ID;
10822     ELSIF g_UI_Context.control_layout=2 THEN
10823       G_CONTAINER_TEMPLATE_ID := G_3COLS_CONTAINER_TEMPLATE_ID;
10824     END IF;
10825 
10826     IF p_node.instantiable_flag IN(G_OPTIONAL_INST_TYPE,G_MINMAX_INST_TYPE) OR
10827        p_node.virtual_flag=G_NO_FLAG THEN
10828 
10829       l_is_inst_node := TRUE;
10830 
10831     END IF;
10832 
10833     l_pagebase_expl_node_id := get_Expl_Id(p_model_id     => p_node.devl_project_id,
10834                                            p_ps_node_id   => p_node.ps_node_id,
10835                                            p_component_id => p_node.component_id,
10836                                            p_ps_node_type => p_node.ps_node_type);
10837 
10838     -- In cases where a node is to added to a region because of
10839     -- max_siblings test, the parent UI node may not be bound to the parent
10840     -- of the new ps node. In such a case, the parent_page_id passed in
10841     -- may not be that of the parent_ps_node. So we pass in a NULL p_parent_page_id to
10842     -- get_Parent_page_data so that the right parent_page_id is found and the new
10843     -- page is added under the correct parent in page refs
10844 
10845     l_parent_page_id := p_parent_page_id;
10846     l_parent_page_persistent_id := p_node.parent_persistent_node_id;
10847 
10848     IF l_parent_page_id IS NOT NULL THEN
10849       BEGIN
10850 
10851         SELECT persistent_node_id INTO l_parent_page_persistent_id
10852         FROM CZ_UI_PAGES
10853         WHERE ui_Def_id = g_UI_Context.ui_def_id
10854         AND   page_id = l_parent_page_id;
10855 
10856         IF NOT l_parent_page_persistent_id = p_node.parent_persistent_node_id THEN
10857           l_parent_page_id := NULL;
10858         END IF;
10859       EXCEPTION
10860         WHEN NO_DATA_FOUND THEN
10861           l_parent_page_id := NULL;
10862       END;
10863     END IF;
10864 
10865     get_Parent_Page_Data(p_parent_persistent_node_id => l_parent_page_persistent_id,
10866                          p_parent_page_id            => l_parent_page_id,
10867                          x_page_set_id               => l_page_set_id,
10868                          x_page_id                   => l_last_page_id,
10869                          x_parent_page_set_type      => l_page_set_type,
10870                          x_parent_page_ref_id        => l_parent_page_ref_id,
10871                          x_parent_node_depth         => l_node_depth);
10872 
10873     l_node_depth := l_node_depth + 1;
10874     IF l_page_set_type IS NULL THEN
10875       l_page_set_type := g_UI_Context.PRIMARY_NAVIGATION;
10876     END IF;
10877 
10878     --
10879     -- if it is root model node or nonvirtual model node
10880     -- then  create new Page Set
10881     --
10882     -- create a new Page Set
10883     --  List of enumerated Page Set types :
10884     --    1 - PAGE_FLOW
10885     --    2 - SINGLE_LEVEL_MENU
10886     --    3 - MULTI_LEVEL_MENU
10887     --    4 - MODEL_TREE_MENU
10888     --
10889     IF (p_node.parent_id IS NULL OR
10890        (p_node.virtual_flag=G_NO_FLAG AND
10891         g_UI_Context.PRIMARY_NAVIGATION NOT IN (G_MODEL_TREE_MENU))) AND
10892        g_UI_Context.PRIMARY_NAVIGATION NOT IN(G_SINGLE_PAGE)  THEN
10893 
10894       create_Page_Set(p_ui_def_id          => g_UI_Context.ui_def_id,
10895                       p_page_set_type      => l_page_set_type,
10896                       p_persistent_node_id => p_node.persistent_node_id,
10897                       p_model_ref_expl_id  => l_pagebase_expl_node_id,
10898                       x_page_set_id        => l_page_set_id);
10899 
10900      l_node_depth         := 1;
10901      l_seq_nbr            := 1;
10902      l_parent_page_ref_id := NULL;
10903 
10904     END IF;
10905 
10906     --
10907     -- get num of this page in this UI
10908     --
10909     l_page_counter := get_Page_Counter() + 1;
10910 
10911     l_page_node.page_id               := allocateId('CZ_UI_PAGES_S');
10912     l_page_node.ui_def_id             := g_UI_Context.ui_def_id;
10913     l_page_node.NAME                  := 'Page-'||TO_CHAR(l_page_counter);
10914     l_page_node.persistent_node_id    := p_node.persistent_node_id;
10915     l_page_node.jrad_doc              := generate_JRAD_Page_Name(l_page_counter);
10916 
10917     IF l_is_drilldown_node OR g_UI_Context.PRIMARY_NAVIGATION IN(G_SINGLE_PAGE)THEN
10918       l_page_node.page_set_id           := NULL;
10919     ELSE
10920       l_page_node.page_set_id           := l_page_set_id;
10921     END IF;
10922 
10923     l_page_node.split_seq_nbr         := 1;
10924     l_page_node.caption_source        := G_DEFAULT_CAPTION_RULE_ID;
10925 
10926     l_page_node.pagebase_path         := get_Page_Path(p_node.ps_node_id);
10927 
10928     l_page_node.pagebase_expl_node_id := l_pagebase_expl_node_id;
10929     l_page_node.seeded_flag           := G_NO_FLAG;
10930     l_page_node.deleted_flag          := G_MARK_TO_ADD;
10931 
10932     INSERT INTO CZ_UI_PAGES
10933       (page_id,
10934        ui_def_id,
10935        NAME,
10936        persistent_node_id,
10937        jrad_doc,
10938        page_set_id,
10939        split_seq_nbr,
10940        caption_source,
10941        pagebase_path,
10942        pagebase_expl_node_id,
10943        page_rev_nbr,
10944        seeded_flag,
10945        page_status_template_id,
10946        page_status_templ_uidef_id,
10947        caption_rule_id,
10948        deleted_flag)
10949     VALUES
10950       (l_page_node.page_id ,
10951        l_page_node.ui_def_id,
10952        l_page_node.NAME,
10953        l_page_node.persistent_node_id,
10954        l_page_node.jrad_doc,
10955        l_page_node.page_set_id,
10956        l_page_node.split_seq_nbr,
10957        l_page_node.caption_source,
10958        l_page_node.pagebase_path,
10959        l_page_node.pagebase_expl_node_id,
10960        1,
10961        l_page_node.seeded_flag,
10962        g_PAGE_STATUS_TEMPLATE_ID,
10963        G_GLOBAL_TEMPLATES_UI_DEF_ID,
10964        NULL,
10965        l_page_node.deleted_flag);
10966 
10967     --
10968     -- add new UI page to cache
10969     --
10970     g_ui_pages_tbl(l_page_node.page_id) := l_page_node;
10971 
10972     l_page_ui_node.ui_def_id                   := g_UI_Context.ui_def_id;
10973     l_page_ui_node.persistent_node_id          := p_node.persistent_node_id;
10974     l_page_ui_node.parent_persistent_node_id   := p_node.parent_persistent_node_id;
10975     l_page_ui_node.region_persistent_node_id   := p_node.persistent_node_id;
10976     l_page_ui_node.pagebase_persistent_node_id := p_node.persistent_node_id;
10977     l_page_ui_node.page_id                     := l_page_node.page_id;
10978     l_page_ui_node.seq_nbr                     := 0;
10979     l_page_ui_node.ctrl_template_id            := G_CONTAINER_TEMPLATE_ID;
10980     l_page_ui_node.element_id                  := get_Element_Id();
10981     l_page_ui_node.parent_element_id           := NULL;
10982     l_page_ui_node.element_type                := G_UI_PAGE_NODE_TYPE;
10983     l_page_ui_node.instantiable_flag           := p_node.instantiable_flag;
10984     l_page_ui_node.ctrl_template_ui_def_id     := G_GLOBAL_TEMPLATES_UI_DEF_ID;
10985     l_page_ui_node.model_ref_expl_id           := l_page_node.pagebase_expl_node_id;
10986     l_page_ui_node.base_page_flag              := G_YES_FLAG;
10987 
10988     l_page_ui_node.deleted_flag                := G_MARK_TO_ADD;
10989 
10990     g_ELEMENT_COUNTER   := 0;
10991     l_page_ui_node.name := 'Page Region - 1';
10992 
10993     INSERT INTO CZ_UI_PAGE_ELEMENTS
10994       (ui_def_id,
10995        persistent_node_id,
10996        parent_persistent_node_id,
10997        region_persistent_node_id,
10998        pagebase_persistent_node_id,
10999        page_id,
11000        seq_nbr,
11001        ctrl_template_id,
11002        element_id,
11003        parent_element_id,
11004        element_type,
11005        instantiable_flag,
11006        ctrl_template_ui_def_id,
11007        model_ref_expl_id,
11008        base_page_flag,
11009        element_signature_id,
11010        name,
11011        deleted_flag)
11012     VALUES
11013       (l_page_ui_node.ui_def_id,
11014        l_page_ui_node.persistent_node_id,
11015        l_page_ui_node.parent_persistent_node_id,
11016        l_page_ui_node.region_persistent_node_id,
11017        l_page_ui_node.pagebase_persistent_node_id,
11018        l_page_ui_node.page_id,
11019        l_page_ui_node.seq_nbr,
11020        l_page_ui_node.ctrl_template_id,
11021        l_page_ui_node.element_id,
11022        l_page_ui_node.parent_element_id,
11023        l_page_ui_node.element_type,
11024        l_page_ui_node.instantiable_flag,
11025        l_page_ui_node.ctrl_template_ui_def_id,
11026        l_page_ui_node.model_ref_expl_id,
11027        l_page_ui_node.base_page_flag,
11028        6004,
11029        l_page_ui_node.name,
11030        l_page_ui_node.deleted_flag);
11031 
11032     IF p_node.ps_node_type IN(G_BOM_MODEL_TYPE, G_BOM_OPTION_CLASS_TYPE) AND
11033        NVL(g_UI_Context.suppress_refresh_flag,G_NO_FLAG)=G_NO_FLAG  THEN
11034 
11035        --  AND contains_BOM_Nodes(p_node) THEN -- related to bug #3622010
11036 
11037        add_BOM_Node(p_node                  => p_node,
11038                     p_page_id               => l_page_ui_node.page_id,
11039                     p_pagebase_expl_node_id => l_page_node.pagebase_expl_node_id,
11040                     p_parent_element_id     => l_page_ui_node.element_id,
11041                     p_pagebase_persistent_node_id => l_page_ui_node.pagebase_persistent_node_id);
11042 
11043     END IF;
11044 
11045     IF NVL(g_UI_Context.suppress_refresh_flag,G_NO_FLAG)=G_NO_FLAG THEN
11046       add_CX_Button(p_node               => p_node,
11047                     p_ui_node            => l_page_ui_node);
11048     END IF;
11049 
11050     IF NVL(g_UI_Context.suppress_refresh_flag,G_NO_FLAG)=G_NO_FLAG THEN
11051       FOR i IN(SELECT *
11052                  FROM CZ_UI_PAGE_ELEMENTS
11053                 WHERE ui_def_id=l_page_ui_node.ui_def_id AND
11054                       page_id=l_last_page_id AND
11055                       persistent_node_id=l_page_ui_node.parent_persistent_node_id AND
11056                       element_type IN(G_UI_PAGE_NODE_TYPE,G_UI_REGION_NODE_TYPE) AND
11057                       deleted_flag IN(G_NO_FLAG, G_MARK_TO_ADD, G_MARK_TO_REFRESH))
11058       LOOP
11059         IF NVL(i.suppress_refresh_flag, G_NO_FLAG) = G_NO_FLAG THEN
11060           IF l_is_inst_node THEN
11061              add_Instance_Controls(p_ui_node          => l_page_ui_node,
11062                                    p_parent_ui_node   => i,
11063                                    p_node             => p_node);
11064            END IF;
11065            IF l_is_drilldown_node AND l_is_inst_node=FALSE THEN
11066               create_Drilldown_Button(p_parent_ui_node => i,
11067                                       p_ui_node        => l_page_ui_node,
11068                                       p_page_set_id    => l_page_set_id);
11069            END IF;
11070         END IF;
11071       END LOOP;
11072     END IF;
11073     --
11074     -- at this point UI page is already created ,but
11075     -- is not attached to any Page Sets yet
11076     --
11077 
11078    IF l_is_drilldown_node=FALSE THEN
11079 
11080    FOR m IN(SELECT page_set_id FROM CZ_UI_PAGE_SETS
11081             WHERE ui_def_id=g_UI_Context.ui_def_id AND
11082                   page_set_id=l_page_set_id AND
11083                   NVL(suppress_refresh_flag,G_NO_FLAG)=G_NO_FLAG)
11084    LOOP
11085 
11086      /******** attach new UI Page to Page Set *********************/
11087      BEGIN
11088 
11089        --
11090        -- create a new record for this UI page in CZ_UI_PAGE_REFS
11091        --
11092        l_page_ref_id := allocateId('CZ_UI_PAGE_REFS_S');
11093 
11094        l_ref_pagebase_path := get_Page_Path(p_node.ps_node_id, l_page_set_id);
11095 
11096        IF g_UI_Context.PRIMARY_NAVIGATION IN(G_SINGLE_LEVEL_MENU) THEN
11097 
11098          SELECT COUNT(*)+1 INTO l_seq_nbr
11099          FROM CZ_UI_PAGE_REFS WHERE ui_def_id=g_UI_Context.ui_def_id AND
11100               deleted_flag=G_NO_FLAG;
11101 
11102        ELSIF g_UI_Context.PRIMARY_NAVIGATION IN(G_MODEL_TREE_MENU) THEN
11103 
11104 
11105          l_seq_nbr := get_new_page_ref_seq(p_node, l_page_set_id, l_parent_page_ref_id);
11106 
11107          UPDATE CZ_UI_PAGE_REFS
11108          SET seq_nbr = seq_nbr + 1
11109          WHERE ui_def_id = g_UI_Context.ui_def_id
11110          AND page_set_id = l_page_set_id
11111          AND parent_page_ref_id = l_parent_page_ref_id
11112          AND seq_nbr >= l_seq_nbr
11113          AND deleted_flag = G_NO_FLAG;
11114 
11115        ELSE
11116          IF l_seq_nbr IS NULL THEN
11117             l_seq_nbr :=p_node.tree_seq;
11118          END IF;
11119        END IF;
11120 
11121       INSERT INTO CZ_UI_PAGE_REFS
11122       (ui_def_id,
11123        page_set_id,
11124        page_ref_id,
11125        parent_page_ref_id,
11126        seq_nbr,
11127        node_depth,
11128        condition_id,
11129        NAME,
11130        caption_source,
11131        target_persistent_node_id,
11132        target_path,
11133        target_ui_def_id,
11134        target_page_set_id,
11135        target_page_id,
11136        modified_flags,
11137        path_to_prev_page,
11138        path_to_next_page,
11139        page_ref_type,
11140        target_expl_node_id,
11141        caption_rule_id,
11142        deleted_flag)
11143        VALUES
11144       (g_UI_Context.ui_def_id,
11145        l_page_set_id,
11146        l_page_ref_id,
11147        l_parent_page_ref_id,
11148        l_seq_nbr,
11149        l_node_depth,
11150        NULL,
11151        p_node.name,
11152        G_DEFAULT_CAPTION_RULE_ID,
11153        p_node.persistent_node_id,
11154        l_ref_pagebase_path,
11155        NULL,
11156        NULL,
11157        l_page_ui_node.page_id,
11158        0,
11159        NULL,
11160        NULL,
11161        l_page_set_type,
11162        l_page_node.pagebase_expl_node_id,
11163        NULL,
11164        G_NO_FLAG);
11165 
11166       EXCEPTION
11167         WHEN OTHERS THEN
11168           DEBUG('create_UI_Page() : '||SQLERRM);
11169           NULL;
11170       END;
11171 
11172      /******** end of attaching to Page Set *********************/
11173 
11174        x_page_set_id   := l_page_set_id;
11175        x_page_set_type := l_page_set_type;
11176        x_page_ref_id   := l_page_ref_id;
11177      END LOOP;
11178 
11179    END IF;
11180 
11181    RETURN l_page_ui_node;
11182 
11183   END create_UI_Page;
11184 
11185   --
11186   -- create nested Region
11187   --
11188   FUNCTION create_UI_Region(p_node                 IN CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE,
11189                             p_parent_ui_node       IN CZ_UI_PAGE_ELEMENTS%ROWTYPE,
11190                             p_insert_index         IN NUMBER DEFAULT -1)
11191     RETURN CZ_UI_PAGE_ELEMENTS%ROWTYPE IS
11192 
11193     l_ui_node                 CZ_UI_PAGE_ELEMENTS%ROWTYPE;
11194     l_bom_element_id          CZ_UI_PAGE_ELEMENTS.element_id%TYPE;
11195     l_ui_node_name            CZ_UI_PAGE_ELEMENTS.name%TYPE;
11196     l_counter                 NUMBER;
11197     l_parent_seq_nbr          NUMBER;
11198     l_last_seq_nbr            NUMBER;
11199     l_prev_seq_nbr            NUMBER;
11200     l_max_prev_seq_nbr        NUMBER;
11201     l_child_count             NUMBER;
11202     l_page_id                 NUMBER;
11203 
11204   BEGIN
11205 
11206     IF p_parent_ui_node.suppress_refresh_flag=G_YES_FLAG THEN
11207       RETURN l_ui_node;
11208     END IF;
11209 
11210     -- do not create UI region if already exists UI page with the same persistent_node_id
11211     BEGIN
11212       SELECT page_id INTO l_page_id FROM CZ_UI_PAGES
11213        WHERE ui_def_id=g_UI_CONTEXT.ui_def_id AND persistent_node_id=p_node.persistent_node_id AND
11214              deleted_flag NOT IN (G_YES_FLAG,G_MARK_TO_DELETE, G_LIMBO_FLAG) AND rownum<2;
11215        RETURN l_ui_node;
11216     EXCEPTION
11217       WHEN NO_DATA_FOUND THEN
11218            NULL;
11219     END;
11220     l_ui_node.ui_def_id                   := g_UI_Context.ui_def_id;
11221     l_ui_node.persistent_node_id          := p_node.persistent_node_id;
11222     l_ui_node.parent_persistent_node_id   := p_node.parent_persistent_node_id;
11223     l_ui_node.region_persistent_node_id   := p_node.persistent_node_id;
11224     l_ui_node.pagebase_persistent_node_id := p_parent_ui_node.persistent_node_id;
11225     l_ui_node.page_id                     := p_parent_ui_node.page_id;
11226 
11227     IF p_insert_index = -1 THEN
11228       SELECT NVL(MAX(seq_nbr),0) INTO l_max_prev_seq_nbr  FROM CZ_UI_PAGE_ELEMENTS
11229       START WITH ui_def_id=g_UI_Context.ui_def_id AND
11230                  page_id=p_parent_ui_node.page_id AND
11231                  element_id=p_parent_ui_node.element_id AND
11232                  deleted_flag NOT IN(G_YES_FLAG,G_MARK_TO_DELETE)
11233       CONNECT BY PRIOR ui_def_id=g_UI_Context.ui_def_id AND
11234          ui_def_id=g_UI_Context.ui_def_id AND PRIOR page_id= p_parent_ui_node.page_id
11235           AND page_id=p_parent_ui_node.page_id AND PRIOR element_id=parent_element_id AND
11236           PRIOR deleted_flag NOT IN(G_YES_FLAG,G_MARK_TO_DELETE) AND
11237           deleted_flag NOT IN(G_YES_FLAG,G_MARK_TO_DELETE);
11238     ELSE
11239       l_max_prev_seq_nbr := p_insert_index-1;
11240     END IF;
11241 
11242     l_ui_node.seq_nbr  := l_max_prev_seq_nbr + 1;
11243 
11244     UPDATE CZ_UI_PAGE_ELEMENTS
11245        SET seq_nbr=seq_nbr+1
11246      WHERE ui_def_id=g_UI_Context.ui_def_id AND
11247            page_id=p_parent_ui_node.page_id AND
11248            seq_nbr>l_max_prev_seq_nbr AND
11249            deleted_flag NOT IN(G_YES_FLAG,G_MARK_TO_DELETE);
11250 
11251     l_ui_node.element_id                  := get_Element_Id();
11252 
11253     l_ui_node.parent_element_id           := p_parent_ui_node.element_id;
11254 
11255     l_ui_node.element_type                := G_UI_REGION_NODE_TYPE;
11256     l_ui_node.instantiable_flag           := p_node.instantiable_flag;
11257     l_ui_node.ctrl_template_id            := G_NSTD_CONTAINER_TEMPLATE_ID;
11258     l_ui_node.ctrl_template_ui_def_id     := p_node.template_ui_def_id;
11259     l_ui_node.model_ref_expl_id           := get_Expl_Id(p_model_id       => p_node.devl_project_id,
11260                                                          p_ps_node_id     => p_node.ps_node_id,
11261                                                          p_component_id   => p_node.component_id,
11262                                                          p_ps_node_type   => p_node.ps_node_type);
11263     l_ui_node.element_signature_id        := 6007;
11264     l_ui_node.deleted_flag                := G_MARK_TO_ADD;
11265 
11266     SELECT COUNT(element_id)+1 INTO l_counter FROM CZ_UI_PAGE_ELEMENTS
11267     WHERE ui_def_id=g_UI_Context.ui_def_id AND
11268           page_id=l_ui_node.page_id AND
11269           ctrl_template_id=l_ui_node.ctrl_template_id AND
11270           deleted_flag NOT IN(G_YES_FLAG,G_MARK_TO_DELETE);
11271 
11272     l_ui_node.name :='Nested Region - '||TO_CHAR(l_counter);
11273 
11274     INSERT INTO CZ_UI_PAGE_ELEMENTS
11275       (ui_def_id,
11276        persistent_node_id,
11277        parent_persistent_node_id,
11278        region_persistent_node_id,
11279        pagebase_persistent_node_id,
11280        page_id,
11281        seq_nbr,
11282        ctrl_template_id,
11283        element_id,
11284        parent_element_id,
11285        element_type,
11286        instantiable_flag,
11287        ctrl_template_ui_def_id,
11288        model_ref_expl_id,
11289        element_signature_id,
11290        name,
11291        deleted_flag)
11292     VALUES
11293       (l_ui_node.ui_def_id,
11294        l_ui_node.persistent_node_id,
11295        l_ui_node.parent_persistent_node_id,
11296        l_ui_node.region_persistent_node_id,
11297        l_ui_node.pagebase_persistent_node_id,
11298        l_ui_node.page_id,
11299        l_ui_node.seq_nbr,
11300        l_ui_node.ctrl_template_id,
11301        l_ui_node.element_id,
11302        l_ui_node.parent_element_id,
11303        l_ui_node.element_type,
11304        l_ui_node.instantiable_flag,
11305        l_ui_node.ctrl_template_ui_def_id,
11306        l_ui_node.model_ref_expl_id,
11307        l_ui_node.element_signature_id,
11308        l_ui_node.name,
11309        l_ui_node.deleted_flag);
11310 
11311     --
11312     -- add UI Elements node to cache
11313     --
11314     g_ui_page_elements_tbl(TO_NUMBER(l_ui_node.element_id)) := l_ui_node;
11315 
11316     IF p_node.ps_node_type IN(G_BOM_MODEL_TYPE, G_BOM_OPTION_CLASS_TYPE) THEN
11317        add_BOM_Node(p_node                  => p_node,
11318                     p_page_id               => l_ui_node.page_id,
11319                     p_pagebase_expl_node_id => l_ui_node.model_ref_expl_id,
11320                     p_parent_element_id     => l_ui_node.element_id,
11321                     p_pagebase_persistent_node_id => l_ui_node.pagebase_persistent_node_id);
11322 
11323     END IF;
11324 
11325     --
11326     -- mark UI Page as refreshed
11327     --
11328     mark_UI_Page_As_Refreshed(l_ui_node.page_id, l_ui_node.ui_def_id);
11329     add_CX_Button(p_node     => p_node,
11330                   p_ui_node  => l_ui_node);
11331 
11332     RETURN l_ui_node;
11333 
11334   END create_UI_Region;
11335 
11336   --
11337   -- create new UI Reference
11338   --
11339   FUNCTION create_UI_Reference(p_node                 IN CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE,
11340                                p_parent_ui_node       IN CZ_UI_PAGE_ELEMENTS%ROWTYPE)
11341     RETURN CZ_UI_PAGE_ELEMENTS%ROWTYPE IS
11342 
11343     l_ui_node                       CZ_UI_PAGE_ELEMENTS%ROWTYPE;
11344     l_page_ref_node                 CZ_UI_PAGE_REFS%ROWTYPE;
11345     l_target_ui_def_node            CZ_UI_DEFS%ROWTYPE;
11346     l_page_ref_id                   CZ_UI_PAGE_REFS.page_ref_id%TYPE;
11347     l_ui_action_id                  CZ_UI_ACTIONS.ui_action_id%TYPE;
11348     l_max_seq_nbr                   CZ_UI_PAGE_ELEMENTS.seq_nbr%TYPE;
11349     l_ps_node_type                  CZ_PS_NODES.ps_node_type%TYPE;
11350     l_target_path                   CZ_UI_PAGE_REFS.target_path%TYPE;
11351     l_ps_node                       CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE;
11352     l_counter                       NUMBER;
11353     l_persistent_node_id            NUMBER;
11354     l_seq_nbr                       NUMBER;
11355     l_max_prev_seq_nbr              NUMBER;
11356 
11357   BEGIN
11358 
11359     IF p_parent_ui_node.suppress_refresh_flag=G_YES_FLAG THEN
11360       RETURN l_ui_node;
11361     END IF;
11362 
11363     --
11364     -- get UI Def data of referenced UI
11365     --
11366     l_target_ui_def_node := get_Target_UI_Context(p_ui_def_node  => g_UI_Context,
11367                                                   p_reference_id => p_node.reference_id);
11368 
11369     l_ui_node.model_ref_expl_id := get_Expl_Id(p_model_id     => p_node.devl_project_id,
11370                                                p_ps_node_id   => p_node.ps_node_id,
11371                                                p_component_id => p_node.component_id,
11372                                                p_ps_node_type => p_node.ps_node_type);
11373 
11374     l_ui_node.ui_def_id                       := p_parent_ui_node.ui_def_id;
11375     l_ui_node.persistent_node_id              := p_node.persistent_node_id;
11376     l_ui_node.parent_persistent_node_id       := p_node.parent_persistent_node_id;
11377     l_ui_node.region_persistent_node_id       := p_parent_ui_node.region_persistent_node_id;
11378     l_ui_node.pagebase_persistent_node_id     := p_parent_ui_node.pagebase_persistent_node_id;
11379     l_ui_node.page_id                         := p_parent_ui_node.page_id;
11380 
11381 
11382     SELECT NVL(MAX(seq_nbr),0) INTO l_max_prev_seq_nbr  FROM CZ_UI_PAGE_ELEMENTS
11383     START WITH ui_def_id=g_UI_Context.ui_def_id AND
11384                page_id=p_parent_ui_node.page_id AND
11385                element_id=p_parent_ui_node.element_id AND
11386                deleted_flag NOT IN(G_YES_FLAG,G_MARK_TO_DELETE)
11387     CONNECT BY PRIOR ui_def_id=g_UI_Context.ui_def_id AND
11388        ui_def_id=g_UI_Context.ui_def_id AND PRIOR page_id= p_parent_ui_node.page_id
11389         AND page_id=p_parent_ui_node.page_id AND PRIOR element_id=parent_element_id AND
11390         PRIOR deleted_flag NOT IN(G_YES_FLAG,G_MARK_TO_DELETE) AND
11391         deleted_flag NOT IN(G_YES_FLAG,G_MARK_TO_DELETE);
11392 
11393     l_ui_node.seq_nbr  := l_max_prev_seq_nbr + 1;
11394 
11395     UPDATE CZ_UI_PAGE_ELEMENTS
11396        SET seq_nbr=seq_nbr+1
11397      WHERE ui_def_id=g_UI_Context.ui_def_id AND
11398            page_id=p_parent_ui_node.page_id AND
11399            seq_nbr>l_max_prev_seq_nbr AND
11400            deleted_flag NOT IN(G_YES_FLAG,G_MARK_TO_DELETE);
11401 
11402 
11403     l_ui_node.ctrl_template_id                := p_node.template_id;
11404     l_ui_node.element_id                      := get_Element_Id();
11405     l_ui_node.parent_element_id               := p_parent_ui_node.element_id;
11406 
11407     IF p_node.detailed_type_id IN(CZ_TYPES.UMANDATORY_REF_TYPEID) THEN
11408       l_ui_node.element_type := G_UI_DRILLDOWN_NODE_TYPE;
11409     ELSIF p_node.detailed_type_id IN(CZ_TYPES.UOPTIONAL_COMPONENT_TYPEID,CZ_TYPES.UMINMAX_COMPONENT_TYPEID) THEN
11410        l_ui_node.element_type := G_UI_NONBOMADDINST_NODE_TYPE;
11411     ELSIF p_node.detailed_type_id IN(CZ_TYPES.UOPTIONAL_BOM_REF_TYPEID,CZ_TYPES.UMINMAX_BOM_REF_TYPEID) THEN
11412        l_ui_node.element_type := G_UI_BOMADDINST_NODE_TYPE;
11413     ELSE
11414        NULL;
11415     END IF;
11416 
11417     l_ui_node.instantiable_flag               := p_node.instantiable_flag;
11418     l_ui_node.ctrl_template_ui_def_id         := p_node.template_ui_def_id;
11419     l_ui_node.element_signature_id            := p_node.root_element_signature_id;
11420     l_ui_node.deleted_flag                    := G_MARK_TO_ADD;
11421 
11422     SELECT COUNT(element_id)+1 INTO l_counter FROM CZ_UI_PAGE_ELEMENTS
11423     WHERE ui_def_id=g_UI_Context.ui_def_id AND
11424           page_id=l_ui_node.page_id AND
11425           ctrl_template_id=l_ui_node.ctrl_template_id AND
11426           deleted_flag NOT IN(G_YES_FLAG,G_MARK_TO_DELETE);
11427 
11428     l_ui_node.name := p_node.template_name||' - '||TO_CHAR(l_counter);
11429 
11430     --
11431     -- special handling for BOM referencies
11432     --
11433 
11434     IF p_node.detailed_type_id IN(CZ_TYPES.UMANDATORY_REF_TYPEID) THEN
11435        BEGIN
11436 
11437          SELECT NVL(MAX(seq_nbr),0) INTO l_max_seq_nbr
11438          FROM CZ_UI_PAGE_ELEMENTS
11439          WHERE ui_def_id=l_ui_node.ui_def_id
11440          AND parent_element_id=l_ui_node.parent_element_id
11441          AND deleted_flag IN(G_NO_FLAG,G_MARK_TO_REFRESH,G_MARK_TO_ADD)
11442          AND element_type IN(G_UI_BOMADDINST_NODE_TYPE);
11443 
11444          SELECT persistent_node_id INTO l_persistent_node_id
11445            FROM CZ_UI_PAGE_ELEMENTS
11446           WHERE ui_def_id=l_ui_node.ui_def_id AND
11447                 parent_element_id=l_ui_node.parent_element_id AND
11448                 seq_nbr=l_max_seq_nbr AND
11449                 ROWNUM<2;
11450 
11451          l_ps_node := get_Model_Node_By_Persist_Id(l_persistent_node_id,g_UI_COntext.devl_project_id);
11452 
11453          SELECT ps_node_type INTO l_ps_node_type
11454            FROM CZ_PS_NODES
11455           WHERE devl_project_id=p_node.reference_id AND
11456                 parent_id IS NULL AND
11457                 deleted_flag=G_NO_FLAG;
11458 
11459          IF l_ps_node_type IN(G_BOM_MODEL_TYPE,G_BOM_OPTION_CLASS_TYPE) AND
11460             (l_ps_node.ps_node_type IN(G_BOM_MODEL_TYPE,G_BOM_OPTION_CLASS_TYPE) OR
11461             l_ps_node.detailed_type_id in(CZ_TYPES.UOPTIONAL_BOM_REF_TYPEID,CZ_TYPES.UMINMAX_BOM_REF_TYPEID)) THEN
11462            l_ui_node.ctrl_template_id := NULL;
11463            l_ui_node.ctrl_template_ui_def_id := NULL;
11464          END IF;
11465 
11466        EXCEPTION
11467          WHEN OTHERS THEN
11468            DEBUG('create_UI_Reference() : '||SQLERRM);
11469        END;
11470     END IF;
11471 
11472     --
11473     --  model nodes must have associated record in CZ_UI_PAGE_ELEMENTS
11474     --
11475     INSERT INTO CZ_UI_PAGE_ELEMENTS
11476       (ui_def_id,
11477        persistent_node_id,
11478        parent_persistent_node_id,
11479        region_persistent_node_id,
11480        pagebase_persistent_node_id,
11481        page_id,
11482        seq_nbr,
11483        ctrl_template_id,
11484        element_id,
11485        parent_element_id,
11486        element_type,
11487        instantiable_flag,
11488        ctrl_template_ui_def_id,
11489        model_ref_expl_id,
11490        element_signature_id,
11491        name,
11492        deleted_flag)
11493     VALUES
11494       (l_ui_node.ui_def_id,
11495        l_ui_node.persistent_node_id,
11496        l_ui_node.parent_persistent_node_id,
11497        l_ui_node.region_persistent_node_id,
11498        l_ui_node.pagebase_persistent_node_id,
11499        l_ui_node.page_id,
11500        l_ui_node.seq_nbr,
11501        l_ui_node.ctrl_template_id,
11502        l_ui_node.element_id,
11503        l_ui_node.parent_element_id,
11504        l_ui_node.element_type,
11505        l_ui_node.instantiable_flag,
11506        l_ui_node.ctrl_template_ui_def_id,
11507        l_ui_node.model_ref_expl_id,
11508        l_ui_node.element_signature_id,
11509        l_ui_node.name,
11510        l_ui_node.deleted_flag);
11511 
11512     BEGIN
11513 
11514       UPDATE CZ_UI_REFS
11515          SET deleted_flag=G_NO_FLAG
11516        WHERE
11517          ui_def_id = l_ui_node.ui_def_id AND
11518          ref_persistent_node_id = l_ui_node.persistent_node_id;
11519 
11520       IF SQL%ROWCOUNT=0 THEN
11521         INSERT INTO CZ_UI_REFS
11522         (ui_def_id,
11523          ref_ui_def_id,
11524          ref_persistent_node_id,
11525          model_ref_expl_id,
11526          deleted_flag)
11527         VALUES
11528         (l_ui_node.ui_def_id,
11529          l_target_ui_def_node.ui_def_id,
11530          l_ui_node.persistent_node_id,
11531          l_ui_node.model_ref_expl_id,
11532          G_NO_FLAG);
11533       END IF;
11534 
11535     EXCEPTION
11536       WHEN OTHERS THEN
11537         NULL;
11538     END;
11539 
11540     l_ui_action_id := allocateId('CZ_UI_ACTIONS_S');
11541     INSERT INTO CZ_UI_ACTIONS
11542       (ui_action_id,
11543        ui_def_id,
11544        source_page_id,
11545        context_component_id,
11546        element_id,
11547        ui_action_type,
11548        target_ui_def_id,
11549        target_persistent_node_id,
11550        target_node_path,
11551        target_page_set_id,
11552        target_page_id,
11553        target_expl_node_id,
11554        seeded_flag,
11555        deleted_flag)
11556     VALUES
11557       (l_ui_action_id,
11558        l_ui_node.ui_def_id,
11559        l_ui_node.page_id,
11560        l_ui_node.region_persistent_node_id,
11561        l_ui_node.element_id,
11562        G_ACTION_CONFIGURE_SUBCOMP,
11563        l_target_ui_def_node.ui_def_id,
11564        p_node.persistent_node_id,
11565        TO_CHAR(p_node.persistent_node_id),
11566        l_target_ui_def_node.page_set_id,
11567        l_target_ui_def_node.start_page_id,
11568        l_ui_node.model_ref_expl_id,
11569        G_NO_FLAG,
11570        G_NO_FLAG);
11571 
11572     add_CX_Button(p_node               => p_node,
11573                   p_ui_node            => l_ui_node);
11574 
11575     --
11576     -- mark UI Page as refreshed
11577     --
11578     mark_UI_Page_As_Refreshed(l_ui_node.page_id, l_ui_node.ui_def_id);
11579 
11580     IF NOT(l_target_ui_def_node.PRIMARY_NAVIGATION=G_MODEL_TREE_MENU AND
11581        g_UI_Context.PRIMARY_NAVIGATION=G_MODEL_TREE_MENU) THEN
11582       RETURN l_ui_node;
11583     END IF;
11584 
11585     BEGIN
11586       l_page_ref_node := get_UI_Page_Ref_Node(p_ui_node => p_parent_ui_node);
11587     EXCEPTION
11588       WHEN NO_DATA_FOUND THEN
11589         RETURN l_ui_node;
11590     END;
11591 
11592     FOR m IN(SELECT page_set_id FROM CZ_UI_PAGE_SETS
11593               WHERE ui_def_id=g_UI_Context.ui_def_id AND
11594                     page_set_id=l_page_ref_node.page_set_id AND
11595                     NVL(suppress_refresh_flag,G_NO_FLAG)=G_NO_FLAG)
11596     LOOP
11597 
11598       --
11599       -- create a new record for this UI page in CZ_UI_PAGE_REFS
11600       --
11601       l_page_ref_id := allocateId('CZ_UI_PAGE_REFS_S');
11602 
11603        IF l_target_ui_def_node.start_page_id=-1 THEN
11604 
11605          SELECT MIN(page_id) INTO l_target_ui_def_node.start_page_id
11606            FROM CZ_UI_PAGES
11607           WHERE ui_def_id=l_target_ui_def_node.ui_def_id AND
11608                 deleted_flag IN(G_NO_FLAG,G_MARK_TO_ADD,G_MARK_TO_REFRESH);
11609 
11610          SELECT MIN(page_set_id) INTO l_target_ui_def_node.page_set_id
11611            FROM CZ_UI_PAGE_SETS
11612           WHERE ui_def_id=l_target_ui_def_node.ui_def_id AND deleted_flag=G_NO_FLAG;
11613 
11614       END IF;
11615 
11616       l_target_path := get_Page_Path(p_node.ps_node_id,l_page_ref_node.page_set_id);
11617 
11618       IF g_UI_Context.PRIMARY_NAVIGATION IN(G_SINGLE_LEVEL_MENU) THEN
11619         SELECT COUNT(*)+1 INTO l_seq_nbr
11620         FROM CZ_UI_PAGE_REFS WHERE ui_def_id=g_UI_Context.ui_def_id AND
11621              deleted_flag=G_NO_FLAG;
11622       ELSIF g_UI_Context.PRIMARY_NAVIGATION IN(G_MODEL_TREE_MENU) THEN
11623 
11624         l_seq_nbr := get_new_page_ref_seq(p_node, l_page_ref_node.page_set_id, l_page_ref_node.page_ref_id);
11625 
11626         UPDATE CZ_UI_PAGE_REFS
11627         SET seq_nbr = seq_nbr + 1
11628         WHERE ui_def_id = g_UI_Context.ui_def_id
11629         AND page_set_id = l_page_ref_node.page_set_id
11630         AND parent_page_ref_id = l_page_ref_node.page_ref_id
11631         AND seq_nbr >= l_seq_nbr
11632         AND deleted_flag = G_NO_FLAG;
11633       ELSE
11634         l_seq_nbr :=p_node.tree_seq;
11635       END IF;
11636 
11637       INSERT INTO CZ_UI_PAGE_REFS
11638       (ui_def_id,
11639        page_set_id,
11640        page_ref_id,
11641        parent_page_ref_id,
11642        seq_nbr,
11643        node_depth,
11644        NAME,
11645        caption_source,
11646        target_persistent_node_id,
11647        target_path,
11648        target_ui_def_id,
11649        target_page_set_id,
11650        target_page_id,
11651        modified_flags,
11652        page_ref_type,
11653        target_expl_node_id,
11654        caption_rule_id,
11655        deleted_flag)
11656        VALUES
11657       (l_ui_node.ui_def_id,
11658        l_page_ref_node.page_set_id,
11659        l_page_ref_id,
11660        l_page_ref_node.page_ref_id,
11661        l_seq_nbr,
11662        l_page_ref_node.node_depth+1,
11663        p_node.NAME,
11664        G_DEFAULT_CAPTION_RULE_ID,
11665        p_node.persistent_node_id,
11666        l_target_path,
11667        l_target_ui_def_node.ui_def_id, --NULL, -- request from Alok -- old code l_target_ui_def_node.ui_def_id,
11668        l_target_ui_def_node.page_set_id, --NULL, -- request from Alok -- old code l_target_ui_def_node.page_set_id,
11669        l_target_ui_def_node.start_page_id, --NULL, -- request from Alok -- old code l_target_ui_def_node.start_page_id,
11670        0,
11671        l_page_ref_node.page_ref_type,
11672        l_ui_node.model_ref_expl_id,
11673        NULL,
11674        G_NO_FLAG);
11675 
11676     END LOOP;
11677 
11678     RETURN l_ui_node;
11679 
11680   END create_UI_Reference;
11681 
11682   --
11683   -- delete UI element recursively
11684   --
11685   PROCEDURE delete_UI_Element(p_ui_node               IN CZ_UI_PAGE_ELEMENTS%ROWTYPE,
11686                               p_suppress_refresh_flag IN CZ_UI_PAGE_ELEMENTS.suppress_refresh_flag%TYPE DEFAULT NULL,
11687                               p_delete_in_model       IN BOOLEAN DEFAULT NULL) IS
11688 
11689     l_suppress_refresh_flag CZ_UI_PAGE_ELEMENTS.suppress_refresh_flag%TYPE;
11690     l_del_flag              BOOLEAN := FALSE;
11691   BEGIN
11692 
11693     --
11694     -- get suppress_refresh_flag flag of UI region to which this element
11695     -- belong to
11696     --
11697     IF p_suppress_refresh_flag IS NULL THEN
11698        FOR i IN (SELECT persistent_node_id,region_persistent_node_id,suppress_refresh_flag
11699                  FROM CZ_UI_PAGE_ELEMENTS
11700                  START WITH ui_def_id = p_ui_node.ui_def_id AND
11701                           deleted_flag IN
11702                           (G_NO_FLAG, G_MARK_TO_ADD, G_MARK_TO_REFRESH,
11703                            G_MARK_TO_DELETE) AND element_id = p_ui_node.element_id
11704                  CONNECT BY PRIOR parent_element_id = element_id AND
11705                          deleted_flag IN
11706                          (G_NO_FLAG, G_MARK_TO_ADD, G_MARK_TO_REFRESH,
11707                           G_MARK_TO_DELETE) AND
11708                          PRIOR deleted_flag IN
11709                           (G_NO_FLAG, G_MARK_TO_ADD, G_MARK_TO_REFRESH,
11710                            G_MARK_TO_DELETE))
11711         LOOP
11712           IF i.persistent_node_id=i.region_persistent_node_id THEN
11713              l_suppress_refresh_flag := i.suppress_refresh_flag;
11714           END IF;
11715         END LOOP;
11716     ELSE
11717        IF p_suppress_refresh_flag=G_YES_FLAG THEN
11718          l_suppress_refresh_flag := p_suppress_refresh_flag;
11719        ELSE
11720          l_suppress_refresh_flag := p_ui_node.suppress_refresh_flag;
11721        END IF;
11722     END IF;
11723 
11724     --
11725     -- if suppress_refresh_flag = true (G_YES_FLAG) then
11726     -- node will be deleted
11727     -- else node will be deassiated from model node
11728     --
11729     IF NVL(l_suppress_refresh_flag,G_NO_FLAG) = G_NO_FLAG THEN
11730 
11731        --
11732        -- delete UI element
11733        --
11734        UPDATE CZ_UI_PAGE_ELEMENTS
11735           SET deleted_flag = G_MARK_TO_DELETE
11736         WHERE ui_def_id = p_ui_node.ui_def_id AND
11737               element_id IN
11738               (SELECT element_id FROM CZ_UI_PAGE_ELEMENTS
11739                START WITH ui_def_id=p_ui_node.ui_def_id AND element_id=p_ui_node.element_id
11740                CONNECT BY PRIOR ui_def_id=p_ui_node.ui_def_id AND ui_def_id=p_ui_node.ui_def_id AND
11741                PRIOR element_id=parent_element_id AND
11742                      deleted_flag IN (G_NO_FLAG, G_MARK_TO_ADD, G_MARK_TO_REFRESH,G_MARK_TO_DELETE) AND
11743                PRIOR deleted_flag IN(G_NO_FLAG, G_MARK_TO_ADD, G_MARK_TO_REFRESH,G_MARK_TO_DELETE));
11744 
11745        l_del_flag := TRUE;
11746 
11747     ELSE
11748       IF p_delete_in_model THEN
11749          --
11750          -- deassociate UI element from model node
11751          --
11752          UPDATE CZ_UI_PAGE_ELEMENTS
11753             SET deleted_flag = G_MARK_TO_DEASSOCIATE,
11754                 persistent_node_id = 0
11755           WHERE ui_def_id = p_ui_node.ui_def_id AND
11756                 element_id IN
11757                 (SELECT element_id FROM CZ_UI_PAGE_ELEMENTS
11758                  START WITH ui_def_id=p_ui_node.ui_def_id AND element_id=p_ui_node.element_id
11759                  CONNECT BY PRIOR ui_def_id=p_ui_node.ui_def_id AND
11760                   PRIOR element_id=parent_element_id AND
11761                         deleted_flag IN (G_NO_FLAG, G_MARK_TO_ADD, G_MARK_TO_REFRESH,G_MARK_TO_DELETE) AND
11762                   PRIOR deleted_flag IN(G_NO_FLAG, G_MARK_TO_ADD, G_MARK_TO_REFRESH,G_MARK_TO_DELETE));
11763          l_del_flag := TRUE;
11764       END IF;
11765     END IF;
11766 
11767     IF l_del_flag THEN
11768       --
11769       -- delete UI Ref from Page Sets
11770       --
11771       UPDATE CZ_UI_PAGE_REFS
11772          SET deleted_flag = G_YES_FLAG
11773        WHERE ui_def_id=p_ui_node.ui_def_id AND
11774              target_persistent_node_id=p_ui_node.persistent_node_id AND
11775              deleted_flag=G_NO_FLAG AND
11776              target_page_id NOT IN(SELECT page_id FROM CZ_UI_PAGES
11777              WHERE ui_def_id=g_UI_Context.ui_def_id);
11778 
11779       IF SQL%ROWCOUNT>0 THEN
11780         --
11781         -- delete UI Ref
11782         --
11783         UPDATE CZ_UI_REFS
11784            SET deleted_flag = G_YES_FLAG
11785          WHERE ui_def_id=p_ui_node.ui_def_id AND
11786                ref_persistent_node_id=p_ui_node.persistent_node_id AND
11787                deleted_flag=G_NO_FLAG AND NOT EXISTS
11788                (SELECT NULL FROM CZ_UI_PAGE_ELEMENTS
11789                 WHERE ui_def_id=p_ui_node.ui_def_id AND
11790                       persistent_node_id=p_ui_node.persistent_node_id AND
11791                       deleted_flag IN(G_NO_FLAG,G_MARK_TO_ADD,G_MARK_TO_REFRESH));
11792       END IF;
11793 
11794     END IF;
11795 
11796     --
11797     -- mark UI Page as refreshed
11798     --
11799     mark_UI_Page_As_Refreshed(p_ui_node.page_id, p_ui_node.ui_def_id);
11800 
11801   END delete_UI_Element;
11802 
11803   --
11804   -- remove UI Page Ref record
11805   --
11806   PROCEDURE remove_UI_Page_Ref(p_ui_node IN CZ_UI_PAGE_ELEMENTS%ROWTYPE) IS
11807 
11808     l_page_ref_id             NUMBER;
11809     l_parent_page_ref_id      NUMBER;
11810     l_page_set_id             NUMBER;
11811     l_seq_nbr                 NUMBER;
11812 
11813   BEGIN
11814 
11815         SELECT MIN(page_ref_id) INTO l_page_ref_id
11816           FROM CZ_UI_PAGE_REFS
11817          WHERE ui_def_id=p_ui_node.ui_def_id AND
11818                target_page_id=p_ui_node.page_id AND
11819                deleted_flag=G_NO_FLAG;
11820 
11821         UPDATE CZ_UI_PAGE_REFS
11822            SET deleted_flag = G_YES_FLAG
11823          WHERE ui_def_id=p_ui_node.ui_def_id AND
11824                page_ref_id=l_page_ref_id
11825             RETURNING parent_page_ref_id,page_set_id,seq_nbr
11826                  INTO l_parent_page_ref_id,l_page_set_id,l_seq_nbr;
11827 
11828 
11829         --
11830         -- update seq nbr to seq nbr - 1
11831         --
11832         UPDATE CZ_UI_PAGE_REFS
11833            SET seq_nbr = seq_nbr - 1
11834          WHERE ui_def_id=p_ui_node.ui_def_id AND
11835                page_set_id=l_page_set_id AND
11836                parent_page_ref_id = l_parent_page_ref_id AND
11837                seq_nbr > l_seq_nbr AND
11838                deleted_flag=G_NO_FLAG;
11839 
11840 
11841   EXCEPTION
11842     WHEN OTHERS THEN
11843       NULL;
11844   END remove_UI_Page_Ref;
11845 
11846   PROCEDURE delete_Related_Buttons(p_ui_node IN CZ_UI_PAGE_ELEMENTS%ROWTYPE) IS
11847     l_suppress_refresh_flag     CZ_UI_PAGE_ELEMENTS.suppress_refresh_flag%TYPE;
11848   BEGIN
11849 
11850     FOR i IN(SELECT element_id,parent_element_id,page_id,suppress_refresh_flag
11851                FROM CZ_UI_PAGE_ELEMENTS a
11852               WHERE ui_def_id=p_ui_node.ui_def_id AND
11853                     persistent_node_id=p_ui_node.persistent_node_id AND
11854                     element_type IN(G_UI_BOMADDINST_NODE_TYPE,
11855                                     G_UI_NONBOMADDINST_NODE_TYPE,
11856                                     G_UI_PAGEDRILLDOWN_NODE_TYPE) AND
11857                     deleted_flag NOT IN(G_YES_FLAG, G_LIMBO_FLAG))
11858     LOOP
11859 
11860        IF i.parent_element_id IS NOT NULL THEN
11861          BEGIN
11862            l_suppress_refresh_flag := G_NO_FLAG;
11863            SELECT NVL(suppress_refresh_flag,G_NO_FLAG) INTO l_suppress_refresh_flag
11864              FROM CZ_UI_PAGE_ELEMENTS
11865             WHERE ui_def_id  = p_ui_node.ui_def_id AND
11866                   page_id = i.page_id AND
11867                   element_id=i.parent_element_id;
11868          EXCEPTION
11869            WHEN NO_DATA_FOUND THEN
11870              NULL;
11871          END;
11872        END IF;
11873 
11874        IF l_suppress_refresh_flag=G_YES_FLAG OR i.suppress_refresh_flag=G_YES_FLAG THEN
11875          UPDATE CZ_UI_PAGE_ELEMENTS
11876             SET deleted_flag = G_MARK_TO_DEASSOCIATE,
11877                 persistent_node_id=0
11878           WHERE ui_def_id  = p_ui_node.ui_def_id AND
11879                 page_id = i.page_id AND
11880                 element_id = i.element_id;
11881        ELSE
11882          UPDATE CZ_UI_PAGE_ELEMENTS
11883             SET deleted_flag = G_MARK_TO_DELETE
11884           WHERE ui_def_id  = p_ui_node.ui_def_id AND
11885                 page_id = i.page_id AND
11886                 element_id = i.element_id;
11887        END IF;
11888 
11889        mark_UI_Page_As_Refreshed(i.page_id, p_ui_node.ui_def_id);
11890 
11891     END LOOP;
11892 
11893   END delete_Related_Buttons;
11894 
11895   --
11896   -- delete UI container
11897   --
11898   PROCEDURE delete_UI_Container(p_ui_node IN CZ_UI_PAGE_ELEMENTS%ROWTYPE) IS
11899       TYPE number_tbl_type        IS TABLE OF NUMBER INDEX BY BINARY_INTEGER;
11900       l_element_id_tbl            varchar_tbl_type;
11901       l_parent_element_id_tbl     varchar_tbl_type;
11902       l_persistent_node_id_tbl    number_tbl_type;
11903       l_suppress_refresh_flag_tbl varchar_tbl_type;
11904       l_page_id_tbl               number_tbl_type;
11905       l_suppress_refresh_flag     CZ_UI_PAGE_ELEMENTS.suppress_refresh_flag%TYPE;
11906 
11907   BEGIN
11908 
11909     --
11910     -- if it's a page remove page and corresponding UI Page ref record
11911     --
11912     IF p_ui_node.parent_element_id IS NULL THEN
11913 
11914       SELECT element_id, parent_element_id, persistent_node_id,page_id, NVL(suppress_refresh_flag,G_NO_FLAG)
11915         BULK COLLECT INTO l_element_id_tbl, l_parent_element_id_tbl, l_persistent_node_id_tbl,
11916                          l_page_id_tbl, l_suppress_refresh_flag_tbl
11917         FROM CZ_UI_PAGE_ELEMENTS
11918        WHERE ui_def_id=p_ui_node.ui_def_id AND
11919              page_id=p_ui_node.page_id AND
11920              deleted_flag NOT IN(G_YES_FLAG);
11921 
11922        delete_Related_Buttons(p_ui_node);
11923 
11924        --
11925        -- mark this UI Page as deleted
11926        --
11927        mark_UI_Page_As_Deleted(p_ui_node.page_id, p_ui_node.ui_def_id);
11928 
11929        --
11930        -- remove corresponding UI page ref record
11931        --
11932        remove_UI_Page_Ref(p_ui_node);
11933 
11934     ELSE
11935 
11936       SELECT element_id,persistent_node_id,page_id, suppress_refresh_flag
11937         BULK COLLECT INTO  l_element_id_tbl, l_persistent_node_id_tbl,
11938                            l_page_id_tbl, l_suppress_refresh_flag_tbl
11939         FROM CZ_UI_PAGE_ELEMENTS
11940        START WITH ui_def_id=p_ui_node.ui_def_id AND
11941                   page_id=p_ui_node.page_id AND
11942                   element_id=p_ui_node.element_id
11943        CONNECT BY PRIOR element_id=parent_element_id AND
11944                         ui_def_id=p_ui_node.ui_def_id AND PRIOR
11945                         ui_def_id=p_ui_node.ui_def_id;
11946 
11947        mark_UI_Page_As_Refreshed(p_ui_node.page_id, p_ui_node.ui_def_id);
11948 
11949     END IF;
11950 
11951     IF l_element_id_tbl.COUNT=0 THEN
11952       RETURN;
11953     END IF;
11954 
11955     FOR i IN l_element_id_tbl.FIRST..l_element_id_tbl.LAST
11956     LOOP
11957 
11958       BEGIN
11959         l_suppress_refresh_flag := G_NO_FLAG;
11960         IF l_parent_element_id_tbl(i) IS NOT NULL THEN
11961           SELECT NVL(suppress_refresh_flag,G_NO_FLAG) INTO l_suppress_refresh_flag
11962             FROM CZ_UI_PAGE_ELEMENTS
11963            WHERE ui_def_id  = p_ui_node.ui_def_id AND
11964                  page_id = p_ui_node.page_id AND
11965                  element_id=l_parent_element_id_tbl(i);
11966         END IF;
11967       EXCEPTION
11968         WHEN NO_DATA_FOUND THEN
11969           NULL;
11970       END;
11971 
11972       IF l_suppress_refresh_flag=G_YES_FLAG OR l_suppress_refresh_flag_tbl(i)=G_YES_FLAG THEN
11973         UPDATE CZ_UI_PAGE_ELEMENTS
11974            SET deleted_flag = G_MARK_TO_DEASSOCIATE,
11975                persistent_node_id=0
11976          WHERE ui_def_id  = p_ui_node.ui_def_id AND
11977                page_id = p_ui_node.page_id AND
11978                element_id = l_element_id_tbl(i);
11979       ELSE
11980         UPDATE CZ_UI_PAGE_ELEMENTS
11981            SET deleted_flag = G_MARK_TO_DELETE
11982          WHERE ui_def_id  = p_ui_node.ui_def_id AND
11983                page_id = p_ui_node.page_id AND
11984                element_id = l_element_id_tbl(i);
11985       END IF;
11986 
11987       UPDATE CZ_UI_ACTIONS
11988          SET deleted_flag=G_YES_FLAG
11989        WHERE ui_def_id=p_ui_node.ui_def_id AND
11990              source_page_id=p_ui_node.page_id AND
11991              element_id=l_element_id_tbl(i);
11992     END LOOP;
11993 
11994   END delete_UI_Container;
11995 
11996   PROCEDURE handle_Deleted_Nodes(p_ui_def_id IN NUMBER) IS
11997 
11998     l_suppress_refresh_flag CZ_UI_PAGE_ELEMENTS.suppress_refresh_flag%TYPE;
11999 
12000   BEGIN
12001 
12002    -- delete UI References
12003     UPDATE CZ_UI_PAGE_REFS uiref
12004       SET deleted_flag=G_YES_FLAG
12005     WHERE ui_def_id=p_ui_def_id AND target_ui_def_id IS NOT NULL AND
12006            NOT EXISTS(SELECT NULL FROM CZ_PS_NODES a
12007            WHERE a.devl_project_id=(SELECT b.devl_project_id FROM CZ_UI_DEFS b
12008            WHERE b.ui_def_id=p_ui_def_id) AND
12009            persistent_node_id=uiref.target_persistent_node_id AND deleted_flag=G_NO_FLAG)
12010            AND deleted_flag=G_NO_FLAG;
12011 
12012     UPDATE CZ_UI_REFS uiref
12013        SET deleted_flag=G_YES_FLAG
12014      WHERE ui_def_id=p_ui_def_id AND
12015            NOT EXISTS(SELECT NULL FROM CZ_PS_NODES a
12016            WHERE a.devl_project_id=(SELECT b.devl_project_id FROM CZ_UI_DEFS b
12017            WHERE b.ui_def_id=p_ui_def_id) AND
12018            persistent_node_id=uiref.ref_persistent_node_id AND deleted_flag=G_NO_FLAG)
12019            AND deleted_flag=G_NO_FLAG;
12020 
12021   END handle_Deleted_Nodes;
12022 
12023   --
12024   -- delete UI page
12025   --
12026   PROCEDURE delete_UI_Page(p_ui_node IN CZ_UI_PAGE_ELEMENTS%ROWTYPE) IS
12027 
12028     l_page_set_id               CZ_UI_PAGE_SETS.page_set_id%TYPE;
12029     l_parent_page_ref_id        CZ_UI_PAGE_REFS.page_ref_id%TYPE;
12030     l_seq_nbr                   CZ_UI_PAGE_REFS.seq_nbr%TYPE;
12031     l_path_to_next_page         CZ_UI_PAGE_REFS.path_to_next_page%TYPE;
12032     l_target_persistent_node_id CZ_UI_PAGE_REFS.target_persistent_node_id%TYPE;
12033     l_target_page_id            CZ_UI_PAGE_REFS.target_page_id%TYPE;
12034     l_ui_page_ref_node          CZ_UI_PAGE_REFS%ROWTYPE;
12035     l_ui_page_node              CZ_UI_PAGES%ROWTYPE;
12036     l_page_ref_id               CZ_UI_PAGE_REFS.page_ref_id%TYPE;
12037 
12038 
12039   BEGIN
12040     --
12041     -- delete all child UI nodes
12042     --
12043     delete_UI_Container(p_ui_node);
12044 
12045   END delete_UI_Page;
12046 
12047   --
12048   -- delete UI region
12049   --
12050   PROCEDURE delete_UI_Region(p_ui_node IN CZ_UI_PAGE_ELEMENTS%ROWTYPE) IS
12051   BEGIN
12052     delete_UI_Container(p_ui_node);
12053   END delete_UI_Region;
12054 
12055 
12056   PROCEDURE replace_page_ref_target_path(p_node           IN CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE,
12057                                          p_page_id        IN CZ_UI_PAGES.page_id%TYPE) IS
12058 
12059     l_page_set_id            CZ_UI_PAGE_REFS.page_set_id%TYPE;
12060     l_target_path            CZ_UI_PAGE_REFS.target_path%TYPE;
12061     l_page_path_from_root    CZ_UI_PAGE_REFS.target_path%TYPE;
12062     l_old_page_path_from_root CZ_UI_PAGE_REFS.target_path%TYPE;
12063 
12064   BEGIN
12065 
12066     SELECT page_set_id,pagebase_path INTO l_page_set_id,l_old_page_path_from_root FROM CZ_UI_PAGES
12067     WHERE page_id=p_page_id AND ui_def_id=g_UI_Context.ui_def_id;
12068 
12069     l_target_path := get_Page_Path(p_node.ps_node_id, l_page_set_id);
12070     l_page_path_from_root := get_Page_Path(p_node.ps_node_id, NULL);
12071 
12072     IF l_page_path_from_root <> l_old_page_path_from_root THEN
12073       UPDATE CZ_UI_PAGES
12074          SET pagebase_path=l_page_path_from_root,
12075              deleted_flag=DECODE(deleted_flag,G_MARK_TO_ADD,G_MARK_TO_ADD,G_MARK_TO_REFRESH)
12076        WHERE page_id=p_page_id AND
12077              ui_def_id=g_UI_Context.ui_def_id AND
12078              deleted_flag NOT IN(G_YES_FLAG,G_MARK_TO_DELETE);
12079 
12080       IF SQL%ROWCOUNT>0 THEN
12081           --DEBUG('asp: updating target path 3 for page ' || p_page_id || ' to ' || l_target_path);
12082           UPDATE CZ_UI_PAGE_REFS
12083             SET target_path=l_target_path
12084           WHERE ui_def_id=g_UI_Context.ui_def_id AND
12085                 target_page_id=p_page_id;
12086       END IF;
12087     END IF;
12088 
12089   END replace_page_ref_target_path;
12090 
12091   PROCEDURE replace_page_ref_target_path(p_node           IN CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE) IS
12092     l_target_path            CZ_UI_PAGE_REFS.target_path%TYPE;
12093   BEGIN
12094 
12095     IF p_node.ps_node_type = G_REFERENCE_TYPE AND
12096        g_UI_Context.primary_navigation = G_MODEL_TREE_MENU THEN
12097 
12098       FOR i in (SELECT page_set_id, page_ref_id
12099                 FROM CZ_UI_PAGE_REFS
12100                 WHERE ui_def_id = g_UI_Context.ui_def_id
12101                 AND target_ui_def_id IS NOT NULL
12102                 AND target_page_id IS NOT NULL
12103                 AND target_persistent_node_id = p_node.persistent_node_id
12104                 AND deleted_flag = G_NO_FLAG)
12105 
12106       LOOP
12107         l_target_path := get_Page_Path(p_node.ps_node_id, i.page_set_id);
12108         --DEBUG('asp: updating target path 10 for page ref ' || i.page_ref_id || ' to ' || l_target_path);
12109         UPDATE CZ_UI_PAGE_REFS
12110           SET target_path=l_target_path
12111         WHERE ui_def_id=g_UI_Context.ui_def_id
12112         AND page_set_id = i.page_set_id
12113         AND page_ref_id = i.page_ref_id;
12114       END LOOP;
12115 
12116     ELSE
12117       FOR i in (SELECT page_id
12118                 FROM CZ_UI_PAGES
12119                 WHERE ui_def_id = g_UI_Context.ui_def_id
12120                 AND persistent_node_id = p_node.persistent_node_id
12121                 AND deleted_flag NOT IN (G_YES_FLAG, G_LIMBO_FLAG))
12122       LOOP
12123         replace_page_ref_target_path(p_node, i.page_id);
12124       END LOOP;
12125     END IF;
12126   END replace_page_ref_target_path;
12127 
12128 
12129   PROCEDURE replace_page_ref_target_path(p_ui_node        IN CZ_UI_PAGE_ELEMENTS%ROWTYPE,
12130                                          p_node           IN CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE) IS
12131 
12132     l_page_set_id            CZ_UI_PAGE_REFS.page_set_id%TYPE;
12133     l_target_path            CZ_UI_PAGE_REFS.target_path%TYPE;
12134     l_page_path_from_root    CZ_UI_PAGE_REFS.target_path%TYPE;
12135     l_old_page_path_from_root CZ_UI_PAGE_REFS.target_path%TYPE;
12136 
12137   BEGIN
12138 
12139     replace_page_ref_target_path(p_node, p_ui_node.page_id);
12140 
12141   END replace_page_ref_target_path;
12142 
12143   PROCEDURE move_page_ref(p_page_set_id            IN CZ_UI_PAGE_REFS.page_set_id%TYPE,
12144                           p_page_ref_id            IN CZ_UI_PAGE_REFS.page_ref_id%TYPE,
12145                           p_node                   IN CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE,
12146                           x_new_parent_page_ref_id OUT NOCOPY CZ_UI_PAGE_REFS.page_ref_id%TYPE) IS
12147 
12148 
12149     l_page_ref_type          CZ_UI_PAGE_REFS.page_ref_type%TYPE;
12150     l_new_parent_node_depth  CZ_UI_PAGE_REFS.node_depth%TYPE;
12151     l_node_depth             CZ_UI_PAGE_REFS.node_depth%TYPE;
12152     l_page_set_suppress_flag CZ_UI_PAGE_SETS.suppress_refresh_flag%TYPE;
12153 
12154   BEGIN
12155 
12156     x_new_parent_page_ref_id := NULL;
12157 
12158 
12159     IF p_page_set_id IS NOT NULL THEN
12160       SELECT suppress_refresh_flag INTO l_page_set_suppress_flag FROM CZ_UI_PAGE_SETS
12161       WHERE ui_def_id=g_UI_Context.ui_def_id AND page_set_id=p_page_set_id;
12162     END IF;
12163 
12164     BEGIN
12165       SELECT page_ref_type, node_depth
12166         INTO l_page_ref_type, l_node_depth
12167         FROM CZ_UI_PAGE_REFS
12168        WHERE ui_def_id=g_UI_Context.ui_def_id AND
12169              page_ref_id=p_page_ref_id AND
12170              deleted_flag=G_NO_FLAG;
12171 
12172       -- get new parent page ref id
12173       BEGIN
12174         SELECT MIN(page_ref_id)
12175           INTO x_new_parent_page_ref_id
12176           FROM CZ_UI_PAGE_REFS
12177          WHERE ui_def_id=g_UI_Context.ui_def_id AND
12178                target_persistent_node_id=p_node.parent_persistent_node_id AND
12179                deleted_flag=G_NO_FLAG;
12180 
12181         SELECT node_depth
12182           INTO l_new_parent_node_depth
12183           FROM CZ_UI_PAGE_REFS
12184          WHERE ui_def_id=g_UI_Context.ui_def_id AND
12185                page_ref_id=x_new_parent_page_ref_id;
12186 
12187       EXCEPTION
12188         WHEN NO_DATA_FOUND THEN
12189           NULL;
12190       END;
12191 
12192       IF x_new_parent_page_ref_id IS NULL THEN -- parent node does not exists in CZ_UI_PAGE_REFS
12193 
12194         IF l_page_ref_type IN (G_MODEL_TREE_MENU) AND p_node.parent_id IS NOT NULL THEN
12195           --DEBUG('asp: Deleting page_ref 5 ' || p_page_ref_id);
12196           UPDATE CZ_UI_PAGE_REFS
12197              SET deleted_flag=G_YES_FLAG
12198            WHERE ui_def_id=g_UI_Context.ui_def_id AND
12199                  page_ref_id=p_page_ref_id AND
12200                  deleted_flag=G_NO_FLAG;
12201         END IF;
12202 
12203       ELSE
12204 
12205           g_check_boundaries_tbl(g_UI_Context.ui_def_id) := G_YES_FLAG;
12206           --DEBUG('asp: Setting parent_page_ref_id of page ref ' || p_page_ref_id || ' to ' || x_new_parent_page_ref_id);
12207           --DEBUG('asp: Setting seq_nbr of page ref ' || p_page_ref_id || ' to ' || p_node.tree_seq);
12208           UPDATE CZ_UI_PAGE_REFS
12209              SET parent_page_ref_id = x_new_parent_page_ref_id,
12210                  seq_nbr = p_node.tree_seq
12211            WHERE ui_def_id=g_UI_Context.ui_def_id AND
12212                  page_ref_id=p_page_ref_id;
12213 
12214           UPDATE CZ_UI_PAGE_REFS
12215              SET node_depth = node_depth + (l_new_parent_node_depth-l_node_depth) + 1
12216            WHERE (ui_def_id,page_ref_id) IN
12217                 (SELECT ui_def_id,page_ref_id FROM CZ_UI_PAGE_REFS
12218                  START WITH ui_def_id=g_UI_Context.ui_def_id AND page_ref_id=p_page_ref_id
12219                  CONNECT BY PRIOR page_ref_id=parent_page_ref_id AND
12220                  ui_def_id=g_UI_Context.ui_def_id AND PRIOR ui_def_id=g_UI_Context.ui_def_id AND
12221                  deleted_flag=G_NO_FLAG AND PRIOR deleted_flag=G_NO_FLAG);
12222 
12223       END IF;
12224 
12225     EXCEPTION
12226       WHEN OTHERS THEN
12227         NULL;
12228     END;
12229 
12230   END move_page_ref;
12231 
12232 
12233   PROCEDURE move_page_ref(p_ui_node                IN CZ_UI_PAGE_ELEMENTS%ROWTYPE,
12234                           p_node                   IN CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE,
12235                           x_new_parent_page_ref_id OUT NOCOPY CZ_UI_PAGE_REFS.page_ref_id%TYPE) IS
12236 
12237     l_page_set_id            CZ_UI_PAGE_REFS.page_set_id%TYPE;
12238     l_page_ref_id            CZ_UI_PAGE_REFS.page_ref_id%TYPE;
12239 
12240   BEGIN
12241 
12242     BEGIN
12243 
12244       SELECT page_set_id INTO l_page_set_id FROM CZ_UI_PAGES
12245        WHERE page_id=p_ui_node.page_id AND ui_def_id=g_UI_Context.ui_def_id;
12246 
12247       SELECT page_ref_id, parent_page_ref_id
12248         INTO l_page_ref_id, x_new_parent_page_ref_id
12249         FROM CZ_UI_PAGE_REFS
12250        WHERE ui_def_id=g_UI_Context.ui_def_id AND
12251              page_set_id = l_page_set_id AND
12252              target_page_id = p_ui_node.page_id AND
12253              deleted_flag=G_NO_FLAG AND
12254              rownum < 2;
12255 
12256       IF p_node.parent_persistent_node_id <> p_ui_node.parent_persistent_node_id THEN
12257         move_page_ref(l_page_set_id, l_page_ref_id, p_node, x_new_parent_page_ref_id);
12258       END IF;
12259     EXCEPTION
12260       WHEN NO_DATA_FOUND THEN
12261         NULL;
12262     END;
12263   END move_page_ref;
12264 
12265   --
12266   -- change instantiability of Page
12267   --
12268   PROCEDURE check_Page_Changes(p_ui_node        IN CZ_UI_PAGE_ELEMENTS%ROWTYPE,
12269                                p_node           IN CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE) IS
12270 
12271     l_changed_pages_tbl      number_tbl_type;
12272     l_persistent_node_id_tbl number_tbl_type;
12273     l_ps_node_id_tb          number_tbl_type;
12274     l_component_id_tbl       number_tbl_type;
12275     l_ps_node_type_tbl       number_tbl_type;
12276     l_page_set_id            CZ_UI_PAGE_REFS.page_set_id%TYPE;
12277     l_parent_ref_persist_id  CZ_UI_PAGE_REFS.target_persistent_node_id%TYPE;
12278     l_new_parent_page_ref_id CZ_UI_PAGE_REFS.page_ref_id%TYPE;
12279     l_curr_target_path       CZ_UI_PAGE_REFS.target_path%TYPE;
12280     l_page_set_suppress_flag CZ_UI_PAGE_SETS.suppress_refresh_flag%TYPE;
12281     l_mark_flag              CZ_UI_PAGE_ELEMENTS.deleted_flag%TYPE;
12282     l_ui_node_name           CZ_UI_PAGE_ELEMENTS.name%TYPE;
12283 
12284   BEGIN
12285 
12286     SELECT page_set_id INTO l_page_set_id FROM CZ_UI_PAGES
12287     WHERE page_id=p_ui_node.page_id AND ui_def_id=g_UI_Context.ui_def_id;
12288 
12289     IF l_page_set_id IS NOT NULL THEN
12290       SELECT suppress_refresh_flag INTO l_page_set_suppress_flag FROM CZ_UI_PAGE_SETS
12291       WHERE ui_def_id=g_UI_Context.ui_def_id AND page_set_id=l_page_set_id;
12292     END IF;
12293 
12294     move_page_ref(p_ui_node, p_node, l_new_parent_page_ref_id);
12295 
12296     IF p_node.parent_persistent_node_id<>p_ui_node.parent_persistent_node_id AND
12297        p_ui_node.instantiable_flag=p_node.instantiable_flag AND
12298        p_ui_node.instantiable_flag IN(G_OPTIONAL_INST_TYPE,G_MINMAX_INST_TYPE,G_MANDATORY_INST_TYPE) THEN
12299 
12300      FOR i IN(SELECT page_id,element_id,parent_element_id,suppress_refresh_flag FROM CZ_UI_PAGE_ELEMENTS
12301               WHERE ui_def_id=p_ui_node.ui_def_id AND
12302                     persistent_node_id=p_ui_node.parent_persistent_node_id AND
12303                             ((region_persistent_node_id=persistent_node_id OR
12304                                    pagebase_persistent_node_id=persistent_node_id) AND
12305                                    ctrl_template_id IN( G_CONTAINER_TEMPLATE_ID
12306                                                         ,G_NSTD_CONTAINER_TEMPLATE_ID
12307                                                         ,G_2COLS_CONTAINER_TEMPLATE_ID
12308                                                         ,G_3COLS_CONTAINER_TEMPLATE_ID)) AND
12309                                    deleted_flag NOT IN(G_YES_FLAG,G_MARK_TO_DELETE))
12310     LOOP
12311       IF i.suppress_refresh_flag=G_YES_FLAG THEN
12312         UPDATE CZ_UI_PAGE_ELEMENTS
12313            SET deleted_flag=G_MARK_TO_DEASSOCIATE,
12314                persistent_node_id=0
12315          WHERE ui_def_id=p_ui_node.ui_def_id AND
12316                page_id=i.page_id AND
12317                persistent_node_id=p_ui_node.persistent_node_id AND
12318                element_type IN(G_UI_NONBOMADDINST_NODE_TYPE,
12319                                G_UI_BOMADDINST_NODE_TYPE,
12320                                G_UI_PAGEDRILLDOWN_NODE_TYPE);
12321       ELSE
12322         UPDATE CZ_UI_PAGE_ELEMENTS
12323            SET deleted_flag=G_MARK_TO_DELETE
12324          WHERE ui_def_id=p_ui_node.ui_def_id AND
12325                page_id=i.page_id AND
12326                persistent_node_id=p_ui_node.persistent_node_id AND
12327                element_type IN(G_UI_NONBOMADDINST_NODE_TYPE,
12328                                G_UI_BOMADDINST_NODE_TYPE,
12329                                G_UI_PAGEDRILLDOWN_NODE_TYPE);
12330       END IF;
12331 
12332       mark_UI_Page_As_Refreshed(i.page_id, p_ui_node.ui_def_id);
12333 
12334     END LOOP;
12335 
12336       FOR parent_ui_node IN(SELECT * FROM CZ_UI_PAGE_ELEMENTS
12337                             WHERE ui_def_id=g_UI_Context.ui_def_id AND
12338                                   persistent_node_id=p_node.parent_persistent_node_id AND
12339                                   ((region_persistent_node_id=persistent_node_id OR
12340                                    pagebase_persistent_node_id=persistent_node_id) AND
12341                                    ctrl_template_id IN( G_CONTAINER_TEMPLATE_ID
12342                                                         ,G_NSTD_CONTAINER_TEMPLATE_ID
12343                                                         ,G_2COLS_CONTAINER_TEMPLATE_ID
12344                                                         ,G_3COLS_CONTAINER_TEMPLATE_ID)) AND
12345                                    deleted_flag NOT IN(G_YES_FLAG,G_MARK_TO_DELETE))
12346       LOOP
12347         IF NVL(parent_ui_node.suppress_refresh_flag, G_NO_FLAG) = G_NO_FLAG THEN
12348           IF p_ui_node.instantiable_flag IN(G_OPTIONAL_INST_TYPE,G_MINMAX_INST_TYPE) THEN
12349             --
12350             -- add new Instance Management COntrol to the parent UI Page
12351             --
12352             add_Instance_Controls(p_ui_node          => p_ui_node,
12353                                   p_parent_ui_node   => parent_ui_node,
12354                                   p_node             => p_node);
12355           ELSE -- MANDATORY
12356             IF l_new_parent_page_ref_id IS NULL THEN
12357               create_Drilldown_Button(p_parent_ui_node => parent_ui_node,
12358                                       p_ui_node        => p_ui_node,
12359                                       p_page_set_id    => l_page_set_id);
12360             END IF;
12361           END IF;
12362         END IF;
12363       END LOOP;
12364 
12365     END IF; -- end of IF p_node.parent_persistent_node_id<> ...
12366 
12367     --
12368     -- (n,m)/(0,1) => (1,1)
12369     --
12370     IF p_ui_node.instantiable_flag IN(G_OPTIONAL_INST_TYPE,G_MINMAX_INST_TYPE) AND
12371        p_node.instantiable_flag=G_MANDATORY_INST_TYPE THEN
12372 
12373       g_check_boundaries_tbl(g_UI_Context.ui_def_id) := G_YES_FLAG;
12374 
12375       --
12376       -- remove all Instance Management Controls with a given
12377       -- persistent_node_id = p_ui_node.persistent_node_id
12378       --
12379       remove_Instance_Controls(p_ui_node);
12380 
12381       IF g_UI_Context.PRIMARY_NAVIGATION IN(G_SINGLE_PAGE,G_SUBTABS) OR
12382         l_new_parent_page_ref_id IS NULL  THEN
12383 
12384         FOR parent_ui_node IN(SELECT * FROM CZ_UI_PAGE_ELEMENTS
12385                               WHERE ui_def_id=g_UI_Context.ui_def_id AND
12386                                   persistent_node_id=p_node.parent_persistent_node_id AND
12387                                   (region_persistent_node_id=persistent_node_id OR
12388                                    pagebase_persistent_node_id=persistent_node_id) AND
12389                                    ctrl_template_id IN( G_CONTAINER_TEMPLATE_ID
12390                                                         ,G_NSTD_CONTAINER_TEMPLATE_ID
12391                                                         ,G_2COLS_CONTAINER_TEMPLATE_ID
12392                                                         ,G_3COLS_CONTAINER_TEMPLATE_ID) AND
12393                                    deleted_flag NOT IN(G_YES_FLAG,G_MARK_TO_DELETE))
12394         LOOP
12395           IF NVL(parent_ui_node.suppress_refresh_flag, G_NO_FLAG) = G_NO_FLAG THEN
12396             create_Drilldown_Button(p_parent_ui_node => parent_ui_node,
12397                                     p_ui_node        => p_ui_node,
12398                                     p_page_set_id    => l_page_set_id);
12399           END IF;
12400         END LOOP;
12401 
12402       END IF;
12403 
12404       --
12405       -- if navigation style is not Dynamic Tree Menu then
12406       -- merge parent and child Page Flows
12407       --
12408       IF g_UI_Context.PRIMARY_NAVIGATION<>G_MODEL_TREE_MENU AND l_page_set_id IS NOT NULL AND
12409          NVL(l_page_set_suppress_flag,G_NO_FLAG)=G_NO_FLAG THEN
12410         merge_Page_Flows(p_ui_node);
12411       END IF;
12412 
12413     END IF;
12414 
12415     IF  p_ui_node.instantiable_flag IN(G_OPTIONAL_INST_TYPE,G_MINMAX_INST_TYPE) AND
12416        p_node.instantiable_flag IN(G_OPTIONAL_INST_TYPE,G_MINMAX_INST_TYPE) AND
12417        p_ui_node.instantiable_flag <> p_node.instantiable_flag THEN
12418 
12419       g_check_boundaries_tbl(g_UI_Context.ui_def_id) := G_YES_FLAG;
12420 
12421       --
12422       -- synchronize CZ_UI_PAGE_ELEMENTS.instantiable_flag with
12423       -- CZ_PS_NODES.instantiable_flag
12424       --
12425       FOR n IN(SELECT ui_def_id,page_id,element_id FROM CZ_UI_PAGE_ELEMENTS a
12426                 WHERE ui_def_id=p_ui_node.ui_def_id AND
12427                       persistent_node_id=p_ui_node.persistent_node_id AND
12428                       element_type IN(G_UI_NONBOMADDINST_NODE_TYPE,G_UI_BOMADDINST_NODE_TYPE) AND
12429                       deleted_flag=G_NO_FLAG AND NVL(suppress_refresh_flag,G_NO_FLAG)=G_NO_FLAG AND
12430                       EXISTS(SELECT NULL FROM CZ_UI_PAGE_ELEMENTS
12431                               WHERE ui_def_id=p_ui_node.ui_def_id AND
12432                                     page_id=a.page_id AND
12433                                     element_id=a.parent_element_id AND
12434                                     NVL(suppress_refresh_flag,G_NO_FLAG)=G_NO_FLAG)
12435                )
12436      LOOP
12437 
12438       l_ui_node_name := get_UI_Node_Name(p_page_id       => n.page_id,
12439                                          p_template_id   => p_node.template_id,
12440                                          p_template_name => p_node.template_name);
12441 
12442       UPDATE CZ_UI_PAGE_ELEMENTS a
12443       SET ctrl_template_id =  p_node.template_id,
12444           ctrl_template_ui_def_id = p_node.template_ui_def_id,
12445           instantiable_flag = p_node.instantiable_flag,
12446           name=l_ui_node_name,
12447           deleted_flag=G_MARK_TO_REFRESH
12448       WHERE ui_def_id=n.ui_def_id AND
12449             page_id=n.page_id AND
12450             element_id=n.element_id;
12451 
12452        IF SQL%ROWCOUNT > 0 THEN
12453          l_changed_pages_tbl(l_changed_pages_tbl.COUNT+1) := n.page_id;
12454        END IF;
12455      END LOOP;
12456 
12457      IF l_changed_pages_tbl.COUNT>0 THEN
12458          FOR i IN l_changed_pages_tbl.First..l_changed_pages_tbl.Last
12459          LOOP
12460            mark_UI_Page_As_Refreshed(l_changed_pages_tbl(i), g_UI_Context.ui_def_id);
12461          END LOOP;
12462       END IF;
12463 
12464       FOR parent_ui_node IN(SELECT * FROM CZ_UI_PAGE_ELEMENTS a
12465                               WHERE ui_def_id=g_UI_Context.ui_def_id AND
12466                                   persistent_node_id=p_node.parent_persistent_node_id AND
12467                                   (region_persistent_node_id=persistent_node_id OR
12468                                    pagebase_persistent_node_id=persistent_node_id) AND
12469                                    deleted_flag NOT IN(G_YES_FLAG,G_MARK_TO_DELETE) AND
12470                                    NVL(suppress_refresh_flag,G_NO_FLAG)=G_NO_FLAG AND
12471                                    ctrl_template_id IN( G_CONTAINER_TEMPLATE_ID
12472                                                         ,G_NSTD_CONTAINER_TEMPLATE_ID
12473                                                         ,G_2COLS_CONTAINER_TEMPLATE_ID
12474                                                         ,G_3COLS_CONTAINER_TEMPLATE_ID) AND
12475                                    NOT EXISTS(SELECT NULL FROM CZ_UI_PAGE_ELEMENTS b
12476                                                WHERE b.ui_def_id=g_UI_Context.ui_def_id AND
12477                                                      b.page_id=a.page_id AND
12478                                                      b.region_persistent_node_id=a.region_persistent_node_id AND
12479                                                      b.persistent_node_id=p_ui_node.persistent_node_id AND
12480                                                      b.element_type IN(G_UI_NONBOMADDINST_NODE_TYPE,G_UI_BOMADDINST_NODE_TYPE) AND
12481                                                      b.deleted_flag NOT IN(G_MARK_TO_DELETE,G_YES_FLAG))
12482                            )
12483       LOOP
12484         --
12485         -- add new Instance Management Control to the parent UI Page
12486         --
12487         add_Instance_Controls(p_ui_node          => p_ui_node,
12488                               p_parent_ui_node   => parent_ui_node,
12489                               p_node             => p_node);
12490       END LOOP;
12491 
12492     END IF;
12493 
12494     IF p_node.instantiable_flag IN(G_OPTIONAL_INST_TYPE,G_MINMAX_INST_TYPE) AND
12495        p_ui_node.instantiable_flag=G_MANDATORY_INST_TYPE THEN
12496 
12497       g_check_boundaries_tbl(g_UI_Context.ui_def_id) := G_YES_FLAG;
12498 
12499       FOR parent_ui_node IN(SELECT * FROM CZ_UI_PAGE_ELEMENTS
12500                             WHERE ui_def_id=g_UI_Context.ui_def_id AND
12501                                   persistent_node_id=p_node.parent_persistent_node_id AND
12502                                   ((region_persistent_node_id=persistent_node_id OR
12503                                    pagebase_persistent_node_id=persistent_node_id) AND
12504                                    ctrl_template_id IN( G_CONTAINER_TEMPLATE_ID
12505                                                         ,G_NSTD_CONTAINER_TEMPLATE_ID
12506                                                         ,G_2COLS_CONTAINER_TEMPLATE_ID
12507                                                         ,G_3COLS_CONTAINER_TEMPLATE_ID)) AND
12508                                    deleted_flag NOT IN(G_YES_FLAG,G_MARK_TO_DELETE))
12509       LOOP
12510         IF NVL(parent_ui_node.suppress_refresh_flag, G_NO_FLAG) = G_NO_FLAG THEN
12511           --
12512           -- add new Instance Management COntrol to the parent UI Page
12513           --
12514           add_Instance_Controls(p_ui_node          => p_ui_node,
12515                                 p_parent_ui_node   => parent_ui_node,
12516                                 p_node             => p_node);
12517         END IF;
12518       END LOOP;
12519 
12520       IF g_UI_Context.PRIMARY_NAVIGATION NOT IN(G_MODEL_TREE_MENU) AND l_page_set_id IS NOT NULL AND
12521          NVL(l_page_set_suppress_flag,G_NO_FLAG)=G_NO_FLAG THEN
12522          split_Page_Flow(p_ui_node);
12523       END IF;
12524 
12525     END IF;
12526 
12527     --
12528     -- synchronize CZ_UI_PAGE_ELEMENTS.instantiable_flag with
12529     -- CZ_PS_NODES.instantiable_flag
12530     --
12531     UPDATE CZ_UI_PAGE_ELEMENTS
12532        SET instantiable_flag = p_node.instantiable_flag,
12533            parent_persistent_node_id=p_node.parent_persistent_node_id
12534      WHERE ui_def_id = p_ui_node.ui_def_id AND
12535            persistent_node_id = p_ui_node.persistent_node_id AND
12536            page_Id = p_ui_node.page_id;  --vsingava IM-ER
12537 
12538 
12539      replace_page_ref_target_path(p_ui_node, p_node);
12540 
12541   END check_Page_Changes;
12542 
12543   --
12544   -- change instantiability of Page
12545   --
12546   PROCEDURE check_Reference_Changes(p_ui_node        IN CZ_UI_PAGE_ELEMENTS%ROWTYPE,
12547                                     p_node           IN CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE) IS
12548       l_refresh_ui_page    BOOLEAN:=FALSE;
12549       l_persistent_node_id NUMBER;
12550       l_max_seq_nbr        NUMBER;
12551       l_ps_node_type       NUMBER;
12552       l_ps_node            CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE;
12553       l_target_path        CZ_UI_PAGE_REFS.target_path%TYPE;
12554       l_ui_node_name       CZ_UI_PAGE_ELEMENTS.name%TYPE;
12555       l_template_id        NUMBER;
12556       l_template_ui_def_id NUMBER;
12557 
12558   BEGIN
12559 
12560    IF p_ui_node.instantiable_flag IN(G_OPTIONAL_INST_TYPE,G_MINMAX_INST_TYPE) AND
12561       p_node.instantiable_flag=G_MANDATORY_INST_TYPE THEN
12562 
12563        --jonatara:bug6439536
12564        g_check_boundaries_tbl(g_UI_Context.ui_def_id) := G_YES_FLAG;
12565 
12566        l_template_id := p_node.template_id;
12567        l_template_ui_def_id := p_node.template_ui_def_id;
12568 
12569        BEGIN
12570 
12571          SELECT ps_node_type INTO l_ps_node_type
12572            FROM CZ_PS_NODES
12573           WHERE devl_project_id=p_node.reference_id AND
12574                 parent_id IS NULL AND
12575                 deleted_flag=G_NO_FLAG;
12576 
12577          FOR i IN(SELECT persistent_node_id FROM CZ_UI_PAGE_ELEMENTS
12578                    WHERE ui_def_id=p_ui_node.ui_def_id
12579                          AND parent_element_id=p_ui_node.parent_element_id
12580                          AND persistent_node_id<>p_ui_node.persistent_node_id AND
12581                          deleted_flag IN(G_NO_FLAG,G_MARK_TO_REFRESH,G_MARK_TO_ADD))
12582          LOOP
12583            l_ps_node := get_Model_Node_By_Persist_Id(i.persistent_node_id,g_UI_COntext.devl_project_id);
12584 
12585            IF l_ps_node_type IN(G_BOM_MODEL_TYPE,G_BOM_OPTION_CLASS_TYPE) AND
12586               (l_ps_node.ps_node_type IN(G_BOM_MODEL_TYPE,G_BOM_OPTION_CLASS_TYPE) OR
12587               l_ps_node.detailed_type_id in(CZ_TYPES.UOPTIONAL_BOM_REF_TYPEID,CZ_TYPES.UMINMAX_BOM_REF_TYPEID)) THEN
12588               l_template_id := NULL;
12589               l_template_ui_def_id := NULL;
12590               EXIT;
12591            END IF;
12592 
12593          END LOOP;
12594 
12595        EXCEPTION
12596          WHEN OTHERS THEN
12597            DEBUG('check_Reference_Changes() : '||SQLERRM);
12598        END;
12599 
12600       l_ui_node_name := get_UI_Node_Name(p_page_id       => p_ui_node.page_id,
12601                                         p_template_id   => l_template_id,
12602                                         p_template_name => p_node.template_name);
12603 
12604       UPDATE CZ_UI_PAGE_ELEMENTS
12605       SET ctrl_template_id = l_template_id,
12606           ctrl_template_ui_def_id = l_template_ui_def_id,
12607           element_type = G_UI_DRILLDOWN_NODE_TYPE,
12608           instantiable_flag = p_node.instantiable_flag,
12609           name=l_ui_node_name,
12610           deleted_flag=G_MARK_TO_REFRESH
12611       WHERE ui_def_id=p_ui_node.ui_def_id AND
12612             persistent_node_id=p_ui_node.persistent_node_id AND
12613             element_type IN(G_UI_NONBOMADDINST_NODE_TYPE,G_UI_BOMADDINST_NODE_TYPE) AND
12614             deleted_flag=G_NO_FLAG AND
12615             NVL(suppress_refresh_flag,G_NO_FLAG)=G_NO_FLAG;
12616 
12617       l_refresh_ui_page := TRUE;
12618 
12619    END IF;
12620 
12621    IF  p_ui_node.instantiable_flag IN(G_OPTIONAL_INST_TYPE,G_MINMAX_INST_TYPE) AND
12622        p_node.instantiable_flag IN(G_OPTIONAL_INST_TYPE,G_MINMAX_INST_TYPE) AND
12623        p_ui_node.instantiable_flag <> p_node.instantiable_flag THEN
12624 
12625        --jonatara:bug6439536
12626        g_check_boundaries_tbl(g_UI_Context.ui_def_id) := G_YES_FLAG;
12627 
12628       l_ui_node_name := get_UI_Node_Name(p_page_id       => p_ui_node.page_id,
12629                                          p_template_id   => l_template_id,
12630                                          p_template_name => p_node.template_name);
12631 
12632       --
12633       -- synchronize UI template with actual detailed node type
12634       --
12635       UPDATE CZ_UI_PAGE_ELEMENTS
12636       SET ctrl_template_id = p_node.template_id,
12637           ctrl_template_ui_def_id = p_node.template_ui_def_id,
12638           instantiable_flag = p_node.instantiable_flag,
12639           name=l_ui_node_name,
12640           deleted_flag=G_MARK_TO_REFRESH
12641       WHERE ui_def_id=p_ui_node.ui_def_id AND
12642             persistent_node_id=p_ui_node.persistent_node_id AND
12643             element_type IN(G_UI_NONBOMADDINST_NODE_TYPE,G_UI_BOMADDINST_NODE_TYPE) AND
12644             deleted_flag=G_NO_FLAG AND
12645             NVL(suppress_refresh_flag,G_NO_FLAG)=G_NO_FLAG;
12646 
12647      IF SQL%ROWCOUNT>0 THEN
12648        l_refresh_ui_page := TRUE;
12649      END IF;
12650 
12651    END IF;
12652 
12653    IF p_node.instantiable_flag IN(G_OPTIONAL_INST_TYPE,G_MINMAX_INST_TYPE) AND
12654       p_ui_node.instantiable_flag=G_MANDATORY_INST_TYPE THEN
12655 
12656        --jonatara:bug6439536
12657        g_check_boundaries_tbl(g_UI_Context.ui_def_id) := G_YES_FLAG;
12658 
12659       l_ui_node_name := get_UI_Node_Name(p_page_id       => p_ui_node.page_id,
12660                                          p_template_id   => l_template_id,
12661                                          p_template_name => p_node.template_name);
12662 
12663       --
12664       -- synchronize UI template with actual detailed node type
12665       --
12666       UPDATE CZ_UI_PAGE_ELEMENTS
12667       SET ctrl_template_id = p_node.template_id,
12668           ctrl_template_ui_def_id = p_node.template_ui_def_id,
12669           instantiable_flag = p_node.instantiable_flag,
12670           element_type = G_UI_NONBOMADDINST_NODE_TYPE,
12671           name=l_ui_node_name,
12672           deleted_flag=DECODE(NVL(ctrl_template_id,-1),-1,G_MARK_TO_ADD,G_MARK_TO_REFRESH)
12673       WHERE ui_def_id=p_ui_node.ui_def_id AND
12674             page_id=p_ui_node.page_id AND
12675             element_id=p_ui_node.element_id AND
12676             NVL(suppress_refresh_flag,G_NO_FLAG)=G_NO_FLAG;
12677       IF SQL%ROWCOUNT>0 THEN
12678         l_refresh_ui_page := TRUE;
12679       END IF;
12680    END IF;
12681 
12682    IF l_refresh_ui_page THEN
12683      UPDATE CZ_UI_PAGES
12684         SET deleted_flag=G_MARK_TO_REFRESH,
12685             page_rev_nbr = page_rev_nbr + 1
12686       WHERE ui_def_id=p_ui_node.ui_def_id AND
12687             page_id=p_ui_node.page_id;
12688    END IF;
12689 
12690    UPDATE CZ_UI_PAGE_ELEMENTS
12691       SET instantiable_flag = p_node.instantiable_flag
12692     WHERE ui_def_id = p_ui_node.ui_def_id AND
12693           persistent_node_id = p_ui_node.persistent_node_id AND
12694           instantiable_flag <> p_node.instantiable_flag;
12695 
12696     FOR i IN(SELECT page_set_id
12697                FROM CZ_UI_PAGE_REFS
12698               WHERE ui_def_id=g_UI_Context.ui_def_id AND
12699                     target_persistent_node_id=p_ui_node.persistent_node_id AND
12700                     deleted_flag=G_NO_FLAG)
12701     LOOP
12702       l_target_path := get_Page_Path(p_node.ps_node_id, i.page_set_id);
12703       UPDATE CZ_UI_PAGE_REFS
12704          SET target_path=l_target_path
12705        WHERE ui_def_id=g_UI_Context.ui_def_id AND
12706              target_persistent_node_id=p_ui_node.persistent_node_id AND
12707              deleted_flag=G_NO_FLAG AND
12708               target_path<>l_target_path;
12709     END LOOP;
12710 
12711   END check_Reference_Changes;
12712 
12713 
12714   PROCEDURE check_Connector_Changes(p_ui_node        IN CZ_UI_PAGE_ELEMENTS%ROWTYPE,
12715                                     p_node           IN CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE) IS
12716       l_refresh_ui_page    BOOLEAN:=FALSE;
12717       l_persistent_node_id NUMBER;
12718       l_max_seq_nbr        NUMBER;
12719       l_ps_node_type       NUMBER;
12720       l_ps_node            CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE;
12721       l_target_path        CZ_UI_PAGE_REFS.target_path%TYPE;
12722       l_ui_node_name       CZ_UI_PAGE_ELEMENTS.name%TYPE;
12723       l_instantiable_flag  CZ_UI_PAGE_ELEMENTS.instantiable_flag%TYPE;
12724       l_template_id        NUMBER;
12725       l_template_ui_def_id NUMBER;
12726 
12727   BEGIN
12728 
12729    IF NVL(p_ui_node.instantiable_flag, '*') <> NVL(p_node.instantiable_flag, '*') THEN
12730 
12731       l_template_id := p_node.template_id;
12732       l_template_ui_def_id := p_node.template_ui_def_id;
12733 
12734       l_ui_node_name := get_UI_Node_Name(p_page_id       => p_ui_node.page_id,
12735                                          p_template_id   => l_template_id,
12736                                          p_template_name => p_node.template_name);
12737 
12738       IF (p_node.maximum=1 AND p_node.minimum=1) THEN
12739         l_instantiable_flag := G_MANDATORY_INST_TYPE;
12740       ELSIF (p_node.maximum=1 AND p_node.minimum=0) THEN
12741         l_instantiable_flag := G_OPTIONAL_INST_TYPE;
12742       ELSE
12743         l_instantiable_flag := G_MINMAX_INST_TYPE;
12744       END IF;
12745 
12746       UPDATE CZ_UI_PAGE_ELEMENTS
12747       SET ctrl_template_id = l_template_id,
12748           ctrl_template_ui_def_id = l_template_ui_def_id,
12749           instantiable_flag = l_instantiable_flag,
12750           name=l_ui_node_name,
12751           deleted_flag=G_MARK_TO_REFRESH
12752       WHERE ui_def_id=p_ui_node.ui_def_id AND
12753             persistent_node_id=p_ui_node.persistent_node_id AND
12754             deleted_flag=G_NO_FLAG AND
12755             NVL(suppress_refresh_flag,G_NO_FLAG)=G_NO_FLAG;
12756 
12757       IF SQL%ROWCOUNT > 0 THEN
12758         UPDATE CZ_UI_PAGES
12759            SET deleted_flag=G_MARK_TO_REFRESH,
12760               page_rev_nbr = page_rev_nbr + 1
12761          WHERE ui_def_id=p_ui_node.ui_def_id AND
12762                page_id=p_ui_node.page_id;
12763       END IF;
12764 
12765    END IF;
12766 
12767   END check_Connector_Changes;
12768 
12769   --
12770   -- change instantiability of UI region
12771   --
12772   PROCEDURE check_Region_Changes(p_ui_node      IN CZ_UI_PAGE_ELEMENTS%ROWTYPE,
12773                                  p_node         IN CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE) IS
12774 
12775     l_page_ui_node                CZ_UI_PAGE_ELEMENTS%ROWTYPE;
12776     l_page_set_id                 CZ_UI_PAGE_SETS.page_set_id%TYPE;
12777     l_page_ref_id                 CZ_UI_PAGE_REFS.page_ref_id%TYPE;
12778     l_page_set_type               CZ_UI_PAGE_SETS.page_set_type%TYPE;
12779 
12780   BEGIN
12781 
12782    IF (p_node.instantiable_flag IN(G_OPTIONAL_INST_TYPE,G_MINMAX_INST_TYPE)
12783        OR p_node.virtual_flag=G_NO_FLAG) AND
12784       p_ui_node.instantiable_flag=G_MANDATORY_INST_TYPE
12785       AND NVL(p_ui_node.suppress_refresh_flag,G_NO_FLAG)=G_NO_FLAG THEN
12786 
12787       g_check_boundaries_tbl(g_UI_Context.ui_def_id) := G_YES_FLAG;
12788 
12789       l_page_ui_node := create_UI_Page(p_node           => p_node,
12790                                        x_page_set_id    => l_page_set_id,
12791                                        x_page_set_type  => l_page_set_type,
12792                                        x_page_ref_id    => l_page_ref_id,
12793                                        p_parent_page_id => p_ui_node.page_id);
12794 
12795       UPDATE CZ_UI_PAGE_ELEMENTS
12796          SET deleted_flag=G_MARK_TO_DELETE
12797        WHERE ui_def_id=p_ui_node.ui_def_id AND
12798              page_id=p_ui_node.page_id AND
12799              element_id=p_ui_node.element_id;
12800 
12801       UPDATE CZ_UI_PAGE_ELEMENTS
12802          SET page_id = l_page_ui_node.page_id,
12803              pagebase_persistent_node_id = l_page_ui_node.persistent_node_id,
12804              deleted_flag=G_MARK_TO_ADD
12805        WHERE (ui_def_id,page_id,element_id) IN
12806              (SELECT ui_def_id,page_id,element_id FROM
12807               CZ_UI_PAGE_ELEMENTS
12808               START WITH ui_def_id=p_ui_node.ui_def_id AND
12809                          page_id=p_ui_node.page_id AND
12810                          element_id=p_ui_node.element_id
12811               CONNECT BY
12812                          PRIOR ui_def_id=p_ui_node.ui_def_id AND
12813                          PRIOR page_id=p_ui_node.page_id AND
12814                          PRIOR element_id=parent_element_id AND
12815                          PRIOR deleted_flag <> G_YES_FLAG AND
12816                          ui_def_id=p_ui_node.ui_def_id AND
12817                          page_id=p_ui_node.page_id AND
12818                          deleted_flag <> G_YES_FLAG)
12819               AND element_id <> p_ui_node.element_id;
12820 
12821       UPDATE CZ_UI_PAGE_ELEMENTS
12822          SET parent_element_id=l_page_ui_node.element_id
12823        WHERE ui_def_id=p_ui_node.ui_def_id AND
12824              page_id=l_page_ui_node.page_id AND
12825              parent_element_id=p_ui_node.element_id;
12826 
12827    --vsingava IM-ER
12828    ELSIF (p_node.instantiable_flag = G_MANDATORY_INST_TYPE AND p_ui_node.instantiable_flag IN (G_OPTIONAL_INST_TYPE,G_MINMAX_INST_TYPE)
12829           AND NVL(p_ui_node.suppress_refresh_flag,G_NO_FLAG)=G_NO_FLAG) THEN
12830 
12831      -- We have an element that is not an Instance Management Table but bound to a previously Instantiable Component
12832      -- This element could contain an Instance List Region. So let's refresh it.
12833      -- Mark the page for refresh, we will handle the Instace List while refreshing model_paths
12834      DEBUG('Found region ' || p_ui_node.element_id || ' that is bound to a previously instantiable node');
12835      mark_UI_Page_As_Refreshed(p_ui_node.page_id, p_ui_node.ui_def_id);
12836 
12837    END IF;
12838 
12839   END check_Region_Changes;
12840 
12841   --
12842   -- add new UI node
12843   --
12844   PROCEDURE add_New_UI_Node(p_ui_node               IN CZ_UI_PAGE_ELEMENTS%ROWTYPE,
12845                             p_insert_index          IN NUMBER DEFAULT -1,
12846                             p_model_node            IN CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE,
12847                             p_suppress_refresh_flag IN VARCHAR2,
12848                             x_new_ui_pages_tbl      IN OUT NOCOPY ui_page_elements_tbl_type,
12849                             x_new_ui_node           OUT NOCOPY CZ_UI_PAGE_ELEMENTS%ROWTYPE) IS
12850 
12851     l_old_page_id   NUMBER;
12852     l_page_set_id   NUMBER;
12853     l_page_set_type NUMBER;
12854     l_page_ref_id   NUMBER;
12855     l_drilldown     BOOLEAN;
12856 
12857   BEGIN
12858 
12859     IF p_model_node.ui_omit=G_YES_FLAG THEN
12860       RETURN;
12861     END IF;
12862 
12863     -- it must be a new UI page
12864     IF p_model_node.ps_node_type IN(G_PRODUCT_TYPE,G_COMPONENT_TYPE,
12865       G_BOM_MODEL_TYPE,G_BOM_OPTION_CLASS_TYPE) AND
12866            is_UI_Page(p_node     => p_model_node,
12867                       x_drilldown => l_drilldown) THEN
12868 
12869             BEGIN
12870               SELECT page_id INTO l_old_page_id FROM CZ_UI_PAGES
12871               WHERE ui_def_id=g_UI_Context.ui_def_id AND
12872                     persistent_node_id=p_model_node.persistent_node_id AND
12873                     deleted_flag IN(G_NO_FLAG, G_MARK_TO_ADD, G_MARK_TO_REFRESH) AND
12874                     rownum<2;
12875             EXCEPTION
12876               WHEN OTHERS THEN
12877                 -- create new UI page
12878                 x_new_ui_node := create_UI_Page(p_node            => p_model_node,
12879                                                  x_page_set_id     => l_page_set_id,
12880                                                  x_page_set_type   => l_page_set_type,
12881                                                  x_page_ref_id     => l_page_ref_id,
12882                                                  p_parent_page_id  => p_ui_node.page_id);
12883 
12884                x_new_ui_pages_tbl(x_new_ui_pages_tbl.COUNT+1) := x_new_ui_node;
12885             END;
12886 
12887        -- it must be UI Region
12888        ELSIF  p_model_node.ps_node_type IN(G_PRODUCT_TYPE,G_COMPONENT_TYPE,
12889              G_BOM_MODEL_TYPE,G_BOM_OPTION_CLASS_TYPE) AND NVL(p_suppress_refresh_flag,G_NO_FLAG)=G_NO_FLAG THEN
12890           x_new_ui_node := create_UI_Region(p_node              => p_model_node,
12891                                             p_parent_ui_node    => p_ui_node,
12892                                             p_insert_index      => p_insert_index);
12893           --
12894           -- it must be UI Reference
12895           --
12896         ELSIF p_model_node.ps_node_type = G_REFERENCE_TYPE AND NVL(p_suppress_refresh_flag,G_NO_FLAG)=G_NO_FLAG THEN
12897           x_new_ui_node := create_UI_Reference(p_node              => p_model_node,
12898                                                p_parent_ui_node    => p_ui_node);
12899           --
12900           -- other UI elements
12901           --
12902         ELSE
12903           IF p_model_node.ps_node_type NOT IN (G_OPTION_TYPE,G_BOM_STANDART_ITEM_TYPE) AND
12904              NVL(p_suppress_refresh_flag,G_NO_FLAG)=G_NO_FLAG THEN
12905             x_new_ui_node := create_UI_Element(p_node              => p_model_node,
12906                                                p_parent_ui_node    => p_ui_node,
12907                                                p_insert_index      => p_insert_index);
12908           END IF;
12909         END IF; -- end of IF is_UI_Page()
12910 
12911   END;
12912 
12913   --
12914   -- check UI Node changes
12915   --
12916   PROCEDURE check_UI_Node_Changes(p_ui_node    IN CZ_UI_PAGE_ELEMENTS%ROWTYPE,
12917                                   p_model_node IN CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE) IS
12918 
12919     l_ui_layout_ui_style          CZ_UI_TEMPLATES.layout_ui_style%TYPE;
12920     l_model_layout_ui_style       CZ_UI_TEMPLATES.layout_ui_style%TYPE;
12921     l_feature_element_id          CZ_UI_PAGE_ELEMENTS.element_id%TYPE;
12922     l_under_root_ui_node          CZ_UI_PAGE_ELEMENTS%ROWTYPE;
12923     l_max_seq_nbr                 NUMBER;
12924 
12925     CURSOR l_ui_bom_tab_cur IS
12926       SELECT * FROM CZ_UI_PAGE_ELEMENTS
12927        WHERE ui_def_id=p_ui_node.ui_def_id AND
12928              parent_element_id=p_ui_node.element_id AND
12929              persistent_node_id=p_model_node.persistent_node_id AND
12930              element_type=G_UI_BOMADDINST_NODE_TYPE AND
12931              deleted_flag NOT IN(G_YES_FLAG);
12932 
12933   BEGIN
12934      --
12935      -- refresh expl ids in UI tables
12936      --
12937      sync_Expl_Ids(p_model_node,p_ui_node);
12938 
12939      IF p_model_node.ps_node_type in(G_BOM_MODEL_TYPE,G_BOM_OPTION_CLASS_TYPE) AND
12940             p_ui_node.element_type IN(G_UI_PAGE_NODE_TYPE,G_UI_BOMADDINST_NODE_TYPE) AND
12941         NVL(p_ui_node.suppress_refresh_flag,G_NO_FLAG)=G_NO_FLAG THEN
12942 
12943               IF p_ui_node.element_type IN(G_UI_PAGE_NODE_TYPE) THEN
12944                 --
12945                 -- check for BOM control associated with the same model node
12946                 -- as UI page
12947                 --
12948                 BEGIN
12949                   OPEN l_ui_bom_tab_cur;
12950 
12951                   LOOP
12952                     FETCH l_ui_bom_tab_cur INTO l_under_root_ui_node;
12953                     EXIT WHEN l_ui_bom_tab_cur%NOTFOUND;
12954 
12955                     IF l_under_root_ui_node.deleted_flag <> G_LIMBO_FLAG AND
12956                        l_under_root_ui_node.ctrl_template_id IS NOT NULL AND
12957                        l_under_root_ui_node.ctrl_template_id <> p_model_node.template_id AND
12958                        NVL(l_under_root_ui_node.suppress_refresh_flag, G_NO_FLAG)=G_NO_FLAG THEN
12959 
12960                        replace_Template_Id(p_ui_node     => l_under_root_ui_node,
12961                                            p_model_node  => p_model_node);
12962                     END IF;
12963 
12964                   END LOOP;
12965 
12966                   IF l_ui_bom_tab_cur%ROWCOUNT=0 THEN
12967                     add_BOM_Node(p_node                        => p_model_node,
12968                                  p_page_id                     => p_ui_node.page_id,
12969                                  p_pagebase_expl_node_id       => p_ui_node.model_ref_expl_id,
12970                                  p_parent_element_id           => p_ui_node.element_id,
12971                                  p_pagebase_persistent_node_id => p_ui_node.pagebase_persistent_node_id);
12972                   END IF;
12973 
12974                   CLOSE l_ui_bom_tab_cur;
12975 
12976                 END;
12977 
12978               ELSE -- else for IF p_ui_node.element_type IN(G_UI_PAGE_NODE_TYPE) THEN
12979 
12980                 IF p_ui_node.ctrl_template_id <> p_model_node.template_id THEN
12981                    replace_Template_Id(p_ui_node     => p_ui_node,
12982                                        p_model_node  => p_model_node);
12983                 END IF;
12984 
12985               END IF;
12986 
12987     END IF;
12988 
12989     IF p_ui_node.pagebase_persistent_node_id=p_ui_node.persistent_node_id THEN
12990 
12991             --
12992             -- check changes of this UI page
12993             --
12994             check_Page_Changes(p_ui_node        => p_ui_node,
12995                                p_node           => p_model_node);
12996 
12997     ELSIF p_ui_node.pagebase_persistent_node_id<>p_ui_node.persistent_node_id AND
12998           p_ui_node.region_persistent_node_id=p_ui_node.persistent_node_id AND
12999           NVL(p_ui_node.suppress_refresh_flag,G_NO_FLAG)=G_NO_FLAG THEN
13000 
13001             --
13002             -- check changes of this reference
13003             --
13004             check_Region_Changes(p_ui_node        => p_ui_node,
13005                                  p_node           => p_model_node);
13006 
13007     ELSIF p_model_node.ps_node_type=G_REFERENCE_TYPE AND
13008                p_model_node.persistent_node_id=p_ui_node.persistent_node_id THEN
13009 
13010             --
13011             -- check changes of this reference
13012             --
13013             check_Reference_Changes(p_ui_node        => p_ui_node,
13014                                     p_node           => p_model_node);
13015 
13016     ELSIF p_model_node.ps_node_type=G_CONNECTOR_TYPE AND
13017                p_model_node.persistent_node_id=p_ui_node.persistent_node_id THEN
13018 
13019             --
13020             -- check changes of this reference
13021             --
13022             check_Connector_Changes(p_ui_node        => p_ui_node,
13023                                     p_node           => p_model_node);
13024 
13025     ELSIF p_model_node.ps_node_type=G_FEATURE_TYPE AND
13026                p_model_node.feature_type=0 AND
13027                p_model_node.template_id <> p_ui_node.ctrl_template_id AND
13028                (g_using_new_UI_refresh OR p_model_node.detailed_type_id<>p_ui_node.element_type) AND
13029                p_model_node.template_id IS NOT NULL AND
13030                p_ui_node.ctrl_template_id IS NOT NULL AND
13031                NVL(p_ui_node.suppress_refresh_flag,G_NO_FLAG)=G_NO_FLAG THEN
13032 
13033        BEGIN
13034 
13035          IF g_using_new_UI_refresh THEN
13036            replace_Template_Id(p_ui_node          => p_ui_node,
13037                                    p_model_node       => p_model_node);
13038          ELSE
13039            SELECT layout_ui_style INTO l_ui_layout_ui_style
13040                  FROM CZ_UI_TEMPLATES
13041                  WHERE template_id=p_ui_node.ctrl_template_id AND
13042                        ui_def_id=p_ui_node.ctrl_template_ui_def_id;
13043 
13044                  SELECT layout_ui_style INTO l_model_layout_ui_style
13045                  FROM CZ_UI_TEMPLATES
13046                  WHERE template_id=p_model_node.template_id AND
13047                        ui_def_id=p_model_node.template_ui_def_id;
13048 
13049                  IF l_ui_layout_ui_style=l_model_layout_ui_style  THEN
13050                    --
13051                    -- replace Feature template
13052                    --
13053                    replace_Template_Id(p_ui_node          => p_ui_node,
13054                                        p_model_node       => p_model_node);
13055                  ELSE
13056 
13057                    BEGIN
13058                      SELECT NVL(MAX(seq_nbr),0)+1 INTO l_max_seq_nbr FROM CZ_UI_PAGE_ELEMENTS
13059                      WHERE ui_def_id=g_UI_Context.ui_def_id AND
13060                            page_id=p_ui_node.page_id AND
13061                            parent_element_id IS NOT NULL AND
13062                            (ctrl_template_id,ctrl_template_ui_def_id) IN
13063                            (SELECT ctrl_template_id,ctrl_template_ui_def_id FROM
13064                             CZ_UI_TEMPLATES WHERE deleted_flag=G_NO_FLAG AND
13065                             layout_ui_style=l_ui_layout_ui_style);
13066                    EXCEPTION
13067                      WHEN OTHERS THEN
13068                        l_max_seq_nbr := 1;
13069                    END;
13070 
13071                    IF l_max_seq_nbr = 1 THEN
13072 
13073                      --
13074                      -- replace Feature template
13075                      --
13076                      replace_Template_Id(p_ui_node          => p_ui_node,
13077                                          p_model_node       => p_model_node);
13078 
13079                    ELSE
13080 
13081                      UPDATE CZ_UI_PAGE_ELEMENTS
13082                         SET deleted_flag=G_MARK_TO_DELETE
13083                       WHERE ui_def_id=g_UI_Context.ui_def_id AND
13084                             page_id=p_ui_node.page_id AND
13085                             element_id=p_ui_node.element_id;
13086 
13087                      UPDATE CZ_UI_PAGES
13088                         SET deleted_flag=G_MARK_TO_REFRESH,
13089                             page_rev_nbr=page_rev_nbr+1
13090                       WHERE page_id=p_ui_node.page_id AND
13091                             ui_def_id=g_UI_Context.ui_def_id;
13092 
13093                       l_feature_element_id := get_Element_Id();
13094 
13095                       INSERT INTO CZ_UI_PAGE_ELEMENTS
13096                       (
13097                      UI_DEF_ID
13098                      ,PAGE_ID
13099                      ,PERSISTENT_NODE_ID
13100                      ,ELEMENT_ID
13101                      ,PARENT_PERSISTENT_NODE_ID
13102                      ,REGION_PERSISTENT_NODE_ID
13103                      ,PAGEBASE_PERSISTENT_NODE_ID
13104                      ,CTRL_TEMPLATE_ID
13105                      ,BASE_PAGE_FLAG
13106                      ,INSTANTIABLE_FLAG
13107                      ,SEQ_NBR
13108                      ,DELETED_FLAG
13109                      ,CTRL_TEMPLATE_UI_DEF_ID
13110                      ,MODEL_REF_EXPL_ID
13111                      ,PARENT_ELEMENT_ID
13112                      ,ELEMENT_TYPE
13113                      ,NAME
13114                      ,ELEMENT_SIGNATURE_ID
13115                      ,SUPPRESS_REFRESH_FLAG
13116                       )
13117                       SELECT
13118                      UI_DEF_ID
13119                      ,PAGE_ID
13120                      ,PERSISTENT_NODE_ID
13121                      ,l_feature_element_id
13122                      ,PARENT_PERSISTENT_NODE_ID
13123                      ,REGION_PERSISTENT_NODE_ID
13124                      ,PAGEBASE_PERSISTENT_NODE_ID
13125                      ,p_model_node.template_id
13126                      ,BASE_PAGE_FLAG
13127                      ,INSTANTIABLE_FLAG
13128                      ,l_max_seq_nbr
13129                      ,G_MARK_TO_ADD
13130                      ,p_model_node.template_ui_def_id
13131                      ,MODEL_REF_EXPL_ID
13132                      ,PARENT_ELEMENT_ID
13133                      ,ELEMENT_TYPE
13134                      ,NAME
13135                      ,ELEMENT_SIGNATURE_ID
13136                      ,SUPPRESS_REFRESH_FLAG
13137                       FROM CZ_UI_PAGE_ELEMENTS
13138                       WHERE ui_def_id=g_UI_Context.ui_def_id AND
13139                             page_id=p_ui_node.page_id AND
13140                             element_id=p_ui_node.element_id;
13141 
13142                       UPDATE CZ_UI_PAGE_ELEMENTS
13143                          SET parent_element_id=l_feature_element_id
13144                        WHERE ui_def_id=g_UI_Context.ui_def_id AND
13145                              page_id=p_ui_node.page_id AND
13146                              parent_element_id=p_ui_node.element_id;
13147 
13148                    END IF; -- end of IF l_max_seq_nbr = 1
13149                 END IF;  -- end of IF l_ui_layout_ui_style=l_model_layout_ui_style
13150               END IF;
13151             END;
13152 
13153     ELSE  --vsingava IM-ER
13154       IF (p_model_node.instantiable_flag = G_MANDATORY_INST_TYPE AND p_ui_node.instantiable_flag IN (G_OPTIONAL_INST_TYPE,G_MINMAX_INST_TYPE)
13155           AND NVL(p_ui_node.suppress_refresh_flag,G_NO_FLAG)=G_NO_FLAG) THEN
13156 
13157          -- We have an element that is not an Instance Management Table but bound to a previously Instantiable Component
13158          -- This element could contain an Instance List Region. So let's refresh it.
13159          -- Mark the page for refresh, we will handle the Instace List while refreshing model_paths
13160          mark_UI_Page_As_Refreshed(p_ui_node.page_id, p_ui_node.ui_def_id);
13161       END IF;
13162 
13163     END IF;  -- end of IF p_ui_node.pagebase_persistent_node_id...
13164 
13165     --
13166     -- add a new CX to an existing UI node
13167     -- if there is such CX
13168     --
13169     IF get_CX_Button_Status(p_ui_node)=G_CX_VALID THEN
13170 
13171       add_CX_Button(p_node     => p_model_node,
13172                     p_ui_node  => p_ui_node);
13173     END IF;
13174 
13175   END check_UI_Node_Changes;
13176 
13177   --
13178   -- create new split UI Page
13179   --
13180   FUNCTION clone_UI_Page(p_page_id  IN NUMBER)
13181     RETURN CZ_UI_PAGE_ELEMENTS%ROWTYPE IS
13182 
13183     l_element_id              CZ_UI_PAGE_ELEMENTS.element_id%TYPE;
13184     l_ui_node                 CZ_UI_PAGE_ELEMENTS%ROWTYPE;
13185     l_split_seq_nbr           CZ_UI_PAGES.split_seq_nbr%TYPE;
13186     l_page_id                 CZ_UI_PAGES.page_id%TYPE;
13187     l_page_ref_id             CZ_UI_PAGE_REFS.page_ref_id%TYPE;
13188     l_seq_nbr                 CZ_UI_PAGE_REFS.seq_nbr%TYPE;
13189     l_caption_text_id         NUMBER;
13190     l_caption                 CZ_INTL_TEXTS.text_str%TYPE;
13191 
13192   BEGIN
13193 
13194     --
13195     -- get num of this page in this UI
13196     --
13197    l_split_seq_nbr := get_Last_Split_Page_Nbr(p_page_id) + 1;
13198 
13199 
13200    l_caption := G_UMPERS||G_CAPTION_RULE_TOKENNAME||' ('||TO_CHAR(l_split_seq_nbr)||')';
13201 
13202    l_caption_text_id := allocateId('CZ_INTL_TEXTS_S');
13203 
13204    l_element_id := get_Element_Id();
13205    l_page_id := allocateId('CZ_UI_PAGES_S');
13206 
13207    INSERT INTO CZ_INTL_TEXTS
13208    (
13209    INTL_TEXT_ID
13210    ,TEXT_STR
13211    ,DELETED_FLAG
13212    ,SEEDED_FLAG
13213    ,UI_DEF_ID
13214    ,MODEL_ID
13215    ,UI_PAGE_ID
13216    ,UI_PAGE_ELEMENT_ID
13217     )
13218    VALUES
13219    (
13220    l_caption_text_id
13221    ,l_caption
13222    ,G_NO_FLAG
13223    ,G_NO_FLAG
13224    ,g_UI_Context.ui_def_id
13225    ,g_UI_Context.devl_project_id
13226    ,l_page_id
13227    ,NULL
13228     );
13229 
13230    INSERT INTO CZ_UI_PAGES
13231       (page_id,
13232        ui_def_id,
13233        NAME,
13234        persistent_node_id,
13235        jrad_doc,
13236        page_set_id,
13237        split_seq_nbr,
13238        caption_source,
13239        caption_text_id,
13240        PERSISTENT_CAPTION_TEXT_ID,
13241        pagebase_path,
13242        pagebase_expl_node_id,
13243        page_rev_nbr,
13244        seeded_flag,
13245        DESC_TEXT,
13246        PAGE_STATUS_TEMPLATE_ID,
13247        PAGE_STATUS_TEMPL_UIDEF_ID,
13248        CAPTION_RULE_ID,
13249        OUTER_TEMPLATE_USAGE,
13250        OUTER_PAGE_TEMPLATE_ID,
13251        OUTER_PAGE_TEMPL_UIDEF_ID,
13252        DISPLAY_CONDITION_ID,
13253        DISPLAY_CONDITION_COMP,
13254        DISPLAY_CONDITION_VALUE,
13255        ENABLED_CONDITION_ID,
13256        ENABLED_CONDITION_COMP,
13257        ENABLED_CONDITION_VALUE,
13258        EMPTY_PAGE_FLAG,
13259        SUPPRESS_REFRESH_FLAG,
13260        deleted_flag)
13261    SELECT
13262        l_page_id,
13263        ui_def_id,
13264        name||' ('||TO_CHAR(l_split_seq_nbr)||')',
13265        persistent_node_id,
13266        jrad_doc||'_'||TO_CHAR(l_split_seq_nbr),
13267        page_set_id,
13268        l_split_seq_nbr,
13269        caption_source,
13270        l_caption_text_id,
13271        l_caption_text_id,
13272        pagebase_path,
13273        pagebase_expl_node_id,
13274        1,
13275        seeded_flag,
13276        DESC_TEXT,
13277        PAGE_STATUS_TEMPLATE_ID,
13278        PAGE_STATUS_TEMPL_UIDEF_ID,
13279        CAPTION_RULE_ID,
13280        OUTER_TEMPLATE_USAGE,
13281        OUTER_PAGE_TEMPLATE_ID,
13282        OUTER_PAGE_TEMPL_UIDEF_ID,
13283        DISPLAY_CONDITION_ID,
13284        DISPLAY_CONDITION_COMP,
13285        DISPLAY_CONDITION_VALUE,
13286        ENABLED_CONDITION_ID,
13287        ENABLED_CONDITION_COMP,
13288        ENABLED_CONDITION_VALUE,
13289        EMPTY_PAGE_FLAG,
13290        SUPPRESS_REFRESH_FLAG,
13291        G_MARK_TO_ADD
13292    FROM CZ_UI_PAGES
13293    WHERE ui_def_id=g_UI_Context.ui_def_id AND
13294          page_id=p_page_id;
13295 
13296     SELECT * INTO l_ui_node
13297     FROM CZ_UI_PAGE_ELEMENTS
13298     WHERE ui_def_id=g_UI_Context.ui_def_id AND
13299           page_id=p_page_id AND
13300           parent_element_id IS NULL AND
13301           deleted_flag IN(G_NO_FLAG,G_MARK_TO_ADD,G_MARK_TO_REFRESH);
13302 
13303     l_ui_node.element_id   := l_element_id;
13304     l_ui_node.page_id      := l_page_id;
13305     l_ui_node.name         := l_ui_node.name||' - '||l_element_id;
13306     l_ui_node.deleted_flag := G_MARK_TO_ADD;
13307 
13308     INSERT INTO CZ_UI_PAGE_ELEMENTS
13309       (ui_def_id,
13310        persistent_node_id,
13311        parent_persistent_node_id,
13312        region_persistent_node_id,
13313        pagebase_persistent_node_id,
13314        page_id,
13315        seq_nbr,
13316        ctrl_template_id,
13317        element_id,
13318        parent_element_id,
13319        element_type,
13320        instantiable_flag,
13321        ctrl_template_ui_def_id,
13322        model_ref_expl_id,
13323        base_page_flag,
13324        element_signature_id,
13325        name,
13326        deleted_flag)
13327    VALUES
13328        (l_ui_node.ui_def_id,
13329        l_ui_node.persistent_node_id,
13330        l_ui_node.parent_persistent_node_id,
13331        l_ui_node.region_persistent_node_id,
13332        l_ui_node.pagebase_persistent_node_id,
13333        l_ui_node.page_id,
13334        l_ui_node.seq_nbr,
13335        l_ui_node.ctrl_template_id,
13336        l_ui_node.element_id,
13337        l_ui_node.parent_element_id,
13338        l_ui_node.element_type,
13339        l_ui_node.instantiable_flag,
13340        l_ui_node.ctrl_template_ui_def_id,
13341        l_ui_node.model_ref_expl_id,
13342        l_ui_node.base_page_flag,
13343        l_ui_node.element_signature_id,
13344        l_ui_node.name,
13345        l_ui_node.deleted_flag);
13346 
13347     SELECT NVL(MAX(seq_nbr),0) INTO l_seq_nbr
13348     FROM CZ_UI_PAGE_REFS
13349     WHERE ui_def_id=g_UI_Context.ui_def_id AND
13350           target_persistent_node_id=l_ui_node.persistent_node_id AND
13351           deleted_flag=G_NO_FLAG;
13352 
13353     UPDATE CZ_UI_PAGE_REFS
13354        SET seq_nbr=seq_nbr+1
13355      WHERE ui_def_id=g_UI_Context.ui_def_id AND
13356            parent_page_ref_id = (SELECT parent_page_ref_id
13357                                  FROM CZ_UI_PAGE_REFS
13358                                  WHERE ui_def_id=g_UI_Context.ui_def_id AND
13359                                        target_page_id=p_page_id AND
13360                                        deleted_flag=G_NO_FLAG) AND
13361            seq_nbr > l_seq_nbr AND
13362            deleted_flag=G_NO_FLAG;
13363 
13364     l_seq_nbr := l_seq_nbr + 1;
13365 
13366     l_page_ref_id := allocateId('CZ_UI_PAGE_REFS_S');
13367     INSERT INTO CZ_UI_PAGE_REFS
13368       (ui_def_id,
13369        page_set_id,
13370        page_ref_id,
13371        parent_page_ref_id,
13372        seq_nbr,
13373        node_depth,
13374        condition_id,
13375        NAME,
13376        caption_source,
13377        caption_text_id,
13378        target_persistent_node_id,
13379        target_path,
13380        target_ui_def_id,
13381        target_page_set_id,
13382        target_page_id,
13383        modified_flags,
13384        path_to_prev_page,
13385        path_to_next_page,
13386        page_ref_type,
13387        target_expl_node_id,
13388        deleted_flag)
13389     SELECT
13390        ui_def_id,
13391        page_set_id,
13392        l_page_ref_id,
13393        parent_page_ref_id,
13394        l_seq_nbr,
13395        node_depth,
13396        condition_id,
13397        NAME||' ('||TO_CHAR(l_split_seq_nbr)||')',
13398        caption_source,
13399        l_caption_text_id,
13400        target_persistent_node_id,
13401        target_path,
13402        target_ui_def_id,
13403        target_page_set_id,
13404        l_page_id,
13405        modified_flags,
13406        NULL,
13407        path_to_next_page,
13408        page_ref_type,
13409        target_expl_node_id,
13410        deleted_flag
13411     FROM CZ_UI_PAGE_REFS
13412     WHERE ui_def_id=g_UI_Context.ui_def_id AND
13413           target_page_id=p_page_id AND
13414           deleted_flag=G_NO_FLAG;
13415 
13416     RETURN l_ui_node;
13417 
13418   END clone_UI_Page;
13419 
13420   PROCEDURE collect_UI_Elements
13421   (p_ui_page_node            IN CZ_UI_PAGE_ELEMENTS%ROWTYPE,
13422    p_max_controls_per_page   IN NUMBER,
13423    x_new_pages_tbl           OUT NOCOPY number_tbl_type,
13424    x_elements_tbl            OUT NOCOPY ui_page_elements_tbl_type,
13425    x_new_parent_elements_tbl OUT NOCOPY varchar_tbl_type) IS
13426 
13427     l_ui_page_node         CZ_UI_PAGE_ELEMENTS%ROWTYPE;
13428     l_counter              NUMBER:=0;
13429 
13430   BEGIN
13431 
13432     l_ui_page_node := p_ui_page_node;
13433 
13434     FOR k IN(SELECT page_id,TO_NUMBER(element_id) AS element_id,
13435              TO_NUMBER(parent_element_id) AS parent_element_id,seq_nbr
13436              FROM CZ_UI_PAGE_ELEMENTS
13437              WHERE ui_def_id = p_ui_page_node.ui_def_id AND
13438                    page_id = p_ui_page_node.page_id AND
13439                    parent_element_id IS NOT NULL AND
13440                    element_type <> G_UI_REGION_NODE_TYPE AND
13441                    ctrl_template_id IS NOT NULL
13442                    AND deleted_flag IN(G_MARK_TO_ADD,G_MARK_DO_NOT_REFRESH)
13443           ORDER BY  seq_nbr)
13444     LOOP
13445       --
13446       -- increase counter of nodes on the page ( initial l_counter must be 0 )
13447       --
13448       l_counter:=l_counter+1;
13449       --
13450       -- compare previous page and page created in this loop
13451       --
13452       IF (l_counter > p_max_controls_per_page) THEN
13453         l_ui_page_node := clone_UI_Page(k.page_id);
13454         l_counter := 1;
13455         x_new_pages_tbl(l_ui_page_node.page_id) := l_ui_page_node.pagebase_persistent_node_id;
13456       END IF;
13457 
13458       IF l_ui_page_node.page_id <> p_ui_page_node.page_id THEN
13459         x_elements_tbl(k.element_id) := l_ui_page_node;
13460         IF k.parent_element_id = p_ui_page_node.element_id THEN
13461           x_new_parent_elements_tbl(k.element_id) := l_ui_page_node.element_id;
13462         END IF;
13463       END IF;
13464 
13465     END LOOP;
13466 
13467   END collect_UI_Elements;
13468 
13469   PROCEDURE handle_Direct_Child_Nodes
13470   (p_ui_page_node        IN CZ_UI_PAGE_ELEMENTS%ROWTYPE,
13471    p_elements_tbl        IN OUT NOCOPY ui_page_elements_tbl_type,
13472    p_parent_elements_tbl IN OUT NOCOPY varchar_tbl_type) IS
13473 
13474     l_current_element_id NUMBER;
13475 
13476   BEGIN
13477 
13478     l_current_element_id := p_elements_tbl.First;
13479     LOOP
13480       IF l_current_element_id IS NULL THEN
13481         EXIT;
13482       END IF;
13483 
13484       UPDATE CZ_UI_PAGE_ELEMENTS
13485          SET page_id = p_elements_tbl(l_current_element_id).page_id
13486        WHERE ui_def_id =  p_ui_page_node.ui_def_id AND
13487              page_id = p_ui_page_node.page_id AND
13488              element_id = TO_CHAR(l_current_element_id);
13489 
13490       IF p_parent_elements_tbl.EXISTS(l_current_element_id) THEN
13491         UPDATE CZ_UI_PAGE_ELEMENTS
13492            SET parent_element_id = p_parent_elements_tbl(l_current_element_id)
13493          WHERE ui_def_id =  p_ui_page_node.ui_def_id AND
13494                page_id = p_ui_page_node.page_id AND
13495                element_id = TO_CHAR(l_current_element_id);
13496       END IF;
13497 
13498       UPDATE CZ_UI_ACTIONS
13499          SET source_page_id=p_elements_tbl(l_current_element_id).page_id
13500        WHERE ui_def_id=p_ui_page_node.ui_def_id AND
13501              source_page_id= p_ui_page_node.page_id AND
13502              element_id=TO_CHAR(l_current_element_id);
13503 
13504       l_current_element_id := p_elements_tbl.NEXT(l_current_element_id);
13505     END LOOP;
13506 
13507     l_current_element_id := p_elements_tbl.First;
13508     LOOP
13509       IF l_current_element_id IS NULL THEN
13510         EXIT;
13511       END IF;
13512 
13513       IF p_parent_elements_tbl.EXISTS(l_current_element_id) THEN
13514         UPDATE CZ_UI_PAGE_ELEMENTS
13515            SET parent_element_id = p_parent_elements_tbl(l_current_element_id)
13516          WHERE ui_def_id =  p_ui_page_node.ui_def_id AND
13517                page_id = p_elements_tbl(l_current_element_id).page_id  AND
13518                element_id = TO_CHAR(l_current_element_id);
13519       END IF;
13520 
13521       l_current_element_id := p_elements_tbl.NEXT(l_current_element_id);
13522     END LOOP;
13523 
13524   END handle_Direct_Child_Nodes;
13525 
13526   PROCEDURE collect_Old_Nodes
13527   (
13528   p_ui_def_id                IN NUMBER,
13529   p_new_page_id              IN NUMBER,
13530   x_nested_page_elements_tbl OUT NOCOPY varchar_tbl_type) IS
13531 
13532   BEGIN
13533 
13534     FOR i IN(SELECT DISTINCT parent_element_id FROM CZ_UI_PAGE_ELEMENTS a
13535              WHERE ui_def_id =  p_ui_def_id AND
13536                    page_id = p_new_page_id AND
13537                    parent_element_id IS NOT NULL AND
13538                NOT EXISTS(SELECT NULL FROM CZ_UI_PAGE_ELEMENTS
13539                WHERE  ui_def_id =  p_ui_def_id AND
13540                       page_id = p_new_page_id AND
13541                       element_id=a.parent_element_id))
13542       LOOP
13543         x_nested_page_elements_tbl(x_nested_page_elements_tbl.COUNT+1) := i.parent_element_id;
13544       END LOOP;
13545 
13546   END collect_Old_Nodes;
13547 
13548   PROCEDURE collect_New_Nested_Regions
13549   (p_ui_def_id        IN NUMBER,
13550    p_page_id          IN NUMBER,
13551    p_element_id       IN VARCHAR2,
13552    px_rgn_new_elements_tbl IN OUT NOCOPY varchar_tbl_type,
13553    px_rgn_parent_elements_tbl IN OUT NOCOPY varchar_tbl_type) IS
13554 
13555     l_new_element_id   VARCHAR2(255);
13556     l_num_element_id   NUMBER;
13557 
13558   BEGIN
13559 
13560     FOR i IN(SELECT element_id,parent_element_id,element_type FROM CZ_UI_PAGE_ELEMENTS
13561              START WITH ui_def_id =  p_ui_def_id AND
13562                         page_id= p_page_id AND
13563                         element_id=p_element_id
13564              CONNECT BY PRIOR  ui_def_id =  p_ui_def_id AND
13565                                ui_def_id =  p_ui_def_id AND
13566                      PRIOR page_id= p_page_id AND page_id= p_page_id AND
13567                      PRIOR parent_element_id=element_id)
13568     LOOP
13569       l_num_element_id := TO_NUMBER(i.element_id);
13570       IF i.parent_element_id IS NOT NULL AND i.element_type=G_UI_REGION_NODE_TYPE AND
13571         NOT(px_rgn_new_elements_tbl.EXISTS(l_num_element_id)) THEN
13572         l_new_element_id := get_Element_Id();
13573         px_rgn_new_elements_tbl(l_num_element_id) := l_new_element_id;
13574         px_rgn_parent_elements_tbl(l_num_element_id) := i.parent_element_id;
13575       END IF;
13576     END LOOP;
13577 
13578   END collect_New_Nested_Regions;
13579 
13580 
13581   PROCEDURE reconstruct_Nested_Regions
13582   (
13583   p_ui_def_id     IN NUMBER,
13584   p_page_id       IN NUMBER,
13585   p_new_pages_tbl IN number_tbl_type
13586   ) IS
13587 
13588     l_nested_rgn_elements_tbl  varchar_tbl_type;
13589     l_rgn_subtree_tbl          varchar_tbl_type;
13590     l_parent_elements_tbl      varchar_tbl_type;
13591     l_new_page_id              NUMBER;
13592     l_new_element_id           VARCHAR2(255);
13593     l_new_parent_element_id    VARCHAR2(255);
13594     l_old_element_id           NUMBER;
13595     l_page_root_element_id     VARCHAR2(255);
13596 
13597   BEGIN
13598 
13599     l_new_page_id := p_new_pages_tbl.First;
13600     LOOP
13601       IF l_new_page_id IS NULL THEN
13602         EXIT;
13603       END IF;
13604 
13605       l_nested_rgn_elements_tbl.DELETE;
13606 
13607       SELECT element_id INTO l_page_root_element_id FROM CZ_UI_PAGE_ELEMENTS
13608       WHERE ui_def_id=p_ui_def_id AND
13609             page_id=l_new_page_id AND
13610             parent_element_id IS NULL AND
13611             deleted_flag NOT IN(G_YES_FLAG, G_MARK_TO_DELETE);
13612 
13613       collect_Old_Nodes(p_ui_def_id                => p_ui_def_id,
13614                         p_new_page_id              => l_new_page_id,
13615                         x_nested_page_elements_tbl => l_nested_rgn_elements_tbl);
13616 
13617       IF l_nested_rgn_elements_tbl.COUNT > 0 THEN
13618 
13619         FOR i IN l_nested_rgn_elements_tbl.First..l_nested_rgn_elements_tbl.Last
13620         LOOP
13621           collect_New_Nested_Regions(p_ui_def_id             => p_ui_def_id,
13622                                      p_page_id               => p_page_id,
13623                                      p_element_id            => l_nested_rgn_elements_tbl(i),
13624                                      px_rgn_new_elements_tbl => l_rgn_subtree_tbl,
13625                                      px_rgn_parent_elements_tbl => l_parent_elements_tbl );
13626         END LOOP;
13627 
13628       END IF;
13629 
13630       IF l_rgn_subtree_tbl.COUNT > 0 THEN
13631 
13632         l_old_element_id := l_rgn_subtree_tbl.First;
13633         LOOP
13634           IF l_old_element_id IS NULL THEN
13635             EXIT;
13636           END IF;
13637 
13638           l_new_element_id := l_rgn_subtree_tbl(l_old_element_id);
13639           IF l_rgn_subtree_tbl.EXISTS(TO_NUMBER(l_parent_elements_tbl(l_old_element_id))) THEN
13640             l_new_parent_element_id := l_rgn_subtree_tbl(TO_NUMBER(l_parent_elements_tbl(l_old_element_id)));
13641           ELSE
13642             l_new_parent_element_id := l_page_root_element_id;
13643           END IF;
13644           INSERT INTO CZ_UI_PAGE_ELEMENTS
13645              (UI_DEF_ID
13646              ,PAGE_ID
13647              ,PERSISTENT_NODE_ID
13648              ,ELEMENT_ID
13649              ,PARENT_ELEMENT_ID
13650              ,PARENT_PERSISTENT_NODE_ID
13651              ,REGION_PERSISTENT_NODE_ID
13652              ,PAGEBASE_PERSISTENT_NODE_ID
13653              ,CTRL_TEMPLATE_ID
13654              ,BASE_PAGE_FLAG
13655              ,INSTANTIABLE_FLAG
13656              ,SEQ_NBR
13657              ,DELETED_FLAG
13658              ,CTRL_TEMPLATE_UI_DEF_ID
13659              ,MODEL_REF_EXPL_ID
13660              ,ELEMENT_TYPE
13661              ,NAME
13662              ,ELEMENT_SIGNATURE_ID
13663              ,SUPPRESS_REFRESH_FLAG)
13664            SELECT
13665               UI_DEF_ID
13666              ,l_new_page_id
13667              ,PERSISTENT_NODE_ID
13668              ,l_new_element_id
13669              ,l_new_parent_element_id
13670              ,PARENT_PERSISTENT_NODE_ID
13671              ,REGION_PERSISTENT_NODE_ID
13672              ,pagebase_persistent_node_id
13673              ,CTRL_TEMPLATE_ID
13674              ,BASE_PAGE_FLAG
13675              ,INSTANTIABLE_FLAG
13676              ,SEQ_NBR
13677              ,DELETED_FLAG
13678              ,CTRL_TEMPLATE_UI_DEF_ID
13679              ,MODEL_REF_EXPL_ID
13680              ,ELEMENT_TYPE
13681              ,NAME
13682              ,ELEMENT_SIGNATURE_ID
13683              ,SUPPRESS_REFRESH_FLAG
13684            FROM CZ_UI_PAGE_ELEMENTS
13685            WHERE ui_def_id=p_ui_def_id AND
13686                  page_id=p_page_id AND
13687                  element_id=TO_CHAR(l_old_element_id);
13688 
13689           UPDATE CZ_UI_PAGE_ELEMENTS
13690              SET parent_element_id=l_new_element_id
13691            WHERE ui_def_id=p_ui_def_id AND
13692                  page_id=l_new_page_id AND
13693                  parent_element_id=TO_CHAR(l_old_element_id);
13694 
13695           l_old_element_id := l_rgn_subtree_tbl.NEXT(l_old_element_id);
13696         END LOOP;
13697 
13698       END IF; -- end of  IF l_rgn_subtree_tbl.COUNT > 0 THEN
13699 
13700       l_new_page_id := p_new_pages_tbl.NEXT(l_new_page_id);
13701 
13702     END LOOP; -- end of loop through p_new_pages_tbl
13703 
13704   END reconstruct_Nested_Regions;
13705 
13706   --
13707   -- split a single Page
13708   -- Parameters :
13709   -- p_ui_node - identifies UI node of page
13710   --
13711   PROCEDURE split_Page(p_ui_page_node          IN CZ_UI_PAGE_ELEMENTS%ROWTYPE,
13712                        p_max_controls_per_page IN NUMBER ) IS
13713 
13714     l_elements_tbl              ui_page_elements_tbl_type;
13715     l_new_pages_tbl             number_tbl_type;
13716     l_parent_elements_tbl       varchar_tbl_type;
13717 
13718   BEGIN
13719 
13720     IF p_ui_page_node.suppress_refresh_flag=G_YES_FLAG THEN
13721       RETURN;
13722     END IF;
13723 
13724     SAVEPOINT split_Page_Point;
13725 
13726     collect_UI_Elements(p_ui_page_node            => p_ui_page_node,
13727                         p_max_controls_per_page   => p_max_controls_per_page,
13728                         x_new_pages_tbl           => l_new_pages_tbl,
13729                         x_elements_tbl            => l_elements_tbl,
13730                         x_new_parent_elements_tbl => l_parent_elements_tbl);
13731 
13732     handle_Direct_Child_Nodes(p_ui_page_node        => p_ui_page_node,
13733                               p_elements_tbl        => l_elements_tbl,
13734                               p_parent_elements_tbl => l_parent_elements_tbl);
13735 
13736     reconstruct_Nested_Regions(p_ui_def_id     => p_ui_page_node.ui_def_id,
13737                                p_page_id       => p_ui_page_node.page_id,
13738                                p_new_pages_tbl => l_new_pages_tbl);
13739   EXCEPTION
13740     WHEN OTHERS THEN
13741          ROLLBACK TO split_Page_Point;
13742          DEBUG('split_Page() : fatal error "'||SQLERRM||'"');
13743   END split_Page;
13744 
13745   --
13746   -- split UI pages if they must be split
13747   --
13748   PROCEDURE split_Pages IS
13749 
13750     l_num_if_roots              NUMBER;
13751     l_target_persistent_node_id NUMBER;
13752     l_page_set_id               NUMBER;
13753     l_page_set_type             NUMBER;
13754     l_page_ref_id               NUMBER;
13755     l_max_controls_per_page     NUMBER;
13756 
13757   BEGIN
13758 
13759     IF g_UI_Context.control_layout IN(1,2) THEN
13760       l_max_controls_per_page := g_UI_CONTEXT.PAGIN_MAXCONTROLS*(g_UI_Context.control_layout+1);
13761     ELSE
13762       l_max_controls_per_page := g_UI_CONTEXT.PAGIN_MAXCONTROLS;
13763     END IF;
13764 
13765     --
13766     -- split UI Pages
13767     --
13768     FOR i IN (SELECT *
13769                 FROM CZ_UI_PAGE_ELEMENTS
13770                WHERE ui_def_id = g_UI_Context.ui_def_id AND
13771                      parent_element_id IS NULL AND
13772                      persistent_node_id=pagebase_persistent_node_id AND
13773                      NVL(suppress_refresh_flag, G_NO_FLAG) = G_NO_FLAG AND
13774                      deleted_flag IN (G_MARK_TO_ADD))
13775     LOOP
13776       split_Page(i, l_max_controls_per_page);
13777     END LOOP;
13778 
13779     IF g_UI_Context.PRIMARY_NAVIGATION=G_MODEL_TREE_MENU THEN
13780       SELECT COUNT(*) INTO l_num_if_roots FROM CZ_UI_PAGE_REFS
13781       WHERE ui_def_id=g_UI_Context.ui_def_id AND parent_page_ref_id IS NULL
13782             AND target_persistent_node_id=(SELECT persistent_node_id FROM CZ_PS_NODES
13783             WHERE devl_project_id=g_UI_Context.devl_project_id AND parent_id IS NULL AND
13784             deleted_flag=G_NO_FLAG) AND deleted_flag=G_NO_FLAG;
13785      IF l_num_if_roots > 1 THEN
13786 
13787         SELECT target_persistent_node_id,page_set_id,page_ref_type
13788           INTO l_target_persistent_node_id,l_page_set_id,l_page_set_type
13789           FROM CZ_UI_PAGE_REFS
13790           WHERE ui_def_id=g_UI_Context.ui_def_id AND parent_page_ref_id IS NULL
13791                AND target_persistent_node_id=(SELECT persistent_node_id FROM CZ_PS_NODES
13792                WHERE devl_project_id=g_UI_Context.devl_project_id AND parent_id IS NULL AND
13793                deleted_flag=G_NO_FLAG) AND deleted_flag=G_NO_FLAG AND rownum<2;
13794 
13795         l_page_ref_id := allocateId('CZ_UI_PAGE_REFS_S');
13796 
13797     INSERT INTO CZ_UI_PAGE_REFS
13798       (ui_def_id,
13799        page_set_id,
13800        page_ref_id,
13801        parent_page_ref_id,
13802        seq_nbr,
13803        node_depth,
13804        condition_id,
13805        NAME,
13806        caption_source,
13807        target_persistent_node_id,
13808        target_path,
13809        target_ui_def_id,
13810        target_page_set_id,
13811        target_page_id,
13812        modified_flags,
13813        path_to_prev_page,
13814        path_to_next_page,
13815        page_ref_type,
13816        target_expl_node_id,
13817        caption_rule_id,
13818        deleted_flag)
13819     VALUES
13820       (g_UI_Context.ui_def_id,
13821        l_page_set_id,
13822        l_page_ref_id,
13823        NULL,
13824        0,
13825        0,
13826        NULL,
13827        'Root',
13828        G_DEFAULT_CAPTION_RULE_ID,
13829         l_target_persistent_node_id,
13830        NULL,
13831        NULL,
13832        NULL,
13833        NULL,
13834        0,
13835        NULL,
13836        NULL,
13837        l_page_set_type,
13838        NULL,
13839        NULL,
13840        G_NO_FLAG);
13841 
13842       UPDATE CZ_UI_PAGE_REFS
13843          SET parent_page_ref_id=l_page_ref_id
13844          WHERE ui_def_id=g_UI_Context.ui_def_id AND parent_page_ref_id IS NULL AND
13845             target_persistent_node_id=(SELECT persistent_node_id FROM CZ_PS_NODES
13846             WHERE devl_project_id=g_UI_Context.devl_project_id AND parent_id IS NULL AND
13847             deleted_flag=G_NO_FLAG) AND deleted_flag=G_NO_FLAG;
13848 
13849      END IF;
13850     END IF;
13851 
13852   END split_Pages;
13853 
13854   --
13855   -- reorder UI elements  on UI page in case of Single Page
13856   --
13857   PROCEDURE set_UI_Page_Elements_Order(p_page_id IN NUMBER) IS
13858     l_counter  NUMBER:=0;
13859 
13860     PROCEDURE set_UI_Order_(p_element_id IN VARCHAR2) IS
13861     BEGIN
13862        FOR i IN(SELECT element_id FROM CZ_UI_PAGE_ELEMENTS
13863                 WHERE ui_def_id=g_UI_Context.ui_def_id AND
13864                       page_id=p_page_id AND
13865                       parent_element_id=p_element_id AND
13866                       deleted_flag=G_NO_FLAG ORDER BY seq_nbr)
13867        LOOP
13868           l_counter := l_counter + 1;
13869           UPDATE CZ_UI_PAGE_ELEMENTS
13870              SET seq_nbr = l_counter
13871            WHERE ui_def_id=g_UI_Context.ui_def_id AND
13872                  element_id=i.element_id;
13873            set_UI_Order_(i.element_id);
13874        END LOOP;
13875     END set_UI_Order_;
13876 
13877   BEGIN
13878      FOR i IN(SELECT element_id FROM CZ_UI_PAGE_ELEMENTS
13879               WHERE ui_def_id=g_UI_Context.ui_def_id AND
13880                     page_id=p_page_id AND
13881                     parent_element_id IS NULL AND
13882                     deleted_flag=G_NO_FLAG ORDER BY seq_nbr)
13883      LOOP
13884        set_UI_Order_(i.element_id);
13885      END LOOP;
13886   END set_UI_Page_Elements_Order;
13887 
13888   --
13889   -- set ordering for UI elements on UI pages
13890   --
13891   PROCEDURE handle_UI_Page_Elements_Order IS
13892   BEGIN
13893     FOR i IN(SELECT page_id FROM CZ_UI_PAGES a
13894              WHERE ui_def_id=g_UI_Context.ui_def_id AND
13895                    page_set_id IN
13896                    (SELECT page_set_id FROM CZ_UI_PAGE_SETS
13897                     WHERE ui_def_id=g_UI_Context.ui_def_id AND
13898                           page_set_id=a.page_set_id AND
13899                           page_set_type=G_SINGLE_PAGE AND
13900                           deleted_flag=G_NO_FLAG) AND
13901                     NVL(suppress_refresh_flag, G_NO_FLAG)=G_NO_FLAG AND
13902                    deleted_flag=G_NO_FLAG)
13903     LOOP
13904       set_UI_Page_Elements_Order(i.page_id);
13905     END LOOP;
13906   END handle_UI_Page_Elements_Order;
13907 
13908   --
13909   -- reorder UI elements  on UI page in case of Single Page
13910   --
13911   PROCEDURE handle_Page_Flows IS
13912 
13913     l_xmldoc             xmldom.DOMDocument;
13914     l_counter            NUMBER:=0;
13915     l_seq_nbr            NUMBER;
13916     l_show_train         BOOLEAN := FALSE;
13917     l_target_path        CZ_UI_PAGE_REFS.target_path%TYPE;
13918     l_page_ref_id        NUMBER;
13919 
13920     PROCEDURE set_Page_Flow_(p_page_ref_id IN VARCHAR2) IS
13921     BEGIN
13922        FOR i IN(SELECT page_ref_id,target_page_id,empty_page_flag,
13923                         NVL(modified_flags,0) AS modified_flags FROM CZ_UI_PAGE_REFS
13924                 WHERE ui_def_id=g_UI_Context.ui_def_id AND
13925                       parent_page_ref_id=p_page_ref_id AND
13926                       target_page_id IN
13927                       (SELECT page_id FROM CZ_UI_PAGES
13928                        WHERE ui_def_id=g_UI_Context.ui_def_id AND
13929                              deleted_flag IN(G_NO_FLAG,G_MARK_TO_ADD,
13930                              G_MARK_TO_REFRESH))
13931                       AND
13932                       deleted_flag=G_NO_FLAG ORDER BY seq_nbr)
13933        LOOP
13934           l_counter := l_counter + 1;
13935 
13936           IF i.modified_flags = 0 THEN
13937             UPDATE CZ_UI_PAGE_REFS
13938                SET seq_nbr = l_counter
13939              WHERE ui_def_id=g_UI_Context.ui_def_id AND
13940                    page_ref_id=i.page_ref_id;
13941           END IF;
13942 
13943           set_Page_Flow_(i.page_ref_id);
13944        END LOOP;
13945     END set_Page_Flow_;
13946 
13947   BEGIN
13948 
13949     FOR n IN(SELECT page_set_id
13950                FROM CZ_UI_PAGE_SETS
13951               WHERE ui_def_id=g_UI_Context.ui_def_id AND
13952                     page_set_type IN(G_PAGE_FLOW,G_SUBTABS) AND
13953                     deleted_flag=G_NO_FLAG)
13954     LOOP
13955       l_counter := 0;
13956       FOR m IN(SELECT page_ref_id,seq_nbr,target_page_id,empty_page_flag,
13957                       NVL(modified_flags,0) AS MODIFIED_FLAGS FROM CZ_UI_PAGE_REFS
13958                WHERE ui_def_id=g_UI_Context.ui_def_id AND
13959                      parent_page_ref_id IS NULL AND
13960                      page_set_id=n.page_set_id AND
13961                      target_page_id IN
13962                      (SELECT page_id FROM CZ_UI_PAGES
13963                       WHERE ui_def_id=g_UI_Context.ui_def_id AND
13964                             page_set_id=n.page_set_id AND
13965                             deleted_flag IN(G_MARK_TO_ADD,G_MARK_TO_REFRESH,
13966                             G_NO_FLAG)) AND
13967                      deleted_flag=G_NO_FLAG ORDER BY seq_nbr)
13968       LOOP
13969         -- Find the first unmodifid page ref. This is basically the first page ref
13970         -- generated by UiGen. Once we have this, we recursively set the seq_nbrs
13971         -- by traversing the page_refs structure in depth first order.
13972         IF m.MODIFIED_FLAGS = 0 THEN
13973           IF l_counter=0 THEN
13974             l_page_ref_id := m.page_ref_id;
13975           END IF;
13976         END IF;
13977         l_counter := l_counter + 1;
13978       END LOOP; -- loop with m index
13979 
13980       set_Page_Flow_(l_page_ref_id);
13981 
13982     END LOOP; -- loop with n index
13983 
13984 
13985     FOR n IN(SELECT page_set_id,persistent_node_id,pagebase_expl_node_id
13986                FROM CZ_UI_PAGE_SETS
13987               WHERE ui_def_id=g_UI_Context.ui_def_id AND
13988                     deleted_flag=G_NO_FLAG)
13989     LOOP
13990 
13991       FOR m IN(SELECT page_ref_id,seq_nbr,target_page_id,empty_page_flag,
13992                       target_persistent_node_id, target_expl_node_id
13993                FROM CZ_UI_PAGE_REFS
13994                WHERE ui_def_id=g_UI_Context.ui_def_id AND
13995                      parent_page_ref_id IS NULL AND
13996                      page_set_id=n.page_set_id AND
13997                      target_page_id IN
13998                      (SELECT page_id FROM CZ_UI_PAGES
13999                       WHERE ui_def_id=g_UI_Context.ui_def_id AND
14000                             page_set_id=n.page_set_id AND
14001                             deleted_flag IN(G_MARK_TO_ADD,G_MARK_TO_REFRESH,
14002                             G_NO_FLAG)) AND
14003                      deleted_flag=G_NO_FLAG)
14004       LOOP
14005 
14006         l_target_path := CZ_DEVELOPER_UTILS_PVT.runtime_relative_path(p_base_expl_id => n.pagebase_expl_node_id,
14007                                                      p_base_pers_id => n.persistent_node_id,
14008                                                      p_node_expl_id => m.target_expl_node_id,
14009                                                      p_node_pers_id => m.target_persistent_node_id);
14010         IF l_target_path IS NULL THEN
14011            l_target_path := '.';
14012         END IF;
14013 
14014         UPDATE CZ_UI_PAGE_REFS
14015            SET target_path=l_target_path
14016          WHERE ui_def_id=g_UI_Context.ui_def_id AND
14017                page_set_id=n.page_set_id AND
14018                target_persistent_node_id=m.target_persistent_node_id AND
14019                target_path<>l_target_path AND
14020                deleted_flag=G_NO_FLAG;
14021       END LOOP;
14022 
14023     END LOOP;
14024   END handle_Page_Flows;
14025 
14026   --
14027   -- get child UI Nodes
14028   --
14029   PROCEDURE get_Child_UI_Nodes
14030   (
14031   p_parent_ui_node        IN CZ_UI_PAGE_ELEMENTS%ROWTYPE,
14032   p_child_nodes_tbl       IN OUT NOCOPY model_nodes_tbl_type,
14033   x_ui_nodes_tbl          OUT NOCOPY ui_page_elements_tbl_type,
14034   p_suppress_refresh_flag IN VARCHAR2
14035   ) IS
14036     l_delete_in_model BOOLEAN;
14037     l_ps_node_type    NUMBER;
14038   BEGIN
14039 
14040     IF p_parent_ui_node.parent_persistent_node_id IS NULL AND
14041        p_parent_ui_node.parent_element_id IS NULL AND
14042            NVL(p_suppress_refresh_flag,G_NO_FLAG)=G_NO_FLAG THEN
14043 
14044       IF get_CX_Button_Status(p_parent_ui_node)=G_CX_VALID THEN
14045 
14046         add_CX_Button(p_node     => get_Model_Node_By_Persist_Id(p_parent_ui_node.persistent_node_id,
14047                                                                  g_UI_Context.devl_project_id),
14048                       p_ui_node  => p_parent_ui_node);
14049 
14050       END IF;
14051 
14052     END IF;
14053 
14054     FOR i IN (SELECT *
14055                 FROM CZ_UI_PAGE_ELEMENTS
14056                WHERE ui_def_id = p_parent_ui_node.ui_def_id AND
14057                      page_id=p_parent_ui_node.page_id AND
14058                      parent_element_id=p_parent_ui_node.element_id AND
14059                      deleted_flag IN (G_NO_FLAG,
14060                                       G_MARK_TO_ADD,
14061                                       G_MARK_TO_REFRESH,
14062                                       G_MARK_TO_DELETE))
14063     LOOP
14064       IF  i.element_type=G_UI_CX_BUTTON_NODE_TYPE THEN
14065         BEGIN
14066           l_ps_node_type := NULL;
14067           SELECT ps_node_type INTO l_ps_node_type FROM CZ_PS_NODES
14068           WHERE devl_project_id=g_UI_Context.devl_project_id AND
14069                 persistent_node_id=i.persistent_node_id;
14070         EXCEPTION
14071           WHEN NO_DATA_FOUND THEN
14072              NULL;
14073         END;
14074       END IF;
14075 
14076       l_delete_in_model := TRUE;
14077       FOR h IN(SELECT NULL FROM CZ_PS_NODES
14078                WHERE devl_project_id=g_UI_Context.devl_project_id AND
14079                      persistent_node_id=i.persistent_node_id AND
14080                      deleted_flag=G_NO_FLAG)
14081       LOOP
14082         l_delete_in_model := FALSE;
14083       END LOOP;
14084 
14085       IF NVL(i.element_type,0) NOT IN(G_UI_BOMADDINST_NODE_TYPE,
14086                                       G_UI_NONBOMADDINST_NODE_TYPE,
14087                                       G_UI_PAGEDRILLDOWN_NODE_TYPE,
14088                                       G_UI_CX_BUTTON_NODE_TYPE)
14089          OR (is_UI_Reference(i) AND NVL(i.element_type,0)<>G_UI_CX_BUTTON_NODE_TYPE) THEN
14090         IF i.persistent_node_id IS NOT NULL THEN
14091           x_ui_nodes_tbl(i.persistent_node_id) := i;
14092         END IF;
14093 
14094       END IF;
14095 
14096       IF NOT(p_child_nodes_tbl.EXISTS(i.persistent_node_id))
14097          AND i.persistent_node_id<>p_parent_ui_node.persistent_node_id AND
14098          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))
14099            THEN
14100 
14101          IF i.pagebase_persistent_node_id=i.persistent_node_id THEN -- UI page
14102             --
14103             -- delete UI page or deassociate UI page from model nodes
14104             --
14105             delete_UI_Page(i);
14106 
14107          ELSIF i.region_persistent_node_id=i.persistent_node_id AND
14108                i.pagebase_persistent_node_id<>i.persistent_node_id THEN -- UI region
14109             --
14110             -- delete UI region or deassociate UI region from model nodes
14111             --
14112             delete_UI_Region(i);
14113 
14114          ELSE -- regular UI element
14115             --
14116             -- delete UI element or deassociate UI element from model nodes
14117             --
14118             delete_UI_Element(i, p_suppress_refresh_flag, l_delete_in_model);
14119 
14120          END IF;
14121       END IF;
14122 
14123       IF i.deleted_flag=G_MARK_TO_DELETE THEN
14124          p_child_nodes_tbl.DELETE(i.persistent_node_id);
14125       END IF;
14126 
14127     END LOOP;
14128 
14129   END get_Child_UI_Nodes;
14130 
14131   --
14132   -- delete child UI nodes
14133   --
14134   PROCEDURE delete_UI_Nodes
14135   (
14136   p_nodes_tbl             OUT NOCOPY model_nodes_tbl_type,
14137   px_ui_nodes_tbl         IN OUT NOCOPY ui_page_elements_tbl_type,
14138   p_suppress_refresh_flag IN VARCHAR2
14139   ) IS
14140 
14141     l_current_ui_index  NUMBER;
14142     l_current_ui_node   CZ_UI_PAGE_ELEMENTS%ROWTYPE;
14143 
14144   BEGIN
14145 
14146 
14147     IF px_ui_nodes_tbl.COUNT=0 THEN
14148       RETURN;
14149     END IF;
14150 
14151     l_current_ui_index := px_ui_nodes_tbl.First;
14152     LOOP
14153 
14154       IF l_current_ui_index IS NULL THEN
14155         EXIT;
14156       END IF;
14157 
14158       l_current_ui_node := px_ui_nodes_tbl(l_current_ui_index);
14159 
14160       IF l_current_ui_node.persistent_node_id IS NOT NULL AND
14161          NOT(p_nodes_tbl.EXISTS(l_current_ui_node.persistent_node_id)) THEN
14162 
14163         IF l_current_ui_node.pagebase_persistent_node_id=l_current_ui_node.persistent_node_id THEN -- UI page
14164           --
14165           -- delete UI page or deassociate UI page from model nodes
14166           --
14167           delete_UI_Page(l_current_ui_node);
14168 
14169         ELSIF l_current_ui_node.pagebase_persistent_node_id<>l_current_ui_node.persistent_node_id AND
14170               l_current_ui_node.region_persistent_node_id=l_current_ui_node.persistent_node_id THEN -- UI region
14171           --
14172           -- delete UI region or deassociate UI region from model nodes
14173           --
14174           delete_UI_Region(l_current_ui_node);
14175 
14176         ELSE -- regular UI element
14177           --
14178           -- delete UI element or deassociate UI element from model nodes
14179           --
14180           delete_UI_Element(l_current_ui_node, p_suppress_refresh_flag);
14181 
14182          END IF;
14183 
14184       END IF;
14185 
14186       IF l_current_ui_node.deleted_flag=G_MARK_TO_DELETE THEN
14187         px_ui_nodes_tbl.DELETE(l_current_ui_node.persistent_node_id);
14188       END IF;
14189 
14190       l_current_ui_index := px_ui_nodes_tbl.NEXT(l_current_ui_index);
14191     END LOOP;
14192 
14193   END delete_UI_Nodes;
14194 
14195   PROCEDURE exist_On_Split_Pages(p_current_model_node        IN  CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE, -->>>
14196                                  p_parent_ui_node            IN  CZ_UI_PAGE_ELEMENTS%ROWTYPE,
14197                                  px_page_split_seq_nbr       OUT NOCOPY NUMBER,
14198                                  l_exist_on_split_pages_flag OUT NOCOPY VARCHAR2) IS
14199 
14200     l_page_persistent_node_id NUMBER;
14201     l_flag                    VARCHAR2(1);
14202 
14203   BEGIN
14204 
14205     l_exist_on_split_pages_flag := G_NO_FLAG;
14206 
14207     SELECT persistent_node_id,split_seq_nbr
14208       INTO l_page_persistent_node_id, px_page_split_seq_nbr FROM CZ_UI_PAGES
14209      WHERE page_id=p_parent_ui_node.page_id AND ui_def_id=g_UI_Context.ui_def_id;
14210 
14211     IF px_page_split_seq_nbr=1 THEN
14212       SELECT G_YES_FLAG INTO l_exist_on_split_pages_flag FROM dual
14213       WHERE EXISTS
14214       (SELECT NULL FROM CZ_UI_PAGE_ELEMENTS
14215        WHERE ui_def_id=g_UI_Context.ui_def_id AND page_id IN(SELECT page_id FROM CZ_UI_PAGES
14216                       WHERE ui_def_id=g_UI_Context.ui_def_id AND persistent_node_id=l_page_persistent_node_id AND
14217                       split_seq_nbr>1 AND deleted_flag NOT IN(G_YES_FLAG)) AND
14218                       persistent_node_id=p_current_model_node.persistent_node_id AND
14219                       deleted_flag NOT IN(G_YES_FLAG));
14220     ELSIF px_page_split_seq_nbr>1 THEN
14221       SELECT G_YES_FLAG INTO l_exist_on_split_pages_flag FROM dual
14222       WHERE EXISTS
14223       (SELECT NULL FROM CZ_UI_PAGE_ELEMENTS
14224        WHERE ui_def_id=g_UI_Context.ui_def_id AND page_id IN(SELECT page_id FROM CZ_UI_PAGES
14225                       WHERE ui_def_id=g_UI_Context.ui_def_id AND persistent_node_id=l_page_persistent_node_id AND
14226                       split_seq_nbr<>px_page_split_seq_nbr AND deleted_flag NOT IN(G_YES_FLAG)) AND
14227                       persistent_node_id=p_current_model_node.persistent_node_id AND
14228                       deleted_flag NOT IN(G_YES_FLAG));
14229     END IF;
14230 
14231   EXCEPTION
14232     WHEN NO_DATA_FOUND THEN
14233       l_exist_on_split_pages_flag := G_NO_FLAG;
14234   END exist_On_Split_Pages;
14235 
14236   --
14237   -- refresh given UI element recursively
14238   --
14239   PROCEDURE refresh_UI_Subtree(p_element_id            IN VARCHAR2,
14240                                p_page_id               IN NUMBER,
14241                                p_suppress_refresh_flag IN VARCHAR2 DEFAULT NULL) IS
14242 
14243     l_nodes_tbl                   model_nodes_tbl_type;
14244     l_seq_nodes_tbl               ui_page_el_int_tbl_type; -- fix for bug 6837809 : skudryav 28-Mar-2008
14245     l_non_del_child_nodes_tbl     model_nodes_tbl_type;
14246     l_ui_nodes_tbl                ui_page_elements_tbl_type;
14247     l_next_level_ui_pages_tbl     ui_page_elements_tbl_type;
14248     l_next_level_ui_page_idx      VARCHAR2(15);
14249     TYPE number_tbl_type        IS TABLE OF NUMBER INDEX BY BINARY_INTEGER;
14250     l_element_id_tbl              varchar_tbl_type;
14251     l_page_id_tbl                 number_tbl_type;
14252     l_suppress_refresh_flag_tbl   varchar_tbl_type;
14253 
14254     l_ps_node                     CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE;
14255     l_ui_node                     CZ_UI_PAGE_ELEMENTS%ROWTYPE;
14256     l_new_ui_node                 CZ_UI_PAGE_ELEMENTS%ROWTYPE;
14257     l_suppress_refresh_flag       CZ_UI_PAGE_ELEMENTS.suppress_refresh_flag%TYPE;
14258     l_current_model_node          CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE;
14259     l_seq_nbr                     NUMBER;
14260     l_max_split_nbr               NUMBER;
14261     l_page_split_seq_nbr          NUMBER;
14262     l_exist_on_split_pages_flag   VARCHAR2(1);
14263 
14264   BEGIN
14265     --
14266     -- get UI data of current UI element
14267     --
14268     l_ui_node := get_UI_Element(p_element_id,p_page_id);
14269 
14270     IF l_ui_node.persistent_node_id IS NULL THEN
14271       GOTO NEXT_LEVEL;
14272     END IF;
14273 
14274     --
14275     -- get ps_node_id of curren model node ( <-> model node associated with the current  UI element )
14276     --
14277     l_ps_node := get_Model_Node_By_Persist_Id(l_ui_node.persistent_node_id,
14278                                               g_UI_Context.devl_project_id);
14279 
14280     IF l_ps_node.deleted_flag=G_YES_FLAG OR l_ps_node.ps_node_id IS NULL OR
14281        l_ps_node.ui_omit=G_YES_FLAG THEN
14282          IF l_ui_node.pagebase_persistent_node_id=l_ui_node.persistent_node_id THEN -- UI page
14283             --
14284             -- delete UI page or deassociate UI page from model nodes
14285             --
14286             delete_UI_Page(l_ui_node);
14287 
14288          ELSIF l_ui_node.region_persistent_node_id=l_ui_node.persistent_node_id AND
14289                l_ui_node.pagebase_persistent_node_id<>l_ui_node.persistent_node_id THEN -- UI region
14290             --
14291             -- delete UI region or deassociate UI region from model nodes
14292             --
14293             delete_UI_Region(l_ui_node);
14294 
14295          ELSE -- regular UI element
14296             --
14297             -- delete UI element or deassociate UI element from model nodes
14298             --
14299             delete_UI_Element(l_ui_node,p_suppress_refresh_flag, TRUE);
14300 
14301          END IF;
14302          RETURN;
14303     END IF;
14304 
14305     --
14306     -- get child nodes of current model node
14307     --
14308     get_Child_Nodes(l_ps_node.ps_node_id,
14309                     g_UI_Context.show_all_nodes_flag,
14310                     l_seq_nodes_tbl,
14311                     l_nodes_tbl,
14312                     l_non_del_child_nodes_tbl);
14313 
14314     --
14315     -- set suppress_refresh_flag flag for current UI element
14316     --
14317     IF g_UI_Context.suppress_refresh_flag=G_YES_FLAG THEN
14318       l_suppress_refresh_flag := G_YES_FLAG;
14319     ELSE
14320       IF p_suppress_refresh_flag IS NULL THEN
14321          l_suppress_refresh_flag := l_ui_node.suppress_refresh_flag;
14322       ELSE
14323          l_suppress_refresh_flag := p_suppress_refresh_flag;
14324       END IF;
14325     END IF;
14326 
14327     --
14328     -- get child nodes of UI node l_ui_node
14329     --
14330     get_Child_UI_Nodes(p_parent_ui_node        => l_ui_node,
14331                        p_child_nodes_tbl       => l_nodes_tbl,
14332                        x_ui_nodes_tbl          => l_ui_nodes_tbl,
14333                        p_suppress_refresh_flag => l_suppress_refresh_flag);
14334 
14335     --
14336     -- check root of subtree
14337     --
14338     IF l_ui_node.parent_element_id IS NULL THEN
14339       check_UI_Node_Changes(l_ui_node, l_ps_node);
14340     END IF;
14341 
14342     l_seq_nbr := l_seq_nodes_tbl.First;
14343     LOOP
14344 
14345       IF l_seq_nbr IS NULL THEN
14346          EXIT;
14347       END IF;
14348 
14349       l_current_model_node := l_seq_nodes_tbl(l_seq_nbr);
14350 
14351       -- node does not exist in UI on the same level as in Model tree
14352       IF NOT(l_ui_nodes_tbl.EXISTS(l_current_model_node.persistent_node_id)) THEN
14353 
14354         l_max_split_nbr := get_Last_Split_Page_Nbr(p_page_id);
14355 
14356         IF (l_max_split_nbr > 1) THEN -- case when page was split
14357 
14358           exist_On_Split_Pages(l_current_model_node, l_ui_node,
14359                                l_page_split_seq_nbr, l_exist_on_split_pages_flag);
14360 
14361           IF l_exist_on_split_pages_flag=G_NO_FLAG AND
14362              l_page_split_seq_nbr=l_max_split_nbr THEN
14363             --
14364             -- add new UI Node
14365             --
14366             add_New_UI_Node(p_ui_node               => l_ui_node,
14367                             p_model_node            => l_current_model_node,
14368                             p_suppress_refresh_flag => l_suppress_refresh_flag,
14369                             x_new_ui_pages_tbl      => l_next_level_ui_pages_tbl,
14370                             x_new_ui_node           => l_new_ui_node);
14371           END IF;
14372         ELSE
14373           --
14374           -- add new UI Node
14375           --
14376           add_New_UI_Node(p_ui_node               => l_ui_node,
14377                           p_model_node            => l_current_model_node,
14378                           p_suppress_refresh_flag => l_suppress_refresh_flag,
14379                           x_new_ui_pages_tbl      => l_next_level_ui_pages_tbl,
14380                           x_new_ui_node           => l_new_ui_node);
14381         END IF;
14382 
14383       ELSE  -- UI element exists ,but associated model node was changed
14384          --
14385          -- check UI node changes
14386          --
14387          check_UI_Node_Changes(l_ui_nodes_tbl(l_current_model_node.persistent_node_id), l_current_model_node);
14388 
14389       END IF; -- end of IF NOT(l_nodes_tbl.EXISTS(i.persistent_node_id))
14390 
14391       l_seq_nbr := l_seq_nodes_tbl.NEXT(l_seq_nbr);
14392 
14393     END LOOP;
14394 
14395     << NEXT_LEVEL >>
14396 
14397     l_element_id_tbl.DELETE;
14398     l_page_id_tbl.DELETE;
14399     l_suppress_refresh_flag_tbl.DELETE;
14400 
14401     --
14402     -- handle next level of UI tree ( recursion )
14403     --
14404     SELECT element_id, page_id, suppress_refresh_flag
14405     BULK COLLECT INTO l_element_id_tbl, l_page_id_tbl, l_suppress_refresh_flag_tbl
14406     FROM CZ_UI_PAGE_ELEMENTS
14407     WHERE ui_def_id = g_UI_Context.ui_def_id AND
14408           page_id=p_page_id AND
14409           parent_element_id = l_ui_node.element_id AND
14410           deleted_flag IN(G_NO_FLAG, G_MARK_TO_ADD, G_MARK_TO_REFRESH) AND
14411           (element_type IN(G_UI_PAGE_NODE_TYPE,G_UI_REGION_NODE_TYPE));
14412 
14413     IF l_element_id_tbl.COUNT > 0 THEN
14414       FOR k IN l_element_id_tbl.First..l_element_id_tbl.Last
14415       LOOP
14416         IF g_UI_Context.suppress_refresh_flag=G_YES_FLAG THEN
14417           l_suppress_refresh_flag := G_YES_FLAG;
14418         ELSE
14419           l_suppress_refresh_flag := NVL(l_suppress_refresh_flag_tbl(k),l_suppress_refresh_flag);
14420         END IF;
14421 
14422         refresh_UI_Subtree(p_element_id            => l_element_id_tbl(k),
14423                            p_page_id               => l_page_id_tbl(k),
14424                            p_suppress_refresh_flag => l_suppress_refresh_flag);
14425 
14426       END LOOP;
14427     END IF;
14428     --kdande; Bug 6875560; 20-Mar-2008; Modified the PLSQL table FOR LOOP to
14429     --simple LOOP to get the indexes as the index is a VARCHAR2 column
14430     IF l_next_level_ui_pages_tbl.COUNT > 0 THEN
14431       l_next_level_ui_page_idx := l_next_level_ui_pages_tbl.FIRST;
14432       LOOP
14433         EXIT WHEN l_next_level_ui_page_idx IS NULL;
14434         IF g_UI_Context.suppress_refresh_flag=G_YES_FLAG THEN
14435           l_suppress_refresh_flag := G_YES_FLAG;
14436         ELSE
14437           l_suppress_refresh_flag := NVL(l_next_level_ui_pages_tbl(l_next_level_ui_page_idx).suppress_refresh_flag,l_suppress_refresh_flag);
14438         END IF;
14439         refresh_UI_Subtree(p_element_id            => l_next_level_ui_pages_tbl(l_next_level_ui_page_idx).element_id,
14440                            p_page_id               => l_next_level_ui_pages_tbl(l_next_level_ui_page_idx).page_id,
14441                            p_suppress_refresh_flag => l_suppress_refresh_flag);
14442 	l_next_level_ui_page_idx := l_next_level_ui_pages_tbl.NEXT(l_next_level_ui_page_idx);
14443       END LOOP;
14444     END IF;
14445 
14446   END refresh_UI_Subtree;
14447 
14448   --
14449   -- return TRUE if UI page with page_id=p_page_id is empty
14450   -- else return FALSE
14451   --
14452   FUNCTION is_Empty_Page(p_page_id IN NUMBER)
14453     RETURN BOOLEAN IS
14454     l_flag VARCHAR2(1);
14455   BEGIN
14456     SELECT G_YES_FLAG INTO l_flag
14457       FROM CZ_UI_PAGE_ELEMENTS
14458      WHERE ui_def_id=g_UI_Context.ui_def_id AND
14459            page_id=p_page_id AND
14460            parent_element_id IS NOT NULL AND
14461            deleted_flag NOT IN(G_YES_FLAG,G_MARK_TO_DELETE) AND
14462            rownum<2;
14463     RETURN FALSE;
14464   EXCEPTION
14465     WHEN NO_DATA_FOUND THEN
14466       RETURN TRUE;
14467   END is_Empty_Page;
14468 
14469   --
14470   -- perform a special handling for empty UI pages :
14471   -- set CZ_UI_PAGE_REF.target_page_id=NULL for those UI pages
14472   -- which are empty UI pages
14473   --
14474   PROCEDURE handle_Empty_Pages IS
14475 
14476     l_empty_page           BOOLEAN;
14477 
14478   BEGIN
14479 
14480     --
14481     -- exlude from UI Page Refs those UI pages
14482     -- which have no UI content in it
14483     --
14484     FOR i IN(SELECT page_ref_id,
14485                     target_page_id,target_persistent_node_id,
14486                     NVL(empty_page_flag,G_NO_FLAG) AS empty_page_flag FROM CZ_UI_PAGE_REFS
14487              WHERE ui_def_id=g_UI_Context.ui_def_id AND deleted_flag=G_NO_FLAG AND
14488                    target_page_id IN(SELECT page_id FROM CZ_UI_PAGES
14489                    WHERE ui_def_id=g_UI_Context.ui_def_id AND
14490                          NVL(suppress_refresh_flag, G_NO_FLAG)=G_NO_FLAG AND
14491                          deleted_flag IN(G_NO_FLAG,G_MARK_TO_REFRESH,G_MARK_TO_ADD) ))
14492      LOOP
14493 
14494        -- check page - is it empty or no ?
14495        l_empty_page := is_Empty_Page(i.target_page_id);
14496 
14497        IF NVL(i.empty_page_flag,G_NO_FLAG)=G_NO_FLAG AND l_empty_page THEN
14498 
14499           UPDATE CZ_UI_PAGE_REFS
14500              SET empty_page_flag=G_YES_FLAG
14501            WHERE ui_def_id=g_UI_Context.ui_def_id AND
14502                  page_ref_id=i.page_ref_id AND NVL(modified_flags,0)=0;
14503 
14504           IF SQL%ROWCOUNT>0 THEN
14505             UPDATE CZ_UI_PAGES
14506                SET empty_page_flag=G_YES_FLAG
14507              WHERE page_id=i.target_page_id AND
14508                    ui_def_id=g_UI_Context.ui_def_id;
14509           END IF;
14510 
14511       ELSIF  i.empty_page_flag=G_YES_FLAG AND l_empty_page=FALSE THEN
14512 
14513           UPDATE CZ_UI_PAGE_REFS
14514              SET empty_page_flag=G_NO_FLAG
14515            WHERE ui_def_id=g_UI_Context.ui_def_id AND
14516                  page_ref_id=i.page_ref_id AND NVL(modified_flags,0)=0;
14517 
14518           IF SQL%ROWCOUNT>0 THEN
14519             UPDATE CZ_UI_PAGES
14520                SET empty_page_flag=G_NO_FLAG
14521              WHERE page_id=i.target_page_id AND
14522                    ui_def_id=g_UI_Context.ui_def_id;
14523           END IF;
14524 
14525        END IF;
14526 
14527      END LOOP;
14528 
14529   END handle_Empty_Pages;
14530 
14531   PROCEDURE set_SLMenu_Order(p_page_set_id IN NUMBER) IS
14532 
14533     l_counter       NUMBER:=0;
14534     l_split_seq_nbr NUMBER;
14535 
14536     PROCEDURE set_Page_Ref_Order_(p_page_ref_id IN VARCHAR2) IS
14537     BEGIN
14538        FOR i IN(SELECT page_ref_id FROM CZ_UI_PAGE_REFS a
14539                 WHERE ui_def_id=g_UI_Context.ui_def_id AND
14540                       parent_page_ref_id=p_page_ref_id AND
14541                       EXISTS
14542                       (SELECT NULL FROM CZ_UI_PAGES
14543                        WHERE page_id=a.target_page_id AND ui_def_id=g_UI_Context.ui_def_id) AND
14544                       deleted_flag IN(G_MARK_TO_ADD,G_MARK_TO_REFRESH,G_NO_FLAG) ORDER BY seq_nbr)
14545        LOOP
14546          l_counter := l_counter + 1;
14547          UPDATE CZ_UI_PAGE_REFS
14548             SET seq_nbr = l_counter
14549           WHERE ui_def_id=g_UI_Context.ui_def_id AND
14550                 page_ref_id=i.page_ref_id;
14551           set_Page_Ref_Order_(i.page_ref_id);
14552        END LOOP;
14553     END set_Page_Ref_Order_;
14554 
14555   BEGIN
14556     FOR i IN(SELECT page_ref_id,target_page_id,target_persistent_node_id FROM CZ_UI_PAGE_REFS
14557              WHERE ui_def_id=g_UI_Context.ui_def_id AND
14558                    page_set_id=p_page_set_id AND
14559                    parent_page_ref_id IS NULL AND
14560                    deleted_flag=G_NO_FLAG)
14561     LOOP
14562       SELECT NVL(split_seq_nbr,1) INTO l_split_seq_nbr
14563       FROM CZ_UI_PAGES
14564       WHERE page_id=i.target_page_id AND
14565             ui_def_id=g_UI_Context.ui_def_id;
14566 
14567       IF l_split_seq_nbr > 1 THEN
14568         UPDATE CZ_UI_PAGE_REFS
14569            SET seq_nbr = l_split_seq_nbr
14570          WHERE ui_def_id=g_UI_Context.ui_def_id AND
14571                page_ref_id=i.page_ref_id;
14572         l_counter := l_split_seq_nbr;
14573       ELSE
14574         UPDATE CZ_UI_PAGE_REFS
14575            SET seq_nbr = 1
14576          WHERE ui_def_id=g_UI_Context.ui_def_id AND
14577                page_ref_id=i.page_ref_id;
14578         SELECT MAX(split_seq_nbr) INTO l_counter FROM CZ_UI_PAGES
14579         WHERE ui_def_id=g_UI_Context.ui_def_id AND
14580               persistent_node_id=i.target_persistent_node_id AND
14581               deleted_flag IN (G_MARK_TO_ADD,G_MARK_TO_REFRESH,G_NO_FLAG);
14582       END IF;
14583 
14584       set_Page_Ref_Order_(i.page_ref_id);
14585     END LOOP;
14586   END set_SLMenu_Order;
14587 
14588   --
14589   -- set ordering for UI elements on UI pages
14590   --
14591   PROCEDURE handle_SLMenu_Order IS
14592   BEGIN
14593     FOR i IN(SELECT page_set_id FROM CZ_UI_PAGE_SETS
14594              WHERE ui_def_id=g_UI_Context.ui_def_id AND
14595                    page_set_type=G_SINGLE_LEVEL_MENU AND
14596                    deleted_flag=G_NO_FLAG)
14597     LOOP
14598       set_SLMenu_Order(i.page_set_id);
14599     END LOOP;
14600   END handle_SLMenu_Order;
14601 
14602   --vsingava IM-ER
14603   -- Finds an Instance List containing the xml node passed in and returns its AMN
14604   -- This function also checks the node passed in itself i.e. if the node passed in is
14605   -- an Instance List, then the function will return its AMN
14606   FUNCTION getInstanceListAMN(p_ui_def_id IN CZ_UI_DEFS.ui_def_Id%TYPE,
14607                               p_page_id   IN CZ_UI_PAGES.page_id%TYPE,
14608                               p_xml_node  IN xmldom.DOMNode) RETURN expl_node_persistent_id_pair
14609   IS
14610 
14611     l_node xmldom.DOMNode;
14612     l_user_attribute4_value VARCHAR2(2000);
14613     l_user_attribute1_value VARCHAR2(2000);
14614     l_layout_region_type VARCHAR2(255);
14615     l_id_pair expl_node_persistent_id_pair;
14616     l_element_with_AMN CZ_UI_PAGE_ELEMENTS.element_id%TYPE;
14617 
14618   BEGIN
14619 
14620     l_node := p_xml_node;
14621 
14622    WHILE NOT xmldom.isNull(l_node)
14623    LOOP
14624      l_user_attribute4_value := get_Attribute_Value(l_node, G_USER_ATTRIBUTE4_NAME);
14625      IF l_user_attribute4_value IS NOT NULL THEN
14626        l_layout_region_type := get_User_Attribute(l_user_attribute4_value, 'layoutRegionType');
14627        IF l_layout_region_type = '6078' THEN
14628          -- We have a page include region
14629          l_user_attribute1_value := get_Attribute_Value(l_node, G_USER_ATTRIBUTE1_NAME);
14630          IF (l_user_attribute1_value IS NOT NULL AND l_user_attribute1_value <> 'model_path=%modelPath') THEN
14631            l_element_with_AMN := get_Attribute_Value(l_node, G_ID_ATTRIBUTE);
14632          ELSE
14633            l_element_with_AMN := find_AMN_Element_Above(l_node);
14634          END IF;
14635 
14636          SELECT persistent_node_id, model_ref_expl_id
14637            INTO l_id_pair.persistent_node_id, l_id_pair.expl_node_id
14638            FROM cz_ui_page_elements
14639            WHERE ui_def_Id = p_ui_def_id
14640              AND page_Id = p_page_id
14641             AND element_Id = l_element_with_AMN;
14642 
14643 
14644          return l_id_pair;
14645        END IF;
14646      END IF;
14647      l_node := xmldom.getParentNode(l_node);
14648    END LOOP;
14649 
14650     RETURN l_id_pair;
14651 
14652   END getInstanceListAMN;
14653 
14654   -- Finds an Instance List enclosing the xml node passed in and returns its AMN
14655   -- This function does not check the node passed in itself. It starts checking from
14656   -- its parent
14657   FUNCTION getEnclosingInstanceListAMN(p_ui_element CZ_UI_PAGE_ELEMENTS%ROWTYPE,
14658                                        p_xml_node   xmldom.DOMNode) RETURN expl_node_persistent_id_pair
14659   IS
14660 
14661     l_node xmldom.DOMNode;
14662     l_user_attribute4_value VARCHAR2(2000);
14663     l_user_attribute1_value VARCHAR2(2000);
14664     l_layout_region_type VARCHAR2(255);
14665     l_id_pair expl_node_persistent_id_pair;
14666     l_element_with_AMN CZ_UI_PAGE_ELEMENTS.element_id%TYPE;
14667 
14668   BEGIN
14669 
14670    l_node := xmldom.getParentNode(p_xml_node);
14671 
14672    RETURN getInstanceListAMN(p_ui_element.ui_def_id, p_ui_element.page_id, l_node);
14673 
14674   END getEnclosingInstanceListAMN;
14675 
14676   PROCEDURE  check_Boundaries IS
14677     l_node_is_reachable NUMBER := -1;
14678     l_has_unreach       BOOLEAN := FALSE;
14679     l_xml_doc           xmldom.DOMDocument;
14680     l_xml_node          xmldom.DOMNode;
14681     l_null_xml_doc      xmldom.DOMDocument;
14682     l_instance_list_amn expl_node_persistent_id_pair;
14683 
14684   BEGIN
14685     FOR i IN(SELECT page_id,pagebase_expl_node_id, jrad_doc FROM CZ_UI_PAGES  --vsingava IM-ER
14686              WHERE ui_def_id=g_UI_Context.ui_def_id AND
14687                    deleted_flag NOT IN(G_LIMBO_FLAG,G_MARK_TO_DELETE,G_YES_FLAG))
14688     LOOP
14689 
14690       l_xml_doc := l_null_xml_doc;
14691 
14692       FOR k IN(SELECT *
14693                  FROM CZ_UI_PAGE_ELEMENTS
14694                 WHERE ui_def_id=g_UI_Context.ui_def_id AND
14695                       page_id=i.page_id AND
14696                       deleted_flag NOT IN(G_LIMBO_FLAG,G_MARK_TO_DELETE,G_YES_FLAG))
14697       LOOP
14698         BEGIN
14699           l_instance_list_amn.persistent_node_id := NULL;
14700 
14701           l_node_is_reachable :=CZ_DEVELOPER_UTILS_PVT.in_boundary(i.pagebase_expl_node_id,
14702                                                                    k.model_ref_expl_id,
14703                                                                    k.persistent_node_id);
14704           IF l_node_is_reachable=0 THEN
14705 
14706             IF ( xmldom.isNull(l_xml_doc) ) THEN
14707               l_xml_doc := parse_JRAD_Document(i.jrad_doc);
14708             END IF;
14709 
14710             l_xml_node := find_XML_Node_By_Attribute(l_xml_doc, G_ID_ATTRIBUTE, k.element_id);
14711 
14712             l_instance_list_amn := getEnclosingInstanceListAMN(k, l_xml_node);
14713 
14714             IF l_instance_list_amn.persistent_node_id IS NULL THEN
14715               l_has_unreach := TRUE;
14716               add_Error_Message(p_message_name => 'CZDEV_UI_ERR_VIR_BDR_BIND',
14717                                 p_token_name   => 'PICKEDNODENAME',
14718                                 p_token_value  => k.name,
14719                                 p_fatal_error  => TRUE);
14720             END IF;
14721           END IF;
14722         EXCEPTION
14723           WHEN OTHERS THEN
14724              NULL;
14725         END;
14726       END LOOP;
14727     END LOOP;
14728 
14729     IF l_has_unreach THEN
14730       RAISE UNREACH_UI_NODE;
14731     END IF;
14732   END check_Boundaries;
14733 
14734 
14735     -- Gets the UI Node for the parent of this PsNode
14736     --
14737     PROCEDURE get_parent_ui_node(p_ps_node IN CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE,
14738                                  p_ord_siblings IN  model_nodes_tbl_type,
14739                                  p_ps_node_index IN NUMBER,
14740                                  x_parent_ui_node OUT NOCOPY CZ_UI_PAGE_ELEMENTS%ROWTYPE,
14741                                  x_insert_index OUT NOCOPY NUMBER,
14742                                  x_refresh_enabled_parent_found OUT NOCOPY BOOLEAN,
14743                                  x_atleast_one_parent_found OUT NOCOPY BOOLEAN) IS
14744 
14745       l_parent_ps_node          CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE;
14746       l_predecessor             CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE;
14747       l_successor               CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE;
14748       l_pred_persistent_node_id NUMBER := NULL;
14749       l_succ_persistent_node_id NUMBER := NULL;
14750       l_parent_ui_node          CZ_UI_PAGE_ELEMENTS%ROWTYPE;
14751       l_parent_element_id       NUMBER;
14752       l_page_id                 NUMBER;
14753       l_added                   BOOLEAN;
14754 
14755     BEGIN
14756 
14757       l_parent_ps_node := get_Model_Node( p_ps_node.parent_id );
14758 
14759       DEBUG('asp:Find parent ' || p_ps_node_index || 'siblings count = ' || p_ord_siblings.COUNT);
14760 
14761       l_added := FALSE;
14762 
14763       IF p_ps_node_index > 1 THEN
14764         l_predecessor := p_ord_siblings(p_ps_node_index-1);
14765         l_pred_persistent_node_id := l_predecessor.persistent_node_id;
14766       END IF;
14767 
14768       IF p_ps_node_index > 0 AND p_ps_node_index < p_ord_siblings.COUNT THEN
14769         FOR i in p_ps_node_index+1..p_ord_siblings.COUNT
14770         LOOP
14771           IF p_ord_siblings(i).deleted_flag = G_NO_FLAG AND p_ord_siblings(i).creation_date < g_UI_Context.ui_timestamp_refresh THEN
14772             l_successor := p_ord_siblings(i);
14773             l_succ_persistent_node_id := l_successor.persistent_node_id;
14774             EXIT;
14775           END IF;
14776         END LOOP;
14777       END IF;
14778 
14779       x_refresh_enabled_parent_found := FALSE;
14780       x_atleast_one_parent_found := FALSE;
14781 
14782       -- First find all regions that are bound to the parent of this PS Node and
14783       -- contain the predecessor and successor of this node.
14784 
14785       IF l_pred_persistent_node_id IS NOT NULL AND l_succ_persistent_node_id IS NOT NULL THEN
14786         FOR i IN (SELECT *
14787                   FROM CZ_UI_PAGE_ELEMENTS pe1
14788                   WHERE ui_def_Id = g_UI_Context.ui_def_id
14789                   AND region_persistent_node_id = l_parent_ps_node.persistent_node_id
14790                   AND persistent_node_id = l_pred_persistent_node_id
14791                   AND deleted_flag IN (G_NO_FLAG, G_MARK_TO_ADD, G_MARK_TO_REFRESH)
14792                   AND parent_element_id IS NOT NULL
14793                   AND EXISTS ( SELECT 1
14794                                FROM CZ_UI_PAGE_ELEMENTS pe2
14795                                WHERE ui_def_Id = g_UI_Context.ui_def_id
14796                                AND pe2.page_id = pe1.page_id
14797                                AND pe2.parent_element_id = pe1.parent_element_id
14798                                AND pe2.persistent_node_id = l_succ_persistent_node_id
14799                                AND pe2.seq_nbr = pe1.seq_nbr + 1
14800                                AND deleted_flag = G_NO_FLAG
14801                  ))
14802         LOOP
14803 
14804           DEBUG('asp:Found parent with both siblings ' || i.parent_element_id);
14805           x_parent_ui_node := get_UI_Element(i.parent_element_id, i.page_id);
14806           x_atleast_one_parent_found := TRUE;
14807           IF NOT disabled_for_refresh(x_parent_ui_node) THEN
14808             x_insert_index := i.seq_nbr + 1;
14809             x_refresh_enabled_parent_found := TRUE;
14810             EXIT;
14811           END IF;
14812         END LOOP;
14813       END IF;
14814 
14815       -- Now find all regions that are bound to the parent of this PS Node and contain
14816       -- the predecessor of this node
14817 
14818 
14819       IF l_pred_persistent_node_id IS NOT NULL AND NOT x_refresh_enabled_parent_found THEN
14820         FOR i IN (SELECT *
14821                   FROM CZ_UI_PAGE_ELEMENTS pe1
14822                   WHERE ui_def_Id = g_UI_Context.ui_def_id
14823                   AND region_persistent_node_id = l_parent_ps_node.persistent_node_id
14824                   AND persistent_node_id = l_pred_persistent_node_id
14825                   AND deleted_flag IN (G_NO_FLAG, G_MARK_TO_ADD, G_MARK_TO_REFRESH)
14826                   AND parent_element_id IS NOT NULL)
14827         LOOP
14828           DEBUG('asp:Found parent with predecessor ' || i.parent_element_id || ' page_id ' || i.page_id);
14829           x_parent_ui_node := get_UI_Element(i.parent_element_id, i.page_id);
14830           x_atleast_one_parent_found := TRUE;
14831           IF NOT disabled_for_refresh(x_parent_ui_node) THEN
14832             x_insert_index := i.seq_nbr + 1;
14833             x_refresh_enabled_parent_found := TRUE;
14834             EXIT;
14835           END IF;
14836         END LOOP;
14837       END IF;
14838 
14839 
14840       -- Now find all regions that are bound to the parent of this PS Node and contain the
14841       -- successor od this node
14842 
14843       IF l_succ_persistent_node_id IS NOT NULL AND NOT x_refresh_enabled_parent_found THEN
14844 
14845         FOR i IN (SELECT *
14846                   FROM CZ_UI_PAGE_ELEMENTS pe1
14847                   WHERE ui_def_Id = g_UI_Context.ui_def_id
14848                   AND region_persistent_node_id = l_parent_ps_node.persistent_node_id
14849                   AND persistent_node_id = l_succ_persistent_node_id
14850                   AND deleted_flag = G_NO_FLAG
14851                   AND parent_element_id IS NOT NULL)
14852         LOOP
14853           DEBUG('asp:Found parent with successor ' || i.parent_element_id || ' i.seq_nbr = ' || i.seq_nbr);
14854           x_parent_ui_node := get_UI_Element(i.parent_element_id, i.page_id);
14855           x_atleast_one_parent_found := TRUE;
14856           IF NOT disabled_for_refresh(x_parent_ui_node) THEN
14857             x_insert_index := i.seq_nbr;
14858             x_refresh_enabled_parent_found := TRUE;
14859             EXIT;
14860           END IF;
14861         END LOOP;
14862 
14863       END IF;
14864 
14865 
14866       -- we still haven't managed to add UI for the node. We will now look for a region
14867       -- containing the max number of siblings of this node
14868 
14869       IF NOT x_refresh_enabled_parent_found THEN
14870 
14871         l_parent_element_id := NULL;
14872         l_page_id := NULL;
14873 
14874         FOR i IN (SELECT parent_element_id, page_id, count(parent_element_id) max_count
14875                   FROM CZ_UI_PAGE_ELEMENTS pe
14876                   WHERE ui_def_Id = g_UI_Context.ui_def_id
14877                   AND parent_persistent_node_id = l_parent_ps_node.persistent_node_id
14878                   AND pagebase_persistent_node_id <> persistent_node_id
14879                   AND deleted_flag IN (G_NO_FLAG, G_MARK_TO_ADD, G_MARK_TO_REFRESH)
14880                   AND parent_element_id IS NOT NULL
14881                   AND NOT (p_ps_node.ps_node_type <> G_BOM_OPTION_CLASS_TYPE
14882                            AND ((SELECT NVL(ps_node_type,G_UNDEFINED_DATA_TYPE)
14883                                FROM CZ_PS_NODES
14884                                WHERE devl_project_id = p_ps_node.devl_project_id
14885                                  AND persistent_node_id = pe.persistent_node_id) = G_BOM_OPTION_CLASS_TYPE))
14886                   GROUP BY parent_element_id, page_id
14887                   ORDER BY count(parent_element_id) DESC)
14888         LOOP
14889           DEBUG('asp:Found parent with max siblings ' || i.parent_element_id || ', page_id ' || i.page_id);
14890           x_parent_ui_node := get_UI_Element(i.parent_element_id, i.page_id);
14891           DEBUG('asp:Got the parent node ');
14892           x_atleast_one_parent_found := TRUE;
14893           IF NOT disabled_for_refresh(x_parent_ui_node) THEN
14894             x_insert_index := -1;
14895             x_refresh_enabled_parent_found := TRUE;
14896             EXIT;
14897           END IF;
14898         END LOOP;
14899 
14900       --DEBUG('asp:Before finding region bound to parent node ');
14901 
14902       END IF;
14903 
14904       IF NOT x_refresh_enabled_parent_found THEN
14905 
14906         FOR j IN (SELECT *
14907                   FROM CZ_UI_PAGE_ELEMENTS
14908                   WHERE ui_def_id = g_UI_Context.ui_def_id AND
14909                   persistent_node_Id = l_parent_ps_node.persistent_node_id AND
14910                   deleted_flag IN(G_NO_FLAG, G_MARK_TO_ADD, G_MARK_TO_REFRESH) AND
14911                   element_type IN(G_UI_PAGE_NODE_TYPE,G_UI_REGION_NODE_TYPE))
14912         LOOP
14913           DEBUG('asp:Found parent with no siblings ' || j.element_id);
14914           x_parent_ui_node := get_UI_Element(j.element_id, j.page_id);
14915           x_atleast_one_parent_found := TRUE;
14916           IF NOT disabled_for_refresh(x_parent_ui_node) THEN
14917             x_insert_index := -1;
14918             x_refresh_enabled_parent_found := TRUE;
14919             EXIT;
14920           END IF;
14921         END LOOP;
14922       END IF;
14923     END get_parent_ui_node;
14924 
14925 
14926     -- Determines if UI should be added for this ps node.
14927     -- Determines the place (l_parent_ui_node) under which to
14928     -- add UI for this node and add the UI if required
14929 
14930     PROCEDURE add_ui_for_node(p_ps_node IN CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE,
14931                               p_ord_siblings IN  model_nodes_tbl_type,
14932                               p_ps_node_index IN NUMBER DEFAULT NULL,
14933                               x_ui_node OUT NOCOPY CZ_UI_PAGE_ELEMENTS%ROWTYPE) IS
14934 
14935     l_parent_ps_node              CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE;
14936     l_parent_ui_node              CZ_UI_PAGE_ELEMENTS%ROWTYPE;
14937     l_temp_ui_node                CZ_UI_PAGE_ELEMENTS%ROWTYPE;
14938     l_next_level_ui_pages_tbl     ui_page_elements_tbl_type;
14939     l_insert_index                NUMBER;
14940     l_suppress_refresh_flag       CZ_UI_PAGE_ELEMENTS.suppress_refresh_flag%TYPE;
14941     l_parent_node_found           BOOLEAN;
14942     l_atleast_one_parent_found    BOOLEAN;
14943     l_nodes_tbl                   model_nodes_tbl_type;
14944     l_seq_nodes_tbl               ui_page_el_int_tbl_type; -- fix for bug 6837809 : skudryav 28-Mar-2008
14945     l_non_del_child_nodes_tbl     model_nodes_tbl_type;
14946 
14947     BEGIN
14948 
14949       l_parent_node_found := FALSE;
14950 
14951       IF p_ps_node.parent_id IS NOT NULL THEN
14952         -- Find the parent under which to add UI for this node
14953         get_parent_ui_node(p_ps_node,
14954                            p_ord_siblings,
14955                            p_ps_node_index,
14956                            l_parent_ui_node,
14957                            l_insert_index,
14958                            l_parent_node_found,
14959                            l_atleast_one_parent_found);
14960       END IF;
14961 
14962 
14963       IF l_parent_node_found OR p_ps_node.parent_id IS NULL THEN
14964           add_New_UI_Node(p_ui_node               => l_parent_ui_node,
14965                           p_insert_index          => l_insert_index,
14966                           p_model_node            => p_ps_node,
14967                           p_suppress_refresh_flag => G_NO_FLAG,
14968                           x_new_ui_pages_tbl      => l_next_level_ui_pages_tbl,
14969                           x_new_ui_node           => x_ui_node);
14970 
14971       ELSIF NOT l_atleast_one_parent_found THEN
14972 
14973         -- We did not find any parent node. So the parent was probably deleted
14974         -- Lets try and add the parent back and then add UI for this node.
14975         -- add_ui_for_ancestors_recursively(p_ps_node, l_new_ui_node);
14976 
14977         l_parent_ps_node := get_Model_Node( p_ps_node.parent_id );
14978 
14979 
14980         get_Child_Nodes(l_parent_ps_node.parent_id,
14981                         G_YES_FLAG,  -- get all the nodes
14982                         l_seq_nodes_tbl,
14983                         l_nodes_tbl,
14984                         l_non_del_child_nodes_tbl,
14985                         G_YES_FLAG);
14986 
14987         add_ui_for_node(l_parent_ps_node,
14988                         l_non_del_child_nodes_tbl,
14989                         l_parent_ps_node.tree_seq,
14990                         x_ui_node);
14991 
14992         IF x_ui_node.element_id IS NOT NULL THEN
14993 
14994           l_temp_ui_node := x_ui_node;
14995 
14996           add_New_UI_Node(p_ui_node               => l_temp_ui_node,
14997                           p_insert_index          => -1,
14998                           p_model_node            => p_ps_node,
14999                           p_suppress_refresh_flag => G_NO_FLAG,
15000                           x_new_ui_pages_tbl      => l_next_level_ui_pages_tbl,
15001                           x_new_ui_node           => x_ui_node);
15002         END IF;
15003 
15004       ELSE
15005         -- We found atleast one parent. It was probably disabled for refresh
15006         -- So we will not add any content for the new node
15007         NULL;
15008 
15009       END IF;
15010 
15011     END add_ui_for_node;
15012 
15013 
15014     PROCEDURE propogate_ps_node_remove(p_ps_node IN CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE) IS
15015 
15016       l_new_parent_persistent_id    NUMBER;
15017       l_parent_ps_node              CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE;
15018 
15019       l_parent_ui_node              CZ_UI_PAGE_ELEMENTS%ROWTYPE;
15020       l_insert_index                NUMBER;
15021       l_suppress_refresh_flag       CZ_UI_PAGE_ELEMENTS.suppress_refresh_flag%TYPE;
15022       l_parent_node_found           BOOLEAN;
15023 
15024     BEGIN
15025 
15026       l_parent_ps_node := get_Model_Node( p_ps_node.parent_id );
15027 
15028       --DEBUG('asp:Deleting UI for ps node ' || p_ps_node.name);
15029 
15030     FOR i IN (SELECT *
15031                 FROM CZ_UI_PAGE_ELEMENTS pe
15032                 WHERE ui_def_Id = g_UI_Context.ui_def_id
15033                 AND persistent_node_id = p_ps_node.persistent_node_id
15034                 AND deleted_flag = G_NO_FLAG)
15035       LOOP
15036         IF i.pagebase_persistent_node_id=i.persistent_node_id THEN -- UI page
15037               --
15038               -- delete UI page or deassociate UI page from model nodes
15039               --
15040               delete_UI_Page(i);
15041 
15042         ELSIF i.region_persistent_node_id=i.persistent_node_id AND
15043 
15044           i.pagebase_persistent_node_id<>i.persistent_node_id THEN -- UI region
15045               --
15046               -- delete UI region or deassociate UI region from model nodes
15047               --
15048               delete_UI_Region(i);
15049 
15050         ELSE -- regular UI element
15051               --
15052               -- delete UI element or deassociate UI element from model nodes
15053               --
15054         l_suppress_refresh_flag := G_NO_FLAG;
15055 
15056         IF disabled_for_refresh(i) THEN
15057           l_suppress_refresh_flag := G_YES_FLAG;
15058         END IF;
15059 
15060         --DEBUG('asp:Delete element ' || i.element_id);
15061               delete_UI_Element(i, l_suppress_refresh_flag, TRUE);
15062 
15063         END IF;
15064 
15065     END LOOP;
15066     END;
15067 
15068 
15069     PROCEDURE propogate_ps_node_move(p_ps_node IN CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE,
15070                                      p_ord_siblings IN  model_nodes_tbl_type,
15071                                      p_ps_node_index IN NUMBER DEFAULT NULL,
15072                                      x_model_ref_expl_id_changed OUT NOCOPY VARCHAR2) IS
15073 
15074       l_new_parent_persistent_id    NUMBER;
15075       l_parent_ps_node              CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE;
15076 
15077       l_parent_ui_node              CZ_UI_PAGE_ELEMENTS%ROWTYPE;
15078       l_insert_index                NUMBER;
15079       l_suppress_refresh_flag       CZ_UI_PAGE_ELEMENTS.suppress_refresh_flag%TYPE;
15080       l_parent_node_found           BOOLEAN;
15081       l_diff                        NUMBER;
15082       l_max_prev_seq_nbr            NUMBER;
15083       l_max_src_seq_nbr             NUMBER;
15084       l_src_range                   NUMBER;
15085       l_atleast_one_parent_found    BOOLEAN;
15086       l_parent_page_ref_id          CZ_UI_PAGE_REFS.page_ref_id%TYPE;
15087       l_pagebase_expl_node_id       CZ_UI_PAGES.pagebase_expl_node_id%TYPE;
15088       l_node_is_reachable           NUMBER := -1;
15089       l_model_ref_expl_id           NUMBER;
15090       l_count                       NUMBER;
15091 
15092     BEGIN
15093 
15094       x_model_ref_expl_id_changed := 'U';  -- Unknown
15095 
15096       l_parent_ps_node := get_Model_Node( p_ps_node.parent_id );
15097 
15098       IF p_ps_node.ps_node_type = G_REFERENCE_TYPE AND
15099           g_UI_Context.primary_navigation = G_MODEL_TREE_MENU AND
15100            g_UI_Context.page_set_id IS NOT NULL THEN
15101 
15102         -- This is a reference node and it has been moved. Reference nodes will not have pages
15103         -- in this UI which are in the tree. So have to deal with page_refs for references
15104         -- explicitly
15105         FOR i in (SELECT *
15106                   FROM CZ_UI_PAGE_REFS
15107                   WHERE ui_def_id = g_UI_Context.ui_def_id
15108                   AND page_set_id = g_UI_Context.page_set_id
15109                   AND target_ui_def_id IS NOT NULL
15110                   AND target_persistent_node_id = p_ps_node.persistent_node_id)
15111         LOOP
15112           move_page_ref(i.page_set_id, i.page_ref_id, p_ps_node, l_parent_page_ref_id);
15113           replace_page_ref_target_path(p_ps_node);
15114         END LOOP;
15115 
15116       END IF;
15117 
15118       FOR i IN (SELECT *
15119                 FROM CZ_UI_PAGE_ELEMENTS pe
15120                 WHERE ui_def_Id = g_UI_Context.ui_def_id
15121                 AND persistent_node_id = p_ps_node.persistent_node_id
15122                 AND region_persistent_node_id <> l_parent_ps_node.persistent_node_id
15123                 AND deleted_flag IN (G_NO_FLAG, G_MARK_TO_DELETE))
15124       LOOP
15125 
15126         l_model_ref_expl_id := get_Expl_Id(p_model_id     => p_ps_node.devl_project_id,
15127                                            p_ps_node_id   => p_ps_node.ps_node_id,
15128                                            p_component_id => p_ps_node.component_id,
15129                                            p_ps_node_type => p_ps_node.ps_node_type);
15130 
15131         -- This piece of code determines if the model_ref_expl_id of this page_element is
15132         -- different from the current explosion_id of the PS Node. If information is then
15133         -- used later to fix the explosion_ids
15134         IF x_model_ref_expl_id_changed <> G_YES_FLAG THEN
15135           IF i.model_ref_expl_id <> l_model_ref_expl_id THEN
15136             x_model_ref_expl_id_changed := G_YES_FLAG;
15137           ELSE
15138             x_model_ref_expl_id_changed := G_NO_FLAG;
15139           END IF;
15140         END IF;
15141 
15142         -- Developer writes element_type 521 (UI Region) for the root_region of a user created page
15143         -- UI Gen/ Refresh writes element_type 520 (UI Page) for the same region. So we cannot reply only
15144         -- on element_type to determine if the page element is for the root region of the page
15145         -- Hence we check for parent_element_id also
15146         IF ( (i.element_type IS NOT NULL AND i.element_type = G_UI_PAGE_NODE_TYPE) OR i.parent_element_id IS NULL ) THEN
15147 
15148           -- If the node is a page node then we dont try to move the node to another page
15149           -- but we do have to fix the path of the page and the associated page ref
15150 
15151           move_page_ref(i, p_ps_node, l_parent_page_ref_id);
15152           replace_page_ref_target_path(i, p_ps_node);
15153 
15154 
15155         ELSE
15156           --DEBUG('asp:Found UI for moved PS node ' || p_ps_node.name || ', element_id ' || i.element_id);
15157           -- Determine if this needs to be moved
15158 
15159           l_parent_node_found := FALSE;
15160 
15161           -- Find the parent under which to add UI for this node
15162           get_parent_ui_node(p_ps_node,
15163                              p_ord_siblings,
15164                              p_ps_node_index,
15165                              l_parent_ui_node,
15166                              l_insert_index,
15167                              l_parent_node_found,
15168                              l_atleast_one_parent_found);
15169 
15170           IF l_parent_node_found THEN
15171 
15172             g_tgt_pg_to_src_pg_map(l_parent_ui_node.page_id)(TO_NUMBER(i.element_id)) := i.page_id;
15173             g_elements_to_move(i.page_id)(TO_NUMBER(i.element_id)) := TO_NUMBER(i.element_id);
15174 
15175             IF l_insert_index > 0 THEN
15176               l_max_prev_seq_nbr := l_insert_index-1;
15177             ELSE
15178               SELECT NVL(MAX(seq_nbr),0) INTO l_max_prev_seq_nbr FROM CZ_UI_PAGE_ELEMENTS
15179               START WITH ui_def_id=g_UI_Context.ui_def_id AND
15180                      page_id=l_parent_ui_node.page_id AND
15181                      element_id=l_parent_ui_node.element_id AND
15182                      deleted_flag NOT IN (G_YES_FLAG, G_LIMBO_FLAG)
15183               CONNECT BY PRIOR ui_def_id=g_UI_Context.ui_def_id AND
15184                   ui_def_id=g_UI_Context.ui_def_id AND PRIOR page_id= l_parent_ui_node.page_id AND
15185                   page_id=l_parent_ui_node.page_id AND PRIOR element_id=parent_element_id AND
15186                   PRIOR deleted_flag NOT IN (G_YES_FLAG, G_LIMBO_FLAG) AND
15187                   deleted_flag NOT IN (G_YES_FLAG, G_LIMBO_FLAG);
15188 
15189                   l_insert_index  := l_max_prev_seq_nbr + 1;
15190             END IF;
15191 
15192             SELECT NVL(MAX(seq_nbr),0), NVL(COUNT(seq_nbr), 0) INTO l_max_src_seq_nbr, l_count  FROM CZ_UI_PAGE_ELEMENTS
15193             START WITH ui_def_id=g_UI_Context.ui_def_id AND
15194                        page_id=i.page_id AND
15195                        element_id=i.element_id AND
15196                        deleted_flag NOT IN (G_YES_FLAG, G_LIMBO_FLAG)
15197             CONNECT BY PRIOR ui_def_id=g_UI_Context.ui_def_id AND
15198                     ui_def_id=g_UI_Context.ui_def_id AND PRIOR page_id= i.page_id
15199                     AND page_id=i.page_id AND PRIOR element_id=parent_element_id AND
15200                     PRIOR deleted_flag NOT IN (G_YES_FLAG, G_LIMBO_FLAG) AND
15201                     deleted_flag NOT IN (G_YES_FLAG, G_LIMBO_FLAG);
15202 
15203             l_src_range := l_max_src_seq_nbr - i.seq_nbr + 1;
15204 
15205             -- move the elements after the insert point by adding the range value computed above
15206             UPDATE CZ_UI_PAGE_ELEMENTS
15207             SET seq_nbr=seq_nbr+l_src_range
15208             WHERE ui_def_id=g_UI_Context.ui_def_id AND
15209                   page_id=l_parent_ui_node.page_id AND
15210                   seq_nbr>l_max_prev_seq_nbr AND
15211                   deleted_flag NOT IN (G_YES_FLAG, G_LIMBO_FLAG);
15212 
15213             l_diff := l_insert_index - i.seq_nbr;
15214 
15215             UPDATE CZ_UI_PAGE_ELEMENTS
15216             SET seq_nbr=seq_nbr + l_diff,
15217                 page_id=l_parent_ui_node.page_id,
15218                 pagebase_persistent_node_id=l_parent_ui_node.pagebase_persistent_node_id,
15219                 deleted_flag=DECODE(deleted_flag, G_MARK_TO_DELETE, G_NO_FLAG, deleted_flag)
15220             WHERE ui_def_id=g_UI_Context.ui_def_id AND
15221                   page_id=i.page_id AND
15222                   seq_nbr >= i.seq_nbr AND
15223                   seq_nbr <= l_max_src_seq_nbr AND
15224                   deleted_flag NOT IN(G_YES_FLAG, G_LIMBO_FLAG);
15225 
15226             IF i.deleted_flag <> G_MARK_TO_DELETE THEN
15227               UPDATE CZ_UI_PAGE_ELEMENTS
15228               SET seq_nbr=seq_nbr - l_count
15229               WHERE ui_def_id=g_UI_Context.ui_def_id AND
15230                     page_id=i.page_id AND
15231                     seq_nbr > l_max_src_seq_nbr AND
15232                     deleted_flag NOT IN(G_YES_FLAG, G_LIMBO_FLAG);
15233             END IF;
15234 
15235             UPDATE CZ_UI_PAGE_ELEMENTS
15236             SET parent_element_id = l_parent_ui_node.element_id,
15237                 parent_persistent_node_id = l_parent_ps_node.persistent_node_id,
15238                 region_persistent_node_id = l_parent_ui_node.persistent_node_id,
15239                 deleted_flag = G_MARK_TO_MOVE
15240             WHERE ui_def_id = i.ui_def_id AND
15241                  page_Id = l_parent_ui_node.page_Id AND
15242                  element_id = i.element_id;
15243 
15244 
15245             mark_UI_Page_As_Refreshed(l_parent_ui_node.page_id, l_parent_ui_node.ui_def_id);
15246 
15247             -- update the page_rev_nbr of the other (source) page
15248             UPDATE CZ_UI_PAGES
15249               SET page_rev_nbr=page_rev_nbr+1
15250               WHERE page_id=i.page_id AND ui_def_id=i.ui_def_id;
15251 
15252           ELSE -- If parent_node not found
15253             -- We cannot move this node to another region since we have not found any such
15254             -- region which can hold this node
15255             -- So we will try and keep this node where it is. We will however have to
15256             -- update the model_path of this control and all controls under it.
15257             -- So lets just mark this node for refresh and let the second pass do the model_path
15258             -- update
15259 
15260 
15261 
15262             SELECT pagebase_expl_node_id INTO l_pagebase_expl_node_id
15263               FROM CZ_UI_PAGES
15264              WHERE ui_def_id=g_UI_Context.ui_def_id
15265                AND page_id = i.page_id
15266                AND deleted_flag NOT IN(G_LIMBO_FLAG,G_MARK_TO_DELETE,G_YES_FLAG);
15267 
15268 
15269             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);
15270 
15271             l_node_is_reachable :=CZ_DEVELOPER_UTILS_PVT.in_boundary(l_pagebase_expl_node_id,
15272                                                                      l_model_ref_expl_id,
15273                                                                      i.persistent_node_id);
15274 
15275             DEBUG('asp: l_node_is_reachable = ' || l_node_is_reachable);
15276 
15277             IF l_node_is_reachable=0 THEN
15278               -- The PS node associated to this control is not reachable from the current page
15279               -- So we have to disassociate this UI controls from the PS Node
15280 
15281               DEBUG('asp: Cannot move UI for ' || p_ps_node.name || '. Disassociating from PS Node');
15282 
15283               UPDATE CZ_UI_PAGE_ELEMENTS
15284                  SET deleted_flag = G_MARK_TO_DEASSOCIATE,
15285                      persistent_node_id = 0
15286                WHERE ui_def_id = i.ui_def_id
15287                  AND page_id = i.page_id
15288                  AND element_id IN
15289                     (SELECT element_id FROM CZ_UI_PAGE_ELEMENTS
15290                      START WITH ui_def_id=i.ui_def_id
15291                      AND page_id=i.page_id
15292                      AND element_id=i.element_id
15293                      CONNECT BY PRIOR ui_def_id=i.ui_def_id AND
15294                      page_id = i.page_id AND
15295                      PRIOR element_id=parent_element_id AND
15296                         deleted_flag IN (G_NO_FLAG, G_MARK_TO_ADD, G_MARK_TO_REFRESH,G_MARK_TO_MOVE));
15297             ELSE
15298               -- Mark the node for G_MARK_TO_REFRESH so that the second pass will
15299               -- change the model_path. This may not be necessary. Marking the page for
15300               -- refresh might be enough.
15301 
15302               DEBUG('asp: Cannot move UI for ' || p_ps_node.name || '. Marking it for refresh');
15303 
15304               UPDATE CZ_UI_PAGE_ELEMENTS
15305                  SET deleted_flag = G_MARK_TO_REFRESH
15306                WHERE ui_def_id = i.ui_def_id
15307                  AND page_id = i.page_id
15308                  AND element_id = i.element_id
15309                  AND deleted_flag IN (G_NO_FLAG, G_MARK_TO_REFRESH);
15310             END IF;
15311 
15312             mark_UI_Page_As_Refreshed(i.page_id, i.ui_def_id);
15313 
15314           END IF;
15315         END IF;
15316       END LOOP;
15317     END propogate_ps_node_move;
15318 
15319     PROCEDURE propogate_ps_node_type_changes(p_ps_node IN CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE,
15320                                              x_model_ref_expl_id_changed OUT NOCOPY VARCHAR) IS
15321 
15322     l_ui_node              CZ_UI_PAGE_ELEMENTS%ROWTYPE;
15323     l_model_ref_expl_id    NUMBER;
15324 
15325     BEGIN
15326 
15327       x_model_ref_expl_id_changed := 'U'; -- Unknown
15328 
15329       l_model_ref_expl_id := get_Expl_Id(p_model_id     => p_ps_node.devl_project_id,
15330                                          p_ps_node_id   => p_ps_node.ps_node_id,
15331                                          p_component_id => p_ps_node.component_id,
15332                                          p_ps_node_type => p_ps_node.ps_node_type);
15333       FOR i IN (SELECT *
15334                 FROM CZ_UI_PAGE_ELEMENTS pe
15335                 WHERE ui_def_Id = g_UI_Context.ui_def_id
15336                 AND persistent_node_id = p_ps_node.persistent_node_id
15337                 AND deleted_flag IN (G_NO_FLAG, G_MARK_TO_MOVE))
15338       LOOP
15339 
15340 
15341         -- This piece of code determines if the model_ref_expl_id of this page_element is
15342         -- different from the current explosion_id of the PS Node. If information is then
15343         -- used later to fix the explosion_ids
15344         IF x_model_ref_expl_id_changed <> G_YES_FLAG THEN
15345           IF i.model_ref_expl_id <> l_model_ref_expl_id THEN
15346             x_model_ref_expl_id_changed := G_YES_FLAG;
15347           ELSE
15348             x_model_ref_expl_id_changed := G_NO_FLAG;
15349           END IF;
15350         END IF;
15351 
15352         l_ui_node := get_UI_Element(i.element_id, i.page_id);
15353         check_UI_Node_Changes(l_ui_node, p_ps_node);
15354 
15355       END LOOP;
15356 
15357     END propogate_ps_node_type_changes;
15358 
15359 
15360     FUNCTION ui_node_exits(p_ps_node IN CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE) RETURN BOOLEAN IS
15361 
15362     l_element_id  CZ_UI_PAGE_ELEMENTS.element_id%TYPE;
15363 
15364     BEGIN
15365 
15366       SELECT element_id into l_element_id FROM CZ_UI_PAGE_ELEMENTS
15367                     WHERE ui_def_id=g_UI_Context.ui_def_id
15368             AND persistent_node_id=p_ps_node.persistent_node_id
15369             AND deleted_flag=G_NO_FLAG and rownum < 2;
15370       -- need to return the element_id instead
15371       RETURN TRUE;
15372     EXCEPTION
15373       WHEN NO_DATA_FOUND THEN
15374         RETURN FALSE;
15375 
15376     END ui_node_exits;
15377 
15378     PROCEDURE reorder_tree_node(p_ps_node IN CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE) IS
15379 
15380       l_page_set_id   CZ_UI_PAGE_SETS.page_set_id%TYPE;
15381       l_page_ref      CZ_UI_PAGE_REFS%ROWTYPE;
15382 
15383       l_old_seq_nbr   NUMBER;
15384       l_new_seq_nbr   NUMBER;
15385       l_count         NUMBER;
15386       l_diff          NUMBER;
15387       l_range_min     NUMBER;
15388       l_range_max     NUMBER;
15389 
15390     BEGIN
15391 
15392       IF g_UI_Context.primary_navigation = G_MODEL_TREE_MENU THEN
15393         l_page_set_id := g_UI_Context.page_set_id;
15394 
15395         BEGIN
15396 
15397           SELECT min(seq_nbr), count(*) INTO l_old_seq_nbr, l_count
15398           FROM CZ_UI_PAGE_REFS
15399           WHERE ui_def_id = g_UI_Context.ui_def_id
15400           AND page_set_id = l_page_set_id
15401           AND target_persistent_node_id = p_ps_node.persistent_node_id
15402           AND deleted_flag = G_NO_FLAG;
15403 
15404           SELECT * INTO l_page_ref
15405           FROM CZ_UI_PAGE_REFS
15406           WHERE ui_def_id = g_UI_Context.ui_def_id
15407           AND page_set_id = l_page_set_id
15408           AND target_persistent_node_id = p_ps_node.persistent_node_id
15409           AND deleted_flag = G_NO_FLAG
15410           AND seq_nbr = l_old_seq_nbr
15411           AND rownum < 2;
15412 
15413           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);
15414 
15415           --DEBUG('asp: reordering tree node ' || p_ps_node.name || ', new seq is ' || l_new_seq_nbr);
15416 
15417           IF l_new_seq_nbr = l_old_seq_nbr THEN
15418             --DEBUG('asp: new seq_nbr same as old one');
15419             RETURN;
15420           END IF;
15421 
15422           IF l_new_seq_nbr > l_old_seq_nbr THEN
15423             l_range_max := l_new_seq_nbr - 1;
15424             l_range_min := l_old_seq_nbr + l_count;
15425             l_new_seq_nbr := l_new_seq_nbr - l_count;
15426           ELSE
15427             l_count := -l_count;
15428             l_range_min := l_new_seq_nbr;
15429             l_range_max := l_old_seq_nbr -1;
15430           END IF;
15431 
15432           --DEBUG('asp: l_range_min: ' || l_range_min || ', l_range_max ' || l_range_max);
15433 
15434           UPDATE CZ_UI_PAGE_REFS
15435           SET seq_nbr = seq_nbr - l_count
15436           WHERE ui_def_id = g_UI_Context.ui_def_id
15437           AND page_set_id = l_page_set_id
15438           AND parent_page_ref_id = l_page_ref.parent_page_ref_id
15439           AND target_persistent_node_id <> p_ps_node.persistent_node_id
15440           AND deleted_flag = G_NO_FLAG
15441           AND seq_nbr between l_range_min and l_range_max;
15442 
15443           l_diff := l_new_seq_nbr - l_old_seq_nbr;
15444 
15445           UPDATE CZ_UI_PAGE_REFS
15446           SET seq_nbr = seq_nbr + l_diff
15447           WHERE ui_def_id = g_UI_Context.ui_def_id
15448           AND page_set_id = l_page_set_id
15449           AND parent_page_ref_id = l_page_ref.parent_page_ref_id
15450           AND target_persistent_node_id = p_ps_node.persistent_node_id
15451           AND deleted_flag = G_NO_FLAG;
15452 
15453         EXCEPTION
15454           WHEN NO_DATA_FOUND THEN
15455             NULL;
15456         END;
15457 
15458       END IF;
15459 
15460     END reorder_tree_node;
15461 
15462     PROCEDURE fix_model_ref_expl_ids(p_ps_node IN CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE,
15463                                      x_model_ref_expl_changed OUT NOCOPY VARCHAR2) IS
15464       l_model_ref_expl_id NUMBER;
15465 
15466     BEGIN
15467 
15468 
15469       x_model_ref_expl_changed := 'U';
15470 
15471       l_model_ref_expl_id := get_Expl_Id(p_model_id     => p_ps_node.devl_project_id,
15472                                          p_ps_node_id   => p_ps_node.ps_node_id,
15473                                          p_component_id => p_ps_node.component_id,
15474                                          p_ps_node_type => p_ps_node.ps_node_type);
15475 
15476       FOR i in (SELECT *
15477                   FROM CZ_UI_PAGE_ELEMENTS
15478                  WHERE ui_def_id = g_UI_Context.ui_def_id
15479                    AND persistent_node_id = p_ps_node.persistent_node_id
15480                    AND deleted_flag NOT IN (G_YES_FLAG, G_LIMBO_FLAG))
15481       LOOP
15482 
15483         IF x_model_ref_expl_changed <> G_YES_FLAG THEN
15484           IF i.model_ref_expl_id <> l_model_ref_expl_id THEN
15485             x_model_ref_expl_changed := G_YES_FLAG;
15486           ELSE
15487             x_model_ref_expl_changed := G_NO_FLAG;
15488           END IF;
15489         END IF;
15490 
15491         sync_expl_ids(p_ps_node, i, l_model_ref_expl_id);
15492 
15493       END LOOP;
15494 
15495       IF x_model_ref_expl_changed = 'U' THEN
15496         x_model_ref_expl_changed := G_YES_FLAG;
15497       END IF;
15498 
15499     END fix_model_ref_expl_ids;
15500 
15501     PROCEDURE propogate_changes_to_UI(p_ps_node IN CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE,
15502                                       p_ord_siblings IN  model_nodes_tbl_type,
15503                                       p_ps_node_index IN NUMBER DEFAULT NULL,
15504                                       p_add_remove_flag IN VARCHAR2 DEFAULT G_EXISTS_FLAG,
15505                                       p_add_remove_timestamp IN DATE DEFAULT NULL,
15506                                       p_ancestor_moved IN BOOLEAN DEFAULT FALSE,
15507                                       p_model_ref_expl_changed IN VARCHAR2) IS
15508 
15509       l_added_ui                    BOOLEAN;
15510       l_removed_ui                  BOOLEAN;
15511 
15512       l_ps_node                     CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE;
15513       l_nodes_tbl                   model_nodes_tbl_type;
15514       l_seq_nodes_tbl               ui_page_el_int_tbl_type; -- fix for bug 6837809 : skudryav 28-Mar-2008
15515       l_non_del_child_nodes_tbl     model_nodes_tbl_type;
15516       l_new_ui_node                 CZ_UI_PAGE_ELEMENTS%ROWTYPE;
15517 
15518       l_timestamp_add               DATE;
15519       l_timestamp_remove            DATE;
15520       l_add_remove_flag             VARCHAR2(1);
15521       l_add_remove_timestamp        DATE;
15522       l_ps_node_index               NUMBER;
15523       l_moved_flag                  BOOLEAN;
15524       l_model_ref_expl_changed1     VARCHAR2(1) := 'U';
15525       l_model_ref_expl_changed2     VARCHAR2(1) := 'U';
15526       l_check_for_bom_table         BOOLEAN;
15527 
15528       l_bom_table_id                CZ_UI_PAGE_ELEMENTS.element_id%TYPE;
15529       l_page_id                     NUMBER;
15530 
15531       l_bom_parent_element          CZ_UI_PAGE_ELEMENTS.element_id%TYPE;
15532       l_suppress_refresh_flag       CZ_UI_PAGE_ELEMENTS.suppress_refresh_flag%TYPE;
15533 
15534     BEGIN
15535 
15536       l_added_ui := FALSE;
15537       l_removed_ui := FALSE;
15538 
15539       l_add_remove_flag := G_EXISTS_FLAG;
15540       l_add_remove_timestamp := p_add_remove_timestamp;
15541 
15542       l_timestamp_add := NVL(p_ps_node.UI_TIMESTAMP_ADD, g_UI_Context.UI_TIMESTAMP_REFRESH);
15543       l_timestamp_remove := NVL(p_ps_node.UI_TIMESTAMP_REMOVE, g_UI_Context.UI_TIMESTAMP_REFRESH);
15544 
15545       IF p_add_remove_flag = G_ADDED_FLAG THEN
15546         IF p_add_remove_timestamp > l_timestamp_add THEN
15547           l_timestamp_add := p_add_remove_timestamp;
15548         END IF;
15549       ELSIF p_add_remove_flag = G_REMOVED_FLAG THEN
15550         IF p_add_remove_timestamp > l_timestamp_remove THEN
15551           l_timestamp_remove := p_add_remove_timestamp;
15552         END IF;
15553       END IF;
15554 
15555       IF l_timestamp_add > g_UI_Context.UI_TIMESTAMP_REFRESH
15556          OR l_timestamp_remove > g_UI_Context.UI_TIMESTAMP_REFRESH THEN
15557 
15558            --DEBUG('asp:Handling PS Node ' || p_ps_node.name);
15559            --DEBUG('asp:asp:UI_TIMESTAMP_ADD ' || p_ps_node.UI_TIMESTAMP_ADD);
15560            --DEBUG('asp:UI_TIMESTAMP_REMOVE ' || p_ps_node.UI_TIMESTAMP_REMOVE);
15561            --DEBUG('asp:UI_TIMESTAMP_MOVE ' || p_ps_node.UI_TIMESTAMP_MOVE);
15562            --DEBUG('asp:UI_TIMESTAMP_CHANGETYPE ' || p_ps_node.UI_TIMESTAMP_CHANGETYPE);
15563            --DEBUG('asp:');
15564 
15565           IF l_timestamp_add > l_timestamp_remove
15566             AND p_ps_node.ui_omit <> G_YES_FLAG
15567             AND p_ps_node.deleted_flag = G_NO_FLAG THEN
15568             -- We need to add UI for this if not already present
15569             IF NOT ui_node_exits( p_ps_node ) THEN
15570               add_ui_for_node(p_ps_node, p_ord_siblings, p_ps_node_index, l_new_ui_node);
15571               l_add_remove_flag := G_ADDED_FLAG;
15572               l_add_remove_timestamp := l_timestamp_add;
15573               l_added_ui := TRUE;
15574             END IF;
15575          ELSE
15576            IF l_timestamp_remove > l_timestamp_add THEN
15577              -- We need to delete UI structure for this if present
15578              IF ui_node_exits( p_ps_node ) THEN
15579                propogate_ps_node_remove(p_ps_node);
15580                l_add_remove_flag := G_REMOVED_FLAG;
15581                l_add_remove_timestamp := l_timestamp_remove;
15582                l_removed_ui := TRUE;
15583              END IF;
15584            END IF;
15585          END IF;
15586 
15587       END IF; -- end of (ADD, REMOVE) > REFRESH
15588 
15589       -- If the UI was added, in the above code, then it would have been added in the
15590       -- a place according to the latest position of the model node and with a template
15591       -- compatible with the latest type of the model node. Hence we dont need to process
15592       -- for move or changetype events
15593       -- If the UI was deleted in the above code, there there is nothing to move or
15594       -- change type of
15595       IF p_ps_node.deleted_flag = G_NO_FLAG AND NOT ( l_added_ui OR l_removed_ui ) THEN
15596 
15597         IF NVL(p_ps_node.UI_TIMESTAMP_MOVE, g_UI_Context.UI_TIMESTAMP_REFRESH) > g_UI_Context.UI_TIMESTAMP_REFRESH THEN
15598           propogate_ps_node_move( p_ps_node, p_ord_siblings, p_ps_node_index, l_model_ref_expl_changed1 );
15599           l_moved_flag := TRUE;
15600         ELSE
15601           IF p_ancestor_moved THEN
15602             l_moved_flag := TRUE;
15603             replace_page_ref_target_path( p_ps_node );
15604           END IF;
15605           IF NVL(p_ps_node.UI_TIMESTAMP_REORDER, g_UI_Context.UI_TIMESTAMP_REFRESH) > g_UI_Context.UI_TIMESTAMP_REFRESH THEN
15606             reorder_tree_node(p_ps_node);
15607           END IF;
15608         END IF;
15609 
15610         IF NVL(p_ps_node.UI_TIMESTAMP_CHANGETYPE, g_UI_Context.UI_TIMESTAMP_REFRESH) > g_UI_Context.UI_TIMESTAMP_REFRESH THEN
15611           propogate_ps_node_type_changes( p_ps_node, l_model_ref_expl_changed2);
15612         END IF;
15613 
15614         IF l_model_ref_expl_changed1 = G_YES_FLAG OR
15615            l_model_ref_expl_changed2 = G_YES_FLAG OR
15616           (l_model_ref_expl_changed1 = 'U' AND l_model_ref_expl_changed2 = 'U' AND p_model_ref_expl_changed = G_YES_FLAG) THEN
15617 
15618             fix_model_ref_expl_ids(p_ps_node, l_model_ref_expl_changed1);
15619         ELSE
15620           l_model_ref_expl_changed1 := G_NO_FLAG;
15621         END IF;
15622       END IF;
15623 
15624       get_Child_Nodes(p_ps_node.ps_node_id,
15625                       G_YES_FLAG,  -- get all the nodes
15626                       l_seq_nodes_tbl,
15627                       l_nodes_tbl,
15628                       l_non_del_child_nodes_tbl,
15629                       G_YES_FLAG);
15630 
15631     --DEBUG('asp:Child count ' || l_seq_nodes_tbl.COUNT);
15632     IF l_seq_nodes_tbl.COUNT > 0 THEN
15633         l_ps_node_index := 0;
15634 
15635         l_check_for_bom_table := FALSE;
15636         -- If the parent node passed in to this procedure, is an BOM OC or a BOM Model
15637         -- and we did not add or remove a UI element for this BOM in this session
15638         -- then we need to check if any if a table for this OC/Model needs to be there in the UI
15639         -- based on new/ deleted Std items/ OCs
15640         IF (l_add_remove_flag = G_EXISTS_FLAG AND (p_ps_node.ps_node_type = G_BOM_OPTION_CLASS_TYPE OR
15641                  p_ps_node.ps_node_type = G_BOM_MODEL_TYPE) ) THEN
15642 
15643           l_check_for_bom_table := TRUE;
15644 
15645           BEGIN
15646             SELECT element_id, page_Id INTO l_bom_table_id, l_page_id
15647               FROM cz_ui_page_elements
15648              WHERE ui_def_Id = g_UI_Context.ui_def_id
15649                AND persistent_node_id = p_ps_node.persistent_node_id
15650                AND deleted_flag IN (G_NO_FLAG, G_MARK_TO_REFRESH)
15651                AND element_type = G_UI_BOMADDINST_NODE_TYPE
15652                AND rownum < 2;
15653           EXCEPTION
15654             WHEN NO_DATA_FOUND THEN
15655               l_bom_table_id := NULL;
15656           END;
15657         END IF;
15658 
15659         FOR i IN 1..l_seq_nodes_tbl.COUNT
15660         LOOP
15661           l_ps_node := l_seq_nodes_tbl(i);
15662           IF l_ps_node.deleted_flag = G_NO_FLAG THEN
15663             l_ps_node_index := l_ps_node_index + 1;
15664           END IF;
15665           IF( l_check_for_bom_table ) THEN
15666 
15667               -- We need to process Standard Items because we may need to add/ delete a BOM table
15668               -- if a Standard Item was added/ removed
15669               -- We go to add the table only when we have not made the decision based on a prior Standard Item/ Option Class
15670               -- or BOM Reference under this BOM. We also skip addition/ removal of the table if
15671               -- l_add_remove_flag = G_EXISTS_FLAG which implies that the BOM table for the parent was not added or removed
15672               -- in this refresh session. The G_EXISTS_FLAG is slightly misleading in the sense that it gives one the impression
15673               -- that UI Node for the Model node exists. G_EXISTS_FLAG simply means that the UI for the Model node was neither added
15674               -- nor removed during this refresh session
15675               IF( l_bom_table_id IS NOT NULL ) THEN
15676 
15677                 IF( NVL(l_ps_node.UI_TIMESTAMP_REMOVE, g_UI_Context.UI_TIMESTAMP_REFRESH) > g_UI_Context.UI_TIMESTAMP_REFRESH) THEN
15678 
15679                   -- mark the flag so that we dont do the same for other children
15680                   l_check_for_bom_table := FALSE;
15681 
15682                   IF NOT(contains_BOM_Nodes(p_ps_node.ps_node_id)) THEN
15683                       UPDATE CZ_UI_PAGE_ELEMENTS
15684                          SET deleted_flag=G_MARK_TO_DELETE
15685                        WHERE ui_def_id=g_UI_Context.ui_def_id
15686                          AND page_id = l_page_id
15687                          AND element_Id = l_bom_table_id;
15688 
15689                       mark_UI_Page_As_Refreshed(l_page_id, g_UI_Context.ui_def_id);
15690 
15691                   END IF;
15692                 END IF;
15693               ELSE
15694                 IF( NVL(l_ps_node.UI_TIMESTAMP_ADD, g_UI_Context.UI_TIMESTAMP_REFRESH) > g_UI_Context.UI_TIMESTAMP_REFRESH) THEN
15695                   IF (contains_BOM_Nodes(p_ps_node.ps_node_id)) THEN
15696                     --
15697                     -- Add bom table here
15698                     --
15699                     FOR m IN(SELECT page_id, pagebase_expl_node_id FROM CZ_UI_PAGES
15700                               WHERE ui_def_id=g_UI_Context.ui_def_id AND
15701                                     deleted_flag IN(G_NO_FLAG, G_MARK_TO_REFRESH)  AND
15702                                     persistent_node_id = p_ps_node.persistent_node_id)
15703                     LOOP
15704                       SELECT element_id, suppress_refresh_flag
15705                         INTO l_bom_parent_element, l_suppress_refresh_flag
15706                         FROM CZ_UI_PAGE_ELEMENTS
15707                        WHERE ui_def_id=g_UI_Context.ui_def_id AND page_id=m.page_id AND
15708                              parent_element_id IS NULL AND persistent_node_id=p_ps_node.persistent_node_id AND
15709                              pagebase_persistent_node_id=region_persistent_node_id AND
15710                              pagebase_persistent_node_id=p_ps_node.persistent_node_id AND
15711                              deleted_flag=G_NO_FLAG;
15712 
15713                       IF NVL(l_suppress_refresh_flag, G_NO_FLAG)=G_NO_FLAG THEN
15714                         add_BOM_Node
15715                          (p_node                        => p_ps_node,
15716                           p_page_id                     => m.page_id,
15717                           p_pagebase_expl_node_id       => m.pagebase_expl_node_id,
15718                           p_parent_element_id           => l_bom_parent_element,
15719                           p_pagebase_persistent_node_id => p_ps_node.persistent_node_id,
15720                           p_check_child_bom_nodes       => G_NO_FLAG );
15721                       END IF;
15722                     END LOOP;
15723 
15724                     -- mark the flag so that we dont do the same for other children
15725                     l_check_for_bom_table := FALSE;
15726                   END IF;
15727                 END IF;
15728               END IF;
15729           END IF;
15730 
15731           IF l_ps_node.ps_node_type NOT IN (G_OPTION_TYPE, G_BOM_STANDART_ITEM_TYPE) THEN
15732             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);
15733           END IF;
15734         END LOOP;
15735     END IF;
15736 
15737     END propogate_changes_to_UI;
15738 
15739 
15740     PROCEDURE refresh_UI_new(p_ui_timestamp_refresh IN DATE) IS
15741 
15742       l_root_persistent_node_id     NUMBER;
15743       l_nodes_tbl                   model_nodes_tbl_type;
15744       l_seq_nodes_tbl               ui_page_el_int_tbl_type; -- fix for bug 6837809 : skudryav 28-Mar-2008
15745       l_non_del_child_nodes_tbl     model_nodes_tbl_type;
15746       l_ui_nodes_tbl                ui_page_elements_tbl_type;
15747       l_next_level_ui_pages_tbl     ui_page_elements_tbl_type;
15748 
15749       l_ps_node                     CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE;
15750       l_empty_siblings_tbl          model_nodes_tbl_type;
15751 
15752     BEGIN
15753 
15754       -- start with the root of the model
15755       l_root_persistent_node_id := get_Root_Persistent_Node_Id();
15756       l_ps_node := get_Model_Node_By_Persist_Id(l_root_persistent_node_id,
15757                                                 g_UI_Context.devl_project_id);
15758 
15759       get_Child_Nodes(l_ps_node.ps_node_id,
15760                       G_YES_FLAG,  -- get all the nodes
15761                       l_seq_nodes_tbl,
15762                       l_nodes_tbl,
15763                       l_non_del_child_nodes_tbl,
15764                       G_YES_FLAG);
15765 
15766     --DEBUG('asp:Last UI Refresh done at ' || p_ui_timestamp_refresh);
15767       propogate_changes_to_UI(l_ps_node, l_empty_siblings_tbl, -1, G_EXISTS_FLAG, p_ui_timestamp_refresh, FALSE, G_NO_FLAG);
15768 
15769 
15770   END refresh_UI_new;
15771 
15772   --
15773   -- check for UI nodes which have AMNs from referenced models
15774   -- and if there are some such UI nodes then mark corresponding UI pages
15775   -- as MARK_TO_REFRESH
15776   --
15777   PROCEDURE check_Ref_AMNs IS
15778 
15779     TYPE xml_dom_docs_tbl_type  IS TABLE OF xmldom.DOMDocument INDEX BY VARCHAR2(255);
15780     l_doc_cache_tbl     xml_dom_docs_tbl_type;
15781     l_expl_id           NUMBER;
15782     l_node_is_reachable NUMBER := -1;
15783     l_has_unreach       BOOLEAN := FALSE;
15784     l_xml_doc           xmldom.DOMDocument;
15785     l_xml_node          xmldom.DOMNode;
15786     l_null_xml_doc      xmldom.DOMDocument;
15787     l_instance_list_amn expl_node_persistent_id_pair;
15788     l_ui_node           CZ_UI_PAGE_ELEMENTS%ROWTYPE;
15789 
15790   BEGIN
15791 
15792     FOR t IN (SELECT ps_node_id,persistent_node_id as psnode_persistent_node_id,ps_node_type,component_id
15793                 FROM CZ_PS_NODES psnode
15794                START WITH psnode.devl_project_id IN
15795                      (SELECT refexpl.component_id FROM CZ_MODEL_REF_EXPLS refexpl
15796                          WHERE refexpl.model_id=g_UI_Context.devl_project_id AND
15797                                refexpl.ps_node_type=G_REFERENCE_TYPE AND refexpl.deleted_flag='0') AND
15798                        psnode.deleted_flag='0' AND
15799                        ( psnode.ui_timestamp_move > NVL(g_UI_Context.ui_timestamp_refresh, g_UI_Context.creation_date) OR
15800                          psnode.ui_timestamp_changetype > NVL(g_UI_Context.ui_timestamp_refresh, g_UI_Context.creation_date)  )
15801                 CONNECT BY PRIOR ps_node_id=parent_id AND deleted_flag='0'
15802                )
15803     LOOP
15804 
15805         SELECT MIN(model_ref_expl_id) INTO l_expl_id FROM CZ_MODEL_REF_EXPLS
15806          WHERE model_id=g_UI_Context.devl_project_id AND deleted_flag='0' AND
15807               ((t.ps_node_type NOT IN(G_REFERENCE_TYPE,G_CONNECTOR_TYPE) AND component_id=t.component_id) OR
15808               (t.ps_node_type IN(G_REFERENCE_TYPE,G_CONNECTOR_TYPE) AND referring_node_id=t.ps_node_id));
15809 
15810         FOR upgel IN(SELECT b.*,a.pagebase_expl_node_id,a.jrad_doc FROM CZ_UI_PAGES a,CZ_UI_PAGE_ELEMENTS b
15811                       WHERE a.ui_def_id=g_UI_Context.ui_def_id AND b.ui_def_id=g_UI_Context.ui_def_id AND
15812                             a.deleted_flag IN(G_MARK_TO_ADD, G_MARK_TO_REFRESH, G_NO_FLAG) AND
15813                             a.page_id=b.page_id AND
15814                             b.persistent_node_id = t.psnode_persistent_node_id)
15815         LOOP
15816 
15817           UPDATE CZ_UI_PAGE_ELEMENTS
15818              SET model_ref_expl_id=l_expl_id
15819            WHERE ui_def_id=g_UI_Context.ui_def_id AND
15820                  page_id=upgel.page_id AND
15821                  persistent_node_id=t.psnode_persistent_node_id AND
15822                  model_ref_expl_id<>l_expl_id;
15823 
15824           UPDATE CZ_UI_PAGES
15825              SET pagebase_expl_node_id=l_expl_id
15826            WHERE ui_def_id=g_UI_Context.ui_def_id AND
15827                  page_id=upgel.page_id AND
15828                  persistent_node_id=t.psnode_persistent_node_id AND
15829                  pagebase_expl_node_id<>l_expl_id;
15830 
15831           UPDATE CZ_UI_PAGE_SETS
15832              SET pagebase_expl_node_id=l_expl_id
15833            WHERE ui_def_id=g_UI_Context.ui_def_id AND
15834                  persistent_node_id=t.psnode_persistent_node_id AND
15835                  pagebase_expl_node_id<>l_expl_id;
15836 
15837           UPDATE CZ_UI_PAGE_REFS
15838              SET target_expl_node_id=l_expl_id
15839            WHERE ui_def_id=g_UI_Context.ui_def_id AND
15840                  target_persistent_node_id=t.psnode_persistent_node_id AND
15841                  target_expl_node_id<>l_expl_id;
15842 
15843           UPDATE CZ_UI_ACTIONS
15844              SET target_expl_node_id=l_expl_id
15845            WHERE ui_def_id=g_UI_Context.ui_def_id AND
15846                  target_persistent_node_id=t.psnode_persistent_node_id AND
15847                  target_expl_node_id<>l_expl_id;
15848 
15849           IF upgel.deleted_flag=G_NO_FLAG THEN
15850              UPDATE CZ_UI_PAGES
15851                 SET deleted_flag=G_MARK_TO_REFRESH
15852               WHERE ui_def_id=g_UI_Context.ui_def_id AND
15853                     page_id=upgel.page_id AND
15854                     deleted_flag=G_NO_FLAG;
15855           END IF;
15856 
15857           l_node_is_reachable :=CZ_DEVELOPER_UTILS_PVT.in_boundary(upgel.pagebase_expl_node_id,
15858                                                                    l_expl_id,
15859                                                                    t.psnode_persistent_node_id);
15860           IF l_node_is_reachable=0 THEN
15861             IF l_doc_cache_tbl.EXISTS(upgel.jrad_doc) THEN
15862               l_xml_doc := l_doc_cache_tbl(upgel.jrad_doc);
15863             ELSE
15864               l_xml_doc := parse_JRAD_Document(upgel.jrad_doc);
15865             END IF;
15866 
15867             l_xml_node := find_XML_Node_By_Attribute(l_xml_doc, G_ID_ATTRIBUTE, upgel.element_id);
15868 
15869             SELECT * INTO l_ui_node FROM CZ_UI_PAGE_ELEMENTS
15870              WHERE ui_def_id=g_UI_Context.ui_def_id AND
15871                    page_id=upgel.page_id AND
15872                    element_id=upgel.element_id;
15873 
15874             l_instance_list_amn := getEnclosingInstanceListAMN(l_ui_node, l_xml_node);
15875 
15876             IF l_instance_list_amn.persistent_node_id IS NULL THEN
15877               l_has_unreach := TRUE;
15878               add_Error_Message(p_message_name => 'CZDEV_UI_ERR_VIR_BDR_BIND',
15879                                 p_token_name   => 'PICKEDNODENAME',
15880                                 p_token_value  => upgel.name,
15881                                 p_fatal_error  => TRUE);
15882             END IF;
15883           END IF;
15884         END LOOP;
15885       END LOOP;
15886 
15887       IF l_has_unreach THEN
15888         RAISE UNREACH_UI_NODE;
15889       END IF;
15890 
15891   END check_Ref_AMNs;
15892 
15893   --
15894   -- populate UI tables
15895   --
15896   PROCEDURE populate_UI_Structures IS
15897     l_num_if_roots              NUMBER;
15898     l_target_persistent_node_id NUMBER;
15899     l_page_set_id               NUMBER;
15900     l_page_set_type             NUMBER;
15901     l_page_ref_id               NUMBER;
15902     l_ui_timestamp_refresh      DATE;
15903   BEGIN
15904 
15905     IF NVL(g_UI_Context.suppress_refresh_flag, G_NO_FLAG)=G_YES_FLAG THEN
15906       RETURN;
15907     END IF;
15908 /*
15909     FOR i IN(SELECT ps_node_id FROM CZ_PS_NODES a
15910              WHERE devl_project_id=g_UI_Context.devl_project_id AND
15911                    ps_node_type IN(258,259,436,437) AND
15912                    deleted_flag=G_YES_FLAG AND EXISTS(SELECT NULL
15913                    FROM CZ_UI_PAGE_ELEMENTS WHERE ui_def_id=g_UI_Context.ui_def_id AND
15914                    persistent_node_id=a.persistent_node_id AND deleted_flag=G_NO_FLAG))
15915     LOOP
15916       UPDATE CZ_PS_NODES
15917          SET deleted_flag=G_YES_FLAG
15918        WHERE ps_node_id IN
15919        (SELECT ps_node_id FROM CZ_PS_NODES
15920         START WITH ps_node_id=i.ps_node_id
15921         CONNECT BY PRIOR ps_node_id=parent_id);
15922     END LOOP;
15923 
15924     FOR i IN(SELECT ps_node_id FROM CZ_PS_NODES a
15925              WHERE devl_project_id=g_UI_Context.devl_project_id AND
15926                    ps_node_type IN(258,259,436,437) AND  ui_omit=G_YES_FLAG AND
15927                    deleted_flag=G_NO_FLAG AND EXISTS(SELECT NULL
15928                    FROM CZ_UI_PAGE_ELEMENTS WHERE ui_def_id=g_UI_Context.ui_def_id AND
15929                    persistent_node_id=a.persistent_node_id AND deleted_flag=G_NO_FLAG))
15930     LOOP
15931       UPDATE CZ_PS_NODES
15932          SET deleted_flag=G_YES_FLAG
15933        WHERE ps_node_id IN
15934        (SELECT ps_node_id FROM CZ_PS_NODES
15935         START WITH ps_node_id=i.ps_node_id
15936         CONNECT BY PRIOR ps_node_id=parent_id);
15937     END LOOP;
15938 */
15939     --
15940     -- refresh all UI elements associated with root of model tree
15941     --
15942     l_ui_timestamp_refresh := g_UI_Context.UI_TIMESTAMP_REFRESH;
15943 
15944     g_using_new_UI_refresh := FALSE;
15945 
15946     IF l_ui_timestamp_refresh IS NULL THEN
15947 
15948       FOR i IN (SELECT ui_def_id, element_id,page_id, suppress_refresh_flag
15949                   FROM CZ_UI_PAGE_ELEMENTS
15950                   WHERE ui_def_id = g_UI_Context.ui_def_id AND
15951                         parent_element_id IS NULL AND
15952                         deleted_flag IN (G_NO_FLAG, G_MARK_TO_ADD, G_MARK_TO_REFRESH))
15953       LOOP
15954 
15955         refresh_UI_Subtree(p_element_id            => i.element_id,
15956                            p_page_id               => i.page_id,
15957                            p_suppress_refresh_flag => i.suppress_refresh_flag);
15958       END LOOP;
15959       handle_CXs_For_nonUINodes();
15960     ELSE
15961       g_using_new_UI_refresh := TRUE;
15962       refresh_UI_new(l_ui_timestamp_refresh);
15963       handle_CXs();
15964     END IF;
15965 
15966     handle_Deleted_Nodes(g_UI_Context.ui_def_id);
15967 
15968     -- set correct order for UI elements
15969     handle_UI_Page_Elements_Order();
15970 
15971     -- split UI Pages
15972     split_Pages();
15973 
15974     -- handle empty UI Pages
15975     handle_Empty_Pages();
15976 
15977     -- set data for Page Sets
15978     handle_Page_Flows();
15979 
15980     handle_SLMenu_Order();
15981 
15982     IF g_check_boundaries_tbl.EXISTS(g_UI_Context.ui_def_id) THEN
15983       check_Boundaries();
15984     END IF;
15985 
15986     check_Ref_AMNs();
15987   END populate_UI_Structures;
15988 
15989 
15990   PROCEDURE backup_nodes_to_move(p_page_id   IN NUMBER) IS
15991 
15992     l_node_ids_table number_tbl_type;
15993     l_id             NUMBER;
15994     l_parent_node    xmldom.DOMNode;
15995     l_node           xmldom.DOMNode;
15996 
15997   BEGIN
15998 
15999     IF g_elements_to_move.EXISTS(p_page_Id) THEN
16000       l_node_ids_table := g_elements_to_move(p_page_Id);
16001       IF l_node_ids_table.COUNT > 0 THEN
16002         l_id := l_node_ids_table.FIRST;
16003         WHILE l_id IS NOT NULL
16004         LOOP
16005           DEBUG('asp: Backing up nested element_id ' || l_id || ' on page ' || l_node_ids_table(l_id));
16006           IF g_dom_elements_tbl.EXISTS(l_id) THEN
16007             l_node := g_dom_elements_tbl(l_id);
16008             g_dom_elements_to_move(l_id) := l_node;
16009             l_parent_node:=xmldom.getParentNode(l_node);
16010             l_node:=xmldom.removeChild(l_parent_node, l_node);
16011           END IF;
16012           -- ELSE the node has already been moved
16013           l_id := l_node_ids_table.NEXT(l_id);
16014         END LOOP;
16015       END IF;
16016     END IF;
16017 
16018   END backup_nodes_to_move;
16019 
16020   --
16021   -- delete UI XML elements from UI page
16022   --
16023   PROCEDURE delete_UIXML_Elements(p_page_id   IN NUMBER,
16024                                   p_xml_doc      xmldom.DOMDocument) IS
16025 
16026     l_deleted_nodes_tbl     varchar2_tbl_type;
16027     l_node                  xmldom.DOMNode;
16028     l_out_node              xmldom.DOMNode;
16029     l_parent_node           xmldom.DOMNode;
16030     l_nodeslist             xmldom.DOMNodeList;
16031     l_length                NUMBER;
16032     l_element_id            VARCHAR2(255);
16033     l_deleted_nodes_exist      BOOLEAN := FALSE;
16034     l_deassociated_nodes_exist BOOLEAN := FALSE;
16035 
16036   BEGIN
16037 
16038     backup_nodes_to_move(p_page_id);
16039     FOR i IN(SELECT element_id,deleted_flag FROM CZ_UI_PAGE_ELEMENTS
16040              WHERE ui_def_id= g_UI_Context.ui_def_id AND
16041                    page_id=p_page_id AND
16042                    deleted_flag IN(G_MARK_TO_DELETE,G_MARK_TO_DEASSOCIATE))
16043     LOOP
16044       BEGIN
16045         l_deleted_nodes_tbl(i.element_id) := i.deleted_flag;
16046       EXCEPTION
16047         WHEN OTHERS THEN
16048           NULL;
16049       END;
16050     END LOOP;
16051 
16052     --
16053     -- here we don't need to know about hierachy of nodes
16054     -- so we just need to get list of all nodes of XML subtree
16055     --
16056     l_nodeslist := xmldom.getElementsByTagName(p_xml_doc, '*');
16057     l_length    := xmldom.getLength(l_nodeslist);
16058 
16059     --
16060     -- delete XML elements
16061     --
16062     FOR i IN 0..l_length-1
16063     LOOP
16064         l_node := xmldom.item(l_nodeslist, i);
16065         l_element_id := get_Attribute_Value(l_node, G_ID_ATTRIBUTE);
16066         BEGIN
16067           IF l_deleted_nodes_tbl.EXISTS(l_element_id) THEN
16068 
16069              IF l_deleted_nodes_tbl(l_element_id)=G_MARK_TO_DELETE THEN
16070                l_parent_node:=xmldom.getParentNode(l_node);
16071                l_out_node:=xmldom.removeChild(l_parent_node,l_node);
16072                l_deleted_nodes_exist := TRUE;
16073              ELSE -- deassociate this node
16074                set_Attribute(l_node, G_USER_ATTRIBUTE1_NAME, 'model_path=*');
16075                set_Attribute(l_node, G_USER_ATTRIBUTE2_NAME, '0');
16076                l_deassociated_nodes_exist := TRUE;
16077              END IF;
16078           END IF;
16079         EXCEPTION
16080           WHEN OTHERS THEN
16081                NULL;
16082         END;
16083     END LOOP;
16084 
16085     --
16086     -- mark elements as already deleted,
16087     -- update revision of deleted UI page
16088     --
16089     IF l_deleted_nodes_exist THEN
16090 
16091       refresh_UI_Node_Marks(p_page_id => p_page_id,
16092                             p_hmode   => G_DELETE_ELEMENTS);
16093     END IF;
16094 
16095     IF l_deassociated_nodes_exist THEN
16096       UPDATE CZ_UI_PAGE_ELEMENTS
16097          SET deleted_flag=G_NO_FLAG
16098        WHERE ui_def_id=g_UI_Context.ui_def_id AND
16099              page_id=p_page_id AND
16100              deleted_flag=G_MARK_TO_DEASSOCIATE;
16101       IF SQL%ROWCOUNT>0 THEN
16102         UPDATE CZ_UI_PAGES
16103            SET page_rev_nbr=page_rev_nbr+1
16104          WHERE page_id=p_page_id AND
16105                ui_def_id=g_UI_Context.ui_def_id;
16106       END IF;
16107     END IF;
16108   END delete_UIXML_Elements;
16109 
16110   --
16111   -- delete UI XML page
16112   --
16113   PROCEDURE delete_UIXML_Page(p_page_id   IN NUMBER,
16114                               p_jrad_doc  IN VARCHAR2) IS
16115 
16116     l_subtree_doc           xmldom.DOMDocument;
16117 
16118   BEGIN
16119     BEGIN
16120       IF g_elements_to_move.EXISTS(p_page_Id) THEN
16121         l_subtree_doc := parse_JRAD_Document(p_jrad_doc);
16122 
16123         IF xmldom.isNull(l_subtree_doc) THEN
16124            add_Error_Message(p_message_name => 'CZ_WRONG_UI_TEMPLATE',
16125                              p_token_name   => 'UI_TEMPLATE',
16126                              p_token_value  => p_jrad_doc,
16127                              p_fatal_error  => TRUE);
16128            RAISE WRONG_UI_TEMPLATE;
16129         END IF;
16130 
16131         init_Page_View_Counters(l_subtree_doc);
16132         backup_nodes_to_move(p_page_Id);
16133       ELSE
16134         l_subtree_doc := parse_JRAD_Document(p_jrad_doc);
16135         IF xmldom.isNull(l_subtree_doc) THEN
16136            add_Error_Message(p_message_name => 'CZ_WRONG_UI_TEMPLATE',
16137                              p_token_name   => 'UI_TEMPLATE',
16138                              p_token_value  => p_jrad_doc,
16139                              p_fatal_error  => TRUE);
16140            RAISE WRONG_UI_TEMPLATE;
16141         ELSE
16142           UPDATE CZ_UI_PAGE_ELEMENTS
16143              SET deleted_flag=G_MARK_TO_DELETE
16144            WHERE ui_def_id=g_UI_Context.ui_def_id AND
16145                  page_id=p_page_id AND
16146                  deleted_flag NOT IN(G_MARK_TO_DELETE,G_YES_FLAG);
16147         END IF;
16148         init_Page_View_Counters(l_subtree_doc);
16149       END IF;
16150 
16151       --
16152       -- delete JRAD XML elements that marked to be deleted
16153       --
16154       delete_UIXML_Elements(p_page_id   => p_page_id,
16155                             p_xml_doc   => l_subtree_doc);
16156 
16157     EXCEPTION
16158       WHEN OTHERS THEN
16159         DEBUG('delete_UIXML_Page() : '||SQLERRM);
16160     END;
16161 
16162     BEGIN
16163       jdr_docbuilder.deleteDocument(p_jrad_doc);
16164     EXCEPTION
16165       WHEN OTHERS THEN
16166         DEBUG('delete_UIXML_Page() : '||SQLERRM);
16167     END;
16168 
16169     --
16170     -- mark elements and page as already deleted,
16171     --
16172     refresh_UI_Node_Marks(p_page_id => p_page_id,
16173                           p_hmode   => G_DELETE_PAGE);
16174 
16175   END delete_UIXML_Page;
16176 
16177   --
16178   -- refresh CXs on UI Page
16179   --
16180   PROCEDURE refresh_CXs_On_UI_Page
16181   (p_ui_page_id     NUMBER,
16182    p_subtree_doc    xmldom.DOMDocument) IS
16183 
16184     l_node                  xmldom.DOMNode;
16185     l_parent_node           xmldom.DOMNode;
16186     l_out_node              xmldom.DOMNode;
16187     l_nodeslist             xmldom.DOMNodeList;
16188     l_length                NUMBER;
16189     l_element_id            NUMBER;
16190     l_attribute_value       VARCHAR2(32000);
16191     l_cx_elements_tbl       varchar_tbl_type;
16192     l_suppress_refresh_tbl  varchar_tbl_type;
16193     l_suppress_el_flag_tbl  varchar_tbl_type;
16194     l_delete_node           BOOLEAN := FALSE;
16195     l_deassociate_cx        BOOLEAN := FALSE;
16196     l_suppress_refresh_flag CZ_UI_PAGE_ELEMENTS.suppress_refresh_flag%TYPE;
16197 
16198   BEGIN
16199     FOR i IN(SELECT * FROM CZ_UI_PAGE_ELEMENTS
16200              WHERE ui_def_id=g_UI_Context.ui_def_id AND
16201                    page_id=p_ui_page_id AND
16202                    element_type=G_UI_CX_BUTTON_NODE_TYPE AND
16203                    deleted_flag IN(G_NO_FLAG, G_MARK_TO_REFRESH))
16204     LOOP
16205        l_element_id := TO_NUMBER(i.element_id);
16206        l_cx_elements_tbl(l_element_id) := get_CX_Button_Status(i);
16207        l_suppress_el_flag_tbl(l_element_id) := NVL(i.suppress_refresh_flag, G_NO_FLAG);
16208        -- check suppress_refresh_flag of its container
16209        l_suppress_refresh_flag := G_NO_FLAG;
16210        IF i.parent_element_id IS NOT NULL THEN
16211          BEGIN
16212            SELECT NVL(suppress_refresh_flag,G_NO_FLAG) INTO l_suppress_refresh_flag
16213              FROM CZ_UI_PAGE_ELEMENTS
16214             WHERE ui_def_id=g_UI_Context.ui_def_id AND
16215                   page_id=p_ui_page_id AND
16216                   element_id=i.parent_element_id;
16217          END;
16218        END IF;
16219        l_suppress_refresh_tbl(l_element_id) := l_suppress_refresh_flag;
16220     END LOOP;
16221 
16222     --
16223     -- here we don't need to know about hierachy of nodes
16224     -- so we just need to get list of all nodes of XML subtree
16225     --
16226     l_nodeslist := xmldom.getElementsByTagName(p_subtree_doc, '*');
16227     l_length    := xmldom.getLength(l_nodeslist);
16228 
16229     l_node := xmldom.makeNode(xmldom.getDocumentElement(p_subtree_doc));
16230 
16231     --
16232     -- scan subtree and substitute macros "%" to real values
16233     --
16234     FOR i IN 0 .. l_length - 1
16235     LOOP
16236       l_delete_node     := FALSE;
16237       l_deassociate_cx  := FALSE;
16238       l_node            := xmldom.item(l_nodeslist, i);
16239       l_attribute_value := get_Attribute_Value(l_node, G_ID_ATTRIBUTE );
16240       l_element_id := NULL;
16241       BEGIN
16242         l_element_id := TO_NUMBER(l_attribute_value);
16243         IF l_cx_elements_tbl.EXISTS(l_element_id) THEN
16244 
16245           IF l_cx_elements_tbl(l_element_id) IN (G_CX_VALID) AND
16246              l_suppress_refresh_tbl(l_element_id)=G_NO_FLAG AND
16247              l_suppress_el_flag_tbl(l_element_id)=G_NO_FLAG THEN
16248              set_Attribute(xmldom.makeElement(l_node), 'rendered', 'true');
16249           ELSIF l_cx_elements_tbl(l_element_id) IN (G_CX_INVALID) AND
16250              l_suppress_refresh_tbl(l_element_id)=G_NO_FLAG  AND
16251              l_suppress_el_flag_tbl(l_element_id)=G_NO_FLAG THEN
16252              set_Attribute(xmldom.makeElement(l_node), 'rendered', 'false');
16253           ELSIF l_cx_elements_tbl(l_element_id) IN (G_CX_MUST_BE_DELETED) THEN
16254              l_delete_node := TRUE;
16255              IF  l_suppress_refresh_tbl(l_element_id)=G_YES_FLAG  OR
16256                  l_suppress_el_flag_tbl(l_element_id)=G_YES_FLAG THEN
16257                l_deassociate_cx := TRUE;
16258              END IF;
16259           END IF;
16260         END IF;
16261       EXCEPTION
16262         WHEN OTHERS THEN
16263           NULL;
16264       END;
16265 
16266       IF l_delete_node THEN
16267         IF l_deassociate_cx THEN
16268           set_Attribute(l_node, G_USER_ATTRIBUTE1_NAME, 'model_path=*');
16269           set_Attribute(l_node, G_USER_ATTRIBUTE2_NAME, '0');
16270 
16271           UPDATE CZ_UI_PAGE_ELEMENTS
16272              SET persistent_node_id=0
16273            WHERE ui_def_id=g_UI_Context.ui_def_id AND
16274                  page_id=p_ui_page_id AND
16275                  element_id=l_attribute_value;
16276         ELSE
16277           l_parent_node:=xmldom.getParentNode(l_node);
16278           l_out_node:=xmldom.removeChild(l_parent_node,l_node);
16279           UPDATE CZ_UI_PAGE_ELEMENTS
16280              SET deleted_flag=G_YES_FLAG
16281            WHERE ui_def_id=g_UI_Context.ui_def_id AND
16282                  page_id=p_ui_page_id AND
16283                  element_id=l_attribute_value;
16284         END IF;
16285       END IF;
16286 
16287     END LOOP;
16288 
16289     UPDATE CZ_UI_PAGES
16290        SET page_rev_nbr=page_rev_nbr+1
16291     WHERE ui_def_id=g_UI_Context.ui_def_id AND
16292           page_id=p_ui_page_id;
16293 
16294   END refresh_CXs_On_UI_Page;
16295 
16296   --
16297   -- populate cache of xml nodes for a given XML page
16298   --
16299   PROCEDURE cache_UI_Page(p_xml_doc  xmldom.DOMDocument) IS
16300     l_node            xmldom.DOMNode;
16301     l_nodeslist       xmldom.DOMNodeList;
16302     l_empty_xml_node  xmldom.DOMNode;
16303     l_length          NUMBER;
16304     l_attribute_value VARCHAR2(32000);
16305 
16306   BEGIN
16307 
16308     g_page_elements_tbl.DELETE;
16309 
16310     l_nodeslist := xmldom.getElementsByTagName(p_xml_doc, '*');
16311     l_length    := xmldom.getLength(l_nodeslist);
16312 
16313     l_node := xmldom.makeNode(xmldom.getDocumentElement(p_xml_doc));
16314 
16315     l_attribute_value := get_Attribute_Value(l_node, G_ID_ATTRIBUTE);
16316 
16317     IF l_attribute_value IS NOT NULL THEN
16318       g_page_elements_tbl(l_attribute_value) := l_node;
16319     END IF;
16320 
16321     FOR i IN 0 .. l_length - 1
16322     LOOP
16323       l_node := xmldom.item(l_nodeslist, i);
16324 
16325       l_attribute_value := get_Attribute_Value(l_node, G_ID_ATTRIBUTE);
16326 
16327       IF l_attribute_value IS NOT NULL THEN
16328         g_page_elements_tbl(l_attribute_value) := l_node;
16329       END IF;
16330 
16331     END LOOP;
16332 
16333   END cache_UI_Page;
16334 
16335   --
16336   -- refresh UI XML page
16337   --
16338   PROCEDURE refresh_UIXML_Page(p_page_id IN NUMBER) IS
16339 
16340     l_subtree_doc           xmldom.DOMDocument;
16341     l_xml_root_node         xmldom.DOMNode;
16342     l_xml_uicontent_node    xmldom.DOMNode;
16343     l_xml_node_to_refresh   xmldom.DOMNode;
16344     l_page_ui_node          CZ_UI_PAGE_ELEMENTS%ROWTYPE;
16345     l_jrad_doc              CZ_UI_TEMPLATES.jrad_doc%TYPE;
16346     l_col_number            NUMBER := 0;
16347 
16348     PROCEDURE create_Next_XML_Level(p_ui_node               CZ_UI_PAGE_ELEMENTS%ROWTYPE,
16349                                     p_parent_xml_node    xmldom.DOMNode) IS
16350 
16351       l_new_xml_node         xmldom.DOMNode;
16352       l_new_opt_xml_node     xmldom.DOMNode;
16353       l_xml_node_to_replace  xmldom.DOMNode;
16354       l_opt_model_node       CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE;
16355       l_element_type         NUMBER;
16356 
16357     BEGIN
16358       --
16359       -- get child UI nodes
16360       --
16361       FOR i IN (SELECT *
16362                   FROM CZ_UI_PAGE_ELEMENTS a
16363                  WHERE ui_def_id =  g_UI_Context.ui_def_id AND
16364                        page_id = p_page_id AND
16365                        parent_element_id = p_ui_node.element_id
16366                        -- parent_persistent_node_id = p_ui_node.persistent_node_id
16367                  ORDER BY seq_nbr)
16368       LOOP
16369         IF i.deleted_flag IN(G_MARK_TO_ADD,G_MARK_DO_NOT_REFRESH) THEN
16370           IF p_ui_node.element_type IN(G_UI_PAGE_NODE_TYPE,G_UI_REGION_NODE_TYPE) AND
16371              NOT(NVL(p_ui_node.instantiable_flag, G_MANDATORY_INST_TYPE) IN(G_OPTIONAL_INST_TYPE,G_MINMAX_INST_TYPE) AND
16372                  p_ui_node.element_type=G_UI_REGION_NODE_TYPE) THEN
16373 
16374             IF i.element_type=G_UI_REGION_NODE_TYPE THEN -- this a region
16375 
16376               --
16377               -- create new JRAD region
16378               --
16379               l_new_xml_node := create_UIXML_Region(p_ui_node         => i,
16380                                                     p_parent_xml_node => p_parent_xml_node);
16381 
16382             ELSE -- this is regular UI element
16383 
16384               --
16385               -- create new JRAD element
16386               --
16387               l_new_xml_node := create_UIXML_Element(p_ui_node         => i,
16388                                                      p_parent_xml_node => p_parent_xml_node);
16389 
16390             END IF; -- end of  IF i.element_type=G_UI_REGION_NODE_TYPE ...
16391 
16392           ELSE -- p_ui_node is not a UI container
16393             -- CXs can be attached to Options/BOM Standart Items
16394             IF i.element_type=G_UI_CX_BUTTON_NODE_TYPE THEN
16395               l_opt_model_node := get_Model_Node_By_Persist_Id(i.persistent_node_id, g_UI_Context.devl_project_id);
16396               IF l_opt_model_node.ps_node_type IN(G_OPTION_TYPE) THEN
16397                 l_new_xml_node := create_UIXML_Element(p_ui_node         => i,
16398                                                        p_parent_xml_node => xmldom.getParentNode(p_parent_xml_node));
16399 
16400               END IF;
16401             END IF;
16402           END IF; -- end of IF p_ui_node.element_type IN(G_UI_PAGE_NODE_TYPE,G_UI_REGION_NODE_TYPE) ...
16403 
16404        ELSIF i.deleted_flag IN(G_MARK_TO_REFRESH) THEN
16405 
16406           l_xml_node_to_replace := find_XML_Node_By_Attribute(p_subtree_doc     => l_subtree_doc ,
16407                                                               p_attribute_name  => G_ID_ATTRIBUTE,
16408                                                               p_attribute_value => i.element_id);
16409 
16410           IF NOT(xmldom.isNull(l_xml_node_to_replace)) THEN
16411 
16412             --
16413             -- create new JRAD element
16414             --
16415             l_new_xml_node := replace_UIXML_Element(p_ui_node             => i,
16416                                                     p_parent_xml_node     => p_parent_xml_node,
16417                                                     p_xml_node_to_replace => l_xml_node_to_replace);
16418           END IF;
16419 
16420        ELSIF i.deleted_flag = G_MARK_TO_MOVE THEN
16421          l_new_xml_node := move_XML_Node(p_ui_node         => i,
16422                                          p_parent_xml_node => p_parent_xml_node);
16423 
16424        ELSIF i.deleted_flag IN(G_YES_FLAG, G_LIMBO_FLAG) THEN
16425          NULL; -- do not refresh deleted UI nodes
16426 
16427        ELSE
16428          l_new_xml_node := find_XML_Node_By_Attribute(p_subtree_doc     => l_subtree_doc ,
16429                                                      p_attribute_name  => G_ID_ATTRIBUTE,
16430                                                      p_attribute_value => i.element_id);
16431        END IF;
16432 
16433        create_Next_XML_Level(i, l_new_xml_node);
16434 
16435       END LOOP;
16436 
16437     END create_Next_XML_Level;
16438 
16439     PROCEDURE refresh_UI_Node(p_page_ui_node    CZ_UI_PAGE_ELEMENTS%ROWTYPE,
16440                               p_xml_parent_node xmldom.DOMNode) IS
16441 
16442       l_xml_node_to_replace xmldom.DOMNode;
16443       l_new_xml_node         xmldom.DOMNode;
16444 
16445     BEGIN
16446 
16447       FOR i IN(SELECT * FROM CZ_UI_PAGE_ELEMENTS
16448                 WHERE ui_def_id=p_page_ui_node.ui_def_id
16449                       AND parent_element_id=p_page_ui_node.element_id
16450                       AND persistent_node_id=p_page_ui_node.persistent_node_id
16451                       AND (element_type IS NULL OR element_type <> G_UI_CX_BUTTON_NODE_TYPE)
16452                       AND deleted_flag IN(G_MARK_TO_ADD,G_MARK_TO_REFRESH))
16453       LOOP
16454         IF i.deleted_flag=G_MARK_TO_REFRESH THEN
16455           BEGIN
16456             l_xml_node_to_replace := find_XML_Node_By_Attribute(p_subtree_doc     => l_subtree_doc,
16457                                                                 p_attribute_name  => G_ID_ATTRIBUTE,
16458                                                                 p_attribute_value => i.element_id);
16459 
16460 
16461             IF NOT(xmldom.isNull(l_xml_node_to_replace)) THEN
16462                --
16463                -- create new JRAD element
16464                --
16465                l_xml_uicontent_node := replace_UIXML_Element(p_ui_node             => i,
16466                                                              p_parent_xml_node     => p_xml_parent_node,
16467                                                              p_xml_node_to_replace => l_xml_node_to_replace);
16468             END IF;
16469 
16470            EXCEPTION
16471             WHEN OTHERS THEN
16472               --
16473               -- this is not critical error message
16474               --
16475               DEBUG('refresh_UIXML_Page() : '||SQLERRM);
16476               RAISE;
16477           END;
16478 
16479          END IF;
16480       END LOOP;
16481     END refresh_UI_Node;
16482 
16483   BEGIN
16484 
16485     -- first delete the cache of dom elements
16486   g_dom_elements_tbl.DELETE;
16487 
16488     SELECT *
16489       INTO l_page_ui_node
16490       FROM CZ_UI_PAGE_ELEMENTS
16491      WHERE ui_def_id =  g_UI_Context.ui_def_id AND
16492            page_id = p_page_id AND
16493            parent_element_id IS NULL AND
16494            -- element_type=G_UI_PAGE_NODE_TYPE AND
16495            deleted_flag IN(G_NO_FLAG, G_MARK_TO_ADD, G_MARK_TO_REFRESH);
16496 
16497     IF l_page_ui_node.ctrl_template_id IN(G_2COLS_CONTAINER_TEMPLATE_ID,
16498                                           G_3COLS_CONTAINER_TEMPLATE_ID) THEN
16499 
16500       IF l_page_ui_node.ctrl_template_id = G_2COLS_CONTAINER_TEMPLATE_ID THEN
16501         IF g_Num_Elements_On_Page <= g_Elements_Per_Column THEN
16502           l_col_number := 1;
16503         ELSE
16504           l_col_number :=2;
16505         END IF;
16506       END IF;
16507 
16508       IF l_page_ui_node.ctrl_template_id = G_3COLS_CONTAINER_TEMPLATE_ID THEN
16509         IF g_Num_Elements_On_Page <= g_Elements_Per_Column THEN
16510           l_col_number := 1;
16511         ELSIF g_Num_Elements_On_Page > g_Elements_Per_Column AND
16512               g_Num_Elements_On_Page <= 2*g_Elements_Per_Column THEN
16513           l_col_number := 2;
16514         ELSE
16515           l_col_number := 3;
16516         END IF;
16517       END IF;
16518     ELSE
16519       l_col_number := 0;
16520     END IF;
16521 
16522     SELECT jrad_doc INTO l_jrad_doc
16523       FROM CZ_UI_PAGES
16524      WHERE ui_def_id= g_UI_Context.ui_def_id AND
16525            page_id=p_page_id;
16526 
16527     --
16528     -- parse document(template) which is going to be nested element
16529     --
16530     l_subtree_doc := parse_JRAD_Document(l_jrad_doc);
16531 
16532     --
16533     -- cache xml nodes of this UI page
16534     --
16535     cache_UI_Page(l_subtree_doc);
16536 
16537     IF xmldom.isNull(l_subtree_doc) THEN
16538        add_Error_Message(p_message_name => 'CZ_WRONG_UI_TEMPLATE',
16539                          p_token_name   => 'UI_TEMPLATE',
16540                          p_token_value  => l_jrad_doc,
16541                          p_fatal_error  => TRUE);
16542        RAISE WRONG_UI_TEMPLATE;
16543     END IF;
16544 
16545     init_Page_View_Counters(l_subtree_doc);
16546 
16547     --
16548     -- delete JRAD XML elements that marked to be deleted
16549     --
16550     delete_UIXML_Elements(p_page_id   => p_page_id,
16551                           p_xml_doc   => l_subtree_doc);
16552 
16553     --
16554     -- get subdocument's root node
16555     --
16556     l_xml_root_node := xmldom.makeNode(xmldom.getDocumentElement(l_subtree_doc));
16557 
16558     IF l_col_number = 0 THEN
16559       l_xml_uicontent_node := getUIContents(l_xml_root_node);
16560     ELSE
16561       l_xml_uicontent_node := get_Col_UIContents(l_xml_root_node, l_col_number);
16562     END IF;
16563 
16564     refresh_UI_Node(l_page_ui_node, l_xml_uicontent_node);
16565 
16566     create_Next_XML_Level(l_page_ui_node,
16567                           l_xml_uicontent_node);
16568     --
16569     -- refresh CXs on the current UI page
16570     --
16571     refresh_CXs_On_UI_Page(p_ui_page_id   => p_page_id ,
16572                            p_subtree_doc  => l_subtree_doc);
16573 
16574     refresh_All_Model_Paths(l_subtree_doc, p_page_id);
16575 
16576     --
16577     -- save XML page in JRAD repository
16578     --
16579     Save_Document(l_subtree_doc, l_jrad_doc);
16580 
16581     --
16582     -- mark elements and page as already refreshed
16583     --
16584     refresh_UI_Node_Marks(p_page_id => p_page_id,
16585                           p_hmode   => G_REFRESH_PAGE);
16586 
16587   END refresh_UIXML_Page;
16588 
16589   --
16590   -- create UI XML page
16591   --
16592   PROCEDURE create_UIXML_Page(p_page_id   IN NUMBER,
16593                               p_jrad_doc  IN VARCHAR2) IS
16594 
16595     l_subtree_doc        xmldom.DOMDocument;
16596     l_xml_root_node      xmldom.DOMNode;
16597     l_xml_uicontent_node xmldom.DOMNode;
16598     l_page_ui_node       CZ_UI_PAGE_ELEMENTS%ROWTYPE;
16599     l_jrad_doc           CZ_UI_TEMPLATES.jrad_doc%TYPE;
16600     l_sub_element_id     CZ_UI_PAGE_ELEMENTS.element_id%TYPE;
16601     l_curr_element_id    CZ_UI_PAGE_ELEMENTS.element_id%TYPE;
16602     l_child_nodes_tbl    xmldom.DOMNodeList;
16603     l_xml_node           xmldom.DOMNode;
16604     l_length             NUMBER;
16605     l_col_number         NUMBER;
16606 
16607     PROCEDURE create_Next_XML_Level(p_element_id         NUMBER,
16608                                     p_parent_xml_node    xmldom.DOMNode) IS
16609       l_new_xml_node  xmldom.DOMNode;
16610     BEGIN
16611 
16612       --
16613       -- get child UI nodes
16614       --
16615       FOR i IN (SELECT *
16616                   FROM CZ_UI_PAGE_ELEMENTS
16617                  WHERE ui_def_id =  g_UI_Context.ui_def_id AND
16618                        page_id = p_page_id AND
16619                        parent_element_id = p_element_id AND
16620                        ctrl_template_id IS NOT NULL AND
16621                        deleted_flag IN(G_MARK_TO_ADD,G_MARK_DO_NOT_REFRESH,G_MARK_TO_MOVE)
16622                  ORDER BY seq_nbr)
16623       LOOP
16624         IF i.deleted_Flag = G_MARK_TO_MOVE THEN
16625           l_new_xml_node := move_XML_Node(p_ui_node         => i,
16626                                           p_parent_xml_node => p_parent_xml_node);
16627         ELSE
16628           IF i.element_type=G_UI_REGION_NODE_TYPE THEN -- this a region
16629 
16630             IF g_UI_Context.control_layout=1 THEN
16631               IF i.seq_nbr <= g_Elements_Per_Column THEN
16632                 l_col_number := 1;
16633               ELSE
16634                 l_col_number := 2;
16635               END IF;
16636             END IF;
16637 
16638             IF g_UI_Context.control_layout=2 THEN
16639               IF i.seq_nbr <= g_Elements_Per_Column THEN
16640                 l_col_number := 1;
16641               ELSIF i.seq_nbr > g_Elements_Per_Column AND
16642                     i.seq_nbr <= 2*g_Elements_Per_Column THEN
16643                 l_col_number := 2;
16644               ELSE
16645                 l_col_number := 3;
16646               END IF;
16647             END IF;
16648 
16649             IF i.parent_element_id=l_page_ui_node.element_id AND l_col_number>1 THEN
16650               l_new_xml_node := create_UIXML_Region(p_ui_node         => i,
16651                                                     p_parent_xml_node => get_Col_UIContents(l_xml_root_node, l_col_number));
16652             ELSE
16653               l_new_xml_node := create_UIXML_Region(p_ui_node         => i,
16654                                                     p_parent_xml_node => p_parent_xml_node);
16655             END IF;
16656 
16657           ELSE -- this is regular UI element
16658 
16659             IF g_UI_Context.control_layout=1 THEN
16660               IF i.seq_nbr <= g_Elements_Per_Column THEN
16661                 l_col_number := 1;
16662               ELSE
16663                 l_col_number :=2;
16664               END IF;
16665             END IF;
16666 
16667             IF g_UI_Context.control_layout=2 THEN
16668               IF i.seq_nbr <= g_Elements_Per_Column THEN
16669                 l_col_number := 1;
16670               ELSIF i.seq_nbr > g_Elements_Per_Column AND
16671                     i.seq_nbr <= 2*g_Elements_Per_Column THEN
16672                 l_col_number := 2;
16673               ELSE
16674                 l_col_number := 3;
16675               END IF;
16676             END IF;
16677 
16678              IF i.parent_element_id=l_page_ui_node.element_id AND l_col_number>1 THEN
16679 
16680                l_new_xml_node := create_UIXML_Element(p_ui_node         => i,
16681                                                       p_parent_xml_node => get_Col_UIContents(l_xml_root_node, l_col_number));
16682              ELSE
16683 
16684                l_new_xml_node := create_UIXML_Element(p_ui_node         => i,
16685                                                       p_parent_xml_node => p_parent_xml_node);
16686              END IF;
16687           END IF;
16688         END IF;
16689 
16690         create_Next_XML_Level(i.element_id, l_new_xml_node);
16691 
16692       END LOOP;
16693 
16694     END create_Next_XML_Level;
16695 
16696   BEGIN
16697 
16698     init_Page_View_Counters();
16699 
16700     l_col_number := 0;
16701 
16702     IF g_UI_Context.control_layout IN(1,2) THEN
16703       l_col_number := 1;
16704     END IF;
16705 
16706     SELECT *
16707       INTO l_page_ui_node
16708       FROM CZ_UI_PAGE_ELEMENTS
16709      WHERE ui_def_id =  g_UI_Context.ui_def_id AND
16710            page_id = p_page_id AND
16711            persistent_node_id = pagebase_persistent_node_id AND
16712            parent_element_id IS NULL AND
16713            element_type=G_UI_PAGE_NODE_TYPE AND
16714            deleted_flag = G_MARK_TO_ADD;
16715 
16716     l_jrad_doc := get_JRAD_Name(p_template_id => l_page_ui_node.ctrl_template_id);
16717 
16718     --
16719     -- parse document(template) which is going to be nested element
16720     --
16721     l_subtree_doc := parse_JRAD_Document(l_jrad_doc);
16722 
16723     IF xmldom.isNull(l_subtree_doc) THEN
16724       add_Error_Message(p_message_name => 'CZ_WRONG_UI_TEMPLATE',
16725                         p_token_name   => 'UI_TEMPLATE',
16726                         p_token_value  => l_jrad_doc,
16727                         p_fatal_error  => TRUE);
16728        RAISE WRONG_UI_TEMPLATE;
16729     END IF;
16730 
16731     --
16732     -- get subdocument's root node
16733     --
16734     l_xml_root_node := xmldom.makeNode(xmldom.getDocumentElement(l_subtree_doc));
16735 
16736     --
16737     -- remove common attributes of container and subtree
16738     --
16739     remove_TopLevel_Attributes(l_xml_root_node);
16740 
16741     --
16742     -- set Attributes for this subtree = Template
16743     --
16744     set_Template_Attributes(p_xml_root_node => l_xml_root_node,
16745                             p_ui_node       => l_page_ui_node);
16746 
16747     IF g_UI_Context.control_layout=0 THEN
16748       l_xml_uicontent_node := getUIContents(l_xml_root_node);
16749     ELSE
16750       l_xml_uicontent_node := get_Col_UIContents(l_xml_root_node, 1);
16751     END IF;
16752 
16753     l_child_nodes_tbl := xmldom.getElementsByTagName(l_subtree_doc, '*');
16754 
16755     --
16756     -- we need to get length of array of child nodes
16757     -- to go through the array in loop
16758     --
16759     l_length := xmldom.getLength(l_child_nodes_tbl);
16760     FOR k IN 0..l_length-1
16761     LOOP
16762       l_xml_node := xmldom.item(l_child_nodes_tbl, k);
16763 
16764       l_curr_element_id := get_Attribute_Value(l_xml_node,
16765                                                G_ID_ATTRIBUTE);
16766       IF l_curr_element_id IS NOT NULL AND k > 0 THEN
16767         l_sub_element_id := get_Element_Id();
16768 
16769         --
16770         -- set JRAD id of element
16771         --
16772         set_Attribute(l_xml_node,
16773                     G_ID_ATTRIBUTE,
16774                     REPLACE(REPLACE(l_curr_element_id||'_'||l_sub_element_id,'_czt','_czn'),'_czc','_czn'));
16775        END IF;
16776     END LOOP;
16777 
16778     create_Next_XML_Level(l_page_ui_node.element_id,
16779                           l_xml_uicontent_node);
16780 
16781     --
16782     -- save XML page in JRAD repository
16783     --
16784     Save_Document(l_subtree_doc, p_jrad_doc);
16785 
16786     --
16787     -- update page status and page_rev_nbr
16788     -- page_rev_nbr=1 because this is first creation
16789     -- mark elements and page as already refreshed
16790     --
16791     refresh_UI_Node_Marks(p_page_id => p_page_id,
16792                           p_hmode   => G_NEW_PAGE);
16793 
16794   END create_UIXML_Page;
16795 
16796   --
16797   -- handle UI XML pages of given UI
16798   -- handle_JRAD_Pages() is called from procedure construct_Single_UI()
16799   --
16800   PROCEDURE handle_JRAD_Page(p_page_id       IN NUMBER,
16801                              p_page_jrad_doc IN VARCHAR2,
16802                              p_page_status   IN VARCHAR2) IS
16803 
16804     l_num_elements_on_page NUMBER;
16805 
16806   BEGIN
16807 
16808     IF g_UI_Context.control_layout IN(1,2) THEN
16809       SELECT COUNT(element_id) INTO g_Num_Elements_On_Page
16810       FROM CZ_UI_PAGE_ELEMENTS
16811       WHERE ui_def_id=g_UI_Context.ui_def_id AND
16812             page_id=p_page_id AND
16813             (element_type IS NULL OR ctrl_template_id IS NOT NULL) AND
16814             deleted_flag NOT IN(G_YES_FLAG,G_MARK_TO_DELETE);
16815      g_Elements_Per_Column := FLOOR(g_Num_Elements_On_Page/(g_UI_Context.control_layout+1));
16816     END IF;
16817 
16818     --
16819     -- delete JRAD document associated with the page
16820     --
16821     IF p_page_status = G_MARK_TO_DELETE THEN
16822       delete_UIXML_Page(p_page_id, p_page_jrad_doc);
16823     END IF;
16824 
16825     --
16826     -- create JRAD page
16827     --
16828     IF p_page_status = G_MARK_TO_ADD THEN
16829       create_UIXML_Page(p_page_id, p_page_jrad_doc);
16830       --
16831       -- translate the current JRAD page
16832       --
16833       translate_JRAD_Doc(p_page_jrad_doc);
16834     END IF;
16835 
16836     --
16837     -- refresh JRAD page
16838     --
16839     IF p_page_status = G_MARK_TO_REFRESH THEN
16840 
16841       refresh_UIXML_Page(p_page_id);
16842       --
16843       -- translate the current JRAD page
16844       --
16845       translate_JRAD_Doc(p_page_jrad_doc);
16846     END IF;
16847 
16848   END handle_JRAD_Page;
16849 
16850   --
16851   -- handle UI XML pages of given UI
16852   -- handle_JRAD_Pages() is called from procedure construct_Single_UI()
16853   --
16854   PROCEDURE handle_JRAD_Pages IS
16855   BEGIN
16856     FOR i IN (SELECT page_id, jrad_doc, deleted_flag
16857                 FROM CZ_UI_PAGES
16858                WHERE ui_def_id = g_UI_Context.ui_def_id AND
16859                      deleted_flag <> G_YES_FLAG)
16860     LOOP
16861       IF i.deleted_flag IN(G_MARK_TO_DELETE,G_MARK_TO_ADD,
16862                            G_MARK_TO_REFRESH,G_MARK_TO_DEASSOCIATE) THEN
16863         --
16864         -- handle the current JRAD page
16865         --
16866         handle_JRAD_Page(p_page_id       => i.page_id,
16867                          p_page_jrad_doc => i.jrad_doc,
16868                          p_page_status   => i.deleted_flag);
16869       ELSE
16870         FOR n IN(SELECT G_YES_FLAG FROM CZ_UI_PAGE_ELEMENTS
16871                  WHERE ui_def_id=g_UI_Context.ui_def_id AND page_id=i.page_id AND
16872                        element_type=G_UI_CX_BUTTON_NODE_TYPE AND
16873                        deleted_flag=G_NO_FLAG AND rownum<2)
16874         LOOP
16875           --
16876           -- handle the current JRAD page
16877           --
16878           handle_JRAD_Page(p_page_id       => i.page_id,
16879                            p_page_jrad_doc => i.jrad_doc,
16880                            p_page_status   => G_MARK_TO_REFRESH);
16881 
16882          END LOOP;
16883       END IF;
16884     END LOOP;
16885   END handle_JRAD_Pages;
16886 
16887   -- Check if a PIR's target page reachable
16888   -- p_pagebase_expl_id,p_node_expl_id and p_node_persistent_id are a PIR element's
16889   -- pagebase_expl_id, model_ref_expl_id and persistent_node_id
16890   -- p_ui_def_id parent ui if the PIR's AMN is the child model's root node, child ui otherwise
16891   FUNCTION target_page_reachable(p_base_expl_id IN NUMBER,
16892                                  p_node_expl_id IN NUMBER,
16893                                  p_node_persistent_id IN NUMBER,
16894                                  p_ui_def_id IN NUMBER)
16895       RETURN BOOLEAN
16896   IS
16897     l_instantiable_flag cz_ps_nodes.INSTANTIABLE_FLAG%TYPE;
16898   BEGIN
16899     IF CZ_DEVELOPER_UTILS_PVT.in_boundary
16900           (p_base_expl_id, p_node_expl_id, p_node_persistent_id) = 0 THEN
16901       RETURN FALSE;
16902     ELSE
16903       SELECT instantiable_flag INTO l_instantiable_flag
16904       FROM cz_ps_nodes
16905       WHERE devl_project_id = (SELECT devl_project_id FROM cz_ui_defs
16906                                WHERE ui_def_id = p_ui_def_id) AND
16907                                      persistent_node_id = p_node_persistent_id;
16908       RETURN (l_instantiable_flag IS NULL OR
16909               l_instantiable_flag NOT IN (G_OPTIONAL_INST_TYPE, G_MINMAX_INST_TYPE));
16910     END IF;
16911   END target_page_reachable;
16912 
16913   FUNCTION get_page_name(p_ui_def_id IN NUMBER, p_page_id IN NUMBER)
16914         RETURN VARCHAR2
16915   IS
16916     l_name CZ_UI_PAGES.NAME%TYPE;
16917   BEGIN
16918     SELECT NVL(name, to_char(page_id)) INTO l_name
16919     FROM cz_ui_pages
16920     WHERE ui_def_id = p_ui_def_id AND page_id = p_page_id;
16921     RETURN l_name;
16922   END get_page_name;
16923 
16924   PROCEDURE handle_page_include_regions
16925   IS
16926     l_ui_def_map             number_tbl_type;
16927     l_ui_def_id              NUMBER;
16928     l_pagebase_expl_id       NUMBER;
16929     l_xmldoc                 xmldom.DOMDocument;
16930     l_dom_node               xmldom.DOMNode;
16931     l_current_relative_path  VARCHAR2(32000);
16932     l_new_relative_path      VARCHAR2(32000);
16933     l_flag                   INTEGER;
16934     l_resave_doc_flag        INTEGER;
16935     l_target_persistent_node_id  NUMBER;
16936 
16937     FUNCTION get_ui_name(p_ui_def_id IN NUMBER)
16938         RETURN VARCHAR2 IS
16939       l_name CZ_UI_DEFS.NAME%TYPE;
16940     BEGIN
16941       SELECT name INTO l_name
16942       FROM cz_ui_defs
16943       WHERE ui_def_id = p_ui_def_id;
16944       RETURN l_name;
16945     END;
16946 
16947     FUNCTION get_model_name(p_ui_def_id IN NUMBER)
16948         RETURN VARCHAR2 IS
16949       l_name CZ_DEVL_PROJECTS.NAME%TYPE;
16950     BEGIN
16951       SELECT name INTO l_name
16952       FROM cz_devl_projects
16953       WHERE devl_project_id = (SELECT devl_project_id FROM cz_ui_defs
16954                                WHERE ui_def_id = p_ui_def_id);
16955       RETURN l_name;
16956     END;
16957 
16958     PROCEDURE remove_target_page(p_ui_def_id IN NUMBER
16959                                 ,p_page_id IN NUMBER
16960                                 ,p_element_id IN VARCHAR2)
16961     IS
16962     BEGIN
16963       UPDATE CZ_UI_PAGE_ELEMENTS
16964          SET target_page_ui_def_id = NULL, target_page_id = NULL
16965        WHERE ui_def_id = p_ui_def_id AND
16966              page_id = p_page_id AND element_id = p_element_id;
16967 
16968       UPDATE CZ_UI_PAGES
16969          SET page_rev_nbr = page_rev_nbr + 1
16970        WHERE ui_def_id = p_ui_def_id AND page_id = p_page_id;
16971     END remove_target_page;
16972     --vsingava IM-ER
16973     PROCEDURE handle_page_include_region(p_element CZ_UI_PAGE_ELEMENTS%ROWTYPE,
16974                                          p_base_persistent_node_Id NUMBER,
16975                                          p_base_expl_Id NUMBER)
16976     IS
16977 
16978       l_target_persistent_node_id NUMBER;
16979       l_name CZ_UI_PAGES.name%TYPE;
16980       l_page_Id CZ_UI_PAGES.page_Id%TYPE;
16981       l_ui_def_id NUMBER;
16982       l_instance_list_amn expl_node_persistent_id_pair;
16983       l_reachable BOOLEAN;
16984       l_base_expl_id NUMBER;
16985       l_base_persistent_node_id NUMBER;
16986 
16987     BEGIN
16988         DEBUG('Now processing PIR ' || p_element.NAME);
16989         --RETURN;
16990         DEBUG('After return Now processing PIR ' || p_element.NAME);
16991         l_target_persistent_node_id := NULL;
16992         l_base_expl_id := p_base_expl_Id;
16993         l_base_persistent_node_id := p_base_persistent_node_Id;
16994 
16995         BEGIN
16996           SELECT persistent_node_id, name, page_Id INTO l_target_persistent_node_id, l_name, l_page_Id
16997           FROM   cz_ui_pages
16998           WHERE  ui_def_id = p_element.target_page_ui_def_id AND
16999                  page_id = p_element.target_page_id AND deleted_flag <> '1';
17000         EXCEPTION
17001           -- target page not exist
17002           WHEN NO_DATA_FOUND THEN
17003             -- l_target_persistent_node_id := NULL;
17004             remove_target_page(p_element.ui_def_id, p_element.page_id, p_element.element_id);
17005 
17006             DEBUG('Removing PIR ' || p_element.NAME || ' because target page is deleted.');
17007 
17008             IF p_element.ui_Def_Id = g_ui_context.ui_def_Id THEN
17009               add_Error_Message(p_message_name => 'CZ_UIGEN_TARGET_PAGE_NOT_EXIST',
17010                                 p_token_name1  => 'REGION_NAME',
17011                                 p_token_value1 => NVL(p_element.NAME, p_element.element_id),
17012                                 p_token_name2  => 'PAGE_NAME',
17013                                 p_token_value2 => get_page_name(p_element.ui_def_id,p_element.page_id),
17014                                 p_fatal_error  => FALSE);
17015               RETURN;
17016             ELSE
17017               add_Error_Message(p_message_name => 'CZ_UIGEN_DEL_PAGEINCL_TARGET',
17018                             p_token_name1  => 'PAGE_NAME',
17019                             p_token_value1 => NVL(l_name, l_page_id),
17020                             p_token_name2  => 'ELEMENT_NAME',
17021                             p_token_value2 => p_element.name,
17022                             p_token_name3  => 'REF_PAGE_NAME',
17023                             p_token_value3 => get_page_name(p_element.ui_def_id,p_element.page_id),
17024                             p_token_name4  => 'MODEL_NAME',
17025                             p_token_value4 => get_model_name(p_element.ui_def_id),
17026                             p_token_name5  => 'UI_NAME',
17027                             p_token_value5 => get_ui_name(p_element.ui_def_id),
17028                             p_fatal_error  => FALSE);
17029               RETURN;
17030             END IF;
17031         END;
17032 
17033         -- target page exists. is it reachable ?
17034         IF l_target_persistent_node_id IS NOT NULL THEN
17035 
17036           IF p_element.persistent_node_id = l_target_persistent_node_id THEN
17037             l_ui_def_id := p_element.target_page_ui_def_id;
17038           ELSE
17039             l_ui_def_id := p_element.ui_def_id; -- AMN is the root node of child model
17040           END IF;
17041 
17042           IF NOT target_page_reachable(p_base_expl_Id,
17043                                        p_element.model_ref_expl_id,
17044                                        p_element.persistent_node_id,
17045                                        l_ui_def_id) THEN
17046             DEBUG('PIR ' || p_element.NAME || ' not reachable from page base');
17047             l_reachable := FALSE;
17048             l_dom_node := find_XML_Node_By_Attribute(l_xmldoc, G_ID_ATTRIBUTE, p_element.element_id);
17049 
17050             DEBUG('before l_base_expl_id= ' || l_base_expl_id);
17051             DEBUG('before l_base_persistent_node_id= ' || l_base_persistent_node_id);
17052 
17053             l_instance_list_amn := getEnclosingInstanceListAMN(p_element, l_dom_node);
17054 
17055 
17056 
17057             IF l_instance_list_amn.persistent_node_Id IS NOT NULL THEN
17058               DEBUG('PIR ' || p_element.NAME || ' enclosed in an Instance List');
17059 
17060               l_base_expl_id := l_instance_list_amn.expl_node_id;
17061               l_base_persistent_node_id := l_instance_list_amn.persistent_node_id;
17062 
17063               DEBUG('after l_base_expl_id= ' || l_base_expl_id);
17064               DEBUG('after l_base_persistent_node_id= ' || l_base_persistent_node_id);
17065 
17066               DEBUG('Enclosing Instance List AMN = (' || l_base_expl_id || ', ' || l_base_persistent_node_id || ')');
17067 
17068               -- The PIR is under and Instance list region. So the PIR could still be reachable
17069               IF target_page_reachable(l_base_expl_id,
17070                                        p_element.model_ref_expl_id,
17071                                        p_element.persistent_node_id,
17072                                        l_ui_def_id) THEN
17073                 DEBUG('PIR ' || p_element.NAME || ' reachable from instance list AMN');
17074                 l_reachable := TRUE;
17075               END IF;
17076             END IF;
17077 
17078             IF NOT l_reachable THEN
17079               DEBUG('Removing PIR ' || p_element.NAME || ' because target page is not reachable.');
17080               remove_target_page(p_element.ui_def_id, p_element.page_id, p_element.element_id);
17081 
17082 
17083               IF p_element.ui_Def_Id = g_ui_context.ui_def_Id THEN
17084 
17085                 add_Error_Message(p_message_name => 'CZ_UIGEN_TARGET_PAGE_REACH',
17086                                   p_token_name1  => 'REGION_NAME',
17087                                   p_token_value1 => NVL(p_element.NAME, p_element.element_id),
17088                                   p_token_name2  => 'PAGE_NAME',
17089                                   p_token_value2 => get_page_name(p_element.ui_def_id,p_element.page_id),
17090                                   p_fatal_error  => FALSE);
17091                 RETURN;
17092               ELSE
17093                 add_Error_Message(p_message_name => 'CZ_UIGEN_REFUI_TARGET_PG_REACH',
17094                                 p_token_name1  => 'PAGE_NAME',  -- name of the target page
17095                                 p_token_value1 => NVL(l_name, l_page_id),
17096                                 p_token_name2  => 'ELEMENT_NAME',  -- name of the PIR element
17097                                 p_token_value2 => p_element.name,
17098                                 p_token_name3  => 'REF_PAGE_NAME', -- page that contains the PIR
17099                                 p_token_value3 => get_page_name(p_element.ui_def_id, p_element.page_id),
17100                                 p_token_name4  => 'UI_NAME',
17101                                 p_token_value4 => get_ui_name(p_element.ui_def_id),
17102                                 p_token_name5  => 'MODEL_NAME',
17103                                 p_token_value5 => get_model_name(p_element.ui_def_id),
17104                                 p_fatal_error  => FALSE);
17105                 RETURN;
17106               END IF;
17107             END IF; -- not reachable
17108           END IF;
17109         END IF;
17110 
17111         l_dom_node := find_XML_Node_By_Attribute(l_xmldoc, G_ID_ATTRIBUTE, p_element.element_id);
17112 
17113         l_current_relative_path := get_attribute_value(l_dom_node, G_USER_ATTRIBUTE1_NAME);
17114         DEBUG('Current Relative path=' || l_current_relative_path);
17115         DEBUG('l_base_expl_id= ' || l_base_expl_id);
17116         DEBUG('l_base_persistent_node_id= ' || l_base_persistent_node_id);
17117         DEBUG('p_element.model_ref_expl_id= ' || p_element.model_ref_expl_id);
17118         DEBUG('p_element.persistent_node_id= ' || p_element.persistent_node_id);
17119 
17120         l_new_relative_path := 'model_path=' || CZ_DEVELOPER_UTILS_PVT.runtime_relative_path
17121                  (l_base_expl_id,
17122                   l_base_persistent_node_id,
17123                   p_element.model_ref_expl_id,
17124                   p_element.persistent_node_id);
17125         DEBUG('New Relative path=' || l_new_relative_path);
17126         IF l_current_relative_path <> l_new_relative_path THEN
17127           IF l_ui_def_id = g_UI_Context.ui_def_id THEN
17128             set_attribute(l_dom_node,
17129                           G_USER_ATTRIBUTE1_NAME,
17130                           l_new_relative_path);
17131             l_resave_doc_flag := 1; -- save doc
17132           ELSE
17133             UPDATE cz_ui_defs
17134             SET ui_status = 'NEED_REFRESH'
17135             WHERE ui_def_id = l_ui_def_id;
17136             l_flag := 0; -- goto next ui
17137           END IF;
17138         END IF;
17139 
17140     END handle_page_include_region;
17141 
17142   BEGIN
17143 
17144 
17145     l_ui_def_map(g_UI_Context.ui_def_id) := g_UI_Context.ui_def_id;
17146 
17147     --
17148     -- Find all Page Include Regions which point to UI pages in the current UI
17149     --
17150     FOR i IN (SELECT a.deleted_flag AS page_deleted_flag, a.page_id AS page_id,
17151                      a.name AS name, a.persistent_node_id AS target_persistent_node_id,
17152                      b.ui_def_id AS ref_ui_def_id, b.page_id AS ref_page_id,
17153                      b.name AS ref_element_name, b.element_id AS ref_element_id,
17154                      b.persistent_node_id as persistent_node_id,
17155                      b.model_ref_expl_id as expl_node_id
17156               FROM CZ_UI_PAGES a, CZ_UI_PAGE_ELEMENTS b
17157               WHERE a.ui_def_id = g_UI_Context.ui_def_id AND
17158                     b.element_signature_id = G_PAGE_INCL_REGION_SIGNATURE AND
17159                     b.deleted_flag = G_NO_FLAG AND
17160                     a.ui_def_id = b.target_page_ui_def_id AND
17161                     a.page_id = b.target_page_id)
17162     LOOP
17163       l_ui_def_map(i.ref_ui_def_id) := i.ref_ui_def_id;
17164     END LOOP;
17165 
17166     -- Recalculate relative paths for Page Include Regions. If the newly calculated path
17167     -- of a PIR element is different from the current one in xml doc, update the path
17168     -- in xml doc if the UI is the one in processing, mark the UI as must be refreshed
17169     -- if it is not the UI in refreshing.
17170     l_ui_def_id := l_ui_def_map.FIRST;
17171     WHILE l_ui_def_id IS NOT NULL
17172     LOOP
17173       l_flag := 1;
17174       FOR i IN (SELECT page_id, jrad_doc, pagebase_expl_node_id, persistent_node_id
17175                 FROM CZ_UI_PAGES pg
17176                 WHERE ui_def_id = l_ui_def_id AND deleted_flag = '0'
17177                 AND   EXISTS (SELECT NULL FROM CZ_UI_PAGE_ELEMENTS
17178                               WHERE ui_def_id = pg.ui_def_id AND page_id = pg.page_id AND
17179                                     element_signature_id = G_PAGE_INCL_REGION_SIGNATURE AND
17180                                     target_page_ui_def_id IS NOT NULL AND
17181                                     target_page_id IS NOT NULL AND deleted_flag='0'))
17182       LOOP
17183         EXIT WHEN l_flag = 0;
17184         l_xmldoc := parse_JRAD_Document(i.jrad_doc);
17185         l_resave_doc_flag := 0;
17186 
17187         FOR j IN (SELECT * FROM CZ_UI_PAGE_ELEMENTS
17188                   WHERE ui_def_id = l_ui_def_id AND page_id = i.page_id AND
17189                         element_signature_id = G_PAGE_INCL_REGION_SIGNATURE AND
17190                         deleted_flag='0')
17191         LOOP
17192           EXIT WHEN l_flag <> 1;
17193           handle_page_include_region(j, i.persistent_node_id, i.pagebase_expl_node_id);
17194         END LOOP;
17195 
17196         IF l_resave_doc_flag = 1 THEN
17197           UPDATE CZ_UI_PAGES
17198           SET page_rev_nbr = page_rev_nbr + 1
17199           WHERE ui_def_id = l_ui_def_id AND page_id = i.page_id;
17200 
17201           save_document(l_xmldoc, i.jrad_doc);
17202         END IF;
17203       END LOOP;
17204 
17205       l_ui_def_id := l_ui_def_map.NEXT(l_ui_def_id);
17206     END LOOP;
17207   END handle_page_include_regions;
17208 
17209   --
17210   -- main internal procedure to create/refresh UI
17211   --
17212   PROCEDURE construct_Single_UI(p_ui_def_id     IN NUMBER,
17213                                 p_handling_mode IN VARCHAR2 DEFAULT NULL) IS
17214     l_locked_entities_tbl cz_security_pvt.number_type_tbl;
17215     l_templates_id_tbl    number_tbl_type;
17216   BEGIN
17217 
17218     --
17219     -- set current UI context
17220     --
17221     set_UI_Context(p_ui_def_id);
17222 
17223     --
17224     -- lock global UI Templates which are used by inline copy
17225     --
17226     lock_UI_Templates(p_model_id          => g_UI_Context.devl_project_id,
17227                       p_ui_def_id         => g_UI_Context.from_master_template_id);
17228 
17229     IF p_handling_mode IS NULL OR p_handling_mode = G_CREATE_ONLY_UI_STRUCTURE THEN
17230 
17231       set_UI_Global_Entities();
17232 
17233       IF NVL(g_UI_Context.suppress_refresh_flag,G_NO_FLAG)=G_NO_FLAG THEN
17234 
17235         -- populate cache
17236         populate_Cache;
17237 
17238     -- update the UI_TIMESTAMP_REFRESH date on the UI
17239     UPDATE cz_ui_defs
17240     SET UI_TIMESTAMP_REFRESH = SYSDATE
17241     WHERE ui_def_id = p_ui_def_id;
17242 
17243         -- populate CZ UI structures first
17244         populate_UI_Structures();
17245 
17246       END IF;
17247 
17248     END IF;
17249 
17250     IF p_handling_mode IS NULL OR p_handling_mode = G_CREATE_ONLY_UI_XML THEN
17251       --
17252       -- generate/refresh UI Pages of current UI
17253       --
17254       handle_JRAD_Pages();
17255     END IF;
17256 
17257     unlock_UI_Templates();
17258 
17259     --
17260     -- mark UI as processed
17261     --
17262     mark_UI(p_ui_def_id, G_PROCESSED_UI_STATUS);
17263 
17264     EXCEPTION
17265       WHEN OTHERS THEN
17266         DEBUG(SQLERRM);
17267         --
17268         -- unlock global UI Templates which are used by inline copy
17269         --
17270         unlock_UI_Templates();
17271         RAISE;
17272   END construct_Single_UI;
17273 
17274   --
17275   -- internal procedure to create/refresh UI
17276   --
17277   PROCEDURE handle_UIs(p_ui_def_id     IN NUMBER,
17278                        p_handling_mode IN VARCHAR2 DEFAULT NULL) IS
17279     l_target_ui_def_node     CZ_UI_DEFS%ROWTYPE;
17280     l_ui_def_id              NUMBER;
17281     l_ref_persistent_node_id NUMBER;
17282     l_init_ui_def_id         NUMBER;
17283   BEGIN
17284 
17285     DEBUG('construct Single UI : ',p_ui_def_id);
17286 
17287     --
17288     -- handle root UI
17289     --
17290     construct_Single_UI(p_ui_def_id, p_handling_mode);
17291 
17292     validate_UI_Conditions(p_ui_def_id      => p_ui_def_id,
17293                            p_is_parser_open => G_YES_FLAG);
17294 
17295     IF NVL(g_UI_Context.suppress_refresh_flag,G_NO_FLAG)=G_YES_FLAG
17296        OR NVL(g_UI_Context.empty_ui_flag,G_NO_FLAG)=G_YES_FLAG THEN
17297 
17298       FOR i IN(SELECT * FROM CZ_MODEL_REF_EXPLS
17299                WHERE model_id=g_UI_Context.devl_project_id AND
17300                      ps_node_type=G_REFERENCE_TYPE AND deleted_flag='0')
17301       LOOP
17302         BEGIN
17303           SELECT NVL(MAX(ui_def_id),0) INTO l_ui_def_id
17304             FROM CZ_UI_DEFS
17305            WHERE devl_project_id=i.component_id AND
17306                  ui_style=G_OA_STYLE_UI AND
17307                  deleted_flag='0';
17308 
17309           IF l_ui_def_id=0 THEN
17310             l_init_ui_def_id := g_UI_Context.ui_def_id;
17311             l_target_ui_def_node := create_UI_Context(p_model_id           => i.component_id,
17312                                                       p_master_template_id => g_UI_Context.from_master_template_id,
17313                                                       p_show_all_nodes     => g_UI_Context.show_all_nodes_flag,
17314                                                       p_create_empty_ui    => '1');
17315             l_ui_def_id := l_target_ui_def_node.ui_def_id;
17316             set_UI_Context(l_init_ui_def_id);
17317           END IF;
17318 
17319           SELECT persistent_node_id INTO l_ref_persistent_node_id
17320             FROM CZ_PS_NODES
17321            WHERE devl_project_id=g_UI_Context.devl_project_id AND
17322                  ps_node_id=i.referring_node_id AND
17323                  deleted_flag=G_NO_FLAG;
17324 
17325           BEGIN
17326             INSERT INTO CZ_UI_REFS
17327              (ui_def_id,
17328               ref_ui_def_id,
17329               ref_persistent_node_id,
17330               model_ref_expl_id,
17331               deleted_flag)
17332              VALUES
17333              (g_UI_Context.ui_def_id,
17334               l_ui_def_id,
17335               l_ref_persistent_node_id,
17336               i.model_ref_expl_id,
17337               G_NO_FLAG);
17338           EXCEPTION
17339             WHEN OTHERS THEN
17340                 NULL;
17341           END;
17342         EXCEPTION
17343           WHEN OTHERS THEN
17344             NULL;
17345         END;
17346       END LOOP;
17347 
17348     END IF;
17349 
17350     --
17351     -- table CZ_UI_REFS is populated in procedure construct_Single_UI()
17352     -- ( in this approach UI can have a more referenced UIs than Model Tree )
17353     --
17354     FOR i IN (SELECT DISTINCT ref_ui_def_id
17355                 FROM CZ_UI_REFS
17356                WHERE ui_def_id = p_ui_def_id AND
17357                      deleted_flag = G_NO_FLAG)
17358     LOOP
17359       --
17360       -- construct UIs of referenced models
17361       --
17362       handle_UIs(i.ref_ui_def_id, p_handling_mode);
17363     END LOOP;
17364 
17365   END handle_UIs;
17366 
17367   --
17368   -- main internal procedure to create/refresh UI
17369   -- this procedure is invoked only once during UI Generation/UI Refresh
17370   --
17371   PROCEDURE construct_UI(p_ui_def_id     IN NUMBER,
17372                          p_handling_mode IN VARCHAR2 DEFAULT NULL) IS
17373   BEGIN
17374     --
17375     -- initialize XML parser
17376     --
17377     OPEN_Parser();
17378     --
17379     -- handle root UI and all referenced UIs
17380     --
17381     handle_UIs(p_ui_def_id, p_handling_mode);
17382     --
17383     -- close XML parser
17384     --
17385     CLOSE_Parser();
17386 
17387     set_UI_Context(p_ui_def_id);
17388 
17389     OPEN_Parser();
17390     handle_page_include_regions;
17391     CLOSE_Parser();
17392   END construct_UI;
17393 
17394   --
17395   -- create a new UI for a given model
17396   -- Parameters :
17397   --   p_model_id           - identifies Model
17398   --   p_master_template_id - identifies UI Master Template
17399   --   px_ui_def_id         - Id of a new UI
17400   --   x_return_status      - status string
17401   --   x_msg_count          - number of error messages
17402   --   x_msg_data           - string which contains error messages
17403   --
17404   PROCEDURE create_UI(p_model_id           IN NUMBER, -- identifies Model
17405                       p_master_template_id IN NUMBER DEFAULT NULL, -- identifies UI Master Template
17406                       p_ui_name            IN VARCHAR2 DEFAULT NULL,
17407                       p_description        IN VARCHAR2 DEFAULT NULL,
17408                       p_show_all_nodes     IN VARCHAR2 DEFAULT NULL,
17409                       p_create_empty_ui    IN VARCHAR2 DEFAULT NULL,
17410                       x_ui_def_id          OUT NOCOPY NUMBER, -- Id of a new UI
17411                       x_return_status      OUT NOCOPY VARCHAR2,
17412                       x_msg_count          OUT NOCOPY NUMBER,
17413                       x_msg_data           OUT NOCOPY VARCHAR2) IS
17414 
17415     l_ui_context CZ_UI_DEFS%ROWTYPE;
17416     l_locked_models      cz_security_pvt.number_type_tbl;
17417 
17418   BEGIN
17419 
17420     --
17421     -- initialize FND variables/packages
17422     --
17423     Initialize(x_return_status,x_msg_count,x_msg_data);
17424 
17425     --
17426     -- get UI context
17427     -- ( * also function get_UI_Context() inserts data for new UI into CZ_UI_DEFS table )
17428     --
17429     l_ui_context := create_UI_Context(p_model_id           => p_model_id,
17430                                       p_master_template_id => p_master_template_id,
17431                                       p_ui_name            => p_ui_name,
17432                                       p_description        => p_description,
17433                                       p_show_all_nodes     => p_show_all_nodes,
17434                                       p_create_empty_ui    => p_create_empty_ui);
17435     --
17436     -- set ui_def_id of root UI ( UI that is generated for model with model_id=p_model_id )
17437     --
17438     x_ui_def_id := l_ui_context.ui_def_id;
17439 
17440     lock_Model(p_model_id, l_locked_models);
17441 
17442     --
17443     -- generate a new UI for the current UI context
17444     --
17445     construct_UI(l_ui_context.ui_def_id);
17446 
17447     IF p_create_empty_ui IS NOT NULL AND p_create_empty_ui = '1' THEN
17448 
17449       UPDATE CZ_UI_DEFS
17450       SET suppress_refresh_flag = G_NO_FLAG
17451       WHERE ui_def_id = x_ui_def_id and deleted_flag = G_NO_FLAG;
17452 
17453       UPDATE CZ_UI_DEFS
17454       SET suppress_refresh_flag = G_NO_FLAG
17455       WHERE ui_def_Id IN (
17456          SELECT ref_ui_def_Id
17457          FROM CZ_UI_REFS
17458          START WITH ui_def_id = x_ui_def_id
17459          AND deleted_flag = G_NO_FLAG
17460          CONNECT BY PRIOR ref_ui_def_id = ui_def_id AND deleted_flag = G_NO_FLAG)
17461       AND deleted_flag = G_NO_FLAG;
17462     END IF;
17463 
17464     IF g_MSG_COUNT>0 THEN
17465       x_return_status := G_RETURN_STATUS;
17466       x_msg_count     := g_MSG_COUNT;
17467       x_msg_data      := fnd_msg_pub.GET(g_MSG_COUNT,fnd_api.g_false);
17468     END IF;
17469 
17470     unlock_model(l_locked_models);
17471 
17472   EXCEPTION
17473     WHEN FAILED_TO_LOCK_MODEL THEN
17474       x_return_status := FND_API.G_RET_STS_ERROR;
17475       x_msg_count     := 1;
17476       x_msg_data      := fnd_msg_pub.GET(g_MSG_COUNT,fnd_api.g_false);
17477       DEBUG(x_msg_data);
17478     WHEN WRONG_UI_TEMPLATE THEN
17479       x_return_status := FND_API.G_RET_STS_ERROR;
17480       x_msg_count     := g_MSG_COUNT;
17481       x_msg_data      := fnd_msg_pub.GET(g_MSG_COUNT,fnd_api.g_false);
17482       DEBUG(x_msg_data);
17483     WHEN WRONG_EXT_PS_TYPE THEN
17484       x_return_status := FND_API.G_RET_STS_ERROR;
17485       x_msg_count     :=  1;
17486       x_msg_data      :=  'Internal Error : extended ps node type of node with ps_node_id='||
17487                           TO_CHAR(g_WRONG_PS_NODE_ID)||' is not defined.';
17488       fnd_msg_pub.add_exc_msg('CZ_UIOA_PVT', 'create_UI', x_msg_data);
17489       DEBUG(x_msg_data);
17490     WHEN UNREACH_UI_NODE THEN
17491       x_return_status := FND_API.G_RET_STS_ERROR;
17492       x_msg_count     := g_MSG_COUNT;
17493       x_msg_data      := fnd_msg_pub.GET(g_MSG_COUNT,fnd_api.g_false);
17494       DEBUG(x_msg_data);
17495     WHEN OTHERS THEN
17496       x_return_status := FND_API.G_RET_STS_ERROR;
17497       x_msg_count := g_MSG_COUNT;
17498       IF g_MSG_COUNT>0 THEN
17499          x_msg_count := g_MSG_COUNT;
17500          x_msg_data  := fnd_msg_pub.GET(g_MSG_COUNT,fnd_api.g_false);
17501       ELSE
17502          x_msg_count := 1;
17503          x_msg_data  := SUBSTR(DBMS_UTILITY.format_error_backtrace,1,4000);
17504       END IF;
17505       fnd_msg_pub.add_exc_msg('CZ_UIOA_PVT', 'create_UI', x_msg_data);
17506       DEBUG(x_msg_data);
17507   END create_UI;
17508 
17509  --bug14029835, Procedure added for log messages
17510  PROCEDURE log_message( p_caller  IN VARCHAR2 DEFAULT NULL,
17511                         p_message IN VARCHAR2
17512 		       ) IS
17513   BEGIN
17514 
17515     INSERT INTO CZ_DB_LOGS( LOGTIME , CALLER, MESSAGE )
17516 	VALUES ( SYSDATE , p_caller , p_message );
17517 
17518  EXCEPTION
17519   WHEN OTHERS THEN
17520   NULL;
17521  END log_message;
17522 
17523 --bug14029835 , Added procedure that checks the data in cz_ui_page_elements, cz_ui_pages
17524 -- cz_ui_page_refs, cz_ui_page_sets , cz_ui_actions with cz_model_ref_Expls table.
17525 -- Logically deletes the invalid elements.
17526  PROCEDURE delete_Invalid_UI_Elements(p_ui_def_id IN NUMBER) IS
17527 
17528   BEGIN
17529 
17530       FOR uiDefCur IN (SELECT ref_ui_def_id FROM (SELECT DISTINCT ref_ui_def_id
17531             FROM CZ_UI_REFS
17532             START WITH ui_def_id = p_ui_def_id AND deleted_flag = G_NO_FLAG
17533             CONNECT BY PRIOR ref_ui_def_id = ui_def_id AND deleted_flag = G_NO_FLAG AND PRIOR deleted_flag = G_NO_FLAG
17534             UNION SELECT ui_def_id  FROM CZ_UI_DEFS uiDef WHERE uiDef.ui_def_id = p_ui_def_id  AND uiDef.ui_style = G_OA_STYLE_UI AND deleted_flag = G_NO_FLAG )
17535 
17536                     )
17537     LOOP
17538 
17539 
17540     -- Verify for cz_ui_pages.pagebase_expl_node_id
17541       FOR uiPages IN (SELECT uipg.page_id,uipg.pagebase_expl_node_id FROM CZ_UI_PAGES uipg
17542                          WHERE deleted_flag = G_NO_FLAG AND ui_def_id = uiDefCur.ref_ui_def_id
17543                            AND uipg.pagebase_expl_node_id IS NOT NULL
17544                            AND NOT EXISTS (SELECT 1 FROM CZ_MODEL_REF_EXPLS
17545                                            WHERE deleted_flag = G_NO_FLAG AND model_ref_expl_id = uipg.pagebase_expl_node_id
17546                                           )
17547                       )
17548       LOOP
17549 
17550 	        log_message( 'UI_REFRESH' , 'UPDATE  deleted_flag of CZ_UI_PAGES where pagebase_expl_node_id : ' || uiPages.pagebase_expl_node_id || ' and ui_def_id : '|| uiDefCur.ref_ui_def_id);
17551 
17552 		UPDATE CZ_UI_PAGES
17553 		SET deleted_flag = G_YES_FLAG
17554 		WHERE pagebase_expl_node_id = uiPages.pagebase_expl_node_id
17555 		AND page_id = uiPages.page_id
17556 		AND ui_def_id = uiDefCur.ref_ui_def_id;
17557       END LOOP; --uiPages
17558 
17559 
17560       -- Verify for cz_ui_page_refs.target_expl_node_id
17561       FOR pageRefs IN (SELECT pgref.page_ref_id,pgref.target_expl_node_id FROM CZ_UI_PAGE_REFS pgref
17562                          WHERE pgref.deleted_flag = G_NO_FLAG AND pgref.ui_def_id = uiDefCur.ref_ui_def_id
17563                            AND pgref.target_expl_node_id IS NOT NULL
17564                            AND NOT EXISTS (SELECT 1 FROM CZ_MODEL_REF_EXPLS
17565                                            WHERE deleted_flag = G_NO_FLAG AND model_ref_expl_id = pgref.target_expl_node_id
17566                                           )
17567                       )
17568       LOOP
17569 
17570        log_message( 'UI_REFRESH' , 'UPDATE  deleted_flag of CZ_UI_PAGE_REFS where target_expl_node_id : ' || pageRefs.target_expl_node_id || ' and ui_def_id : '|| uiDefCur.ref_ui_def_id);
17571 
17572 		UPDATE CZ_UI_PAGE_REFS
17573 		SET deleted_flag = G_YES_FLAG
17574 		WHERE target_expl_node_id = pageRefs.target_expl_node_id
17575 		AND page_ref_id = pageRefs.page_ref_id
17576 		AND ui_def_id = uiDefCur.ref_ui_def_id;
17577       END LOOP; --pageRefs
17578 
17579 
17580       -- Verify for cz_ui_page_sets.pagebase_expl_node_id
17581       FOR pageSets IN (SELECT pgset.page_set_id,pgset.pagebase_expl_node_id FROM CZ_UI_PAGE_SETS pgset
17582                          WHERE pgset.deleted_flag = G_NO_FLAG AND pgset.ui_def_id = uiDefCur.ref_ui_def_id
17583                            AND pgset.pagebase_expl_node_id IS NOT NULL
17584                            AND NOT EXISTS (SELECT 1 FROM CZ_MODEL_REF_EXPLS
17585                                            WHERE deleted_flag = G_NO_FLAG AND model_ref_expl_id = pgset.pagebase_expl_node_id
17586                                           )
17587                       )
17588       LOOP
17589 
17590 		log_message( 'UI_REFRESH' , 'UPDATE  deleted_flag of CZ_UI_PAGE_SETS where pagebase_expl_node_id : ' || pageSets.pagebase_expl_node_id || ' and ui_def_id : '|| uiDefCur.ref_ui_def_id);
17591 
17592 		UPDATE CZ_UI_PAGE_SETS
17593 		SET deleted_flag = G_YES_FLAG
17594 		WHERE pagebase_expl_node_id = pageSets.pagebase_expl_node_id
17595 		AND page_set_id = pageSets.page_set_id
17596 		AND ui_def_id = uiDefCur.ref_ui_def_id;
17597       END LOOP; --pageRefs
17598 
17599       -- Verify for cz_ui_page_elements.model_ref_expl_id
17600       FOR uiPges IN (SELECT  element_id,model_ref_expl_id FROM CZ_UI_PAGE_ELEMENTS pge
17601                          WHERE pge.deleted_flag = G_NO_FLAG AND pge.ui_def_id = uiDefCur.ref_ui_def_id
17602                            AND pge.model_ref_expl_id IS NOT NULL
17603                            AND NOT EXISTS (SELECT 1 FROM CZ_MODEL_REF_EXPLS
17604                                            WHERE deleted_flag = G_NO_FLAG AND model_ref_expl_id = pge.model_ref_expl_id
17605                                           )
17606                       )
17607       LOOP
17608 
17609 		log_message( 'UI_REFRESH' , 'UPDATE  deleted_flag of CZ_UI_PAGE_ELEMENTS where model_ref_expl_id : ' || uiPges.model_ref_expl_id || ' and ui_def_id : '|| uiDefCur.ref_ui_def_id);
17610 
17611 		UPDATE CZ_UI_PAGE_ELEMENTS
17612 		SET deleted_flag = G_YES_FLAG
17613 		WHERE model_ref_expl_id = uiPges.model_ref_expl_id
17614 		AND element_id = uiPges.element_id
17615 		AND ui_def_id = uiDefCur.ref_ui_def_id;
17616 
17617       END LOOP; --uiPges
17618 
17619 
17620       -- Verify for cz_ui_actions.target_expl_node_id
17621       FOR uiActs IN (SELECT uiact.ui_action_id,uiact.target_expl_node_id FROM CZ_UI_ACTIONS uiact
17622                          WHERE uiact.deleted_flag = G_NO_FLAG AND uiact.ui_def_id = uiDefCur.ref_ui_def_id
17623                            AND uiact.target_expl_node_id IS NOT NULL
17624                            AND NOT EXISTS (SELECT 1 FROM CZ_MODEL_REF_EXPLS
17625                                            WHERE deleted_flag = G_NO_FLAG AND model_ref_expl_id = uiact.target_expl_node_id
17626                                           )
17627                       )
17628       LOOP
17629 
17630 
17631 		log_message( 'UI_REFRESH' , 'UPDATE  deleted_flag of CZ_UI_ACTIONS where target_expl_node_id : ' || uiActs.target_expl_node_id || ' and ui_def_id : '|| uiDefCur.ref_ui_def_id);
17632 
17633 		UPDATE CZ_UI_ACTIONS
17634 		SET deleted_flag = G_YES_FLAG
17635 		WHERE target_expl_node_id = uiActs.target_expl_node_id
17636 		AND ui_action_id = uiActs.ui_action_id
17637 		AND ui_def_id = uiDefCur.ref_ui_def_id;
17638       END LOOP; --uiActs
17639 
17640   END LOOP; --  uiDefCur
17641 
17642 END delete_Invalid_UI_Elements;
17643 
17644   --
17645   -- refresh a given UI
17646   -- Parameters :
17647   --   p_ui_def_id          - identifies UI
17648   --   x_return_status      - status string
17649   --   x_msg_count          - number of error messages
17650   --   x_msg_data           - string which contains error messages
17651   --
17652   PROCEDURE refresh_UI(p_ui_def_id     IN NUMBER,
17653                        x_return_status OUT NOCOPY VARCHAR2,
17654                        x_msg_count     OUT NOCOPY NUMBER,
17655                        x_msg_data      OUT NOCOPY VARCHAR2) IS
17656 
17657     l_ui_context CZ_UI_DEFS%ROWTYPE;
17658   BEGIN
17659     --
17660     -- initialize FND variables/packages
17661     --
17662     Initialize(x_return_status,x_msg_count,x_msg_data);
17663 
17664     --
17665     -- get UI context
17666     --
17667     l_ui_context := get_UI_Context(p_ui_def_id => p_ui_def_id);
17668 
17669     --
17670     -- if p_create_empty_ui = G_NO_FLAG ( ='1') then do generate/refresh UI
17671     --
17672     IF NVL(l_ui_context.suppress_refresh_flag,G_NO_FLAG) = G_NO_FLAG THEN
17673 
17674       -- refresh model_path for all nodes on refreshed UI page
17675       g_REFRESH_MODEL_PATH := TRUE;
17676 
17677       --
17678       -- refresh UI
17679       --
17680       construct_UI(p_ui_def_id);
17681 
17682       --bug14029835, procedure which deletes the invalid ui elements in the UI related tables
17683       delete_Invalid_UI_Elements(p_ui_def_id);
17684     END IF;
17685 
17686     IF g_MSG_COUNT>0 THEN
17687       x_return_status := G_RETURN_STATUS;
17688       x_msg_count     := g_MSG_COUNT;
17689       x_msg_data      := fnd_msg_pub.GET(g_MSG_COUNT,fnd_api.g_false);
17690     END IF;
17691 
17692   EXCEPTION
17693     WHEN FAILED_TO_LOCK_MODEL THEN
17694       x_return_status := FND_API.G_RET_STS_ERROR;
17695       x_msg_count     := 1;
17696       x_msg_data      := fnd_msg_pub.GET(g_MSG_COUNT,fnd_api.g_false);
17697       DEBUG(x_msg_data);
17698     WHEN WRONG_UI_TO_REFRESH THEN
17699       x_return_status := FND_API.G_RET_STS_ERROR;
17700       x_msg_count     := 1;
17701       x_msg_data      := 'Internal Error : Wrong UI to refresh.';
17702       fnd_msg_pub.add_exc_msg('CZ_UIOA_PVT', 'refresh_UI', x_msg_data);
17703       DEBUG(x_msg_data);
17704     WHEN WRONG_UI_TEMPLATE THEN
17705       x_return_status := FND_API.G_RET_STS_ERROR;
17706       x_msg_count     := g_MSG_COUNT;
17707       x_msg_data      := fnd_msg_pub.GET(g_MSG_COUNT,fnd_api.g_false);
17708       DEBUG(x_msg_data);
17709     WHEN WRONG_EXT_PS_TYPE THEN
17710       x_return_status := FND_API.G_RET_STS_ERROR;
17711       x_msg_count     :=  1;
17712       x_msg_data      :=  'Internal Error : extended ps node type of node with ps_node_id='||
17713                           TO_CHAR(g_WRONG_PS_NODE_ID)||' is not defined.';
17714       fnd_msg_pub.add_exc_msg('CZ_UIOA_PVT', 'create_UI', x_msg_data);
17715       DEBUG(x_msg_data);
17716     WHEN UNREACH_UI_NODE THEN
17717       x_return_status := FND_API.G_RET_STS_ERROR;
17718       x_msg_count     := g_MSG_COUNT;
17719       x_msg_data      := fnd_msg_pub.GET(g_MSG_COUNT,fnd_api.g_false);
17720       DEBUG(x_msg_data);
17721     WHEN OTHERS THEN
17722       x_return_status := FND_API.G_RET_STS_ERROR;
17723       x_msg_count := g_MSG_COUNT;
17724       IF g_MSG_COUNT>0 THEN
17725          x_msg_count := g_MSG_COUNT;
17726          x_msg_data  := fnd_msg_pub.GET(g_MSG_COUNT,fnd_api.g_false);
17727       ELSE
17728          x_msg_count := 1;
17729          x_msg_data  := SUBSTR(DBMS_UTILITY.format_error_backtrace,1,4000);
17730       END IF;
17731       fnd_msg_pub.add_exc_msg('CZ_UIOA_PVT', 'refresh_UI', x_msg_data);
17732       DEBUG(x_msg_data);
17733   END refresh_UI;
17734 
17735   --
17736   -- delete records which correspond with user attributes
17737   --
17738   PROCEDURE delete_User_Attr_For_Node(p_xml_node           xmldom.DOMNode,
17739                                       p_ui_def_id          NUMBER,
17740                                       p_template_id        NUMBER DEFAULT NULL,
17741                                       p_template_ui_def_id NUMBER DEFAULT NULL) IS
17742 
17743     l_user_attribute_value VARCHAR2(4000);
17744     l_persistent_id        NUMBER;
17745 
17746   BEGIN
17747 
17748       l_user_attribute_value := get_Attribute_Value(p_xml_node, G_USER_ATTRIBUTE3_NAME);
17749       IF l_user_attribute_value IS NOT NULL THEN
17750 
17751         l_persistent_id := TO_NUMBER(get_User_Attribute(l_user_attribute_value,'actionId'));
17752         IF l_persistent_id IS NOT NULL THEN
17753           UPDATE CZ_UI_ACTIONS
17754              SET deleted_flag=G_YES_FLAG
17755            WHERE ui_def_id=p_ui_def_id AND
17756                  ui_action_id=l_persistent_id AND
17757                  seeded_flag=G_NO_FLAG;
17758 
17759             IF p_template_id IS NOT NULL THEN
17760               UPDATE CZ_UI_TEMPLATE_ELEMENTS
17761                  SET deleted_flag=G_YES_FLAG
17762                WHERE template_id=p_template_id AND
17763                      ui_def_id=p_template_ui_def_id AND
17764                      element_id=l_persistent_id AND
17765                      element_type IN(552) AND
17766                      seeded_flag=G_NO_FLAG AND
17767                      deleted_flag=G_NO_FLAG;
17768             END IF;
17769         END IF;
17770 
17771         FOR i IN g_condition_attr_tbl.First..g_condition_attr_tbl.Last
17772         LOOP
17773           l_persistent_id := TO_NUMBER(get_User_Attribute(l_user_attribute_value,g_condition_attr_tbl(i)));
17774           IF l_persistent_id IS NOT NULL THEN
17775             UPDATE CZ_RULES
17776                SET deleted_flag = G_YES_FLAG
17777              WHERE persistent_rule_id = l_persistent_id
17778                AND ui_def_id = p_ui_def_id
17779                AND seeded_flag = G_NO_FLAG;
17780 
17781             IF p_template_id IS NOT NULL THEN
17782               UPDATE CZ_UI_TEMPLATE_ELEMENTS
17783                  SET deleted_flag=G_YES_FLAG
17784                WHERE template_id=p_template_id AND
17785                      ui_def_id=p_template_ui_def_id AND
17786                      element_id=l_persistent_id AND
17787                      element_type IN(33,34) AND
17788                      seeded_flag=G_NO_FLAG AND
17789                      deleted_flag=G_NO_FLAG;
17790             END IF;
17791           END IF;
17792         END LOOP;
17793 
17794         FOR i IN g_caption_attr_tbl.First..g_caption_attr_tbl.Last
17795         LOOP
17796           l_persistent_id := TO_NUMBER(get_User_Attribute(l_user_attribute_value,g_caption_attr_tbl(i)));
17797           IF l_persistent_id IS NOT NULL THEN
17798             UPDATE CZ_LOCALIZED_TEXTS
17799                SET deleted_flag=G_YES_FLAG
17800              WHERE persistent_intl_text_id=l_persistent_id AND
17801                    ui_def_id=p_ui_def_id AND
17802                    seeded_flag=G_NO_FLAG;
17803 
17804             IF p_template_id IS NOT NULL THEN
17805               UPDATE CZ_UI_TEMPLATE_ELEMENTS
17806                  SET deleted_flag=G_YES_FLAG
17807                WHERE template_id=p_template_id AND
17808                      ui_def_id=p_template_ui_def_id AND
17809                      element_id=l_persistent_id AND
17810                      element_type IN(8) AND
17811                      seeded_flag=G_NO_FLAG AND
17812                      deleted_flag=G_NO_FLAG;
17813             END IF;
17814           END IF;
17815         END LOOP;
17816 
17817       END IF;
17818   END delete_User_Attr_For_Node;
17819 
17820   PROCEDURE copy_User_Attr_For_Node(p_xml_node               xmldom.DOMNode,
17821                                     p_source_ui_def_id       NUMBER,
17822                                     p_target_ui_def_id       NUMBER,
17823                                     p_source_ui_page_id      NUMBER,
17824                                     p_target_ui_page_id      NUMBER,
17825                                     p_target_model_path      VARCHAR2,
17826                                     p_new_element_id_arr_tbl IN OUT NOCOPY number_tbl_type) IS
17827 
17828     l_user_attribute_value VARCHAR2(4000);
17829     l_new_element_id       VARCHAR2(255);
17830     l_target_model_path    VARCHAR2(4000);
17831     l_name                 VARCHAR2(4000);
17832     l_ui_node              CZ_UI_PAGE_ELEMENTS%ROWTYPE;
17833     l_model_ref_expl_id    NUMBER;
17834     l_num_copy             NUMBER;
17835     l_id                   NUMBER;
17836 
17837   BEGIN
17838 
17839       set_UI_Context(p_target_ui_def_id);
17840 
17841       l_user_attribute_value := get_Attribute_Value(p_xml_node, G_ID_ATTRIBUTE);
17842 
17843       IF l_user_attribute_value IS NOT NULL THEN
17844         BEGIN
17845           l_id := TO_NUMBER(l_user_attribute_value);
17846 
17847           l_new_element_id := p_new_element_id_arr_tbl(l_id);
17848 
17849           set_Attribute(p_xml_node,
17850                         G_ID_ATTRIBUTE,
17851                         l_new_element_id);
17852 
17853           g_handled_attr_id_tbl(l_new_element_id) := l_id;
17854 
17855         EXCEPTION
17856           WHEN OTHERS THEN
17857             DEBUG('copy_User_Attr_For_Node() : '||SQLERRM);
17858             IF NOT(g_handled_attr_id_tbl.EXISTS(l_id)) THEN
17859               set_Attribute(p_xml_node,
17860                             G_ID_ATTRIBUTE,
17861                             l_user_attribute_value||'_'||get_Element_Id());
17862             END IF;
17863         END;
17864 
17865       END IF;
17866 
17867       l_user_attribute_value := get_Attribute_Value(p_xml_node, G_USER_ATTRIBUTE1_NAME);
17868 
17869       IF l_user_attribute_value IS NOT NULL AND l_new_element_id IS NOT NULL THEN
17870 
17871         SELECT * INTO l_ui_node FROM CZ_UI_PAGE_ELEMENTS
17872          WHERE ui_def_id=p_target_ui_def_id AND
17873                page_id=p_target_ui_page_id AND
17874                element_id=l_new_element_id;
17875         SELECT model_ref_expl_id INTO l_model_ref_expl_id FROM CZ_UI_PAGE_ELEMENTS
17876         WHERE ui_def_id=l_ui_node.ui_def_id AND page_id=l_ui_node.page_id AND
17877              parent_element_id IS NULL AND deleted_flag NOT IN(G_YES_FLAG,G_MARK_TO_DELETE);
17878        l_target_model_path := CZ_DEVELOPER_UTILS_PVT.runtime_relative_path(p_base_expl_id => l_model_ref_expl_id,
17879                                                      p_base_pers_id => l_ui_node.pagebase_persistent_node_id,
17880                                                      p_node_expl_id => l_ui_node.model_ref_expl_id,
17881                                                      p_node_pers_id => l_ui_node.persistent_node_id);
17882         IF l_target_model_path IS NULL THEN
17883            l_target_model_path := '.';
17884         END IF;
17885 
17886         set_Attribute(p_xml_node,
17887                       G_USER_ATTRIBUTE1_NAME,
17888                       'model_path='||l_target_model_path);
17889 
17890       END IF;
17891 
17892       l_user_attribute_value := get_Attribute_Value(p_xml_node, G_USER_ATTRIBUTE3_NAME);
17893 
17894       IF l_user_attribute_value IS NOT NULL AND l_new_element_id IS NOT NULL  THEN
17895 
17896         handle_User_Attributes
17897         (px_user_attribute_value => l_user_attribute_value,
17898          p_source_ui_def_id      => p_source_ui_def_id,
17899          p_source_ui_page_id     => p_source_ui_page_id,
17900          p_target_ui_def_id      => p_target_ui_def_id,
17901          p_target_ui_page_id     => p_target_ui_page_id,
17902          p_new_element_id        => l_new_element_id,
17903          p_xml_node              => p_xml_node);
17904 
17905          set_Attribute(p_xml_node,
17906                        G_USER_ATTRIBUTE3_NAME,
17907                        l_user_attribute_value);
17908      END IF;
17909 
17910      l_user_attribute_value := get_Attribute_Value(p_xml_node, G_USER_ATTRIBUTE4_NAME);
17911 
17912      IF l_user_attribute_value IS NOT NULL THEN
17913 
17914        l_name := get_User_Attribute(l_user_attribute_value ,'name');
17915 
17916        SELECT COUNT(*)+1 INTO l_num_copy FROM CZ_UI_PAGE_ELEMENTS
17917        WHERE ui_def_id=p_target_ui_def_id AND page_id=p_target_ui_page_id AND
17918              name like l_name||'%' AND deleted_flag=G_NO_FLAG;
17919 
17920        l_name := l_name||' ('||TO_CHAR(l_num_copy)||')';
17921 
17922        set_User_Attribute(p_cz_attribute_name    => 'name',
17923                           p_cz_attribute_value   => l_name,
17924                           px_xml_attribute_value => l_user_attribute_value);
17925 
17926        set_Attribute(p_xml_node,
17927                      G_USER_ATTRIBUTE4_NAME,
17928                      l_user_attribute_value);
17929      END IF;
17930 
17931      IF l_new_element_id IS NOT NULL THEN
17932        UPDATE CZ_UI_PAGE_ELEMENTS
17933           SET name=l_name
17934         WHERE ui_def_id=p_target_ui_def_id AND page_id=p_target_ui_page_id AND
17935               element_id = l_new_element_id;
17936      END IF;
17937 
17938   END copy_User_Attr_For_Node;
17939 
17940   --
17941   -- copy records which correspond to user attributes
17942   --
17943   PROCEDURE copy_User_Attr_For_Node(p_xml_node               xmldom.DOMNode,
17944                                     p_source_ui_def_id       NUMBER,
17945                                     p_target_ui_def_id       NUMBER,
17946                                     p_source_template_id     NUMBER DEFAULT NULL,
17947                                     p_target_template_id     NUMBER DEFAULT NULL) IS
17948 
17949     l_user_attribute_value VARCHAR2(4000);
17950     l_new_element_id       VARCHAR2(255);
17951     l_id                   NUMBER;
17952     l_name                 VARCHAR2(4000);
17953     l_num_copy             NUMBER;
17954 
17955   BEGIN
17956 
17957       l_user_attribute_value := get_Attribute_Value(p_xml_node, G_ID_ATTRIBUTE);
17958 
17959       IF l_user_attribute_value IS NOT NULL THEN
17960 
17961          l_new_element_id := '_czc'||get_Element_Id(); -- fix for bug #3975276
17962          set_Attribute(p_xml_node,
17963                        G_ID_ATTRIBUTE,
17964                        l_new_element_id);
17965 
17966       END IF;
17967 
17968       l_user_attribute_value := get_Attribute_Value(p_xml_node, G_USER_ATTRIBUTE3_NAME);
17969 
17970       IF l_user_attribute_value IS NOT NULL THEN
17971         handle_User_Attributes
17972         (px_user_attribute_value => l_user_attribute_value,
17973          p_source_ui_def_id      => p_source_ui_def_id,
17974          p_source_ui_page_id     => 0,  -- fix for bug #3975276
17975          p_target_ui_def_id      => p_target_ui_def_id,
17976          p_target_ui_page_id     => 0,  -- fix for bug #3975276
17977          p_new_element_id        => l_new_element_id,
17978          p_source_template_id    => p_source_template_id,
17979          p_target_template_id    => p_target_template_id,
17980          p_xml_node              => p_xml_node);
17981 
17982          set_Attribute(p_xml_node,
17983                        G_USER_ATTRIBUTE3_NAME,
17984                        l_user_attribute_value);
17985       END IF;
17986 
17987      l_user_attribute_value := get_Attribute_Value(p_xml_node, G_USER_ATTRIBUTE4_NAME);
17988 
17989      IF l_user_attribute_value IS NOT NULL THEN
17990 
17991        l_name := get_User_Attribute(l_user_attribute_value ,'name');
17992 
17993        IF l_new_element_id IS NOT NULL THEN
17994          l_name := l_name||' - '||l_new_element_id;
17995        END IF;
17996 
17997        set_User_Attribute(p_cz_attribute_name    => 'name',
17998                           p_cz_attribute_value   => l_name,
17999                           px_xml_attribute_value => l_user_attribute_value);
18000 
18001        set_Attribute(p_xml_node,
18002                      G_USER_ATTRIBUTE4_NAME,
18003                      l_user_attribute_value);
18004      END IF;
18005 
18006   END copy_User_Attr_For_Node;
18007 
18008   --
18009   -- delete records which corresponds with user attributes
18010   --
18011   PROCEDURE delete_User_Attributes(p_xml_node  xmldom.DOMNode,
18012                                    p_ui_def_id NUMBER,
18013                                    p_template_id        NUMBER DEFAULT NULL,
18014                                    p_template_ui_def_id NUMBER DEFAULT NULL) IS
18015 
18016 
18017     l_child_nodes_tbl xmldom.DOMNodeList;
18018     l_child_xml_node  xmldom.DOMNode;
18019     l_length          NUMBER;
18020 
18021   BEGIN
18022 
18023     IF xmldom.IsNull(p_xml_node) THEN
18024       RETURN;
18025     END IF;
18026 
18027     delete_User_Attr_For_Node(p_xml_node,p_ui_def_id,
18028                               p_template_id, p_template_ui_def_id);
18029 
18030     l_child_nodes_tbl := xmldom.getChildNodes(p_xml_node);
18031     l_length          := xmldom.getLength(l_child_nodes_tbl);
18032 
18033     FOR k IN 0 .. l_length - 1
18034     LOOP
18035       --
18036       -- get next child DOM node
18037       --
18038       l_child_xml_node := xmldom.item(l_child_nodes_tbl, k);
18039 
18040       delete_User_Attr_For_Node(l_child_xml_node,p_ui_def_id,
18041                                 p_template_id, p_template_ui_def_id);
18042 
18043       delete_User_Attributes(l_child_xml_node,p_ui_def_id,
18044                              p_template_id, p_template_ui_def_id);
18045 
18046     END LOOP;
18047 
18048   END delete_User_Attributes;
18049 
18050   --
18051   -- copy records which corresponds with user attributes
18052   --
18053   PROCEDURE copy_User_Attributes(p_xml_node               xmldom.DOMNode,
18054                                  p_source_ui_def_id       NUMBER,
18055                                  p_target_ui_def_id       NUMBER,
18056                                  p_source_ui_page_id      NUMBER,
18057                                  p_target_ui_page_id      NUMBER,
18058                                  p_target_model_path      VARCHAR2,
18059                                  p_new_element_id_arr_tbl IN OUT NOCOPY number_tbl_type) IS
18060 
18061     l_child_nodes_tbl xmldom.DOMNodeList;
18062     l_child_xml_node  xmldom.DOMNode;
18063     l_length          NUMBER;
18064 
18065   BEGIN
18066 
18067      copy_User_Attr_For_Node(p_xml_node          => p_xml_node,
18068                             p_source_ui_def_id  => p_source_ui_def_id,
18069                             p_target_ui_def_id  => p_target_ui_def_id,
18070                             p_source_ui_page_id => p_source_ui_page_id,
18071                             p_target_ui_page_id => p_target_ui_page_id,
18072                             p_target_model_path => p_target_model_path,
18073                             p_new_element_id_arr_tbl => p_new_element_id_arr_tbl);
18074 
18075     l_child_nodes_tbl := xmldom.getChildNodes(p_xml_node);
18076     l_length          := xmldom.getLength(l_child_nodes_tbl);
18077 
18078     FOR k IN 0 .. l_length - 1
18079     LOOP
18080       --
18081       -- get next child DOM node
18082       --
18083       l_child_xml_node := xmldom.item(l_child_nodes_tbl, k);
18084 
18085       copy_User_Attr_For_Node(p_xml_node          => l_child_xml_node,
18086                               p_source_ui_def_id  => p_source_ui_def_id,
18087                               p_target_ui_def_id  => p_target_ui_def_id,
18088                               p_source_ui_page_id => p_source_ui_page_id,
18089                               p_target_ui_page_id => p_target_ui_page_id,
18090                               p_target_model_path => p_target_model_path,
18091                               p_new_element_id_arr_tbl => p_new_element_id_arr_tbl);
18092 
18093       copy_User_Attributes(p_xml_node          => l_child_xml_node,
18094                            p_source_ui_def_id  => p_source_ui_def_id,
18095                            p_target_ui_def_id  => p_target_ui_def_id,
18096                            p_source_ui_page_id => p_source_ui_page_id,
18097                            p_target_ui_page_id => p_target_ui_page_id,
18098                            p_target_model_path => p_target_model_path,
18099                            p_new_element_id_arr_tbl => p_new_element_id_arr_tbl);
18100 
18101     END LOOP;
18102 
18103   EXCEPTION
18104     WHEN OTHERS THEN
18105       DEBUG('copy_User_Attributes() : '||SQLERRM);
18106 
18107   END copy_User_Attributes;
18108 
18109  PROCEDURE validate_Copied_PIR(p_ui_def_id IN NUMBER, p_page_id IN NUMBER) IS
18110     TYPE number_tbl_type        IS TABLE OF NUMBER INDEX BY BINARY_INTEGER;
18111     l_element_id_tbl            varchar_tbl_type;
18112     l_name_tbl                  varchar_tbl_type;
18113     l_target_page_ui_def_id_tbl number_tbl_type;
18114     l_target_page_id_tbl        number_tbl_type;
18115     l_ui_name                   CZ_UI_DEFS.name%TYPE;
18116     l_page_name                 CZ_UI_PAGES.name%TYPE;
18117     l_pagebase_expl_id          NUMBER;
18118     l_ui_def_id                 NUMBER;
18119     l_target_persistent_node_id NUMBER;
18120 
18121   BEGIN
18122 
18123     UPDATE CZ_UI_PAGE_ELEMENTS
18124        SET target_page_ui_def_id=NULL,
18125            target_page_id=NULL
18126      WHERE ui_def_id=p_ui_def_id AND
18127            page_id=p_page_id AND
18128            element_signature_id = G_PAGE_INCL_REGION_SIGNATURE AND
18129            deleted_flag='0' AND target_page_ui_def_id IS NOT NULL AND
18130            target_page_id IS NOT NULL AND
18131            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
18132            deleted_flag='0')
18133     RETURNING element_id,name,target_page_id,target_page_ui_def_id
18134     BULK COLLECT INTO l_element_id_tbl,l_name_tbl,l_target_page_id_tbl,l_target_page_ui_def_id_tbl;
18135 
18136     IF l_name_tbl.COUNT>0 THEN
18137       FOR i IN l_name_tbl.First..l_name_tbl.Last
18138       LOOP
18139         SELECT name INTO l_page_name FROM CZ_UI_PAGES
18140         WHERE page_id=l_target_page_id_tbl(i) AND ui_def_id=l_target_page_ui_def_id_tbl(i);
18141         SELECT name INTO l_ui_name FROM CZ_UI_DEFS WHERE ui_def_id=l_target_page_ui_def_id_tbl(i);
18142         add_Error_Message(p_message_name => 'CZ_CP_PIR_REF_UI_NOT_IN_CHAIN',
18143                           p_token_name1  => 'RGNNAME',
18144 	                  p_token_value1 => NVL(l_name_tbl(i), l_element_id_tbl(i)),
18145 	                  p_token_name2  => 'PAGENAME',
18146                           p_token_value2 => l_page_name,
18147 	                  p_token_name3  => 'UINAME',
18148                           p_token_value3 => l_ui_name,
18149                           p_fatal_error  => FALSE);
18150       END LOOP;
18151     END IF;
18152 
18153     --
18154     -- Find all Page Include Regions of current UI
18155     --
18156     FOR i IN (SELECT page_id, element_id, target_page_ui_def_id, target_page_id,
18157                      model_ref_expl_id, persistent_node_id, name
18158               FROM CZ_UI_PAGE_ELEMENTS
18159               WHERE ui_def_id = p_ui_def_id AND page_id=p_page_id AND
18160                     element_signature_id = G_PAGE_INCL_REGION_SIGNATURE AND
18161                     target_page_ui_def_id IS NOT NULL AND target_page_id IS NOT NULL AND
18162                     deleted_flag = '0')
18163     LOOP
18164       -- target page exists?
18165       l_target_persistent_node_id := NULL;
18166       BEGIN
18167         SELECT persistent_node_id INTO l_target_persistent_node_id
18168         FROM   cz_ui_pages
18169         WHERE  ui_def_id = i.target_page_ui_def_id AND
18170                page_id = i.target_page_id AND deleted_flag <> '1';
18171       EXCEPTION
18172         -- target page not exist
18173         WHEN NO_DATA_FOUND THEN
18174           -- l_target_persistent_node_id := NULL;
18175           UPDATE CZ_UI_PAGE_ELEMENTS
18176           SET    target_page_ui_def_id = NULL, target_page_id = NULL
18177           WHERE  ui_def_id = p_ui_def_id AND
18178                  page_id = i.page_id AND element_id = i.element_id;
18179 
18180           add_Error_Message(p_message_name => 'CZ_UIGEN_TARGET_PAGE_NOT_EXIST',
18181 	                    p_token_name1  => 'REGION_NAME',
18182 	                    p_token_value1 => NVL(i.NAME, i.element_id),
18183 	                    p_token_name2  => 'PAGE_NAME',
18184 	                    p_token_value2 => get_page_name(p_ui_def_id,i.page_id),
18185                             p_fatal_error  => FALSE);
18186       END;
18187 
18188       -- target page exists. check if reachable
18189       IF l_target_persistent_node_id IS NOT NULL THEN
18190         SELECT pagebase_expl_node_id INTO l_pagebase_expl_id
18191         FROM   cz_ui_pages
18192         WHERE  ui_def_id = p_ui_def_id AND
18193                page_id = i.page_id;
18194 
18195         IF i.persistent_node_id = l_target_persistent_node_id THEN
18196           l_ui_def_id := i.target_page_ui_def_id;
18197         ELSE
18198           l_ui_def_id := p_ui_def_id;
18199         END IF;
18200 
18201         IF NOT target_page_reachable(l_pagebase_expl_id,
18202                                      i.model_ref_expl_id,
18203                                      i.persistent_node_id,
18204                                      l_ui_def_id) THEN
18205           add_Error_Message(p_message_name => 'CZ_UIGEN_TARGET_PAGE_REACH',
18206 	                    p_token_name1  => 'REGION_NAME',
18207 	                    p_token_value1 => NVL(i.NAME, i.element_id),
18208 	                    p_token_name2  => 'PAGE_NAME',
18209 	                    p_token_value2 => get_page_name(p_ui_def_id,i.page_id),
18210                             p_fatal_error  => FALSE);
18211           UPDATE CZ_UI_PAGE_ELEMENTS
18212           SET    target_page_ui_def_id = NULL, target_page_id = NULL
18213           WHERE  ui_def_id = p_ui_def_id AND
18214                  page_id = i.page_id AND element_id = i.element_id;
18215         END IF;
18216       END IF;
18217     END LOOP;
18218 
18219   END validate_Copied_PIR;
18220 
18221   PROCEDURE copy_Tree_Level(p_xml_node                    xmldom.DOMNode,
18222                             p_source_ui_def_id            NUMBER,
18223                             p_target_ui_def_id            NUMBER,
18224                             p_source_ui_page_id           NUMBER,
18225                             p_target_ui_page_id           NUMBER,
18226                             p_parent_element_id           VARCHAR2,
18227                             p_target_parent_element_id    VARCHAR2,
18228                             p_pagebase_persistent_node_id NUMBER,
18229                             p_base_persistent_node_Id     NUMBER,
18230                             p_base_expl_node_id           NUMBER,
18231                             x_new_element_id              IN OUT NOCOPY VARCHAR2,
18232                             p_copy_as_ui_page             IN BOOLEAN,
18233                             p_source_jrad_doc             IN VARCHAR2,
18234                             p_target_jrad_doc             IN VARCHAR2,
18235                             p_amn_parent_element_id       IN VARCHAR2,
18236                             p_is_instance_list_child      IN BOOLEAN DEFAULT FALSE) IS
18237 
18238     l_child_nodes_tbl      xmldom.DOMNodeList;
18239     l_child_xml_node       xmldom.DOMNode;
18240     l_parent_xml_node      xmldom.DOMNode;
18241     l_ui_node              CZ_UI_PAGE_ELEMENTS%ROWTYPE;
18242 
18243     l_user_attribute_value  VARCHAR2(4000);
18244     l_user_attribute3_value VARCHAR2(4000);
18245 
18246     l_switcher_casename    VARCHAR2(255);
18247 
18248     l_target_model_path    VARCHAR2(255);
18249     l_current_element_id   VARCHAR2(255);
18250     l_amn_parent_element_id VARCHAR2(255);
18251     l_new_element_id       VARCHAR2(255);
18252     l_parent_element_id    VARCHAR2(255);
18253     l_name                 VARCHAR2(255);
18254     l_view_name            VARCHAR2(255);
18255     l_children_view_name   VARCHAR2(255);
18256     l_ancestor_node        VARCHAR2(255);
18257     l_hgrid_element_id     VARCHAR2(255);
18258     l_case_node_id         VARCHAR2(255);
18259     l_case_node_name       VARCHAR2(255);
18260     l_switcher_element_id  VARCHAR2(255);
18261     l_case_new_node_id     VARCHAR2(255);
18262     l_case_new_node_name   VARCHAR2(255);
18263     l_old_ui_switcher_id   VARCHAR2(255);
18264     l_layout_node_id       VARCHAR2(255);
18265     l_layout_node_name     VARCHAR2(255);
18266     l_layout_new_node_id   VARCHAR2(255);
18267     l_layout_new_node_name VARCHAR2(255);
18268     l_temp_str             VARCHAR2(255);
18269     l_instr_ind            NUMBER;
18270     l_view_counter         NUMBER;
18271     l_num_copy             NUMBER;
18272     l_ui_action_id         NUMBER;
18273     l_length               NUMBER;
18274     l_ind                  NUMBER;
18275     l_id                   NUMBER;
18276     l_temp_ind             NUMBER;
18277     l_ui_page_elements_exists BOOLEAN := FALSE;
18278     l_base_expl_node_id        NUMBER;
18279     l_base_persistent_node_id  NUMBER;
18280     l_amn_expl_node_id NUMBER;
18281     l_amn_persistent_node_id NUMBER;
18282     l_layout_region_type VARCHAR2(20);
18283 
18284   BEGIN
18285 
18286     l_base_expl_node_id        := p_base_expl_node_id;
18287     l_base_persistent_node_id  := p_base_persistent_node_Id;
18288 
18289     l_ancestor_node := get_Attribute_Value(p_xml_node,
18290                                            'ancestorNode');
18291     IF l_ancestor_node IS NOT NULL THEN
18292 
18293       l_hgrid_element_id := find_Element_Id_Of_XMLTag(p_xml_node, 'oa:tree');
18294       IF NOT(xmldom.IsNull(p_xml_node)) THEN
18295         l_ancestor_node := p_target_jrad_doc||'.'||l_hgrid_element_id;
18296 
18297         set_Attribute(p_xml_node,
18298                       'ancestorNode',
18299                       l_ancestor_node);
18300       END IF;
18301     END IF;
18302 
18303     IF xmldom.getNodeName(p_xml_node)='ui:case' THEN
18304 
18305       handle_UI_CASE_Id(p_xml_node);
18306 
18307       l_switcher_element_id := find_Element_Id_Of_XMLTag(p_xml_node, 'oa:switcher');
18308 
18309       l_case_node_id := get_Attribute_Value(p_xml_node,
18310                                             'name');
18311 
18312 
18313       l_instr_ind := 0;
18314 
18315       FOR i IN 1..LENGTH(l_case_node_id)
18316       LOOP
18317         IF SUBSTR(l_case_node_id,i,1)='_' THEN
18318           l_instr_ind := i;
18319         END IF;
18320       END LOOP;
18321 
18322       IF l_case_node_id IS NOT NULL THEN
18323         l_old_ui_switcher_id := SUBSTR(l_case_node_id,1,l_instr_ind-1);
18324         l_case_new_node_id := REPLACE(l_case_node_id,
18325           l_old_ui_switcher_id,
18326           l_switcher_element_id);
18327         set_Attribute(p_xml_node,
18328                       'name',
18329                       l_case_new_node_id);
18330       END IF;
18331 
18332     END IF;
18333 
18334     IF xmldom.getNodeName(p_xml_node)='oa:stackLayout' THEN
18335 
18336       l_parent_xml_node := xmldom.getParentNode(p_xml_node);
18337 
18338       IF NOT(xmldom.IsNull(l_parent_xml_node)) THEN
18339 
18340         IF xmldom.getNodeName(l_parent_xml_node)='ui:case' THEN
18341 
18342           l_layout_new_node_id := get_Attribute_Value(l_parent_xml_node,'name');
18343           set_Attribute(p_xml_node,
18344                         G_ID_ATTRIBUTE,
18345                         l_layout_new_node_id);
18346 
18347         END IF; -- end of IF xmldom.getNodeName(l_parent_xml_node)='ui:case'
18348 
18349       END IF; -- end of IF NOT(xmldom.IsNull(l_parent_xml_node))
18350 
18351     END IF;  -- end of IF xmldom.getNodeName(p_xml_node)='oa:stackLayout'
18352 
18353     IF l_layout_new_node_id IS NULL THEN
18354       l_current_element_id := get_Attribute_Value(p_xml_node,
18355                                                   G_ID_ATTRIBUTE);
18356 
18357       IF l_current_element_id IS NOT NULL THEN
18358         l_new_element_id := get_Element_Id();
18359       END IF;
18360 
18361     END IF;
18362 
18363     FOR i IN(SELECT parent_element_id FROM CZ_UI_PAGE_ELEMENTS
18364              WHERE ui_def_id=p_source_ui_def_id AND
18365                    page_id=p_source_ui_page_id AND
18366                    element_id=l_current_element_id)
18367     LOOP
18368       l_ui_page_elements_exists := TRUE;
18369       IF x_new_element_id IS NULL THEN
18370         x_new_element_id := l_new_element_id;
18371       END IF;
18372     END LOOP;
18373 
18374     l_amn_parent_element_id := p_amn_parent_element_id;
18375     IF  l_ui_page_elements_exists THEN
18376       l_parent_element_id := l_amn_parent_element_id;
18377       l_amn_parent_element_id := l_new_element_id;
18378     ELSIF p_parent_element_id IS NULL THEN
18379       l_parent_element_id := p_target_parent_element_id;
18380     ELSE
18381       l_parent_element_id := p_parent_element_id;
18382     END IF;
18383 
18384     IF l_ui_page_elements_exists THEN
18385         INSERT INTO CZ_UI_PAGE_ELEMENTS
18386         (ui_def_id,
18387          persistent_node_id,
18388          parent_persistent_node_id,
18389          region_persistent_node_id,
18390          pagebase_persistent_node_id,
18391          page_id,
18392          seq_nbr,
18393          ctrl_template_id,
18394          element_id,
18395          parent_element_id,
18396          element_type,
18397          instantiable_flag,
18398          ctrl_template_ui_def_id,
18399          model_ref_expl_id,
18400          element_signature_id,
18401          name,
18402          suppress_refresh_flag,
18403          deleted_flag,
18404          target_page_ui_def_id,
18405          target_page_id)
18406          SELECT
18407            p_target_ui_def_id,
18408          persistent_node_id,
18409          parent_persistent_node_id,
18410          region_persistent_node_id,
18411          p_pagebase_persistent_node_id,
18412          p_target_ui_page_id,
18413            seq_nbr,
18414          ctrl_template_id,
18415             l_new_element_id,
18416             l_parent_element_id,
18417          element_type,
18418          instantiable_flag,
18419          ctrl_template_ui_def_id,
18420          model_ref_expl_id,
18421          element_signature_id,
18422          name,
18423          suppress_refresh_flag,
18424          deleted_flag,
18425          target_page_ui_def_id,
18426          target_page_id
18427         FROM CZ_UI_PAGE_ELEMENTS
18428         WHERE ui_def_id=p_source_ui_def_id AND
18429               page_id=p_source_ui_page_id AND
18430               element_id=l_current_element_id;
18431 
18432         -- set JRAD Id of current XML node to new value
18433         set_Attribute(p_xml_node,
18434                       G_ID_ATTRIBUTE,
18435                       l_new_element_id);
18436         g_handled_attr_id_tbl(TO_NUMBER(l_new_element_id)) := l_current_element_id;
18437 
18438      END IF;
18439 
18440     -----------------------------------------------------
18441 
18442       IF l_current_element_id IS NOT NULL THEN
18443         -- set JRAD Id of current XML node to new value
18444         set_Attribute(p_xml_node,
18445                       G_ID_ATTRIBUTE,
18446                       l_new_element_id);
18447         g_handled_attr_id_tbl(TO_NUMBER(l_new_element_id)) := l_current_element_id;
18448 
18449         IF x_new_element_id IS NULL THEN
18450           x_new_element_id := l_new_element_id;
18451         END IF;
18452 
18453         IF xmldom.getNodeName(p_xml_node)='oa:switcher' THEN
18454 
18455           l_user_attribute3_value := get_Attribute_Value(p_xml_node, G_USER_ATTRIBUTE3_NAME);
18456 
18457           l_switcher_casename := get_User_Attribute(l_user_attribute3_value ,'switcherDefaultCaseName');
18458 
18459           l_switcher_casename := REPLACE(l_switcher_casename,l_current_element_id, l_new_element_id);
18460           set_User_Attribute(p_cz_attribute_name    => 'switcherDefaultCaseName',
18461                              p_cz_attribute_value   => l_switcher_casename,
18462                              px_xml_attribute_value => l_user_attribute3_value);
18463 
18464           set_Attribute(p_xml_node,
18465                         G_USER_ATTRIBUTE3_NAME,
18466                         l_user_attribute3_value);
18467         END IF;
18468 
18469       END IF;
18470 
18471       l_user_attribute_value := get_Attribute_Value(p_xml_node, G_USER_ATTRIBUTE3_NAME);
18472 
18473       IF l_user_attribute_value IS NOT NULL THEN
18474 
18475         l_amn_expl_node_id := NULL;
18476         l_amn_persistent_node_id := NULL;
18477 
18478         IF p_copy_as_ui_page=FALSE AND p_is_instance_list_child THEN
18479 
18480           -- This is a child if an Instance List. We need to pass the AMN of the Instance List
18481           -- and the AMN of the UI Element to handle_User_attributes so that actions and conditions
18482           -- will have correct paths
18483 
18484           SELECT persistent_node_id, model_ref_expl_id
18485             INTO l_amn_persistent_node_id, l_amn_expl_node_id
18486             FROM cz_ui_page_elements
18487            WHERE ui_Def_id = p_target_ui_def_id
18488              AND page_Id = p_target_ui_page_id
18489              AND element_id = l_amn_parent_element_id;
18490 
18491           handle_User_Attributes
18492             (px_user_attribute_value  => l_user_attribute_value,
18493              p_source_ui_def_id       => p_source_ui_def_id,
18494              p_source_ui_page_id      => p_source_ui_page_id,
18495              p_target_ui_def_id       => p_target_ui_def_id,
18496              p_target_ui_page_id      => p_target_ui_page_id,
18497              p_new_element_id         => l_new_element_id,
18498              p_il_persistent_node_id  => l_base_persistent_node_id,
18499              p_il_expl_node_id        => l_base_expl_node_id,
18500              p_amn_persistent_node_id => l_amn_persistent_node_id,
18501              p_amn_expl_node_id       => l_amn_expl_node_id,
18502              p_xml_node               => p_xml_node);
18503 
18504         ELSE
18505           handle_User_Attributes
18506             (px_user_attribute_value => l_user_attribute_value,
18507              p_source_ui_def_id      => p_source_ui_def_id,
18508              p_source_ui_page_id     => p_source_ui_page_id,
18509              p_target_ui_def_id      => p_target_ui_def_id,
18510              p_target_ui_page_id     => p_target_ui_page_id,
18511              p_new_element_id        => l_new_element_id,
18512              p_xml_node              => p_xml_node);
18513         END IF;
18514 
18515 
18516 
18517          set_Attribute(p_xml_node,
18518                        G_USER_ATTRIBUTE3_NAME,
18519                        l_user_attribute_value);
18520 
18521      END IF;
18522 
18523    IF p_copy_as_ui_page=FALSE THEN
18524 
18525       l_user_attribute_value := get_Attribute_Value(p_xml_node, G_USER_ATTRIBUTE1_NAME);
18526 
18527       IF l_user_attribute_value IS NOT NULL AND l_ui_page_elements_exists THEN
18528 
18529         SELECT * INTO l_ui_node FROM CZ_UI_PAGE_ELEMENTS
18530          WHERE ui_def_id=p_target_ui_def_id AND
18531                page_id=p_target_ui_page_id AND
18532                element_id=l_new_element_id;
18533 
18534          l_target_model_path := CZ_DEVELOPER_UTILS_PVT.runtime_relative_path(p_base_expl_id => l_base_expl_node_id,
18535                                                      p_base_pers_id => l_base_persistent_node_id,
18536                                                      p_node_expl_id => l_ui_node.model_ref_expl_id,
18537                                                      p_node_pers_id => l_ui_node.persistent_node_id);
18538 
18539         IF l_target_model_path IS NULL THEN
18540            l_target_model_path := '.';
18541         END IF;
18542 
18543         set_Attribute(p_xml_node,
18544                       G_USER_ATTRIBUTE1_NAME,
18545                       'model_path='||l_target_model_path);
18546 
18547       END IF;
18548 
18549      l_user_attribute_value := get_Attribute_Value(p_xml_node, G_USER_ATTRIBUTE3_NAME);
18550 
18551      IF l_user_attribute_value IS NOT NULL THEN
18552 
18553        SELECT COUNT(element_id) INTO l_view_counter
18554        FROM CZ_UI_PAGE_ELEMENTS
18555        WHERE ui_def_id=p_target_ui_def_id AND page_id=p_target_ui_page_id AND
18556        deleted_flag NOT IN(G_YES_FLAG,G_MARK_TO_DELETE);
18557 
18558        l_view_name := get_User_Attribute(l_user_attribute_value ,'nodeView');
18559 
18560        IF l_view_name <> '%nodeView' AND l_view_name IS NOT NULL THEN
18561          l_ind := INSTR(l_view_name, '_');
18562          l_view_name := SUBSTR(l_view_name,1,l_ind-1)||'_'||TO_CHAR(l_view_counter);
18563          set_User_Attribute(p_cz_attribute_name    => 'nodeView',
18564                             p_cz_attribute_value   => l_view_name,
18565                             px_xml_attribute_value => l_user_attribute_value);
18566 
18567          l_children_view_name := get_User_Attribute(l_user_attribute_value ,'nodeChildrenView');
18568          IF l_children_view_name <> '%nodeChildrenView' AND l_children_view_name IS NOT NULL THEN
18569 
18570            l_ind := INSTR(l_children_view_name, '_');
18571            l_children_view_name := SUBSTR(l_children_view_name,1,l_ind-1)||'_'||TO_CHAR(l_view_counter)||'_children';
18572 
18573            set_User_Attribute(p_cz_attribute_name    => 'nodeChildrenView',
18574                               p_cz_attribute_value   => l_children_view_name,
18575                               px_xml_attribute_value => l_user_attribute_value);
18576          END IF;
18577          set_Attribute(p_xml_node,
18578                        G_USER_ATTRIBUTE3_NAME,
18579                        l_user_attribute_value);
18580        END IF;
18581      END IF;
18582 
18583      l_user_attribute_value := get_Attribute_Value(p_xml_node, G_USER_ATTRIBUTE4_NAME);
18584 
18585      IF l_user_attribute_value IS NOT NULL THEN
18586 
18587          -- Check if this element is an Instance List, if it is then we need to alter the base AMN
18588          -- for other nodes in its subtree
18589          l_layout_region_type := get_User_Attribute(l_user_attribute_value, 'layoutRegionType');
18590          IF l_layout_region_type = '6078' THEN
18591            -- This node is an instance list. So we need to use the AMN of the Instance List as the base AMN
18592            -- for computing paths for elements within this subtree
18593 
18594            SELECT persistent_node_id, model_ref_expl_id
18595              INTO l_base_persistent_node_id, l_base_expl_node_id
18596              FROM cz_ui_page_elements
18597             WHERE ui_Def_id = p_target_ui_Def_id
18598               AND page_Id = p_target_ui_page_id
18599               AND element_Id = l_amn_parent_element_id;
18600          END IF;
18601 
18602        l_name := get_User_Attribute(l_user_attribute_value ,'name');
18603 
18604        SELECT COUNT(*)+1 INTO l_num_copy FROM CZ_UI_PAGE_ELEMENTS
18605        WHERE ui_def_id=p_target_ui_def_id AND page_id=p_target_ui_page_id AND
18606              name like l_name||'%' AND deleted_flag=G_NO_FLAG;
18607 
18608        l_name := l_name||' ('||TO_CHAR(l_num_copy)||')';
18609 
18610        set_User_Attribute(p_cz_attribute_name    => 'name',
18611                           p_cz_attribute_value   => l_name,
18612                           px_xml_attribute_value => l_user_attribute_value);
18613 
18614        set_Attribute(p_xml_node,
18615                      G_USER_ATTRIBUTE4_NAME,
18616                      l_user_attribute_value);
18617      END IF;
18618 
18619      IF l_new_element_id IS NOT NULL THEN
18620        UPDATE CZ_UI_PAGE_ELEMENTS
18621           SET name=l_name
18622         WHERE ui_def_id=p_target_ui_def_id AND page_id=p_target_ui_page_id AND
18623               element_id = l_new_element_id;
18624      END IF;
18625 
18626      END IF;  -- end of IF p_copy_as_ui_page=FALSE
18627 
18628     -----------------------------------------------------
18629 
18630     IF l_current_element_id IS NULL THEN
18631       l_current_element_id := p_parent_element_id;
18632     END IF;
18633 
18634     l_child_nodes_tbl := xmldom.getChildNodes(p_xml_node);
18635     l_length          := xmldom.getLength(l_child_nodes_tbl);
18636 
18637     FOR k IN 0 .. l_length - 1
18638     LOOP
18639       --
18640       -- get next child DOM node
18641       --
18642       l_child_xml_node := xmldom.item(l_child_nodes_tbl, k);
18643 
18644       copy_Tree_Level(p_xml_node                    => l_child_xml_node,
18645                       p_source_ui_def_id            => p_source_ui_def_id,
18646                       p_target_ui_def_id            => p_target_ui_def_id,
18647                       p_source_ui_page_id           => p_source_ui_page_id,
18648                       p_target_ui_page_id           => p_target_ui_page_id,
18649                       p_parent_element_id           => l_current_element_id,
18650                       p_target_parent_element_id    => p_target_parent_element_id,
18651                       p_pagebase_persistent_node_id => p_pagebase_persistent_node_id,
18652                       p_base_persistent_node_id     => l_base_persistent_node_id,
18653                       p_base_expl_node_id           => l_base_expl_node_id,
18654                       x_new_element_id              => x_new_element_id,
18655                       p_copy_as_ui_page             => p_copy_as_ui_page,
18656                       p_source_jrad_doc             => p_source_jrad_doc,
18657                       p_target_jrad_doc             => p_target_jrad_doc,
18658                       p_amn_parent_element_id       => l_amn_parent_element_id,
18659                       p_is_instance_list_child      => p_is_instance_list_child);
18660 
18661     END LOOP;
18662 
18663   END copy_Tree_Level;
18664 
18665   --
18666   -- copy records which corresponds with user attributes
18667   --
18668   PROCEDURE copy_User_Attributes(p_xml_node               xmldom.DOMNode,
18669                                  p_source_ui_def_id       NUMBER,
18670                                  p_target_ui_def_id       NUMBER,
18671                                  p_source_template_id     NUMBER DEFAULT NULL,
18672                                  p_target_template_id     NUMBER DEFAULT NULL) IS
18673 
18674     l_child_nodes_tbl xmldom.DOMNodeList;
18675     l_child_xml_node  xmldom.DOMNode;
18676     l_length          NUMBER;
18677 
18678   BEGIN
18679     copy_User_Attr_For_Node(p_xml_node          => p_xml_node,
18680                             p_source_ui_def_id  => p_source_ui_def_id,
18681                             p_target_ui_def_id  => p_target_ui_def_id,
18682                             p_source_template_id=> p_source_template_id,
18683                             p_target_template_id=> p_target_template_id);
18684 
18685     l_child_nodes_tbl := xmldom.getChildNodes(p_xml_node);
18686     l_length          := xmldom.getLength(l_child_nodes_tbl);
18687 
18688     FOR k IN 0 .. l_length - 1
18689     LOOP
18690       --
18691       -- get next child DOM node
18692       --
18693       l_child_xml_node := xmldom.item(l_child_nodes_tbl, k);
18694 
18695       copy_User_Attr_For_Node(p_xml_node          => l_child_xml_node,
18696                               p_source_ui_def_id  => p_source_ui_def_id,
18697                               p_target_ui_def_id  => p_target_ui_def_id,
18698                               p_source_template_id=> p_source_template_id,
18699                               p_target_template_id=> p_target_template_id);
18700 
18701       copy_User_Attributes(p_xml_node          => l_child_xml_node,
18702                            p_source_ui_def_id  => p_source_ui_def_id,
18703                            p_target_ui_def_id  => p_target_ui_def_id,
18704                            p_source_template_id=> p_source_template_id,
18705                            p_target_template_id=> p_target_template_id);
18706     END LOOP;
18707 
18708   EXCEPTION
18709     WHEN OTHERS THEN
18710       DEBUG('copy_User_Attributes() : '||SQLERRM);
18711   END copy_User_Attributes;
18712 
18713   --
18714   -- This procedure sets/propogates deleted_flag='1' from a given UI element to its subtree in CZ_UI_PAGE_ELEMENTS table.
18715   -- Also the procedure parses the corresponding XML to collect all caption intl_text_ids, UI condtion rules ids of
18716   -- deleted UI elements and then performs a soft delete ( set deleted_flag='1' ) of corresponding records
18717   -- in tables CZ_LOCALIZED_TEXTS and CZ_RULES which have seeded_flag='0'.
18718   -- If  parameter p_delete_xml = '1' then it also deletes a corresponding XML elements.
18719   --
18720   PROCEDURE delete_UI_Subtree(p_ui_def_id      IN NUMBER,
18721                               p_ui_page_id     IN NUMBER,
18722                               p_element_id     IN VARCHAR2,
18723                               p_delete_xml     IN VARCHAR2,
18724                               x_return_status  OUT NOCOPY VARCHAR2,
18725                               x_msg_count      OUT NOCOPY NUMBER,
18726                               x_msg_data       OUT NOCOPY VARCHAR2) IS
18727 
18728    l_xmldoc                   xmldom.DOMDocument;
18729    l_xml_node                 xmldom.DOMNode;
18730    l_element_id_tbl           varchar_tbl_type;
18731    l_out_node                 xmldom.DOMNode;
18732    l_parent_node              xmldom.DOMNode;
18733    l_page_ref_id              CZ_UI_PAGE_REFS.page_ref_id%TYPE;
18734    l_parent_element_id        CZ_UI_PAGE_ELEMENTS.parent_element_id%TYPE;
18735    l_jrad_doc                 CZ_UI_PAGES.jrad_doc%TYPE;
18736    l_page_ref_type            CZ_UI_PAGE_REFS.page_ref_type%TYPE;
18737    l_ui_context               CZ_UI_DEFS%ROWTYPE;
18738    l_condition_id             NUMBER;
18739    l_caption_text_id          NUMBER;
18740    l_caption_rule_id          NUMBER;
18741    l_display_condition_id     NUMBER;
18742    l_enabled_condition_id     NUMBER;
18743 
18744   BEGIN
18745 
18746     --
18747     -- initialize FND variables/packages
18748     --
18749     Initialize(x_return_status,x_msg_count,x_msg_data);
18750 
18751     --
18752     -- get UI context
18753     --
18754     g_ui_def_nodes_tbl.DELETE;
18755     l_ui_context := get_UI_Context(p_ui_def_id => p_ui_def_id);
18756 
18757     --
18758     -- propogate deleted_flag in UI subtree
18759     --
18760     UPDATE CZ_UI_PAGE_ELEMENTS
18761        SET deleted_flag=G_LIMBO_FLAG
18762      WHERE (ui_def_id,page_id,element_id) IN
18763      (SELECT ui_def_id,page_id,element_id FROM CZ_UI_PAGE_ELEMENTS
18764       START WITH ui_def_id=p_ui_def_id AND page_id=p_ui_page_id AND element_id=p_element_id
18765       CONNECT BY PRIOR ui_def_id=p_ui_def_id AND
18766                        PRIOR page_id=p_ui_page_id AND page_id=p_ui_page_id AND
18767                        PRIOR element_id=parent_element_id AND
18768                        PRIOR ui_def_id=p_ui_def_id AND ui_def_id=p_ui_def_id AND
18769                        PRIOR deleted_flag=G_NO_FLAG AND deleted_flag=G_NO_FLAG)
18770     RETURNING element_id
18771     BULK COLLECT INTO l_element_id_tbl;
18772 
18773     IF l_element_id_tbl.COUNT=0 THEN
18774       RETURN;
18775     END IF;
18776 
18777     SELECT parent_element_id
18778      INTO l_parent_element_id
18779      FROM CZ_UI_PAGE_ELEMENTS
18780     WHERE ui_def_id=p_ui_def_id AND
18781           page_id=p_ui_page_id AND
18782           element_id=p_element_id;
18783 
18784     SELECT jrad_doc INTO l_jrad_doc FROM CZ_UI_PAGES
18785     WHERE page_id=p_ui_page_id AND ui_def_id=p_ui_def_id;
18786 
18787     IF  l_parent_element_id IS NULL OR p_element_id=G_NO_FLAG THEN  -- this is UI page ( and it should be deleted )
18788 
18789       FOR i IN(SELECT page_ref_id,page_ref_type,page_set_id,condition_id,caption_text_id,caption_rule_id
18790                  FROM CZ_UI_PAGE_REFS
18791                 WHERE ui_def_id=p_ui_def_id AND target_page_id=p_ui_page_id AND deleted_flag=G_NO_FLAG)
18792       LOOP
18793 
18794         UPDATE CZ_LOCALIZED_TEXTS
18795            SET deleted_flag=G_YES_FLAG
18796          WHERE persistent_intl_text_id=i.caption_text_id AND
18797                ui_def_id=p_ui_def_id AND seeded_flag=G_NO_FLAG;
18798 
18799         UPDATE CZ_RULES
18800            SET deleted_flag=G_YES_FLAG
18801          WHERE persistent_rule_id IN(i.condition_id,i.caption_rule_id) AND
18802                ui_def_id=p_ui_def_id AND seeded_flag=G_NO_FLAG;
18803 
18804         IF l_page_ref_type IN( G_MODEL_TREE_MENU, G_MULTI_LEVEL_MENU) THEN
18805           UPDATE CZ_UI_PAGE_REFS
18806              SET deleted_flag=G_YES_FLAG
18807            WHERE ui_def_id=p_ui_def_id
18808                  AND deleted_flag=G_NO_FLAG
18809                  AND (ui_def_id,page_ref_id,page_set_id) IN
18810                  (SELECT a.ui_def_id,a.page_ref_id,a.page_set_id FROM CZ_UI_PAGE_REFS a
18811                    START WITH a.ui_def_id=p_ui_def_id AND
18812                               a.page_ref_id=i.page_ref_id
18813                    CONNECT BY PRIOR a.page_ref_id=a.parent_page_ref_id AND
18814                                     a.deleted_flag='0' AND a.ui_def_id=p_ui_def_id AND
18815                               PRIOR a.ui_def_id=p_ui_def_id AND
18816                                     a.page_set_id=i.page_set_id AND
18817                               PRIOR a.page_set_id=i.page_set_id);
18818         ELSE
18819           UPDATE CZ_UI_PAGE_REFS
18820              SET deleted_flag=G_YES_FLAG
18821            WHERE ui_def_id=p_ui_def_id AND page_ref_id=i.page_ref_id;
18822         END IF;
18823 
18824       END LOOP;
18825 
18826       --
18827       -- set data for Page Sets
18828       --
18829       handle_Page_Flows();
18830 
18831       UPDATE CZ_UI_PAGES
18832          SET deleted_flag=G_YES_FLAG
18833        WHERE page_id=p_ui_page_id AND ui_def_id=p_ui_def_id AND seeded_flag=G_NO_FLAG
18834       RETURNING caption_text_id,caption_rule_id,display_condition_id,enabled_condition_id
18835       INTO l_caption_text_id,l_caption_rule_id,l_display_condition_id,l_enabled_condition_id;
18836 
18837       UPDATE CZ_LOCALIZED_TEXTS
18838          SET deleted_flag=G_YES_FLAG
18839        WHERE intl_text_id=l_caption_text_id AND ui_def_id=p_ui_def_id AND seeded_flag=G_NO_FLAG;
18840 
18841       UPDATE CZ_RULES
18842          SET deleted_flag=G_YES_FLAG
18843        WHERE rule_id IN(l_display_condition_id,l_caption_rule_id,l_enabled_condition_id)
18844          AND seeded_flag=G_NO_FLAG;
18845 
18846     END IF;
18847 
18848     FORALL i IN l_element_id_tbl.First..l_element_id_tbl.Last
18849       UPDATE CZ_UI_ACTIONS
18850          SET deleted_flag=G_YES_FLAG
18851        WHERE ui_def_id=p_ui_def_id AND
18852              source_page_id=p_ui_page_id AND
18853              element_id=l_element_id_tbl(i) AND deleted_flag=G_NO_FLAG AND seeded_flag=G_NO_FLAG;
18854 
18855     FORALL i IN l_element_id_tbl.First..l_element_id_tbl.Last
18856       UPDATE CZ_RULES
18857          SET deleted_flag=G_YES_FLAG
18858        WHERE ui_def_id=p_ui_def_id AND
18859              ui_page_id=p_ui_page_id AND
18860              ui_page_element_id=l_element_id_tbl(i) AND
18861              deleted_flag=G_NO_FLAG AND seeded_flag=G_NO_FLAG;
18862 
18863     FORALL i IN l_element_id_tbl.First..l_element_id_tbl.Last
18864       UPDATE CZ_LOCALIZED_TEXTS
18865          SET deleted_flag=G_YES_FLAG
18866        WHERE ui_def_id=p_ui_def_id AND
18867              ui_page_id=p_ui_page_id AND
18868              ui_page_element_id=l_element_id_tbl(i) AND
18869              deleted_flag=G_NO_FLAG AND seeded_flag=G_NO_FLAG;
18870 
18871     --
18872     -- open XML parser
18873     --
18874     Open_Parser();
18875 
18876     --
18877     -- create UI Template in JRAD repository
18878     --
18879     l_xmldoc := parse_JRAD_Document(p_doc_full_name => l_jrad_doc);
18880 
18881     IF xmldom.isNull(l_xmldoc) THEN
18882       add_Error_Message(p_message_name => 'CZ_WRONG_UI_TEMPLATE',
18883                         p_token_name   => 'UI_TEMPLATE',
18884                         p_token_value  => l_jrad_doc,
18885                         p_fatal_error  => TRUE);
18886       RAISE WRONG_UI_TEMPLATE;
18887     END IF;
18888 
18889     l_xml_node := find_XML_Node_By_Attribute(p_subtree_doc     => l_xmldoc,
18890                                              p_attribute_name  => G_ID_ATTRIBUTE,
18891                                              p_attribute_value => p_element_id);
18892     --
18893     -- delete user attributes from the list of attrributes to delete
18894     --
18895     delete_User_Attributes(l_xml_node, p_ui_def_id);
18896 
18897     IF p_delete_xml=G_YES_FLAG THEN
18898       IF l_parent_element_id IS NULL OR p_element_id=G_NO_FLAG THEN
18899         jdr_docbuilder.deleteDocument(l_jrad_doc);
18900       ELSE
18901         l_parent_node:=xmldom.getParentNode(l_xml_node);
18902         l_out_node:=xmldom.removeChild(l_parent_node,l_xml_node);
18903         Save_Document(p_xml_doc   => l_xmldoc,
18904                       p_doc_name  => l_jrad_doc);
18905       END IF;
18906 
18907       UPDATE CZ_UI_PAGES
18908          SET page_rev_nbr=page_rev_nbr+1
18909        WHERE ui_def_id=p_ui_def_id AND
18910              page_id=p_ui_page_id;
18911 
18912     END IF;
18913 
18914     --
18915     -- close XML parser
18916     --
18917     Close_Parser();
18918 
18919 
18920   EXCEPTION
18921     WHEN WRONG_UI_TEMPLATE THEN
18922       x_return_status := FND_API.G_RET_STS_ERROR;
18923       x_msg_count     := g_MSG_COUNT;
18924       x_msg_data      := fnd_msg_pub.GET(g_MSG_COUNT,fnd_api.g_false);
18925       --DEBUG(x_msg_data);
18926     WHEN OTHERS THEN
18927       x_return_status := FND_API.G_RET_STS_ERROR;
18928       x_msg_count := 1;
18929       x_msg_data  := SQLERRM;
18930       fnd_msg_pub.add_exc_msg('CZ_UIOA_PVT', 'delete_UI_Subtree', x_msg_data);
18931       --DEBUG(x_msg_data);
18932   END delete_UI_Subtree;
18933 
18934   --
18935   -- This procedure sets/propogates deleted_flag='1' from a given UI page to all related UI entities which belong to this page,
18936   -- parses the corresponding XML to collect all caption intl_text_ids, UI condtion rules ids of
18937   -- deleted UI elements and then performs a soft delete ( set deleted_flag='1' ) of corresponding records
18938   -- in tables CZ_LOCALIZED_TEXTS and CZ_RULES which have seeded_flag='0'  and deletes the corresponding XML/JRAD document.
18939   --
18940   PROCEDURE delete_UI_Page(p_ui_def_id      IN NUMBER,         -- ui_def_id of UI
18941                             p_ui_page_id    IN NUMBER,        -- page_id of
18942                                                                 -- UI page which needs
18943                                                                 -- to be deleted.
18944                             x_return_status  OUT NOCOPY VARCHAR2,-- status string
18945                             x_msg_count      OUT NOCOPY NUMBER,  -- number of error messages
18946                             x_msg_data       OUT NOCOPY VARCHAR2 -- string which contains error messages
18947                             ) IS
18948 
18949     l_element_id CZ_UI_PAGE_ELEMENTS.element_id%TYPE;
18950 
18951   BEGIN
18952 
18953     --
18954     -- initialize FND variables/packages
18955     --
18956     Initialize(x_return_status,x_msg_count,x_msg_data);
18957 
18958     --
18959     -- get element_id of root element of UI page
18960     --
18961     FOR i IN(SELECT element_id FROM CZ_UI_PAGE_ELEMENTS
18962               WHERE ui_def_id=p_ui_def_id AND page_id=p_ui_page_id AND
18963                     parent_element_id IS NULL AND deleted_flag=G_NO_FLAG)
18964     LOOP
18965       --
18966       -- delete UI elements of this UI page starting with
18967       -- the root element
18968       --
18969       delete_UI_Subtree(p_ui_def_id      => p_ui_def_id,
18970                         p_ui_page_id     => p_ui_page_id,
18971                         p_element_id     => i.element_id,
18972                         p_delete_xml     => G_YES_FLAG,
18973                         x_return_status  => x_return_status,
18974                         x_msg_count      => x_msg_count,
18975                         x_msg_data       => x_msg_data);
18976     END LOOP;
18977 
18978     -- handle page include region
18979     UPDATE cz_ui_page_elements
18980     SET target_page_ui_def_id = NULL, target_page_id = NULL
18981     WHERE target_page_ui_def_id = p_ui_def_id AND target_page_id = p_ui_page_id AND
18982           deleted_flag = '0' AND element_signature_id = G_PAGE_INCL_REGION_SIGNATURE;
18983   EXCEPTION
18984     WHEN OTHERS THEN
18985       x_return_status := FND_API.G_RET_STS_ERROR;
18986       x_msg_count := 1;
18987       x_msg_data  := SUBSTR(DBMS_UTILITY.format_error_backtrace,1,4000);
18988       fnd_msg_pub.add_exc_msg('CZ_UIOA_PVT', 'delete_UI_Page', x_msg_data);
18989       DEBUG(x_msg_data);
18990   END delete_UI_Page;
18991 
18992   --
18993   -- This procedure sets/propogates deleted_flag='1' from a given Page Ref record specified by parameter p_page_ref_id.
18994   -- a target UI pages are not deleted.
18995   --
18996   PROCEDURE delete_UI_Page_Ref(p_ui_def_id      IN NUMBER,          -- ui_def_id of UI
18997                                 p_page_ref_id   IN NUMBER,          -- page_ref_id of
18998                                                                     -- Menu/Page Flow link which needs
18999                                                                     -- to be deleted.
19000                                 x_return_status  OUT NOCOPY VARCHAR2,-- status string
19001                                 x_msg_count      OUT NOCOPY NUMBER,  -- number of error messages
19002                                 x_msg_data       OUT NOCOPY VARCHAR2 -- string which contains error messages
19003                                 ) IS
19004 
19005    l_parent_page_ref_id   CZ_UI_PAGE_REFS.parent_page_ref_id%TYPE;
19006    l_ui_context           CZ_UI_DEFS%ROWTYPE;
19007    l_page_id              CZ_UI_PAGES.page_id%TYPE;
19008    l_page_set_id          CZ_UI_PAGES.page_set_id%TYPE;
19009    l_page_ref_type        CZ_UI_PAGE_REFS.page_ref_type%TYPE;
19010 
19011   BEGIN
19012 
19013     --
19014     -- initialize FND variables/packages
19015     --
19016     Initialize(x_return_status,x_msg_count,x_msg_data);
19017 
19018     g_ui_def_nodes_tbl.DELETE;
19019 
19020     --
19021     -- get UI context
19022     --
19023     l_ui_context := get_UI_Context(p_ui_def_id => p_ui_def_id);
19024 
19025     SELECT page_set_id, page_ref_type
19026       INTO l_page_set_id, l_page_ref_type
19027       FROM CZ_UI_PAGE_REFS
19028      WHERE ui_def_id=p_ui_def_id AND page_ref_id=p_page_ref_id
19029            AND deleted_flag=G_NO_FLAG;
19030 
19031     IF l_page_ref_type IN( G_MODEL_TREE_MENU, G_MULTI_LEVEL_MENU) THEN
19032       UPDATE CZ_UI_PAGE_REFS
19033          SET deleted_flag=G_YES_FLAG
19034        WHERE ui_def_id=p_ui_def_id
19035              AND deleted_flag=G_NO_FLAG
19036              AND (ui_def_id,page_ref_id,page_set_id) IN
19037              (SELECT a.ui_def_id,a.page_ref_id,a.page_set_id FROM CZ_UI_PAGE_REFS a
19038              START WITH a.ui_def_id=p_ui_def_id AND
19039              a.page_ref_id=p_page_ref_id
19040              CONNECT BY PRIOR a.page_ref_id=a.parent_page_ref_id AND
19041              a.deleted_flag='0' AND a.ui_def_id=p_ui_def_id AND
19042              PRIOR a.ui_def_id=p_ui_def_id AND
19043              a.page_set_id=l_page_set_id AND
19044              PRIOR a.page_set_id=l_page_set_id);
19045     ELSE
19046       UPDATE CZ_UI_PAGE_REFS
19047          SET deleted_flag=G_YES_FLAG
19048        WHERE ui_def_id=p_ui_def_id
19049              AND page_ref_id=p_page_ref_id;
19050     END IF;
19051 
19052     --
19053     -- null out CZ_UI_PAGES.page_set_id for those UI pages in this UI
19054     -- which have no corresponding records in CZ_UI_PAGE_REFS
19055     --
19056     UPDATE CZ_UI_PAGES a
19057        SET page_set_id=NULL
19058      WHERE ui_def_id=p_ui_def_id AND page_set_id IS NOT NULL AND
19059            NOT EXISTS(SELECT NULL FROM CZ_UI_PAGE_REFS b
19060            WHERE b.ui_def_id=p_ui_def_id AND target_page_id=a.page_id AND
19061            deleted_flag='0');
19062 
19063     IF l_page_ref_type IN( G_PAGE_FLOW, G_SUBTABS) THEN
19064       --
19065       -- set data for Page Sets
19066       --
19067       handle_Page_Flows();
19068     END IF;
19069 
19070   EXCEPTION
19071     WHEN OTHERS THEN
19072       x_return_status := FND_API.G_RET_STS_ERROR;
19073       x_msg_count := 1;
19074       x_msg_data  := SUBSTR(DBMS_UTILITY.format_error_backtrace,1,4000);
19075       fnd_msg_pub.add_exc_msg('CZ_UIOA_PVT', 'delete_UI_Page_Ref', x_msg_data);
19076       DEBUG(x_msg_data);
19077   END delete_UI_Page_Ref;
19078 
19079   --
19080   -- For a given Local Template specified by parameters p_template_id and p_ui_def_id this procedure performs a soft deletion
19081   -- ( sets deleted_flag='1' ) of corresponding CZ_UI_TEMPLATES record and deletes the corresponding JRAD/XML document.
19082 	-- It parses the corresponding XML to collect all caption intl_text_ids and UI Condition Ids and performs soft
19083   -- Delete of corresponding records in CZ_LOCALIZED_TEXTS
19084   -- and CZ_RULES which have seeded_flag='0'
19085   --
19086   PROCEDURE delete_Local_Template(p_template_ui_def_id  IN NUMBER,     -- ui_def_id of UI
19087                                   p_template_id         IN NUMBER,     -- template_id of
19088                                                                        -- Local UI Template which needs
19089                                                                        -- to be deleted.
19090                                   x_return_status  OUT NOCOPY VARCHAR2,-- status string
19091                                   x_msg_count      OUT NOCOPY NUMBER,  -- number of error messages
19092                                   x_msg_data       OUT NOCOPY VARCHAR2 -- string which contains error messages
19093                                   ) IS
19094 
19095    l_xmldoc                   xmldom.DOMDocument;
19096    l_jrad_doc                 CZ_UI_PAGES.jrad_doc%TYPE;
19097 
19098   BEGIN
19099 
19100     --
19101     -- initialize FND variables/packages
19102     --
19103     Initialize(x_return_status,x_msg_count,x_msg_data);
19104 
19105     FOR i IN(SELECT 'x' FROM CZ_MODEL_PUBLICATIONS
19106              WHERE object_id=p_template_id AND object_type='UIT' AND
19107                    deleted_flag='0' AND rownum<2)
19108     LOOP
19109       RETURN;
19110     END LOOP;
19111 
19112     --
19113     -- get full JRAD path of the given UI template
19114     --
19115     SELECT jrad_doc INTO l_jrad_doc FROM CZ_UI_TEMPLATES
19116     WHERE ui_def_id=p_template_ui_def_id AND template_id=p_template_id;
19117 
19118     --
19119     -- open XML parser
19120     --
19121     Open_Parser();
19122 
19123     --
19124     -- create UI Template in JRAD repository
19125     --
19126     l_xmldoc := parse_JRAD_Document(p_doc_full_name => l_jrad_doc);
19127 
19128     IF xmldom.isNull(l_xmldoc) THEN
19129       add_Error_Message(p_message_name => 'CZ_WRONG_UI_TEMPLATE',
19130                         p_token_name   => 'UI_TEMPLATE',
19131                         p_token_value  => l_jrad_doc,
19132                         p_fatal_error  => TRUE);
19133       RAISE WRONG_UI_TEMPLATE;
19134     END IF;
19135 
19136     --
19137     -- delete user attributes from the list of attrributes to delete
19138     --
19139     delete_User_Attributes(xmldom.makeNode(l_xmldoc),p_template_ui_def_id,
19140                            p_template_id, p_template_ui_def_id);
19141 
19142     jdr_docbuilder.deleteDocument(l_jrad_doc);
19143 
19144     --
19145     -- close XML parser
19146     --
19147     Close_Parser();
19148 
19149     DELETE FROM CZ_UI_TEMPLATES
19150     WHERE ui_def_id=p_template_ui_def_id AND template_id=p_template_id
19151           AND seeded_flag=G_NO_FLAG;
19152 
19153     DELETE FROM CZ_UI_REF_TEMPLATES
19154     WHERE template_ui_def_id=p_template_ui_def_id AND template_id=p_template_id;
19155 
19156     UPDATE CZ_UI_TEMPLATE_ELEMENTS
19157        SET deleted_flag=G_YES_FLAG
19158      WHERE template_id=p_template_ui_def_id AND
19159            deleted_flag=G_NO_FLAG;
19160 
19161   EXCEPTION
19162     WHEN WRONG_UI_TEMPLATE THEN
19163       x_return_status := FND_API.G_RET_STS_ERROR;
19164       x_msg_count     := g_MSG_COUNT;
19165       x_msg_data      := fnd_msg_pub.GET(g_MSG_COUNT,fnd_api.g_false);
19166       DEBUG(x_msg_data);
19167     WHEN OTHERS THEN
19168       x_return_status := FND_API.G_RET_STS_ERROR;
19169       x_msg_count := 1;
19170       x_msg_data  := SUBSTR(DBMS_UTILITY.format_error_backtrace,1,4000);
19171       fnd_msg_pub.add_exc_msg('CZ_UIOA_PVT', 'delete_Local_Template', x_msg_data);
19172       DEBUG('delete_Local_Template() : '||x_msg_data);
19173   END delete_Local_Template;
19174 
19175   --
19176   -- This procedure deletes subtree  identified by p_element_id  of UI Local Template.
19177   -- Follows the same rules as deleting an element in a page.
19178   --
19179   PROCEDURE delete_Local_Template_Elem(p_template_ui_def_id  IN NUMBER, -- ui_def_id of UI
19180                                        p_template_id         IN NUMBER,        -- template_id of
19181                                        p_element_id          IN VARCHAR2,        -- element_id of Element to delete
19182                                        x_return_status  OUT NOCOPY VARCHAR2,-- status string
19183                                        x_msg_count      OUT NOCOPY NUMBER,  -- number of error messages
19184                                        x_msg_data       OUT NOCOPY VARCHAR2 -- string which contains error messages
19185                                        ) IS
19186 
19187     l_xmldoc                   xmldom.DOMDocument;
19188     l_out_node                 xmldom.DOMNode;
19189     l_parent_node              xmldom.DOMNode;
19190     l_xml_node                 xmldom.DOMNode;
19191     l_jrad_doc                 CZ_UI_PAGES.jrad_doc%TYPE;
19192     l_needs_to_be_unlocked     BOOLEAN;
19193 
19194   BEGIN
19195 
19196     --
19197     -- lock source UI Template
19198     --
19199     lock_UI_Template( p_template_id, p_template_ui_def_id, l_needs_to_be_unlocked );
19200 
19201     --
19202     -- initialize FND variables/packages
19203     --
19204     Initialize(x_return_status,x_msg_count,x_msg_data);
19205 
19206     --
19207     -- get full JRAD path of the given UI template
19208     --
19209     SELECT jrad_doc INTO l_jrad_doc FROM CZ_UI_TEMPLATES
19210     WHERE ui_def_id=p_template_ui_def_id AND template_id=p_template_id;
19211 
19212     --
19213     -- open XML parser
19214     --
19215     Open_Parser();
19216 
19217     --
19218     -- create UI Template in JRAD repository
19219     --
19220     l_xmldoc := parse_JRAD_Document(p_doc_full_name => l_jrad_doc);
19221 
19222     IF xmldom.isNull(l_xmldoc) THEN
19223       add_Error_Message(p_message_name => 'CZ_WRONG_UI_TEMPLATE',
19224                         p_token_name   => 'UI_TEMPLATE',
19225                         p_token_value  => l_jrad_doc,
19226                         p_fatal_error  => TRUE);
19227       RAISE WRONG_UI_TEMPLATE;
19228     END IF;
19229 
19230     l_xml_node := find_XML_Node_By_Attribute(p_subtree_doc     => l_xmldoc,
19231                                              p_attribute_name  => G_ID_ATTRIBUTE,
19232                                              p_attribute_value => p_element_id);
19233 
19234     IF xmldom.isNull(l_xml_node) THEN
19235       l_xml_node := find_XML_Node_By_Attribute(p_subtree_doc        => l_xmldoc,
19236                                                p_attribute_name     => 'caseId',
19237                                                p_attribute_value    => p_element_id,
19238                                                p_in_user_attributes => G_YES_FLAG  );
19239 
19240       IF xmldom.isNull(l_xml_node) THEN
19241         x_return_status := FND_API.G_RET_STS_ERROR;
19242         x_msg_count := 1;
19243         x_msg_data  := 'Element with element_id="'||p_element_id||'" does exist.';
19244         fnd_msg_pub.add_exc_msg('CZ_UIOA_PVT', 'delete_Local_Template_Elem', 'Element with element_id="'||
19245         p_element_id||'" does exist.');
19246         DEBUG('delete_Local_Template_Elem() : '||'Element with element_id="'||
19247         p_element_id||'" does exist.');
19248         RETURN;
19249       END IF;
19250     END IF;
19251 
19252     --
19253     -- delete user attributes from the list of attrributes to delete
19254     --
19255     delete_User_Attributes(l_xml_node, p_template_ui_def_id,
19256                            p_template_id, p_template_ui_def_id);
19257 
19258     --
19259     -- remove XML subtree
19260     --
19261     l_parent_node:=xmldom.getParentNode(l_xml_node);
19262     l_out_node:=xmldom.removeChild(l_parent_node,l_xml_node);
19263 
19264 
19265     refresh_Templ_Ref_Counts(l_xmldoc, p_template_ui_def_id, p_template_id);
19266 
19267     --
19268     -- save XML in JRAD repository
19269     --
19270     Save_Document(p_xml_doc   => l_xmldoc,
19271                   p_doc_name  => l_jrad_doc);
19272 
19273     --
19274     -- close XML parser
19275     --
19276     Close_Parser();
19277 
19278     /* *** changes for build 21p *** */
19279 
19280     UPDATE CZ_UI_TEMPLATES
19281        SET template_rev_nbr=NVL(template_rev_nbr,0)+1
19282      WHERE ui_def_id=p_template_ui_def_id AND template_id=p_template_id;
19283 
19284     --
19285     -- unlock source UI Template
19286     --
19287     unlock_UI_Template( p_template_id, p_template_ui_def_id, l_needs_to_be_unlocked );
19288 
19289   EXCEPTION
19290       WHEN WRONG_UI_TEMPLATE THEN
19291       x_return_status := FND_API.G_RET_STS_ERROR;
19292       x_msg_count     := g_MSG_COUNT;
19293       x_msg_data      := fnd_msg_pub.GET(g_MSG_COUNT,fnd_api.g_false);
19294       DEBUG(x_msg_data);
19295       --
19296       -- unlock source UI Template
19297       --
19298       unlock_UI_Template( p_template_id, p_template_ui_def_id, l_needs_to_be_unlocked );
19299 
19300     WHEN OTHERS THEN
19301       x_return_status := FND_API.G_RET_STS_ERROR;
19302       x_msg_count := 1;
19303       x_msg_data  := SUBSTR(DBMS_UTILITY.format_error_backtrace,1,4000);
19304       fnd_msg_pub.add_exc_msg('CZ_UIOA_PVT', 'delete_Local_Template_Elem', x_msg_data);
19305       DEBUG('delete_Local_Template_Elem() : '||x_msg_data);
19306       --
19307       -- unlock source UI Template
19308       --
19309       unlock_UI_Template( p_template_id, p_template_ui_def_id, l_needs_to_be_unlocked );
19310 
19311   END delete_Local_Template_Elem;
19312 
19313   --
19314   -- This procedure copies a UI element and its subtree specified by parameters p_element_id, p_page_id and p_ui_def_id to
19315   -- to a new location specified by paremeters p_new_parent_element_id - new parent UI element  and p_target_ui_def_id.
19316   -- 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.
19317   -- Action records associated to the UI Elements will also be copied, pointing to the same action as the source Element.
19318   PROCEDURE copy_UI_Subtree(p_source_ui_def_id      IN NUMBER,    -- ui_def_id of source UI
19319                             p_source_element_id     IN VARCHAR2,  -- element_id of
19320                                                                   -- UI element which needs
19321                                                                   -- to be copied ( source element )
19322                             p_source_ui_page_id IN NUMBER,        -- page_id of UI page to which source element belongs to
19323                             p_target_ui_def_id  IN NUMBER, -- ui_def_id of target UI
19324                             p_target_ui_page_id IN NUMBER,        -- page_id of target UI page
19325                             p_target_parent_element_id IN VARCHAR2,  -- element_id of
19326                                                                          -- new parent UI element
19327                             p_source_xml_node xmldom.DOMNode,
19328                             p_target_xml_node xmldom.DOMNode,
19329                             p_target_xmldoc xmldom.DOMDocument,
19330                             x_new_element_id OUT NOCOPY VARCHAR2,    -- element_id of copied UI element
19331                             x_new_xml_node OUT NOCOPY xmldom.DOMNode
19332                             ) IS
19333 
19334     l_target_xmldoc               xmldom.DOMDocument;
19335     l_new_xml_root_node           xmldom.DOMNode;
19336     l_target_uicont_xml_node      xmldom.DOMNode;
19337     l_stacklayout_node            xmldom.DOMNode;
19338     l_stacklayout_uicont_xml_node xmldom.DOMNode;
19339     l_xml_uicont_node             xmldom.DOMNode;
19340     l_xml_new_node                xmldom.DOMNode;
19341     l_amn_parent_element_id       CZ_UI_PAGE_ELEMENTS.element_id%TYPE;
19342     l_source_jrad_doc             CZ_UI_PAGES.jrad_doc%TYPE;
19343     l_target_jrad_doc             CZ_UI_PAGES.jrad_doc%TYPE;
19344     l_pagebase_persistent_node_id NUMBER;
19345     l_pagebase_expl_node_id       NUMBER;
19346     l_length                      NUMBER;
19347     l_base_persistent_node_id     NUMBER;
19348     l_base_expl_node_id                NUMBER;
19349     l_instance_list_AMN     expl_node_persistent_id_pair;
19350     l_is_instance_list_child BOOLEAN := FALSE;
19351     l_xml_temp_node               xmldom.DOMNode;
19352 
19353   BEGIN
19354 
19355 
19356     g_handled_attr_id_tbl.DELETE;
19357 
19358     --
19359     -- get jrad_doc of source UI page to which this UI element belongs to
19360     --
19361     SELECT jrad_doc
19362       INTO l_source_jrad_doc FROM CZ_UI_PAGES
19363     WHERE page_id=p_source_ui_page_id AND
19364           ui_def_id=p_source_ui_def_id;
19365 
19366     SELECT jrad_doc, persistent_node_id, pagebase_expl_node_id
19367       INTO l_target_jrad_doc, l_pagebase_persistent_node_id, l_pagebase_expl_node_id
19368       FROM CZ_UI_PAGES
19369      WHERE page_id=p_target_ui_page_id AND
19370            ui_def_id=p_target_ui_def_id;
19371 
19372 
19373     BEGIN
19374       SELECT element_id INTO l_amn_parent_element_id
19375         FROM CZ_UI_PAGE_ELEMENTS
19376        WHERE ui_def_id=p_target_ui_def_id AND
19377              page_id=p_target_ui_page_id AND
19378              element_id=p_target_parent_element_id;
19379     EXCEPTION
19380       WHEN NO_DATA_FOUND THEN
19381         l_amn_parent_element_id := find_AMN_Element_Above(p_target_xml_node);
19382     END;
19383 
19384     l_target_uicont_xml_node := getUIContents(p_target_xml_node, G_YES_FLAG);
19385     IF xmldom.IsNull(l_target_uicont_xml_node) THEN
19386       l_xml_temp_node := xmldom.makeNode(xmldom.createElement(l_target_xmldoc, 'ui:contents'));
19387       l_target_uicont_xml_node := xmldom.appendChild(p_target_xml_node,
19388                                                      l_xml_temp_node);
19389     END IF;
19390 
19391     --
19392     -- returns cloned DOM subtree
19393     --
19394     --l_new_xml_root_node := xmldom.cloneNode(p_source_xml_node, TRUE);
19395     l_new_xml_root_node := cloneNode(p_source_xml_node, l_target_uicont_xml_node);
19396 
19397     l_base_persistent_node_id := l_pagebase_persistent_node_id;
19398     l_base_expl_node_Id := l_pagebase_expl_node_id;
19399 
19400     l_instance_list_AMN := getInstanceListAMN(p_target_ui_def_id, p_target_ui_page_id, p_target_xml_node);
19401 
19402 
19403     IF l_instance_list_AMN.persistent_node_id IS NOT NULL THEN
19404       -- There is an Instance List containing this element. We need to use the AMN of the Instance List
19405       -- as the base AMN for the the subtree being copied
19406       DEBUG('Target node is contained in an Instance List. So passing the AMN of the Instance List as the base AMN');
19407       l_base_persistent_node_id := l_instance_list_AMN.persistent_node_id;
19408       l_base_expl_node_Id := l_instance_list_AMN.expl_node_id;
19409       l_is_instance_list_child := TRUE;
19410     END IF;
19411 
19412     copy_Tree_Level(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_ui_page_id           => p_source_ui_page_id,
19416                     p_target_ui_page_id           => p_target_ui_page_id,
19417                     p_parent_element_id           => NULL,
19418                     p_target_parent_element_id    => p_target_parent_element_id,
19419                     p_pagebase_persistent_node_id => l_pagebase_persistent_node_id,
19420                     p_base_persistent_node_id     => l_base_persistent_node_id,
19421                     p_base_expl_node_id           => l_base_expl_node_Id,
19422                     x_new_element_id              => x_new_element_id,
19423                     p_copy_as_ui_page             => FALSE,
19424                     p_source_jrad_doc             => l_source_jrad_doc,
19425                     p_target_jrad_doc             => l_target_jrad_doc,
19426                     p_amn_parent_element_id       => l_amn_parent_element_id,
19427                     p_is_instance_list_child      => l_is_instance_list_child);
19428 
19429     validate_Copied_PIR(p_target_ui_def_id, p_target_ui_page_id);
19430 
19431     IF xmldom.getNodeName(p_source_xml_node)='ui:case' AND xmldom.getNodeName(p_target_xml_node)='oa:switcher' THEN
19432 
19433       x_new_xml_node := xmldom.appendChild(p_target_xml_node,
19434                                            l_new_xml_root_node);
19435 
19436     ELSIF xmldom.IsNull(l_target_uicont_xml_node) AND xmldom.getNodeName(p_target_xml_node)<>'ui:case' THEN
19437       l_xml_new_node := xmldom.makeNode(xmldom.createElement(p_target_xmldoc, 'ui:contents'));
19438 
19439       l_xml_uicont_node := xmldom.appendChild(p_target_xml_node,
19440                                               l_xml_new_node);
19441       x_new_xml_node := xmldom.appendChild(l_xml_uicont_node,
19442                                            l_new_xml_root_node);
19443     ELSIF xmldom.IsNull(l_target_uicont_xml_node) AND  xmldom.getNodeName(p_target_xml_node)='ui:case' THEN
19444 
19445       l_stacklayout_node := findChildXMLTag(p_target_xml_node, 'oa:stackLayout');
19446       l_stacklayout_uicont_xml_node := getUIContents(l_stacklayout_node, G_YES_FLAG);
19447 
19448       IF xmldom.IsNull(l_stacklayout_uicont_xml_node) THEN
19449 
19450         l_xml_new_node := xmldom.makeNode(xmldom.createElement(p_target_xmldoc, 'ui:contents'));
19451         l_xml_uicont_node := xmldom.appendChild(l_stacklayout_node,
19452                                               l_xml_new_node);
19453         x_new_xml_node := xmldom.appendChild(l_xml_uicont_node,
19454                                              l_new_xml_root_node);
19455 
19456       ELSE
19457 
19458         x_new_xml_node := xmldom.appendChild(l_stacklayout_uicont_xml_node,
19459                                              l_new_xml_root_node);
19460       END IF;
19461     ELSE
19462       x_new_xml_node := xmldom.appendChild(l_target_uicont_xml_node,
19463                                            l_new_xml_root_node);
19464     END IF;
19465 
19466     Save_Document(p_xml_doc   => p_target_xmldoc,
19467                   p_doc_name  => l_target_jrad_doc);
19468 
19469     UPDATE CZ_UI_PAGES
19470        SET page_rev_nbr=page_rev_nbr+1,
19471            empty_page_flag = G_NO_FLAG
19472      WHERE page_id=p_target_ui_page_id AND
19473            ui_def_id=p_target_ui_def_id;
19474 
19475     UPDATE CZ_UI_PAGE_REFS
19476        SET empty_page_flag = G_NO_FLAG
19477      WHERE target_page_id=p_target_ui_page_id AND
19478            ui_def_id=p_target_ui_def_id AND
19479            deleted_flag = G_NO_FLAG AND
19480            empty_page_flag = G_YES_FLAG;
19481 
19482 
19483   END copy_UI_Subtree;
19484 
19485   --
19486   -- This procedure copies a UI element and its subtree specified by parameters p_element_id, p_page_id and p_ui_def_id to
19487   -- to a new location specified by paremeters p_new_parent_element_id - new parent UI element  and p_target_ui_def_id.
19488   -- 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.
19489   -- Action records associated to the UI Elements will also be copied, pointing to the same action as the source Element.
19490   PROCEDURE copy_UI_Subtree(p_source_ui_def_id      IN NUMBER,    -- ui_def_id of source UI
19491                             p_source_element_id     IN VARCHAR2,  -- element_id of
19492                                                                   -- UI element which needs
19493                                                                   -- to be copied ( source element )
19494                             p_source_ui_page_id IN NUMBER,        -- page_id of UI page to which source element belongs to
19495                             p_target_ui_def_id  IN NUMBER, -- ui_def_id of target UI
19496                             p_target_ui_page_id IN NUMBER,        -- page_id of target UI page
19497                             p_target_parent_element_id     IN VARCHAR2,  -- element_id of
19498                                                                          -- new parent UI element
19499                             x_new_element_id OUT NOCOPY VARCHAR2,     -- element_id of copied UI element
19500                             x_return_status  OUT NOCOPY VARCHAR2,-- status string
19501                             x_msg_count      OUT NOCOPY NUMBER,  -- number of error messages
19502                             x_msg_data       OUT NOCOPY VARCHAR2 -- string which contains error messages
19503                             ) IS
19504 
19505     l_source_xmldoc               xmldom.DOMDocument;
19506     l_target_xmldoc               xmldom.DOMDocument;
19507     l_source_xml_node             xmldom.DOMNode;
19508     l_target_xml_node             xmldom.DOMNode;
19509     l_new_xml_root_node           xmldom.DOMNode;
19510     l_new_xml_node                xmldom.DOMNode;
19511     l_out_xml_node                xmldom.DOMNode;
19512     l_target_uicont_xml_node      xmldom.DOMNode;
19513     l_stacklayout_node            xmldom.DOMNode;
19514     l_stacklayout_uicont_xml_node xmldom.DOMNode;
19515     l_source_jrad_doc             CZ_UI_PAGES.jrad_doc%TYPE;
19516     l_target_jrad_doc             CZ_UI_PAGES.jrad_doc%TYPE;
19517     l_xml_uicont_node             xmldom.DOMNode;
19518     l_xml_new_node                xmldom.DOMNode;
19519     l_amn_parent_element_id       CZ_UI_PAGE_ELEMENTS.element_id%TYPE;
19520     l_new_element_id              CZ_UI_PAGE_ELEMENTS.element_id%TYPE;
19521     l_pagebase_persistent_node_id NUMBER;
19522     l_length                      NUMBER;
19523     l_caseid_to_copy              BOOLEAN;
19524 
19525   BEGIN
19526 
19527     --
19528     -- initialize FND variables/packages
19529     --
19530     Initialize(x_return_status,x_msg_count,x_msg_data);
19531 
19532     set_Local_UI_Context(p_target_ui_def_id);
19533 
19534     --
19535     -- get jrad_doc of source UI page to which this UI element belongs to
19536     --
19537     SELECT jrad_doc
19538       INTO l_source_jrad_doc FROM CZ_UI_PAGES
19539     WHERE page_id=p_source_ui_page_id AND
19540           ui_def_id=p_source_ui_def_id;
19541 
19542     --
19543     -- get jrad_doc of source UI page to which this UI element belongs to
19544     --
19545     SELECT jrad_doc,persistent_node_id
19546       INTO l_target_jrad_doc, l_pagebase_persistent_node_id
19547       FROM CZ_UI_PAGES
19548      WHERE  page_id=p_target_ui_page_id AND
19549             ui_def_id=p_target_ui_def_id;
19550 
19551     --
19552     -- open XML parser
19553     --
19554     Open_Parser();
19555 
19556     l_source_xmldoc := parse_JRAD_Document(p_doc_full_name => l_source_jrad_doc);
19557 
19558     IF xmldom.isNull(l_source_xmldoc) THEN
19559       add_Error_Message(p_message_name => 'CZ_WRONG_UI_TEMPLATE',
19560                         p_token_name   => 'UI_TEMPLATE',
19561                         p_token_value  => l_source_jrad_doc,
19562                         p_fatal_error  => TRUE);
19563       RAISE WRONG_UI_TEMPLATE;
19564     END IF;
19565 
19566     --
19567     -- create UI Template in JRAD repository
19568     --
19569     l_target_xmldoc := parse_JRAD_Document(p_doc_full_name => l_target_jrad_doc);
19570 
19571     IF xmldom.isNull(l_target_xmldoc) THEN
19572       add_Error_Message(p_message_name => 'CZ_WRONG_UI_TEMPLATE',
19573                         p_token_name   => 'UI_TEMPLATE',
19574                         p_token_value  => l_target_jrad_doc,
19575                         p_fatal_error  => TRUE);
19576       RAISE WRONG_UI_TEMPLATE;
19577     END IF;
19578 
19579     l_source_xml_node := find_XML_Node_By_Attribute(p_subtree_doc     => l_source_xmldoc,
19580                                                     p_attribute_name  => G_ID_ATTRIBUTE,
19581                                                     p_attribute_value => p_source_element_id);
19582 
19583     IF xmldom.IsNull(l_source_xml_node) THEN
19584       l_source_xml_node := find_XML_Node_By_Attribute(p_subtree_doc     => l_source_xmldoc,
19585                                                       p_attribute_name  => 'caseId',
19586                                                       p_attribute_value => p_source_element_id,
19587                                                       p_in_user_attributes => G_YES_FLAG);
19588       l_caseid_to_copy := TRUE;
19589     END IF;
19590 
19591     l_target_xml_node := find_XML_Node_By_Attribute(p_subtree_doc     => l_target_xmldoc,
19592                                                     p_attribute_name  => G_ID_ATTRIBUTE,
19593                                                     p_attribute_value => p_target_parent_element_id);
19594     IF xmldom.IsNull(l_target_xml_node) THEN
19595       l_target_xml_node := find_XML_Node_By_Attribute(p_subtree_doc     => l_target_xmldoc,
19596                                                       p_attribute_name  => 'caseId',
19597                                                       p_attribute_value => p_target_parent_element_id,
19598                                                       p_in_user_attributes => G_YES_FLAG);
19599     END IF;
19600 
19601 
19602     copy_UI_Subtree(p_source_ui_def_id => p_source_ui_def_id,
19603                     p_source_element_id => p_source_element_id,
19604                     p_source_ui_page_id => p_source_ui_page_id,
19605                     p_target_ui_def_id => p_target_ui_def_id,
19606                     p_target_ui_page_id => p_target_ui_page_id,
19607                     p_target_parent_element_id => p_target_parent_element_id,
19608                     p_source_xml_node => l_source_xml_node,
19609                     p_target_xml_node => l_target_xml_node,
19610                     p_target_xmldoc => l_target_xmldoc,
19611                     x_new_element_id => l_new_element_id,
19612                     x_new_xml_node => l_new_xml_node);
19613 
19614     x_new_element_id := l_new_element_id;
19615     --
19616     -- close XML parser
19617     --
19618     Close_Parser();
19619 
19620 
19621     IF g_MSG_COUNT>0 THEN
19622       x_return_status := FND_API.G_RET_STS_SUCCESS;
19623       x_msg_count     := g_MSG_COUNT;
19624       x_msg_data      := fnd_msg_pub.GET(g_MSG_COUNT,fnd_api.g_false);
19625     END IF;
19626 
19627 
19628   EXCEPTION
19629     WHEN WRONG_UI_TEMPLATE THEN
19630       x_return_status := FND_API.G_RET_STS_ERROR;
19631       x_msg_count     := g_MSG_COUNT;
19632       x_msg_data      := fnd_msg_pub.GET(g_MSG_COUNT,fnd_api.g_false);
19633       DEBUG(x_msg_data);
19634     WHEN OTHERS THEN
19635       x_return_status := FND_API.G_RET_STS_ERROR;
19636       x_msg_count := 1;
19637       x_msg_data  := SUBSTR(DBMS_UTILITY.format_error_backtrace,1,4000);
19638       fnd_msg_pub.add_exc_msg('CZ_UIOA_PVT', 'copy_UI_Subtree', x_msg_data);
19639       DEBUG('copy_UI_Subtree() : '||x_msg_data);
19640   END copy_UI_Subtree;
19641 
19642   --
19643   --
19644   -- This procedure copies a UI page specified by parameter p_page_id - it creates a new copies for UI entities corresponding to
19645   -- a source UI page except corresponding UI Page Refs records.
19646   -- 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.
19647   --
19648   PROCEDURE copy_UI_Page (p_source_ui_def_id      IN NUMBER,   -- ui_def_id of UI
19649                           p_source_ui_page_id     IN NUMBER, -- page_id of
19650                                                                -- UI page which needs
19651                                                                -- to be copied
19652                           p_target_ui_def_id      IN NUMBER,        -- ui_def_id of target UI
19653                           p_source_xmldoc         xmldom.DOMDocument,
19654                           x_new_ui_page_id        OUT NOCOPY NUMBER,-- page_id of copied UI page
19655                           x_new_jrad_doc          OUT NOCOPY VARCHAR2
19656                           ) IS
19657 
19658     l_source_xml_node            xmldom.DOMNode;
19659     l_source_jrad_doc            CZ_UI_PAGES.jrad_doc%TYPE;
19660     l_target_jrad_doc            CZ_UI_PAGES.jrad_doc%TYPE;
19661     l_element_id_tbl             number_tbl_type;
19662     l_parent_element_id_tbl      number_tbl_type;
19663     l_element_id_arr_tbl         number_tbl_type;
19664     l_new_element_id_arr_tbl     number_tbl_type;
19665     l_seq_nbr_tbl                number_tbl_type;
19666     l_seq_nbr_arr_tbl            number_tbl_type;
19667     l_source_element_id          VARCHAR2(255);
19668     l_new_element_id             VARCHAR2(255);
19669     l_caption_text_id            NUMBER;
19670     l_ui_action_id               NUMBER;
19671     l_display_condition_id       NUMBER;
19672     l_enabled_condition_id       NUMBER;
19673     l_current_element_id         NUMBER;
19674     l_persistent_node_id         NUMBER;
19675     l_pagebase_expl_node_id      NUMBER;
19676     l_caption_rule_id            NUMBER;
19677     l_new_parent_element_id      NUMBER;
19678     l_copy_nbr                   NUMBER;
19679 
19680   BEGIN
19681 
19682     SELECT element_id INTO l_source_element_id
19683       FROM CZ_UI_PAGE_ELEMENTS
19684      WHERE ui_def_id=p_source_ui_def_id AND page_id=p_source_ui_page_id AND
19685            parent_element_id IS NULL AND deleted_flag=G_NO_FLAG;
19686 
19687     --
19688     -- get jrad_doc of source UI page to which this UI element belongs to
19689     --
19690     SELECT jrad_doc,persistent_node_id, pagebase_expl_node_id
19691       INTO l_source_jrad_doc,l_persistent_node_id, l_pagebase_expl_node_id
19692       FROM CZ_UI_PAGES
19693      WHERE ui_def_id=p_source_ui_def_id AND
19694            page_id=p_source_ui_page_id;
19695 
19696     SELECT COUNT(*) INTO l_copy_nbr FROM CZ_UI_PAGES
19697     WHERE ui_def_id=p_target_ui_def_id AND
19698           persistent_node_id=l_persistent_node_id;
19699 
19700     l_target_jrad_doc := '/oracle/apps/cz/runtime/oa/webui/regions/ui' ||
19701                          TO_CHAR(p_target_ui_def_id) || '/' ||
19702                          get_Short_JRAD_Name(l_source_jrad_doc)||'_'||TO_CHAR(l_copy_nbr);
19703 
19704     l_target_jrad_doc := REPLACE(l_target_jrad_doc,'_'||TO_CHAR(p_source_ui_def_id)||'_',
19705                                  '_'||TO_CHAR(p_target_ui_def_id)||'_');
19706 
19707     x_new_jrad_doc := l_target_jrad_doc;
19708 
19709     FOR i IN(SELECT * FROM CZ_UI_PAGES
19710              WHERE ui_def_id=p_source_ui_def_id AND
19711                    page_id=p_source_ui_page_id)
19712     LOOP
19713 
19714       x_new_ui_page_id := allocateId('CZ_UI_PAGES_S');
19715 
19716       l_caption_text_id := copy_Intl_Text(i.caption_text_id, p_target_ui_def_id, NULL, NULL);
19717 
19718       copy_UI_Rule( i.caption_rule_id, l_caption_rule_id,
19719                     p_target_ui_def_id,x_new_ui_page_id,NULL,p_source_ui_def_id);
19720 
19721       copy_UI_Rule( i.display_condition_id, l_display_condition_id,
19722                     p_target_ui_def_id,x_new_ui_page_id,NULL,p_source_ui_def_id);
19723 
19724       copy_UI_Rule( i.enabled_condition_id, l_enabled_condition_id,
19725                     p_target_ui_def_id,x_new_ui_page_id,NULL,p_source_ui_def_id);
19726 
19727       INSERT INTO CZ_UI_PAGES
19728       (
19729       PAGE_ID
19730       ,UI_DEF_ID
19731       ,PERSISTENT_NODE_ID
19732       ,JRAD_DOC
19733       ,PAGEBASE_PATH
19734       ,PAGE_SET_ID
19735       ,SPLIT_SEQ_NBR
19736       ,CAPTION_SOURCE
19737       ,CAPTION_TEXT_ID
19738       ,PERSISTENT_CAPTION_TEXT_ID
19739       ,PROPERTY_ID
19740       ,DELETED_FLAG
19741       ,SEEDED_FLAG
19742       ,PAGEBASE_EXPL_NODE_ID
19743       ,suppress_refresh_flag
19744       ,PAGE_REV_NBR
19745       ,NAME
19746       ,DESC_TEXT
19747       ,PAGE_STATUS_TEMPLATE_ID
19748       ,PAGE_STATUS_TEMPL_UIDEF_ID
19749       ,CAPTION_RULE_ID
19750       ,PAGE_STATUS_TEMPLATE_USAGE
19751       ,OUTER_TEMPLATE_USAGE
19752       ,OUTER_PAGE_TEMPLATE_ID
19753       ,OUTER_PAGE_TEMPL_UIDEF_ID
19754       ,DISPLAY_CONDITION_ID
19755       ,DISPLAY_CONDITION_COMP
19756       ,DISPLAY_CONDITION_VALUE
19757       ,ENABLED_CONDITION_ID
19758       ,ENABLED_CONDITION_COMP
19759       ,ENABLED_CONDITION_VALUE
19760       )
19761       VALUES
19762       (
19763       x_new_ui_page_id
19764       ,p_target_ui_def_id
19765       ,i.PERSISTENT_NODE_ID
19766       ,l_target_jrad_doc
19767       ,i.PAGEBASE_PATH
19768       ,NULL
19769       ,1
19770       ,i.CAPTION_SOURCE
19771       ,l_caption_text_id
19772       ,i.PERSISTENT_CAPTION_TEXT_ID
19773       ,i.PROPERTY_ID
19774       ,i.DELETED_FLAG
19775       ,i.SEEDED_FLAG
19776       ,i.PAGEBASE_EXPL_NODE_ID
19777       ,i.suppress_refresh_flag
19778       ,0
19779       ,i.NAME||'_'||TO_CHAR(l_copy_nbr)
19780       ,i.DESC_TEXT
19781       ,i.PAGE_STATUS_TEMPLATE_ID
19782       ,i.PAGE_STATUS_TEMPL_UIDEF_ID
19783       ,l_caption_rule_id
19784       ,i.PAGE_STATUS_TEMPLATE_USAGE
19785       ,i.OUTER_TEMPLATE_USAGE
19786       ,i.OUTER_PAGE_TEMPLATE_ID
19787       ,i.OUTER_PAGE_TEMPL_UIDEF_ID
19788       ,l_display_condition_id
19789       ,i.DISPLAY_CONDITION_COMP
19790       ,i.DISPLAY_CONDITION_VALUE
19791       ,l_enabled_condition_id
19792       ,i.ENABLED_CONDITION_COMP
19793       ,i.ENABLED_CONDITION_VALUE
19794       );
19795     END LOOP;
19796 
19797     l_source_xml_node := find_XML_Node_By_Attribute(p_subtree_doc     => p_source_xmldoc,
19798                                                     p_attribute_name  => G_ID_ATTRIBUTE,
19799                                                     p_attribute_value => l_source_element_id);
19800 
19801     l_source_xml_node := xmldom.cloneNode(l_source_xml_node, TRUE);
19802 
19803     -- We are copying an entire page. We start off with the pagebase as the base AMN
19804     -- for computing paths (p_base_persistent_node_id, p_base_expl_node_id)
19805     -- If while copying the tree, we encounter an Instance List Region, we will change
19806     -- the base AMN to the AMN of the Instance List for nodes under the Instance List
19807     copy_Tree_Level(p_xml_node                    => l_source_xml_node,
19808                     p_source_ui_def_id            => p_source_ui_def_id,
19809                     p_target_ui_def_id            => p_target_ui_def_id,
19810                     p_source_ui_page_id           => p_source_ui_page_id,
19811                     p_target_ui_page_id           => x_new_ui_page_id,
19812                     p_parent_element_id           => NULL,
19813                     p_target_parent_element_id    => NULL,
19814                     p_pagebase_persistent_node_id => l_persistent_node_id,
19815                     p_base_persistent_node_id     => l_persistent_node_id,  -- see comment above
19816                     p_base_expl_node_id           => l_pagebase_expl_node_id, -- see comment above
19817                     x_new_element_id              => l_new_element_id,
19818                     p_copy_as_ui_page             => TRUE,
19819                     p_source_jrad_doc             => l_source_jrad_doc,
19820                     p_target_jrad_doc             => l_target_jrad_doc,
19821                     p_amn_parent_element_id       => NULL);
19822 
19823     validate_Copied_PIR(p_target_ui_def_id, x_new_ui_page_id);
19824 
19825     Save_As_Document(p_xml_root_node => l_source_xml_node,
19826                      p_doc_name      => l_target_jrad_doc);
19827 
19828   END copy_UI_Page;
19829 
19830 
19831   --
19832   --
19833   -- This procedure copies a UI page specified by parameter p_page_id - it creates a new copies for UI entities corresponding to
19834   -- a source UI page except corresponding UI Page Refs records.
19835   -- 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.
19836   --
19837   PROCEDURE copy_UI_Page (p_source_ui_def_id      IN NUMBER,   -- ui_def_id of UI
19838                           p_source_ui_page_id     IN NUMBER, -- page_id of
19839                                                                -- UI page which needs
19840                                                                -- to be copied
19841                           p_target_ui_def_id      IN NUMBER,        -- ui_def_id of target UI
19842                           x_new_ui_page_id        OUT NOCOPY NUMBER,-- page_id of copied UI page
19843                           x_return_status  OUT NOCOPY VARCHAR2,-- status string
19844                           x_msg_count      OUT NOCOPY NUMBER,  -- number of error messages
19845                           x_msg_data       OUT NOCOPY VARCHAR2 -- string which contains error messages
19846                           ) IS
19847 
19848     l_source_xmldoc              xmldom.DOMDocument;
19849     l_source_xml_node            xmldom.DOMNode;
19850     l_source_jrad_doc            CZ_UI_PAGES.jrad_doc%TYPE;
19851     l_target_jrad_doc            CZ_UI_PAGES.jrad_doc%TYPE;
19852     l_element_id_tbl             number_tbl_type;
19853     l_parent_element_id_tbl      number_tbl_type;
19854     l_element_id_arr_tbl         number_tbl_type;
19855     l_new_element_id_arr_tbl     number_tbl_type;
19856     l_seq_nbr_tbl                number_tbl_type;
19857     l_seq_nbr_arr_tbl            number_tbl_type;
19858     l_source_element_id          VARCHAR2(255);
19859     l_new_element_id             VARCHAR2(255);
19860     l_new_ui_page_id             NUMBER;
19861     l_caption_text_id            NUMBER;
19862     l_ui_action_id               NUMBER;
19863     l_display_condition_id       NUMBER;
19864     l_enabled_condition_id       NUMBER;
19865     l_current_element_id         NUMBER;
19866     l_persistent_node_id         NUMBER;
19867     l_caption_rule_id            NUMBER;
19868     l_new_parent_element_id      NUMBER;
19869     l_copy_nbr                   NUMBER;
19870 
19871   BEGIN
19872 
19873     --
19874     -- initialize FND variables/packages
19875     --
19876     Initialize(x_return_status,x_msg_count,x_msg_data);
19877 
19878     g_handled_attr_id_tbl.DELETE;
19879 
19880     set_Local_UI_Context(p_target_ui_def_id);
19881 
19882     SELECT element_id INTO l_source_element_id
19883       FROM CZ_UI_PAGE_ELEMENTS
19884      WHERE ui_def_id=p_source_ui_def_id AND page_id=p_source_ui_page_id AND
19885            parent_element_id IS NULL AND deleted_flag=G_NO_FLAG;
19886 
19887     --
19888     -- get jrad_doc of source UI page to which this UI element belongs to
19889     --
19890     SELECT jrad_doc,persistent_node_id
19891       INTO l_source_jrad_doc,l_persistent_node_id
19892       FROM CZ_UI_PAGES
19893      WHERE ui_def_id=p_source_ui_def_id AND
19894            page_id=p_source_ui_page_id;
19895 
19896     --
19897     -- open XML parser
19898     --
19899     Open_Parser();
19900 
19901     --
19902     -- create UI Template in JRAD repository
19903     --
19904     l_source_xmldoc := parse_JRAD_Document(p_doc_full_name => l_source_jrad_doc);
19905 
19906     IF xmldom.isNull(l_source_xmldoc) THEN
19907       add_Error_Message(p_message_name => 'CZ_WRONG_UI_TEMPLATE',
19908                         p_token_name   => 'UI_TEMPLATE',
19909                         p_token_value  => l_source_jrad_doc,
19910                         p_fatal_error  => TRUE);
19911       RAISE WRONG_UI_TEMPLATE;
19912     END IF;
19913 
19914     copy_UI_Page (p_source_ui_def_id => p_source_ui_def_id,
19915                   p_source_ui_page_id => p_source_ui_page_id,
19916                   p_target_ui_def_id => p_target_ui_def_id,
19917                   p_source_xmldoc => l_source_xmldoc,
19918                   x_new_ui_page_id => l_new_ui_page_id,
19919                   x_new_jrad_doc => l_target_jrad_doc);
19920 
19921     x_new_ui_page_id := l_new_ui_page_id;
19922 
19923     translate_JRAD_Doc(l_target_jrad_doc);
19924 
19925     --
19926     -- close XML parser
19927     --
19928     Close_Parser();
19929 
19930     IF g_MSG_COUNT>0 THEN
19931       x_return_status := FND_API.G_RET_STS_SUCCESS;
19932       x_msg_count     := g_MSG_COUNT;
19933       x_msg_data      := fnd_msg_pub.GET(g_MSG_COUNT,fnd_api.g_false);
19934     END IF;
19935 
19936   EXCEPTION
19937     WHEN WRONG_UI_TEMPLATE THEN
19938       x_return_status := FND_API.G_RET_STS_ERROR;
19939       x_msg_count     := g_MSG_COUNT;
19940       x_msg_data      := fnd_msg_pub.GET(g_MSG_COUNT,fnd_api.g_false);
19941       DEBUG(x_msg_data);
19942     WHEN OTHERS THEN
19943       x_return_status := FND_API.G_RET_STS_ERROR;
19944       x_msg_count := 1;
19945       x_msg_data  := SUBSTR(DBMS_UTILITY.format_error_backtrace,1,4000);
19946       fnd_msg_pub.add_exc_msg('CZ_UIOA_PVT', 'copy_UI_Page', x_msg_data);
19947       DEBUG('copy_UI_Page() : '||x_msg_data);
19948 
19949   END copy_UI_Page;
19950 
19951   --
19952   -- This procedure sets/propogates deleted_flag='1' from a given
19953   -- Page Ref record specified by parameter p_page_ref_id.
19954   -- target UI pages are not deleted.
19955   --
19956   PROCEDURE copy_UI_Page_Ref(p_source_ui_def_id      IN NUMBER,    -- ui_def_id of UI
19957                              p_source_page_ref_id    IN NUMBER,  -- page_ref_id of
19958                                                                    -- Menu/Page Flow link which needs
19959                                                                    -- to be deleted.
19960                              p_target_ui_def_id       IN NUMBER,   -- ui_def_id of target UI
19961                              p_target_parent_page_ref_id IN NUMBER,-- new parent page ref id
19962                              x_page_ref_id OUT NOCOPY NUMBER,    -- template_id of
19963                                                                    -- Local UI Template which needs
19964                                                                    -- to be copied
19965                              x_return_status  OUT NOCOPY VARCHAR2, -- status string
19966                              x_msg_count      OUT NOCOPY NUMBER,   -- number of error messages
19967                              x_msg_data       OUT NOCOPY VARCHAR2  -- string which contains error messages
19968                              ) IS
19969     TYPE number_tbl_type        IS TABLE OF NUMBER INDEX BY BINARY_INTEGER;
19970     l_page_ref_id_tbl           number_tbl_type;
19971     l_parent_page_ref_id_tbl    number_tbl_type;
19972     l_node_depth_tbl            number_tbl_type;
19973     l_seq_nbr_tbl               number_tbl_type;
19974     l_page_ref_arr_tbl          number_tbl_type;
19975     l_new_page_ref_arr_tbl      number_tbl_type;
19976     l_seq_nbr_arr_tbl           number_tbl_type;
19977     l_node_depth_arr_tbl        number_tbl_type;
19978     l_target_page_set_id        NUMBER;
19979     l_current_page_ref_id       NUMBER;
19980     l_new_page_ref_id           NUMBER;
19981     l_new_parent_page_ref_id    NUMBER;
19982 
19983     l_condition_id              NUMBER;
19984     l_caption_rule_id           NUMBER;
19985     l_target_max_seq_nbr        NUMBER;
19986     l_target_node_depth         NUMBER;
19987     l_caption_text_id           NUMBER;
19988     l_seq_nbr                   NUMBER;
19989     l_node_depth                NUMBER;
19990 
19991   BEGIN
19992 
19993     --
19994     -- initialize FND variables/packages
19995     --
19996     Initialize(x_return_status,x_msg_count,x_msg_data);
19997 
19998     SELECT page_set_id,node_depth INTO l_target_page_set_id,l_target_node_depth
19999     FROM CZ_UI_PAGE_REFS
20000     WHERE ui_def_id=p_target_ui_def_id AND page_ref_id=p_target_parent_page_ref_id;
20001 
20002     SELECT NVL(MAX(seq_nbr),0) INTO l_target_max_seq_nbr FROM CZ_UI_PAGE_REFS
20003     WHERE ui_def_id=p_target_ui_def_id AND deleted_flag=G_NO_FLAG;
20004 
20005     SELECT page_ref_id,parent_page_ref_id,node_depth,seq_nbr
20006     BULK COLLECT INTO l_page_ref_id_tbl,l_parent_page_ref_id_tbl,l_node_depth_tbl,l_seq_nbr_tbl
20007     FROM CZ_UI_PAGE_REFS
20008     START WITH ui_def_id=p_source_ui_def_id AND page_ref_id=p_source_page_ref_id
20009     CONNECT BY PRIOR ui_def_id=p_source_ui_def_id AND
20010                ui_def_id=p_source_ui_def_id AND
20011                PRIOR page_ref_id=parent_page_ref_id AND
20012                PRIOR deleted_flag=G_NO_FLAG AND deleted_flag=G_NO_FLAG;
20013 
20014     IF l_page_ref_id_tbl.Count>0 THEN
20015       FOR i IN l_page_ref_id_tbl.First..l_page_ref_id_tbl.Last
20016       LOOP
20017         l_page_ref_arr_tbl(l_page_ref_id_tbl(i))     := l_parent_page_ref_id_tbl(i);
20018         l_new_page_ref_arr_tbl(l_page_ref_id_tbl(i)) := get_Element_Id();
20019         l_seq_nbr_arr_tbl(l_page_ref_id_tbl(i))      := l_seq_nbr_tbl(i);
20020         l_node_depth_arr_tbl(l_page_ref_id_tbl(i))   := l_node_depth_tbl(i);
20021       END LOOP;
20022     END IF;
20023 
20024     l_current_page_ref_id := l_page_ref_arr_tbl.First;
20025     LOOP
20026       IF l_current_page_ref_id IS NULL THEN
20027         EXIT;
20028       END IF;
20029 
20030       l_new_page_ref_id := l_page_ref_arr_tbl(l_current_page_ref_id);
20031 
20032       IF l_new_page_ref_arr_tbl.EXISTS(l_new_page_ref_id) THEN
20033         l_new_parent_page_ref_id := l_new_page_ref_arr_tbl(l_new_page_ref_id);
20034       ELSE
20035         l_new_parent_page_ref_id := p_target_parent_page_ref_id;
20036         x_page_ref_id := l_new_page_ref_id;
20037       END IF;
20038 
20039       FOR i IN(SELECT * FROM CZ_UI_PAGE_REFS
20040                WHERE ui_def_id=p_source_ui_def_id AND
20041                      page_ref_id=l_current_page_ref_id AND
20042                      deleted_flag=G_NO_FLAG)
20043       LOOP
20044 
20045         l_seq_nbr := l_target_max_seq_nbr + i.SEQ_NBR;
20046         l_node_depth := l_target_node_depth - l_node_depth_tbl(1) + 1;
20047 
20048         copy_UI_Rule(i.condition_id, l_condition_id,
20049                      p_target_ui_def_id, i.target_page_id, NULL,p_source_ui_def_id);
20050 
20051         copy_UI_Rule(i.caption_rule_id, l_caption_rule_id,
20052                      p_target_ui_def_id, i.target_page_id, NULL,p_source_ui_def_id);
20053 
20054         l_caption_text_id := copy_Intl_Text(l_caption_text_id, p_target_ui_def_id,
20055                                             NULL, NULL);
20056 
20057         INSERT INTO CZ_UI_PAGE_REFS
20058       (
20059       PAGE_SET_ID
20060       ,UI_DEF_ID
20061       ,PAGE_REF_ID
20062       ,PARENT_PAGE_REF_ID
20063       ,SEQ_NBR
20064       ,NODE_DEPTH
20065       ,PAGE_REF_TYPE
20066       ,CONDITION_ID
20067       ,NAME
20068       ,CAPTION_SOURCE
20069       ,CAPTION_TEXT_ID
20070       ,PERSISTENT_CAPTION_TEXT_ID
20071       ,PROPERTY_ID
20072       ,TARGET_PERSISTENT_NODE_ID
20073       ,TARGET_PATH
20074       ,TARGET_UI_DEF_ID
20075       ,TARGET_PAGE_SET_ID
20076       ,TARGET_PAGE_ID
20077       ,MODIFIED_FLAGS
20078       ,PATH_TO_PREV_PAGE
20079       ,PATH_TO_NEXT_PAGE
20080       ,DELETED_FLAG
20081       ,CAPTION_RULE_ID
20082       ,TARGET_EXPL_NODE_ID
20083       )
20084        VALUES
20085       (
20086       l_target_page_set_id
20087       ,p_target_ui_def_id
20088       ,l_new_page_ref_id
20089       ,l_new_parent_page_ref_id
20090       ,l_seq_nbr
20091       ,l_node_depth
20092       ,i.PAGE_REF_TYPE
20093       ,l_condition_id
20094       ,i.NAME
20095       ,i.CAPTION_SOURCE
20096       ,l_caption_text_id
20097       ,i.PERSISTENT_CAPTION_TEXT_ID
20098       ,i.PROPERTY_ID
20099       ,i.TARGET_PERSISTENT_NODE_ID
20100       ,i.TARGET_PATH
20101       ,i.TARGET_UI_DEF_ID
20102       ,i.TARGET_PAGE_SET_ID
20103       ,i.TARGET_PAGE_ID
20104       ,i.MODIFIED_FLAGS
20105       ,i.PATH_TO_PREV_PAGE
20106       ,i.PATH_TO_NEXT_PAGE
20107       ,i.DELETED_FLAG
20108       ,l_caption_rule_id
20109       ,i.TARGET_EXPL_NODE_ID
20110       );
20111 
20112      END LOOP;
20113 
20114      l_current_page_ref_id := l_page_ref_arr_tbl.NEXT(l_current_page_ref_id);
20115    END LOOP;
20116 
20117   EXCEPTION
20118     WHEN OTHERS THEN
20119       x_return_status := FND_API.G_RET_STS_ERROR;
20120       x_msg_count := 1;
20121       x_msg_data  := SUBSTR(DBMS_UTILITY.format_error_backtrace,1,4000);
20122       fnd_msg_pub.add_exc_msg('CZ_UIOA_PVT', 'delete_UI_Subtree', x_msg_data);
20123       DEBUG('copy_UI_Page_Ref() : '||x_msg_data);
20124   END copy_UI_Page_Ref;
20125 
20126   --
20127 	-- This procedure creates copies of the Local Template record and its corresponding XML Jrad document.  In addition, it also
20128 	-- parses the source jrad document for any caption intl_text_ids or condition rule Ids and creates copies
20129   -- the Intl_text and Rule records which have seeded_flag='0'.
20130 	-- the UI Elements.  The Elements could also have Associated with them which need to be copied and refered in the new copy.
20131   --
20132   PROCEDURE copy_Local_Template(p_source_ui_def_id       IN NUMBER,   -- ui_def_id of UI
20133                                 p_source_template_id     IN NUMBER,   -- template_id of
20134                                                                       -- Local UI Template which needs
20135                                                                       -- to be copied
20136                                 p_target_ui_def_id       IN NUMBER,           -- ui_def_id of target UI
20137                                 x_new_template_id        OUT NOCOPY NUMBER, -- template_id of
20138                                                                               -- Local UI Template which needs
20139                                                                               -- to be copied
20140                                 x_return_status  OUT NOCOPY VARCHAR2,-- status string
20141                                 x_msg_count      OUT NOCOPY NUMBER,  -- number of error messages
20142                                 x_msg_data       OUT NOCOPY VARCHAR2 -- string which contains error messages
20143                                 ) IS
20144     l_source_template_xmldoc  xmldom.DOMDocument;
20145     l_template_root_xml_node  xmldom.DOMNode;
20146     l_xml_node                xmldom.DOMNode;
20147     l_child_nodes_tbl         xmldom.DOMNodeList;
20148     l_source_jrad_doc         CZ_UI_PAGES.jrad_doc%TYPE;
20149     l_target_jrad_doc         CZ_UI_PAGES.jrad_doc%TYPE;
20150     l_length                  NUMBER;
20151     l_needs_to_be_unlocked    BOOLEAN;
20152 
20153   BEGIN
20154 
20155     --
20156     -- lock source UI Template
20157     --
20158     lock_UI_Template( p_source_template_id, p_source_ui_def_id, l_needs_to_be_unlocked );
20159 
20160     --
20161     -- initialize FND variables/packages
20162     --
20163     Initialize(x_return_status,x_msg_count,x_msg_data);
20164 
20165     SELECT jrad_doc INTO l_source_jrad_doc FROM CZ_UI_TEMPLATES
20166     WHERE ui_def_id=p_source_ui_def_id AND template_id=p_source_template_id;
20167 
20168     --
20169     -- open XML parser
20170     --
20171     Open_Parser();
20172 
20173     --
20174     -- create UI Template in JRAD repository
20175     --
20176     l_source_template_xmldoc := parse_JRAD_Document(p_doc_full_name => l_source_jrad_doc);
20177 
20178     IF xmldom.isNull(l_source_template_xmldoc) THEN
20179       add_Error_Message(p_message_name => 'CZ_WRONG_UI_TEMPLATE',
20180                         p_token_name   => 'UI_TEMPLATE',
20181                         p_token_value  => l_source_jrad_doc,
20182                         p_fatal_error  => TRUE);
20183       RAISE WRONG_UI_TEMPLATE;
20184     END IF;
20185 
20186     l_template_root_xml_node :=xmldom.makeNode(xmldom.getDocumentElement(l_source_template_xmldoc));
20187 
20188     l_child_nodes_tbl := xmldom.getElementsByTagName(l_source_template_xmldoc, '*');
20189     l_length := xmldom.getLength(l_child_nodes_tbl);
20190     IF (l_length > 0) THEN
20191         FOR k IN 0..l_length-1
20192         LOOP
20193           --
20194           -- get next child DOM node
20195           --
20196           l_xml_node := xmldom.item(l_child_nodes_tbl, k);
20197           IF k > 0 THEN
20198              --
20199              -- create a new copies for corresponding entities ( captions, rules ,... )
20200              --
20201              copy_Node_Related_Entities(p_ui_def_id        => p_source_ui_def_id,
20202                                         p_ui_page_id       => NULL,
20203                                         p_xml_node         => l_xml_node,
20204                                         p_target_ui_def_id => p_target_ui_def_id);
20205           END IF;
20206         END LOOP;
20207     END IF;
20208 
20209     l_target_jrad_doc := '/oracle/apps/cz/runtime/oa/webui/regions/ui' ||
20210                          TO_CHAR(p_target_ui_def_id) || '/' ||
20211                          get_Short_JRAD_Name(l_source_jrad_doc);
20212 
20213     Save_Document(p_xml_doc   => l_source_template_xmldoc,
20214                   p_doc_name  => l_target_jrad_doc);
20215 
20216     translate_JRAD_Doc(l_target_jrad_doc);
20217 
20218     --
20219     -- close XML parser
20220     --
20221     Close_Parser();
20222 
20223     x_new_template_id := allocateId('CZ_UI_TEMPLATES_S');
20224 
20225     INSERT INTO CZ_UI_TEMPLATES
20226               (TEMPLATE_ID,
20227                UI_DEF_ID,
20228                TEMPLATE_NAME,
20229                TEMPLATE_TYPE,
20230                TEMPLATE_DESC,
20231                PARENT_CONTAINER_TYPE,
20232                JRAD_DOC,
20233                BUTTON_BAR_TEMPLATE_ID,
20234                MESSAGE_TYPE,
20235                MAIN_MESSAGE_ID,
20236                TITLE_ID,
20237                SEEDED_FLAG,
20238                LAYOUT_UI_STYLE,
20239                ROOT_REGION_TYPE,
20240                ROOT_ELEMENT_SIGNATURE_ID,
20241                TEMPLATE_REV_NBR,
20242                TEMPLATE_USAGE,
20243                AMN_USAGE,
20244                DELETED_FLAG)
20245      SELECT
20246                x_new_template_id ,
20247                p_target_ui_def_id,
20248                TEMPLATE_NAME,
20249                TEMPLATE_TYPE,
20250                TEMPLATE_DESC,
20251                PARENT_CONTAINER_TYPE,
20252                l_target_jrad_doc,
20253                BUTTON_BAR_TEMPLATE_ID,
20254                MESSAGE_TYPE,
20255                MAIN_MESSAGE_ID,
20256                TITLE_ID,
20257                G_NO_FLAG,
20258                LAYOUT_UI_STYLE,
20259                ROOT_REGION_TYPE,
20260                ROOT_ELEMENT_SIGNATURE_ID,
20261                TEMPLATE_REV_NBR,
20262                TEMPLATE_USAGE,
20263                AMN_USAGE,
20264                G_NO_FLAG
20265       FROM CZ_UI_TEMPLATES
20266      WHERE ui_def_id=p_source_ui_def_id AND
20267            template_id=p_source_template_id;
20268 
20269     INSERT INTO CZ_UI_REF_TEMPLATES
20270       (
20271       TEMPLATE_ID
20272       ,REF_TEMPLATE_ID
20273       ,DELETED_FLAG
20274       ,TEMPLATE_UI_DEF_ID
20275       ,REF_TEMPLATE_UI_DEF_ID
20276       )
20277     SELECT
20278       x_new_template_id
20279       ,REF_TEMPLATE_ID
20280       ,DELETED_FLAG
20281       ,p_target_ui_def_id
20282       ,REF_TEMPLATE_UI_DEF_ID
20283     FROM CZ_UI_REF_TEMPLATES
20284     WHERE template_id=p_source_template_id AND
20285           template_ui_def_id=p_source_ui_def_id AND
20286           deleted_flag=G_NO_FLAG;
20287 
20288     --
20289     -- unlock source UI Template
20290     --
20291     unlock_UI_Template( p_source_template_id, p_source_ui_def_id, l_needs_to_be_unlocked );
20292 
20293   EXCEPTION
20294     WHEN WRONG_UI_TEMPLATE THEN
20295       x_return_status := FND_API.G_RET_STS_ERROR;
20296       x_msg_count     := g_MSG_COUNT;
20297       x_msg_data      := fnd_msg_pub.GET(g_MSG_COUNT,fnd_api.g_false);
20298       DEBUG(x_msg_data);
20299       --
20300       -- unlock source UI Template
20301       --
20302       unlock_UI_Template( p_source_template_id, p_source_ui_def_id, l_needs_to_be_unlocked );
20303     WHEN OTHERS THEN
20304       x_return_status := FND_API.G_RET_STS_ERROR;
20305       x_msg_count := 1;
20306       x_msg_data  := SUBSTR(DBMS_UTILITY.format_error_backtrace,1,4000);
20307       fnd_msg_pub.add_exc_msg('CZ_UIOA_PVT', 'copy_Local_Template', x_msg_data);
20308       DEBUG('copy_Local_Template() : '||x_msg_data);
20309       --
20310       -- unlock source UI Template
20311       --
20312       unlock_UI_Template( p_source_template_id, p_source_ui_def_id, l_needs_to_be_unlocked );
20313   END copy_Local_Template;
20314 
20315   --
20316   -- This procedure creates a new copy of JRAD document specified by parameter p_source_jrad_doc
20317   -- new copy will have full JRAD path = p_target_jrad_doc
20318   --
20319   PROCEDURE copy_JRAD_Document(p_source_jrad_doc    IN VARCHAR2,   -- specify source JRAD document that will be copied
20320                                p_target_jrad_doc     IN VARCHAR2, -- specify full JRAD path of new copy
20321                                x_return_status  OUT NOCOPY VARCHAR2,-- status string
20322                                x_msg_count      OUT NOCOPY NUMBER,  -- number of error messages
20323                                x_msg_data       OUT NOCOPY VARCHAR2 -- string which contains error messages
20324                                ) IS
20325 
20326     l_source_xmldoc  xmldom.DOMDocument;
20327 
20328   BEGIN
20329 
20330     --
20331     -- initialize FND variables/packages
20332     --
20333     Initialize(x_return_status,x_msg_count,x_msg_data);
20334 
20335     --
20336     -- open XML parser
20337     --
20338     Open_Parser();
20339 
20340     --
20341     -- create UI Template in JRAD repository
20342     --
20343     l_source_xmldoc := parse_JRAD_Document(p_doc_full_name => p_source_jrad_doc);
20344 
20345     IF xmldom.isNull(l_source_xmldoc) THEN
20346       add_Error_Message(p_message_name => 'CZ_WRONG_UI_TEMPLATE',
20347                         p_token_name   => 'UI_TEMPLATE',
20348                         p_token_value  => p_source_jrad_doc,
20349                         p_fatal_error  => TRUE);
20350       RAISE WRONG_UI_TEMPLATE;
20351     END IF;
20352 
20353     Save_Document(p_xml_doc   => l_source_xmldoc,
20354                   p_doc_name  => p_target_jrad_doc);
20355 
20356     translate_JRAD_Doc(p_target_jrad_doc);
20357 
20358     --
20359     -- close XML parser
20360     --
20361     Close_Parser();
20362 
20363   EXCEPTION
20364     WHEN WRONG_UI_TEMPLATE THEN
20365       x_return_status := FND_API.G_RET_STS_ERROR;
20366       x_msg_count     := g_MSG_COUNT;
20367       x_msg_data      := fnd_msg_pub.GET(g_MSG_COUNT,fnd_api.g_false);
20368       DEBUG(x_msg_data);
20369     WHEN OTHERS THEN
20370       x_return_status := FND_API.G_RET_STS_ERROR;
20371       x_msg_count := 1;
20372       x_msg_data  := SUBSTR(DBMS_UTILITY.format_error_backtrace,1,4000);
20373       fnd_msg_pub.add_exc_msg('CZ_UIOA_PVT', 'copy_JRAD_Document', x_msg_data);
20374       DEBUG('copy_JRAD_Document() : '||x_msg_data);
20375   END copy_JRAD_Document;
20376 
20377   --
20378   --vsingava bug8688987 24th Jul '09
20379   -- This procedure moves the JRAD document specified by parameter p_source_jrad_doc
20380   -- from p_source_ui_def_id to p_target_ui_def_id
20381   --
20382 
20383   PROCEDURE move_JRAD_Document (p_source_jrad_doc IN VARCHAR2,      -- jrad_doc of a ui page to be moved
20384                           p_source_page_id         IN  NUMBER,      -- ui page_id of the page being moved
20385                           p_source_ui_def_id       IN NUMBER,         -- ui_def_id of UI
20386                           p_target_ui_def_id  IN NUMBER,        -- ui_def_id of target UI
20387                           x_new_jrad_doc    OUT NOCOPY VARCHAR2,-- jrad_doc of moved UI page doc
20388                           x_return_status  OUT NOCOPY VARCHAR2,-- status string
20389                           x_msg_count      OUT NOCOPY NUMBER,  -- number of error messages
20390                           x_msg_data       OUT NOCOPY VARCHAR2 -- string which contains error messages
20391                           ) IS
20392   BEGIN
20393   x_new_jrad_doc := SUBSTR(p_source_jrad_doc, 1, INSTR(p_source_jrad_doc, 'ui' || p_source_ui_def_id ) + 2 + LENGTH(p_source_ui_def_id ));
20394   x_new_jrad_doc := REPLACE(x_new_jrad_doc, to_char(p_source_ui_def_id), to_char(p_target_ui_def_id))  || 'Page_' || TO_CHAR(p_source_page_id);
20395   copy_JRAD_Document(p_source_jrad_doc, x_new_jrad_doc, x_return_status, x_msg_count, x_msg_data);
20396   --delete the original document
20397     BEGIN
20398       jdr_docbuilder.deleteDocument(p_source_jrad_doc);
20399       NULL;
20400     EXCEPTION
20401       WHEN OTHERS THEN
20402         DEBUG('delete_UIXML_Page() : '||SQLERRM);
20403     END;
20404   END move_JRAD_Document;
20405 
20406   --
20407   -- This procedure copies subtree of Local UI Template identified by ui_def_id=p_source_ui_def_id,
20408   -- template_id=p_source_template_id and element_id=p_source_element_id to a new place identified by
20409   -- ui_def_id=p_target_ui_def_id, template_id=p_target_template_id and
20410   -- parent_element_id=p_target_parent_element_id.
20411   --
20412   PROCEDURE copy_Local_Template_Elem(p_source_ui_def_id       IN NUMBER,         -- ui_def_id of UI
20413                                      p_source_template_id    IN NUMBER,          -- template_id of
20414                                                                                  -- Local UI Template which needs
20415                                                                                  -- to be copied
20416                                      p_source_element_id     IN VARCHAR2,
20417                                      p_target_ui_def_id      IN NUMBER,          -- ui_def_id of UI
20418                                      p_target_template_id    IN NUMBER,          -- template_id of
20419                                                                                  -- Local UI Template which needs
20420                                                                                  -- to be copied
20421                                      p_target_parent_element_id IN VARCHAR2,
20422                                      x_new_element_id OUT NOCOPY VARCHAR2,       -- template_id of
20423                                                                                  -- Local UI Template which needs
20424                                                                                  -- to be copied
20425                                      x_return_status  OUT NOCOPY VARCHAR2,-- status string
20426                                      x_msg_count      OUT NOCOPY NUMBER,  -- number of error messages
20427                                      x_msg_data       OUT NOCOPY VARCHAR2 -- string which contains error messages
20428                                      ) IS
20429 
20430     l_source_xmldoc            xmldom.DOMDocument;
20431     l_target_xmldoc            xmldom.DOMDocument;
20432     l_source_xml_node          xmldom.DOMNode;
20433     l_xml_uicont_node          xmldom.DOMNode;
20434     l_xml_new_node             xmldom.DOMNode;
20435     l_target_xml_node          xmldom.DOMNode;
20436     l_new_xml_root_node        xmldom.DOMNode;
20437     l_out_xml_node             xmldom.DOMNode;
20438     l_target_uicont_xml_node   xmldom.DOMNode;
20439     l_xml_temp_node            xmldom.DOMNode;
20440     l_stacklayout_node            xmldom.DOMNode;
20441     l_stacklayout_uicont_xml_node xmldom.DOMNode;
20442     l_source_jrad_doc          CZ_UI_PAGES.jrad_doc%TYPE;
20443     l_target_jrad_doc          CZ_UI_PAGES.jrad_doc%TYPE;
20444     l_needs_to_be_unlocked     BOOLEAN;
20445   BEGIN
20446 
20447     --
20448     -- lock source UI Template
20449     --
20450     lock_UI_Template( p_source_template_id, p_source_ui_def_id, l_needs_to_be_unlocked );
20451 
20452     --
20453     -- initialize FND variables/packages
20454     --
20455     Initialize(x_return_status,x_msg_count,x_msg_data);
20456 
20457     SELECT jrad_doc INTO l_source_jrad_doc FROM CZ_UI_TEMPLATES
20458     WHERE ui_def_id=p_source_ui_def_id AND
20459           template_id=p_source_template_id;
20460 
20461     SELECT jrad_doc INTO l_target_jrad_doc FROM CZ_UI_TEMPLATES
20462     WHERE ui_def_id=p_target_ui_def_id AND
20463           template_id=p_target_template_id;
20464 
20465     --
20466     -- open XML parser
20467     --
20468     Open_Parser();
20469 
20470     --
20471     -- create UI Template in JRAD repository
20472     --
20473     l_source_xmldoc := parse_JRAD_Document(p_doc_full_name => l_source_jrad_doc);
20474 
20475     IF xmldom.isNull(l_source_xmldoc) THEN
20476       add_Error_Message(p_message_name => 'CZ_WRONG_UI_TEMPLATE',
20477                         p_token_name   => 'UI_TEMPLATE',
20478                         p_token_value  => l_source_jrad_doc,
20479                         p_fatal_error  => TRUE);
20480       RAISE WRONG_UI_TEMPLATE;
20481     END IF;
20482 
20483     --
20484     -- create UI Template in JRAD repository
20485     --
20486     l_target_xmldoc := parse_JRAD_Document(p_doc_full_name => l_target_jrad_doc);
20487 
20488     IF xmldom.isNull(l_target_xmldoc) THEN
20489       add_Error_Message(p_message_name => 'CZ_WRONG_UI_TEMPLATE',
20490                         p_token_name   => 'UI_TEMPLATE',
20491                         p_token_value  => l_target_jrad_doc,
20492                         p_fatal_error  => TRUE);
20493       RAISE WRONG_UI_TEMPLATE;
20494     END IF;
20495 
20496     l_source_xml_node := find_XML_Node_By_Attribute(p_subtree_doc     => l_source_xmldoc,
20497                                                     p_attribute_name  => G_ID_ATTRIBUTE,
20498                                                     p_attribute_value => p_source_element_id);
20499 
20500     IF p_target_parent_element_id IS NULL THEN
20501       l_target_xml_node := xmldom.makeNode(xmldom.getDocumentElement(l_target_xmldoc));
20502     ELSE
20503       l_target_xml_node := find_XML_Node_By_Attribute(p_subtree_doc     => l_target_xmldoc,
20504                                                       p_attribute_name  => G_ID_ATTRIBUTE,
20505                                                       p_attribute_value => p_target_parent_element_id);
20506     END IF;
20507 
20508     l_target_uicont_xml_node := getUIContents(l_target_xml_node, G_YES_FLAG);
20509 
20510     IF xmldom.IsNull(l_target_uicont_xml_node) THEN
20511       l_xml_temp_node := xmldom.makeNode(xmldom.createElement(l_target_xmldoc, 'ui:contents'));
20512       l_target_uicont_xml_node := xmldom.appendChild(l_target_xml_node,
20513                                                      l_xml_temp_node);
20514     END IF;
20515 
20516     --
20517     -- returns cloned DOM subtree
20518     --
20519     -- l_new_xml_root_node := xmldom.cloneNode(l_source_xml_node, TRUE);
20520     l_new_xml_root_node := cloneNode(l_source_xml_node, l_target_uicont_xml_node);
20521 
20522     x_new_element_id := get_Element_Id();
20523 
20524     set_Attribute(l_new_xml_root_node,
20525                   G_ID_ATTRIBUTE,
20526                   x_new_element_id);
20527 
20528     copy_User_Attributes(p_xml_node               => l_new_xml_root_node,
20529                          p_source_ui_def_id       => p_source_ui_def_id,
20530                          p_target_ui_def_id       => p_target_ui_def_id,
20531                          p_source_template_id     => p_source_template_id,
20532                          p_target_template_id     => p_target_template_id);
20533 
20534     IF xmldom.IsNull(l_target_uicont_xml_node) AND xmldom.getNodeName(l_target_xml_node)<>'ui:case' THEN
20535       l_xml_new_node := xmldom.makeNode(xmldom.createElement(l_target_xmldoc, 'ui:contents'));
20536 
20537       l_xml_uicont_node := xmldom.appendChild(l_target_xml_node,
20538                                               l_xml_new_node);
20539 
20540       l_out_xml_node := xmldom.appendChild(l_xml_uicont_node,
20541                                            l_new_xml_root_node);
20542 
20543     ELSIF xmldom.IsNull(l_target_uicont_xml_node) AND  xmldom.getNodeName(l_target_xml_node)='ui:case' THEN
20544       l_stacklayout_node := findChildXMLTag(l_target_xml_node, 'oa:stackLayout');
20545       l_stacklayout_uicont_xml_node := getUIContents(l_stacklayout_node, G_YES_FLAG);
20546       IF xmldom.IsNull(l_stacklayout_uicont_xml_node) THEN
20547 
20548         l_xml_new_node := xmldom.makeNode(xmldom.createElement(l_target_xmldoc, 'ui:contents'));
20549         l_xml_uicont_node := xmldom.appendChild(l_stacklayout_node,
20550                                               l_xml_new_node);
20551 
20552         l_out_xml_node := xmldom.appendChild(l_xml_uicont_node,
20553                                              l_new_xml_root_node);
20554 
20555       ELSE
20556         l_out_xml_node := xmldom.appendChild(l_stacklayout_uicont_xml_node,
20557                                              l_new_xml_root_node);
20558       END IF;
20559 
20560     ELSE
20561       l_out_xml_node := xmldom.appendChild(l_target_uicont_xml_node,
20562                                            l_new_xml_root_node);
20563 
20564     END IF;
20565 
20566     refresh_Templ_Ref_Counts(l_target_xmldoc, p_target_ui_def_id, p_target_template_id);
20567 
20568     Save_Document(p_xml_doc   => l_target_xmldoc,
20569                   p_doc_name  => l_target_jrad_doc);
20570 
20571     --
20572     -- close XML parser
20573     --
20574     Close_Parser();
20575 
20576     /* *** changes for build 21p *** */
20577 
20578     UPDATE CZ_UI_TEMPLATES
20579        SET template_rev_nbr=NVL(template_rev_nbr,0)+1
20580      WHERE ui_def_id=p_target_ui_def_id AND template_id=p_target_template_id;
20581 
20582     --
20583     -- unlock source UI Template
20584     --
20585     unlock_UI_Template( p_source_template_id, p_source_ui_def_id, l_needs_to_be_unlocked );
20586 
20587   EXCEPTION
20588     WHEN WRONG_UI_TEMPLATE THEN
20589       x_return_status := FND_API.G_RET_STS_ERROR;
20590       x_msg_count     := g_MSG_COUNT;
20591       x_msg_data      := fnd_msg_pub.GET(g_MSG_COUNT,fnd_api.g_false);
20592       DEBUG(x_msg_data);
20593       --
20594       -- unlock source UI Template
20595       --
20596       unlock_UI_Template( p_source_template_id, p_source_ui_def_id, l_needs_to_be_unlocked );
20597 
20598     WHEN OTHERS THEN
20599       x_return_status := FND_API.G_RET_STS_ERROR;
20600       x_msg_count := 1;
20601       x_msg_data  := SUBSTR(DBMS_UTILITY.format_error_backtrace,1,4000);
20602       fnd_msg_pub.add_exc_msg('CZ_UIOA_PVT', 'copy_Local_Template_Elem', x_msg_data);
20603       DEBUG('copy_Local_Template_Elem() : '||x_msg_data);
20604       --
20605       -- unlock source UI Template
20606       --
20607       unlock_UI_Template( p_source_template_id, p_source_ui_def_id, l_needs_to_be_unlocked );
20608 
20609   END copy_Local_Template_Elem;
20610 
20611   --
20612   -- create UI Region from Template
20613   --
20614   PROCEDURE create_Region_From_Template (p_ui_def_id       IN NUMBER,   -- ui_def_id of UI
20615                                          p_template_id     IN NUMBER,   -- template_id of
20616                                                                         -- Local UI Template which needs
20617                                                                         -- to be copied
20618                                          p_template_ui_def_id    IN NUMBER,
20619                                          p_ui_page_id            IN NUMBER,
20620                                          p_parent_element_id     IN VARCHAR2,          -- ui_def_id of target UI
20621                                          x_new_element_id        OUT NOCOPY VARCHAR2, -- element_id of new UI region
20622                                          x_return_status  OUT NOCOPY VARCHAR2,-- status string
20623                                          x_msg_count      OUT NOCOPY NUMBER,  -- number of error messages
20624                                          x_msg_data       OUT NOCOPY VARCHAR2 -- string which contains error messages
20625                                          ) IS
20626 
20627     l_template_xmldoc         xmldom.DOMDocument;
20628     l_xmldoc                  xmldom.DOMDocument;
20629     l_template_root_xml_node  xmldom.DOMNode;
20630     l_parent_xml_node         xmldom.DOMNode;
20631     l_out_xml_node            xmldom.DOMNode;
20632     l_target_uicont_xml_node  xmldom.DOMNode;
20633     l_new_xml_root_node       xmldom.DOMNode;
20634     l_xml_node                xmldom.DOMNode;
20635 
20636     l_source_xml_node          xmldom.DOMNode;
20637     l_xml_uicont_node          xmldom.DOMNode;
20638     l_xml_new_node             xmldom.DOMNode;
20639     l_target_xml_node          xmldom.DOMNode;
20640     l_stacklayout_node            xmldom.DOMNode;
20641     l_stacklayout_uicont_xml_node xmldom.DOMNode;
20642 
20643     l_switcher_element_id     VARCHAR2(255);
20644     l_old_ui_element_id       VARCHAR2(255);
20645     l_new_ui_element_id       VARCHAR2(255);
20646     l_old_switcher_xml_id     VARCHAR2(255);
20647     l_user_attribute3_value   VARCHAR2(4000);
20648     l_switcher_casename       VARCHAR2(255);
20649     l_switcher_xml_id         VARCHAR2(255);
20650     l_uicase_name             VARCHAR2(255);
20651     l_child_nodes_tbl         xmldom.DOMNodeList;
20652     l_template_jrad_doc       CZ_UI_PAGES.jrad_doc%TYPE;
20653     l_jrad_doc                CZ_UI_PAGES.jrad_doc%TYPE;
20654     l_ui_node                 CZ_UI_PAGE_ELEMENTS%ROWTYPE;
20655     l_attribute_value         VARCHAR2(255);
20656     l_length                  NUMBER;
20657     l_needs_to_be_unlocked    BOOLEAN;
20658 
20659   BEGIN
20660 
20661     --
20662     -- lock source UI Template
20663     --
20664     lock_UI_Template( p_template_id, p_template_ui_def_id, l_needs_to_be_unlocked );
20665 
20666     --
20667     -- initialize FND variables/packages
20668     --
20669     Initialize(x_return_status,x_msg_count,x_msg_data);
20670 
20671     set_Local_UI_Context(p_ui_def_id);
20672 
20673     --
20674     -- get full JRAD path of the given UI template
20675     --
20676     SELECT jrad_doc INTO l_template_jrad_doc FROM CZ_UI_TEMPLATES
20677     WHERE ui_def_id=p_template_ui_def_id AND template_id=p_template_id;
20678 
20679     SELECT jrad_doc INTO l_jrad_doc FROM CZ_UI_PAGES a
20680     WHERE ui_def_id=p_ui_def_id AND page_id=p_ui_page_id;
20681 
20682 
20683     --
20684     -- open XML parser
20685     --
20686     Open_Parser();
20687 
20688     --
20689     -- create UI Template in JRAD repository
20690     --
20691     l_template_xmldoc := parse_JRAD_Document(p_doc_full_name => l_template_jrad_doc);
20692 
20693     IF xmldom.isNull(l_template_xmldoc) THEN
20694       add_Error_Message(p_message_name => 'CZ_WRONG_UI_TEMPLATE',
20695                         p_token_name   => 'UI_TEMPLATE',
20696                         p_token_value  => l_template_jrad_doc,
20697                         p_fatal_error  => TRUE);
20698       RAISE WRONG_UI_TEMPLATE;
20699     END IF;
20700 
20701     l_xmldoc := parse_JRAD_Document(p_doc_full_name => l_jrad_doc);
20702 
20703     IF xmldom.isNull(l_xmldoc) THEN
20704       add_Error_Message(p_message_name => 'CZ_WRONG_UI_TEMPLATE',
20705                         p_token_name   => 'UI_TEMPLATE',
20706                         p_token_value  => l_jrad_doc,
20707                         p_fatal_error  => TRUE);
20708       RAISE WRONG_UI_TEMPLATE;
20709     END IF;
20710 
20711     l_parent_xml_node := find_XML_Node_By_Attribute(p_subtree_doc     => l_xmldoc,
20712                                                     p_attribute_name  => G_ID_ATTRIBUTE,
20713                                                     p_attribute_value => p_parent_element_id);
20714 
20715     l_ui_node := find_Parent_UI_Element(p_xml_node   => l_parent_xml_node,
20716                                         p_ui_def_id  => p_ui_def_id,
20717                                         p_ui_page_id => p_ui_page_id);
20718 
20719     l_target_uicont_xml_node := getUIContents(l_parent_xml_node);
20720 
20721     l_template_root_xml_node :=xmldom.makeNode(xmldom.getDocumentElement(l_template_xmldoc));
20722 
20723     x_new_element_id := get_Element_Id();
20724 
20725     set_Attribute(l_template_root_xml_node,
20726                   G_ID_ATTRIBUTE,
20727                   x_new_element_id);
20728 
20729     handle_USER_ATTRIBUTE10(p_xml_root_node => l_template_root_xml_node,
20730                             p_ui_def_id     => p_ui_def_id,
20731                             p_ui_page_id    => p_ui_page_id,
20732                             p_ui_element_id => x_new_element_id);
20733 
20734     l_child_nodes_tbl := xmldom.getElementsByTagName(l_template_xmldoc, '*');
20735     l_length := xmldom.getLength(l_child_nodes_tbl);
20736     IF (l_length > 0) THEN
20737         FOR k IN 0..l_length-1
20738         LOOP
20739           --
20740           -- get next child DOM node
20741           --
20742           l_xml_node := xmldom.item(l_child_nodes_tbl, k);
20743 
20744           handle_UI_CASE_Id(l_xml_node);
20745 
20746           IF k > 0 THEN
20747             l_attribute_value := get_Attribute_Value(l_xml_node, G_ID_ATTRIBUTE);
20748 
20749             /*
20750             IF l_attribute_value IS NOT NULL THEN
20751               set_Attribute(xmldom.makeElement(l_xml_node),G_ID_ATTRIBUTE,l_attribute_value||'_'||x_new_element_id);
20752               --
20753               -- create a new copies for corresponding entities ( captions, rules ,... )
20754               --
20755               copy_Node_Related_Entities(p_ui_def_id   => p_ui_def_id,
20756                                          p_ui_page_id  => p_ui_page_id,
20757                                          p_xml_node    => l_xml_node);
20758             */
20759 	    l_parent_xml_node := xmldom.getParentNode(l_xml_node);
20760             IF l_attribute_value IS NOT NULL THEN
20761               --l_parent_xml_node := xmldom.getParentNode(l_xml_node);
20762 
20763               IF xmldom.getNodeName(l_xml_node)='ui:case' OR
20764                  ( NOT(xmldom.isNull(l_parent_xml_node)) AND xmldom.getNodeName(l_xml_node)='oa:stackLayout' AND
20765                    xmldom.getNodeName(l_parent_xml_node)='ui:case') THEN
20766 
20767                 l_switcher_element_id := find_Element_Id_Of_XMLTag(l_xml_node, 'oa:switcher');
20768 
20769                 l_old_ui_element_id := SUBSTR(l_attribute_value,1,INSTR(l_attribute_value, '_')-1);
20770 
20771                 l_new_ui_element_id := REPLACE(REPLACE(REPLACE(l_attribute_value,
20772                                                l_old_ui_element_id,
20773                                                l_switcher_element_id),'_czt','_czn'),'_czc','_czn');
20774                   set_Attribute(xmldom.makeElement(l_xml_node),
20775                                 G_ID_ATTRIBUTE,
20776                                 l_new_ui_element_id);
20777 
20778                 IF xmldom.getNodeName(l_parent_xml_node)='oa:switcher' THEN
20779                   l_switcher_xml_id := get_Attribute_Value(l_parent_xml_node, G_ID_ATTRIBUTE);
20780                   l_uicase_name     := get_Attribute_Value(l_xml_node, 'name');
20781                   set_Attribute(xmldom.makeElement(l_xml_node),
20782                                  'name',
20783                                   REPLACE(REPLACE(REPLACE(l_uicase_name,l_old_switcher_xml_id,l_switcher_xml_id),'_czt','_czn'),'_czc','_czn'));
20784                 END IF;
20785 	    --
20786             -- if current tag is <oa:stackLayout>
20787             -- then replace old id with new one
20788             --
20789 
20790 		IF (xmldom.getNodeName(l_xml_node)='oa:stackLayout' AND
20791 		    xmldom.getNodeName(l_parent_xml_node)='ui:case') AND l_attribute_value IS NOT NULL
20792 		THEN
20793                  set_Attribute(xmldom.makeElement(l_xml_node),
20794                             G_ID_ATTRIBUTE,
20795                            REPLACE(REPLACE(get_Attribute_Value(l_parent_xml_node, 'name'),'_czt','_czn'),'_czc','_czn'));
20796                 END IF;
20797               ELSE
20798                 set_Attribute(xmldom.makeElement(l_xml_node),G_ID_ATTRIBUTE,REPLACE(REPLACE(l_attribute_value,'_czt','_czn'),'_czc','_czn')||'_'||x_new_element_id);
20799                 IF xmldom.getNodeName(l_xml_node)='oa:switcher' THEN
20800                   l_old_switcher_xml_id := l_attribute_value;
20801                   l_user_attribute3_value := get_Attribute_Value(l_xml_node, G_USER_ATTRIBUTE3_NAME);
20802                   l_switcher_casename := get_User_Attribute(l_user_attribute3_value ,'switcherDefaultCaseName');
20803                   l_switcher_casename := REPLACE(l_switcher_casename,l_attribute_value, REPLACE(REPLACE(l_attribute_value,'_czt','_czn'),'_czc','_czn')||'_'||x_new_element_id);
20804                   set_User_Attribute(p_cz_attribute_name    => 'switcherDefaultCaseName',
20805                                      p_cz_attribute_value   => l_switcher_casename,
20806                                      px_xml_attribute_value => l_user_attribute3_value);
20807 
20808                   set_Attribute(l_xml_node,
20809                                 G_USER_ATTRIBUTE3_NAME,
20810                                 l_user_attribute3_value);
20811                 END IF; -- end of IF xmldom.getNodeName(l_xml_node)='oa:switcher'
20812               END IF; -- end of IF xmldom.getNodeName(l_xml_node)='ui:case'
20813               --
20814               -- create a new copies for corresponding entities ( captions, rules ,... )
20815               --
20816               copy_Node_Related_Entities(p_ui_def_id   => p_ui_def_id,
20817                                          p_ui_page_id  => p_ui_page_id,
20818                                          p_xml_node    => l_xml_node,
20819                                          p_source_ui_page_id =>0,
20820                                          p_source_ui_def_id =>p_template_ui_def_id);
20821 
20822          ELSE --of IF l_attribute_value IS NOT NULL
20823 
20824             --
20825             -- set value of user attribute "switcherDefaultCaseName" to new jrad id of <oa:switcher>
20826             --
20827 
20828              IF (xmldom.getNodeName(l_xml_node)='ui:case' AND xmldom.getNodeName(l_parent_xml_node)='oa:switcher')
20829 	     THEN
20830               l_switcher_xml_id := get_Attribute_Value(l_parent_xml_node, G_ID_ATTRIBUTE);
20831               l_uicase_name     :=  get_Attribute_Value(l_xml_node, 'name');
20832               set_Attribute(xmldom.makeElement(l_xml_node),
20833                             'name',
20834                             REPLACE(REPLACE(REPLACE(l_uicase_name,l_old_switcher_xml_id,l_switcher_xml_id),'_czt','_czn'),'_czc','_czn'));
20835 
20836               handle_UI_CASE_Id(l_xml_node);
20837             END IF;
20838 
20839             END IF; -- end of IF l_attribute_value IS NOT NULL
20840 
20841             --++++++ add template references ++++++
20842             add_Extends_Refs(p_xml_node  => l_xml_node,
20843                              p_ui_node   => l_ui_node);
20844 
20845           END IF; -- end  of IF k > 0
20846         END LOOP;
20847     END IF;
20848 
20849     --
20850     -- returns cloned DOM subtree
20851     --
20852     -- l_new_xml_root_node := xmldom.cloneNode(l_template_root_xml_node, TRUE);
20853     l_new_xml_root_node := cloneNode(l_template_root_xml_node, l_target_uicont_xml_node);
20854 
20855 
20856     IF xmldom.IsNull(l_target_uicont_xml_node) AND xmldom.getNodeName(l_parent_xml_node)<>'ui:case' THEN
20857       l_xml_new_node := xmldom.makeNode(xmldom.createElement(l_xmldoc, 'ui:contents'));
20858       l_xml_uicont_node := xmldom.appendChild(l_parent_xml_node,
20859                                               l_xml_new_node);
20860       l_out_xml_node := xmldom.appendChild(l_xml_uicont_node,
20861                                            l_new_xml_root_node);
20862 
20863     ELSIF xmldom.IsNull(l_target_uicont_xml_node) AND  xmldom.getNodeName(l_parent_xml_node)='ui:case' THEN
20864 
20865       l_stacklayout_node := findChildXMLTag(l_parent_xml_node, 'oa:stackLayout');
20866       l_stacklayout_uicont_xml_node := getUIContents(l_stacklayout_node, G_YES_FLAG);
20867       IF xmldom.IsNull(l_stacklayout_uicont_xml_node) THEN
20868 
20869         l_xml_new_node := xmldom.makeNode(xmldom.createElement(l_xmldoc, 'ui:contents'));
20870         l_xml_uicont_node := xmldom.appendChild(l_stacklayout_node,
20871                                               l_xml_new_node);
20872         l_out_xml_node := xmldom.appendChild(l_xml_uicont_node,
20873                                              l_new_xml_root_node);
20874 
20875       ELSE
20876         l_out_xml_node := xmldom.appendChild(l_stacklayout_uicont_xml_node,
20877                                              l_new_xml_root_node);
20878       END IF;
20879 
20880     ELSE
20881       l_out_xml_node := xmldom.appendChild(l_target_uicont_xml_node,
20882                                            l_new_xml_root_node);
20883 
20884     END IF;
20885 
20886     Save_Document(p_xml_doc   => l_xmldoc,
20887                   p_doc_name  => l_jrad_doc);
20888 
20889     --
20890     -- close XML parser
20891     --
20892     Close_Parser();
20893 
20894     UPDATE CZ_UI_PAGES
20895        SET page_rev_nbr=page_rev_nbr+1
20896      WHERE ui_def_id=p_ui_def_id AND
20897            page_id=p_ui_page_id;
20898 
20899     --
20900     -- unlock source UI Template
20901     --
20902     unlock_UI_Template( p_template_id, p_template_ui_def_id, l_needs_to_be_unlocked );
20903 
20904   EXCEPTION
20905     WHEN WRONG_UI_TEMPLATE THEN
20906       x_return_status := FND_API.G_RET_STS_ERROR;
20907       x_msg_count     := g_MSG_COUNT;
20908       x_msg_data      := fnd_msg_pub.GET(g_MSG_COUNT,fnd_api.g_false);
20909       DEBUG(x_msg_data);
20910       --
20911       -- unlock source UI Template
20912       --
20913       unlock_UI_Template( p_template_id, p_template_ui_def_id, l_needs_to_be_unlocked );
20914 
20915     WHEN OTHERS THEN
20916       x_return_status := FND_API.G_RET_STS_ERROR;
20917       x_msg_count := 1;
20918       x_msg_data  := SUBSTR(DBMS_UTILITY.format_error_backtrace,1,4000);
20919       fnd_msg_pub.add_exc_msg('CZ_UIOA_PVT', 'create_Region_From_Template', x_msg_data);
20920       DEBUG('create_Region_From_Template() : '||x_msg_data);
20921       --
20922       -- unlock source UI Template
20923       --
20924       unlock_UI_Template( p_template_id, p_template_ui_def_id, l_needs_to_be_unlocked );
20925 
20926   END create_Region_From_Template;
20927 
20928   PROCEDURE add_Template_To_Template (p_template_id                 IN NUMBER,
20929                                       p_template_ui_def_id          IN NUMBER,
20930                                       p_target_template_id          IN NUMBER,
20931                                       p_target_template_ui_def_id   IN NUMBER,
20932                                       p_parent_element_id           IN VARCHAR2,          -- ui_def_id of target UI
20933                                       x_new_element_id        OUT NOCOPY VARCHAR2, -- element_id of new UI region
20934                                       x_return_status  OUT NOCOPY VARCHAR2,-- status string
20935                                       x_msg_count      OUT NOCOPY NUMBER,  -- number of error messages
20936                                       x_msg_data       OUT NOCOPY VARCHAR2 -- string which contains error messages
20937                                       ) IS
20938 
20939     l_template_xmldoc         xmldom.DOMDocument;
20940     l_xmldoc                  xmldom.DOMDocument;
20941     l_template_root_xml_node  xmldom.DOMNode;
20942     l_parent_xml_node         xmldom.DOMNode;
20943     l_temp_parent_xml_node    xmldom.DOMNode;
20944     l_out_xml_node            xmldom.DOMNode;
20945     l_target_uicont_xml_node  xmldom.DOMNode;
20946     l_new_xml_root_node       xmldom.DOMNode;
20947     l_xml_node                xmldom.DOMNode;
20948     l_stacklayout_node        xmldom.DOMNode;
20949     l_xml_new_node            xmldom.DOMNode;
20950     l_xml_uicont_node         xmldom.DOMNode;
20951     l_stacklayout_uicont_xml_node xmldom.DOMNode;
20952     l_xml_switcher_id         VARCHAR2(255);
20953     l_switcher_element_id     VARCHAR2(255);
20954     l_old_ui_element_id       VARCHAR2(255);
20955     l_new_ui_element_id       VARCHAR2(255);
20956     l_user_attribute3_value   VARCHAR2(4000);
20957     l_switcher_casename       VARCHAR2(255);
20958     l_child_nodes_tbl         xmldom.DOMNodeList;
20959     l_template_jrad_doc        CZ_UI_PAGES.jrad_doc%TYPE;
20960     l_target_template_jrad_doc CZ_UI_PAGES.jrad_doc%TYPE;
20961     l_attribute_value         VARCHAR2(255);
20962     l_length                  NUMBER;
20963     l_needs_to_be_unlocked    BOOLEAN;
20964   BEGIN
20965 
20966     --
20967     -- lock source UI Template
20968     --
20969     lock_UI_Template( p_template_id, p_template_ui_def_id, l_needs_to_be_unlocked );
20970 
20971     --
20972     -- initialize FND variables/packages
20973     --
20974     Initialize(x_return_status,x_msg_count,x_msg_data);
20975 
20976     --
20977     -- get full JRAD path of the given UI template
20978     --
20979     SELECT jrad_doc INTO l_template_jrad_doc FROM CZ_UI_TEMPLATES
20980     WHERE ui_def_id=p_template_ui_def_id AND template_id=p_template_id;
20981 
20982     SELECT jrad_doc INTO l_target_template_jrad_doc FROM CZ_UI_TEMPLATES
20983     WHERE ui_def_id=p_target_template_ui_def_id AND template_id=p_target_template_id;
20984 
20985     --
20986     -- open XML parser
20987     --
20988     Open_Parser();
20989 
20990     --
20991     -- create UI Template in JRAD repository
20992     --
20993     l_template_xmldoc := parse_JRAD_Document(p_doc_full_name => l_template_jrad_doc);
20994 
20995     IF xmldom.isNull(l_template_xmldoc) THEN
20996       add_Error_Message(p_message_name => 'CZ_WRONG_UI_TEMPLATE',
20997                         p_token_name   => 'UI_TEMPLATE',
20998                         p_token_value  => l_template_jrad_doc,
20999                         p_fatal_error  => TRUE);
21000 
21001       RAISE WRONG_UI_TEMPLATE;
21002     END IF;
21003 
21004     l_xmldoc := parse_JRAD_Document(p_doc_full_name => l_target_template_jrad_doc);
21005 
21006     IF xmldom.isNull(l_xmldoc) THEN
21007       add_Error_Message(p_message_name => 'CZ_WRONG_UI_TEMPLATE',
21008                         p_token_name   => 'UI_TEMPLATE',
21009                         p_token_value  => l_template_jrad_doc,
21010                         p_fatal_error  => TRUE);
21011       RAISE WRONG_UI_TEMPLATE;
21012     END IF;
21013 
21014     IF p_parent_element_id IS NULL THEN
21015       l_parent_xml_node := xmldom.makeNode(xmldom.getDocumentElement(l_xmldoc));
21016     ELSE
21017       l_parent_xml_node := find_XML_Node_By_Attribute(p_subtree_doc     => l_xmldoc,
21018                                                       p_attribute_name  => G_ID_ATTRIBUTE,
21019                                                       p_attribute_value => p_parent_element_id);
21020     END IF;
21021 
21022     l_target_uicont_xml_node := getUIContents(l_parent_xml_node,G_YES_FLAG);
21023 
21024     l_template_root_xml_node := xmldom.makeNode(xmldom.getDocumentElement(l_template_xmldoc));
21025 
21026     x_new_element_id := get_Element_Id();
21027 
21028     l_new_ui_element_id := x_new_element_id;
21029 
21030     set_Attribute(l_template_root_xml_node,
21031                   G_ID_ATTRIBUTE,
21032                   x_new_element_id);
21033 
21034     l_child_nodes_tbl := xmldom.getElementsByTagName(l_template_xmldoc, '*');
21035     l_length := xmldom.getLength(l_child_nodes_tbl);
21036     IF (l_length > 0) THEN
21037         FOR k IN 0..l_length-1
21038         LOOP
21039           --
21040           -- get next child DOM node
21041           --
21042           l_xml_node := xmldom.item(l_child_nodes_tbl, k);
21043 
21044           l_attribute_value := get_Attribute_Value(l_xml_node, G_ID_ATTRIBUTE);
21045           l_new_ui_element_id := l_attribute_value||'_'||x_new_element_id;
21046 
21047           handle_Special_XMLCases(p_xml_node         => l_xml_node,
21048                                   p_old_xml_node_id  => l_attribute_value,
21049                                   p_new_xml_node_id  => l_new_ui_element_id,
21050                                   p_jrad_doc         => l_template_jrad_doc,
21051                                   px_xml_switcher_id => l_xml_switcher_id,
21052                                   p_inline_copy_mode => G_INLINE_COPY_TMPL);
21053 
21054 
21055           IF k > 0 THEN
21056 
21057             l_user_attribute3_value := get_Attribute_Value(l_xml_node, G_USER_ATTRIBUTE3_NAME);
21058 
21059             IF l_user_attribute3_value IS NOT NULL THEN
21060 
21061               handle_Template_Attributes
21062                   (px_user_attribute_value => l_user_attribute3_value,
21063                    p_new_element_id        => l_new_ui_element_id,
21064                    p_source_ui_def_id      => p_template_ui_def_id,
21065                    p_source_template_id    => p_template_id,
21066                    p_target_ui_def_id      => p_target_template_ui_def_id,
21067                    p_target_template_id    => p_target_template_id,
21068                    p_xml_node              => l_xml_node);
21069 
21070                  set_Attribute(l_xml_node,
21071                                G_USER_ATTRIBUTE3_NAME,
21072                                l_user_attribute3_value);
21073 
21074             END IF; -- end of IF l_attribute_value IS NOT NULL
21075 
21076           END IF; -- end  of IF k > 0
21077         END LOOP;
21078     END IF;
21079 
21080     --
21081     -- remove common attributes of container and subtree
21082     --
21083     remove_TopLevel_Attributes(l_template_root_xml_node);
21084 
21085 
21086     --
21087     -- returns cloned DOM subtree
21088     --
21089     -- l_new_xml_root_node := xmldom.cloneNode(l_template_root_xml_node, TRUE);
21090     l_new_xml_root_node := cloneNode(l_template_root_xml_node, l_parent_xml_node);
21091 
21092 
21093     IF xmldom.IsNull(l_target_uicont_xml_node) AND xmldom.getNodeName(l_parent_xml_node)<>'ui:case' THEN
21094       l_xml_new_node := xmldom.makeNode(xmldom.createElement(l_xmldoc, 'ui:contents'));
21095       l_xml_uicont_node := xmldom.appendChild(l_parent_xml_node,
21096                                               l_xml_new_node);
21097       l_out_xml_node := xmldom.appendChild(l_xml_uicont_node,
21098                                            l_new_xml_root_node);
21099     ELSIF xmldom.IsNull(l_target_uicont_xml_node) AND  xmldom.getNodeName(l_parent_xml_node)='ui:case' THEN
21100       l_stacklayout_node := findChildXMLTag(l_parent_xml_node, 'oa:stackLayout');
21101       l_stacklayout_uicont_xml_node := getUIContents(l_stacklayout_node, G_YES_FLAG);
21102       IF xmldom.IsNull(l_stacklayout_uicont_xml_node) THEN
21103 
21104         l_xml_new_node := xmldom.makeNode(xmldom.createElement(l_xmldoc, 'ui:contents'));
21105         l_xml_uicont_node := xmldom.appendChild(l_stacklayout_node,
21106                                               l_xml_new_node);
21107         l_out_xml_node := xmldom.appendChild(l_xml_uicont_node,
21108                                              l_new_xml_root_node);
21109 
21110       ELSE
21111         l_out_xml_node := xmldom.appendChild(l_stacklayout_uicont_xml_node,
21112                                              l_new_xml_root_node);
21113       END IF;
21114 
21115     ELSE
21116       l_out_xml_node := xmldom.appendChild(l_target_uicont_xml_node,
21117                                            l_new_xml_root_node);
21118     END IF;
21119 
21120     refresh_Templ_Ref_Counts(l_xmldoc, p_target_template_ui_def_id, p_target_template_id);
21121 
21122     Save_Document(p_xml_doc   => l_xmldoc,
21123                   p_doc_name  => l_target_template_jrad_doc);
21124 
21125     --
21126     -- close XML parser
21127     --
21128     Close_Parser();
21129 
21130     UPDATE CZ_UI_TEMPLATES
21131        SET template_rev_nbr=template_rev_nbr+1
21132      WHERE template_id=p_target_template_id AND
21133            ui_def_id=p_target_template_ui_def_id;
21134 
21135     --
21136     -- unlock source UI Template
21137     --
21138     unlock_UI_Template( p_template_id, p_template_ui_def_id, l_needs_to_be_unlocked );
21139 
21140   EXCEPTION
21141     WHEN WRONG_UI_TEMPLATE THEN
21142       x_return_status := FND_API.G_RET_STS_ERROR;
21143       x_msg_count     := g_MSG_COUNT;
21144       x_msg_data      := fnd_msg_pub.GET(g_MSG_COUNT,fnd_api.g_false);
21145       DEBUG(x_msg_data);
21146       --
21147       -- unlock source UI Template
21148       --
21149       unlock_UI_Template( p_template_id, p_template_ui_def_id, l_needs_to_be_unlocked );
21150 
21151     WHEN OTHERS THEN
21152       x_return_status := FND_API.G_RET_STS_ERROR;
21153       x_msg_count := 1;
21154       x_msg_data  := SUBSTR(DBMS_UTILITY.format_error_backtrace,1,4000);
21155       fnd_msg_pub.add_exc_msg('CZ_UIOA_PVT', 'add_Template_To_Template', x_msg_data);
21156       DEBUG('create_Region_From_Template() : '||x_msg_data);
21157       --
21158       -- unlock source UI Template
21159       --
21160       unlock_UI_Template( p_template_id, p_template_ui_def_id, l_needs_to_be_unlocked );
21161 
21162   END add_Template_To_Template;
21163 
21164   --
21165   -- create UI Region from Template
21166   -- This procedure works for both UI pages and UI templates
21167   -- Developer calls this procedure for converting UI template reference
21168   -- within either UI page or UI template
21169   -- If p_ui_def_id = 0 then this is a template case and template_id is passed to p_ui_page_id
21170   -- interface needs to be changed if we implement local UI templates, since the code uses ui_def_id = 0
21171   -- to tell when it is working with templates
21172   --
21173   PROCEDURE convert_Template_Reference  (p_ui_def_id      IN NUMBER,
21174                                          p_ui_page_id     IN NUMBER,
21175                                          p_element_id     IN VARCHAR2,
21176                                          x_return_status  OUT NOCOPY VARCHAR2,-- status string
21177                                          x_msg_count      OUT NOCOPY NUMBER,  -- number of error messages
21178                                          x_msg_data       OUT NOCOPY VARCHAR2 -- string which contains error messages
21179                                          ) IS
21180 
21181     l_template_xmldoc         xmldom.DOMDocument;
21182     l_xmldoc                  xmldom.DOMDocument;
21183     l_template_root_xml_node  xmldom.DOMNode;
21184     l_out_xml_node            xmldom.DOMNode;
21185     l_curr_parent_xml_node    xmldom.DOMNode;
21186     l_new_xml_root_node       xmldom.DOMNode;
21187     l_xml_node                xmldom.DOMNode;
21188     l_root_xml_node           xmldom.DOMNode;
21189     l_parent_xml_node         xmldom.DOMNode;
21190     l_child_nodes_tbl         xmldom.DOMNodeList;
21191     l_template_jrad_doc       CZ_UI_PAGES.jrad_doc%TYPE;
21192     l_jrad_doc                CZ_UI_PAGES.jrad_doc%TYPE;
21193     l_ui_node                 CZ_UI_PAGE_ELEMENTS%ROWTYPE;
21194     l_node_map_tbl            xmldom.DOMNamedNodeMap;
21195     l_node_attr               xmldom.DOMNode;
21196     l_prev_xml_node           xmldom.DOMNode;
21197     l_root_attr_names_tbl     varchar_tbl_type;
21198     l_root_attr_values_tbl    varchar_tbl_type;
21199 
21200     l_root_element_signature_id NUMBER;
21201     l_attr_value                VARCHAR2(32000);
21202     l_attribute_value           VARCHAR2(32000);
21203     l_user4_attribute_value     VARCHAR2(32000);
21204     l_new_id_attribute          VARCHAR2(32000);
21205     l_new_attribute_value       VARCHAR2(32000);
21206     l_switcher_element_id       VARCHAR2(4000);
21207     l_old_ui_element_id         VARCHAR2(4000);
21208     l_new_ui_element_id         VARCHAR2(4000);
21209     l_old_switcher_xml_id       VARCHAR2(4000);
21210     l_switcher_casename         VARCHAR2(4000);
21211     l_xml_node_name             VARCHAR2(4000);
21212     l_switcher_xml_id           VARCHAR2(4000);
21213     l_uicase_name               VARCHAR2(4000);
21214     l_hgrid_element_id          VARCHAR2(4000);
21215     l_ancestor_node             VARCHAR2(4000);
21216     l_user_attribute3_value     VARCHAR2(32000);
21217     l_extends_attribute         VARCHAR2(255);
21218     l_id_attribute              VARCHAR2(255);
21219     l_ref_template_id           NUMBER;
21220     l_target_ref_count          NUMBER;
21221     l_ref_count                 NUMBER;
21222     l_length                    NUMBER;
21223     l_index                     NUMBER;
21224 
21225   BEGIN
21226 
21227     set_Local_UI_Context(p_ui_def_id);
21228 
21229     --
21230     -- initialize FND variables/packages
21231     --
21232     Initialize(x_return_status,x_msg_count,x_msg_data);
21233 
21234     IF (p_ui_def_id=0) THEN
21235       SELECT jrad_doc INTO l_jrad_doc FROM CZ_UI_TEMPLATES
21236       WHERE template_id=p_ui_page_id AND ui_def_id=p_ui_def_id;
21237     ELSE
21238       SELECT jrad_doc INTO l_jrad_doc FROM CZ_UI_PAGES
21239       WHERE page_id=p_ui_page_id AND ui_def_id=p_ui_def_id;
21240 
21241     END IF;
21242 
21243     --
21244     -- open XML parser
21245     --
21246     Open_Parser();
21247 
21248     l_xmldoc := parse_JRAD_Document(p_doc_full_name => l_jrad_doc);
21249 
21250     IF xmldom.isNull(l_xmldoc) THEN
21251       add_Error_Message(p_message_name => 'CZ_WRONG_UI_TEMPLATE',
21252                         p_token_name   => 'UI_TEMPLATE',
21253                         p_token_value  => l_jrad_doc,
21254                         p_fatal_error  => TRUE);
21255       RAISE WRONG_UI_TEMPLATE;
21256     END IF;
21257 
21258     l_root_xml_node := find_XML_Node_By_Attribute(p_subtree_doc     => l_xmldoc,
21259                                                   p_attribute_name  => G_ID_ATTRIBUTE,
21260                                                   p_attribute_value => p_element_id);
21261 
21262     l_id_attribute      := get_Attribute_Value(l_root_xml_node,
21263                                                G_ID_ATTRIBUTE);
21264 
21265     IF p_ui_def_id<>0 THEN
21266 
21267       l_ui_node := find_Parent_UI_Element(p_xml_node   => l_root_xml_node,
21268                                           p_ui_def_id  => p_ui_def_id,
21269                                           p_ui_page_id => p_ui_page_id);
21270 
21271       IF l_ui_node.persistent_node_id IS NULL OR l_ui_node.persistent_node_id=0 THEN
21272         l_ui_node.element_id := l_ui_node.parent_element_id;
21273         UPDATE CZ_UI_PAGE_ELEMENTS
21274            SET deleted_flag=G_YES_FLAG
21275          WHERE ui_def_id=p_ui_def_id AND page_id=p_ui_page_id AND
21276                element_id=p_element_id;
21277       ELSE
21278         l_ui_node.element_id := p_element_id;
21279       END IF;
21280 
21281     END IF;
21282 
21283     l_new_id_attribute  := get_Element_Id();
21284 
21285     l_extends_attribute := get_Attribute_Value(l_root_xml_node,
21286                                                'extends');
21287     BEGIN
21288       SELECT template_id, jrad_doc, root_element_signature_id
21289         INTO l_ref_template_id, l_template_jrad_doc, l_root_element_signature_id
21290         FROM CZ_UI_TEMPLATES
21291       WHERE ui_def_id=p_ui_def_id AND jrad_doc=l_extends_attribute AND
21292             deleted_flag=G_NO_FLAG;
21293     EXCEPTION
21294       WHEN NO_DATA_FOUND THEN
21295         SELECT template_id, jrad_doc, root_element_signature_id
21296           INTO l_ref_template_id, l_template_jrad_doc, l_root_element_signature_id FROM CZ_UI_TEMPLATES
21297         WHERE ui_def_id=G_GLOBAL_TEMPLATES_UI_DEF_ID AND
21298               jrad_doc=l_extends_attribute AND
21299               deleted_flag=G_NO_FLAG;
21300     END;
21301 
21302 
21303     IF p_ui_def_id = 0 THEN
21304       SELECT ref_count
21305         INTO l_ref_count
21306         FROM CZ_UI_REF_TEMPLATES
21307       WHERE template_id=p_ui_page_id AND
21308             ref_template_id=l_ref_template_id AND
21309             deleted_flag=G_NO_FLAG;
21310 
21311       IF l_ref_count=1 THEN
21312         DELETE FROM CZ_UI_REF_TEMPLATES
21313          WHERE template_id=p_ui_page_id AND
21314                ref_template_id=l_ref_template_id AND
21315                deleted_flag=G_NO_FLAG;
21316       ELSIF l_ref_count>1 THEN
21317         UPDATE CZ_UI_REF_TEMPLATES
21318            SET ref_count = ref_count-1
21319          WHERE template_id=p_ui_page_id AND
21320                ref_template_id=l_ref_template_id AND
21321                deleted_flag=G_NO_FLAG;
21322       END IF;
21323 
21324       FOR reft IN (SELECT * FROM CZ_UI_REF_TEMPLATES
21325                     WHERE template_id=l_ref_template_id AND
21326                           deleted_flag=G_NO_FLAG)
21327       LOOP
21328 
21329         SELECT NVL(MAX(ref_count),0) INTO l_target_ref_count FROM CZ_UI_REF_TEMPLATES
21330          WHERE template_id=p_ui_page_id AND
21331                ref_template_id=reft.ref_template_id AND
21332                deleted_flag=G_NO_FLAG;
21333 
21334         IF l_target_ref_count=0 THEN
21335 
21336           INSERT INTO CZ_UI_REF_TEMPLATES
21337           (
21338           TEMPLATE_ID
21339           ,REF_TEMPLATE_ID
21340           ,DELETED_FLAG
21341           ,TEMPLATE_UI_DEF_ID
21342           ,REF_TEMPLATE_UI_DEF_ID
21343           ,SEEDED_FLAG
21344           ,REF_TEMPL_SEEDED_FLAG
21345           ,REF_COUNT
21346           )
21347           VALUES
21348           (
21349            p_ui_page_id
21350           ,reft.ref_template_id
21351           ,G_NO_FLAG
21352           ,p_ui_def_id
21353           ,reft.REF_TEMPLATE_UI_DEF_ID
21354           ,G_NO_FLAG
21355           ,reft.REF_TEMPL_SEEDED_FLAG
21356           ,reft.ref_count
21357           );
21358 
21359         ELSE
21360 
21361           UPDATE CZ_UI_REF_TEMPLATES
21362              SET ref_count=ref_count+l_target_ref_count
21363            WHERE template_id=p_ui_page_id AND
21364                  ref_template_id=reft.ref_template_id AND
21365                  deleted_flag=G_NO_FLAG;
21366 
21367         END IF;
21368 
21369       END LOOP;
21370 
21371     END IF;
21372 
21373 
21374     l_template_xmldoc := parse_JRAD_Document(p_doc_full_name => l_template_jrad_doc);
21375 
21376     IF xmldom.isNull(l_template_xmldoc) THEN
21377       add_Error_Message(p_message_name => 'CZ_WRONG_UI_TEMPLATE',
21378                         p_token_name   => 'UI_TEMPLATE',
21379                         p_token_value  => l_template_jrad_doc,
21380                         p_fatal_error  => TRUE);
21381       RAISE WRONG_UI_TEMPLATE;
21382     END IF;
21383 
21384     l_parent_xml_node := xmldom.getParentNode(l_root_xml_node);
21385     l_prev_xml_node := xmldom.getNextSibling(l_root_xml_node);
21386 
21387     l_template_root_xml_node :=xmldom.makeNode(xmldom.getDocumentElement(l_template_xmldoc));
21388 
21389     l_node_map_tbl := xmldom.getAttributes(l_root_xml_node);
21390     IF (xmldom.isNull(l_node_map_tbl) = FALSE) THEN
21391       l_length := xmldom.getLength(l_node_map_tbl);
21392       --
21393       -- loop through attributes
21394       --
21395       FOR i IN 0 .. l_length - 1
21396       LOOP
21397         l_node_attr := xmldom.item(l_node_map_tbl, i);
21398         IF xmldom.getNodeName(l_node_attr) <> 'extends' THEN
21399           l_index := l_root_attr_names_tbl.COUNT + 1;
21400           l_root_attr_names_tbl(l_index) := xmldom.getNodeName(l_node_attr);
21401           l_root_attr_values_tbl(l_index):= xmldom.getNodeValue(l_node_attr);
21402         END IF;
21403       END LOOP;
21404     END IF;
21405 
21406     l_child_nodes_tbl := xmldom.getElementsByTagName(l_template_xmldoc, '*');
21407     l_length := xmldom.getLength(l_child_nodes_tbl);
21408     IF (l_length > 0) THEN
21409         FOR k IN 0..l_length-1
21410         LOOP
21411           --
21412           -- get next child DOM node
21413           --
21414           l_xml_node := xmldom.item(l_child_nodes_tbl, k);
21415           l_curr_parent_xml_node := xmldom.getParentNode(l_xml_node);
21416 
21417           IF k > 0 THEN
21418 
21419             l_xml_node_name := xmldom.getNodeName(l_xml_node);
21420 
21421             l_attribute_value := get_Attribute_Value(l_xml_node, G_ID_ATTRIBUTE);
21422 
21423             IF l_attribute_value IS NOT NULL THEN --???
21424               l_new_attribute_value := handle_JRAD_Id(l_attribute_value,l_new_id_attribute);
21425               set_Attribute(xmldom.makeElement(l_xml_node),G_ID_ATTRIBUTE,REPLACE(REPLACE(l_new_attribute_value,'_czt','_czn'),'_czc','_czn'));
21426             END IF;
21427 
21428             l_ancestor_node := get_Attribute_Value(l_xml_node,
21429                                                    'ancestorNode');
21430             IF l_ancestor_node IS NOT NULL THEN
21431 
21432               l_hgrid_element_id := find_Element_Id_Of_XMLTag(l_xml_node, 'oa:tree');
21433               IF NOT(xmldom.IsNull(l_xml_node)) THEN
21434                 l_ancestor_node := l_jrad_doc||'.'||l_hgrid_element_id;
21435 
21436                 set_Attribute(l_xml_node,
21437                               'ancestorNode',
21438                               l_ancestor_node);
21439               END IF;
21440             END IF;
21441 
21442             --
21443             -- set value of user attribute "switcherDefaultCaseName" to new jrad id of <oa:switcher>
21444             --
21445             IF xmldom.getNodeName(l_xml_node)='oa:switcher' THEN
21446               l_old_switcher_xml_id := l_attribute_value;
21447               l_user_attribute3_value := get_Attribute_Value(l_xml_node, G_USER_ATTRIBUTE3_NAME);
21448               l_switcher_casename := get_User_Attribute(l_user_attribute3_value ,'switcherDefaultCaseName');
21449               l_switcher_casename := REPLACE(REPLACE(REPLACE(l_switcher_casename,l_attribute_value, l_new_attribute_value),'_czt','_czn'),'_czc','_czn');
21450               set_User_Attribute(p_cz_attribute_name    => 'switcherDefaultCaseName',
21451                                  p_cz_attribute_value   => l_switcher_casename,
21452                                  px_xml_attribute_value => l_user_attribute3_value);
21453 
21454               set_Attribute(l_xml_node,
21455                             G_USER_ATTRIBUTE3_NAME,
21456                             l_user_attribute3_value);
21457             END IF;
21458 
21459             --
21460             -- set value of attribute "name" of <ui:case> to id of parent <oa:switcher>
21461             --
21462             IF (l_xml_node_name='ui:case' AND xmldom.getNodeName(l_curr_parent_xml_node)='oa:switcher') THEN
21463               l_switcher_xml_id := get_Attribute_Value(l_curr_parent_xml_node, G_ID_ATTRIBUTE);
21464               l_uicase_name     :=  get_Attribute_Value(l_xml_node, 'name');
21465               set_Attribute(xmldom.makeElement(l_xml_node),
21466                             'name',
21467                             REPLACE(REPLACE(REPLACE(l_uicase_name,l_old_switcher_xml_id,l_switcher_xml_id),'_czt','_czn'),'_czc','_czn'));
21468               handle_UI_CASE_Id(l_xml_node);
21469             END IF;
21470 
21471             --
21472             -- if current tag is <oa:stackLayout>
21473             -- then replace old id with new one
21474             --
21475             IF (l_xml_node_name='oa:stackLayout' AND
21476                xmldom.getNodeName(l_curr_parent_xml_node)='ui:case') AND l_attribute_value IS NOT NULL THEN
21477               set_Attribute(xmldom.makeElement(l_xml_node),
21478                             G_ID_ATTRIBUTE,
21479                            REPLACE(REPLACE(get_Attribute_Value(l_curr_parent_xml_node, 'name'),'_czt','_czn'),'_czc','_czn'));
21480             END IF;
21481 
21482             IF l_attribute_value IS NOT NULL THEN
21483               --
21484               -- create a new copies for corresponding entities ( captions, rules ,... )
21485               --
21486               copy_Node_Related_Entities(p_ui_def_id   => p_ui_def_id,
21487                                          p_ui_page_id  => p_ui_page_id,
21488                                          p_xml_node    => l_xml_node,
21489                                          p_source_ui_page_id =>0,
21490                                          p_source_ui_def_id =>0);
21491             END IF;
21492 
21493             IF p_ui_def_id <> 0 THEN
21494               --++++++ add template references ++++++
21495               add_Extends_Refs(p_xml_node  => l_xml_node,
21496                                p_ui_node   => l_ui_node);
21497             END IF;
21498 
21499           END IF;  -- end of IF k > 0 THEN
21500         END LOOP;  -- end of FOR k IN 0..l_length-1
21501     END IF; -- end of IF (l_length > 0) THEN
21502 
21503     l_out_xml_node:=xmldom.removeChild(l_parent_xml_node,l_root_xml_node);
21504 
21505     --
21506     -- remove common attributes of container and subtree
21507     --
21508     remove_TopLevel_Attributes(l_template_root_xml_node);
21509 
21510     --
21511     -- returns cloned DOM subtree
21512     --
21513     --l_new_xml_root_node := xmldom.cloneNode(l_template_root_xml_node, TRUE);
21514     l_new_xml_root_node := cloneNode(l_template_root_xml_node, l_root_xml_node);
21515 
21516     l_out_xml_node := insert_before(l_parent_xml_node,l_new_xml_root_node,l_prev_xml_node);
21517 
21518 
21519     IF l_root_attr_names_tbl.COUNT > 0 THEN
21520       FOR i IN l_root_attr_names_tbl.First..l_root_attr_names_tbl.Last
21521       LOOP
21522         IF l_root_attr_names_tbl(i)=G_USER_ATTRIBUTE4_NAME THEN
21523            l_user4_attribute_value := l_root_attr_values_tbl(i);
21524            set_User_Attribute(p_cz_attribute_name    => 'elementType',
21525                               p_cz_attribute_value   => l_root_element_signature_id,
21526                               px_xml_attribute_value => l_user4_attribute_value);
21527            set_Attribute(l_out_xml_node, G_USER_ATTRIBUTE4_NAME, l_user4_attribute_value);
21528         ELSE
21529            set_Attribute(l_out_xml_node, l_root_attr_names_tbl(i), l_root_attr_values_tbl(i));
21530         END IF;
21531 
21532       END LOOP;
21533     END IF;
21534 
21535     handle_USER_ATTRIBUTE10(p_xml_root_node => l_out_xml_node,
21536                             p_ui_def_id     => p_ui_def_id,
21537                             p_ui_page_id    => p_ui_page_id,
21538                             p_ui_element_id => p_element_id);
21539 
21540 
21541     IF p_ui_def_id=0 THEN
21542       refresh_Templ_Ref_Counts(l_xmldoc, 0, p_ui_page_id);
21543     END IF;
21544 
21545     Save_Document(p_xml_doc   => l_xmldoc,
21546                   p_doc_name  => l_jrad_doc);
21547 
21548     --
21549     -- close XML parser
21550     --
21551     Close_Parser();
21552 
21553     if (p_ui_def_id=0)
21554     then
21555     UPDATE CZ_UI_TEMPLATES
21556        SET TEMPLATE_REV_NBR=TEMPLATE_REV_NBR+1
21557      WHERE ui_def_id=p_ui_def_id AND
21558            template_id=p_ui_page_id;
21559     else
21560     UPDATE CZ_UI_PAGES
21561        SET page_rev_nbr=page_rev_nbr+1
21562      WHERE ui_def_id=p_ui_def_id AND
21563            page_id=p_ui_page_id;
21564     end if;
21565 
21566   EXCEPTION
21567     WHEN WRONG_UI_TEMPLATE THEN
21568       x_return_status := FND_API.G_RET_STS_ERROR;
21569       x_msg_count     := g_MSG_COUNT;
21570       x_msg_data      := fnd_msg_pub.GET(g_MSG_COUNT,fnd_api.g_false);
21571       DEBUG(x_msg_data);
21572     WHEN OTHERS THEN
21573       x_return_status := FND_API.G_RET_STS_ERROR;
21574       x_msg_count := 1;
21575       x_msg_data  := SUBSTR(DBMS_UTILITY.format_error_backtrace,1,4000);
21576       fnd_msg_pub.add_exc_msg('CZ_UIOA_PVT', 'convert_Template_Reference', x_msg_data);
21577       DEBUG('convert_Template_Reference() : '||x_msg_data);
21578   END convert_Template_Reference;
21579 
21580   --
21581   -- check UI condition
21582   --
21583   PROCEDURE validate_UI_Condition(p_ui_def_id      IN NUMBER,
21584                                   p_rule_id        IN NUMBER,
21585                                   p_rule_type      IN NUMBER,
21586                                   p_page_id        IN NUMBER,
21587                                   p_element_id     IN VARCHAR2,
21588                                   p_is_parser_open IN VARCHAR2 DEFAULT NULL) IS
21589 
21590     l_element_path  VARCHAR2(32000);
21591     l_run_id        NUMBER;
21592 
21593   BEGIN
21594 
21595     CZ_DEVELOPER_UTILS_PVT.verify_special_rule(p_rule_id => p_rule_id,
21596                                                p_name    => NULL,
21597                                                x_run_id  => l_run_id);
21598 
21599     IF l_run_id > 0 THEN
21600       l_element_path := get_Element_XML_Path(p_ui_def_id      => p_ui_def_id,
21601                                              p_page_id        => p_page_id,
21602                                              p_element_id     => p_element_id,
21603                                              p_is_parser_open => p_is_parser_open);
21604 
21605       IF p_rule_type=33 AND l_element_path IS NOT NULL THEN
21606         add_Error_Message(p_message_name => 'CZ_DISP_COND_DEL_ND_ERROR',
21607                           p_token_name   => 'UIELEMENTPATH',
21608                           p_token_value  => l_element_path,
21609                           p_fatal_error  => TRUE);
21610       ELSIF p_rule_type=34 AND l_element_path IS NOT NULL THEN
21611         add_Error_Message(p_message_name => 'CZ_ENABLED_CONDITION_ERROR',
21612                           p_token_name   => 'UIELEMENTPATH',
21613                           p_token_value  => l_element_path,
21614                           p_fatal_error  => TRUE);
21615       ELSE
21616         NULL;
21617       END IF;
21618 
21619     END IF;
21620 
21621   END validate_UI_Condition;
21622 
21623   --
21624   -- check UI conditions
21625   --
21626   PROCEDURE validate_UI_Conditions(p_ui_def_id      IN NUMBER,
21627                                    p_is_parser_open IN VARCHAR2 DEFAULT NULL) IS
21628 
21629     l_element_id  CZ_UI_PAGE_ELEMENTS.element_id%TYPE;
21630     l_page_id     CZ_UI_PAGES.page_id%TYPE;
21631 
21632   BEGIN
21633     FOR i IN(SELECT rule_id,ui_page_id,ui_page_element_id,rule_type FROM CZ_RULES a
21634               WHERE ui_def_id=p_ui_def_id AND
21635                     deleted_flag=G_NO_FLAG AND disabled_flag=G_NO_FLAG)
21636     LOOP
21637 
21638       BEGIN
21639 
21640         IF i.ui_page_element_id IS NOT NULL AND i.ui_page_element_id<>'0' THEN
21641           SELECT element_id INTO l_element_id FROM CZ_UI_PAGE_ELEMENTS
21642            WHERE ui_def_id=p_ui_def_id AND page_id=i.ui_page_id AND
21643                  element_id=i.ui_page_element_id AND deleted_flag NOT IN(G_YES_FLAG,G_LIMBO_FLAG,G_MARK_TO_DELETE);
21644         ELSIF (i.ui_page_element_id IS NULL OR i.ui_page_element_id='0') AND
21645              (i.ui_page_id IS NOT NULL AND i.ui_page_id<>0) THEN
21646           SELECT element_id INTO l_element_id FROM CZ_UI_PAGE_ELEMENTS
21647            WHERE ui_def_id=p_ui_def_id AND page_id=i.ui_page_id AND
21648                  parent_element_id IS NULL AND deleted_flag NOT IN(G_YES_FLAG,G_LIMBO_FLAG,G_MARK_TO_DELETE) AND rownum<2;
21649           SELECT page_id INTO l_page_id FROM CZ_UI_PAGES
21650            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);
21651         END IF;
21652 
21653         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);
21654       EXCEPTION
21655         WHEN NO_DATA_FOUND THEN
21656           NULL; -- ignore corrupted UI rules
21657       END;
21658     END LOOP;
21659   END validate_UI_Conditions;
21660 
21661   --
21662   -- update UI Reference when target ui_def_id is changed
21663   -- ( it is called by Developer )
21664   --
21665   PROCEDURE update_UI_Reference
21666   (
21667    p_ui_def_id              IN NUMBER,
21668    p_ref_persistent_node_id IN NUMBER,
21669    p_new_target_ui_def_id   IN NUMBER,
21670    x_return_status          OUT NOCOPY VARCHAR2,-- status string
21671    x_msg_count              OUT NOCOPY NUMBER,  -- number of error messages
21672    x_msg_data               OUT NOCOPY VARCHAR2 -- string which contains error messages
21673   ) IS
21674 
21675     l_target_primary_navigation  CZ_UI_DEFS.primary_navigation%TYPE;
21676     l_target_page_set_id         CZ_UI_DEFS.page_set_id%TYPE;
21677     l_page_ref_id                CZ_UI_PAGE_REFS.page_ref_id%TYPE;
21678     l_ref_pagebase_path          CZ_UI_PAGE_REFS.target_path%TYPE;
21679     l_seq_nbr                    CZ_UI_PAGE_REFS.seq_nbr%TYPE;
21680     l_reference_name             CZ_UI_PAGE_REFS.name%TYPE;
21681     l_ref_parent_persist_node_id NUMBER;
21682     l_ref_ps_node_id             NUMBER;
21683     l_ref_parent_id              NUMBER;
21684     l_page_set_type              NUMBER;
21685     l_expl_node_id               NUMBER;
21686     l_node_depth                 NUMBER;
21687     l_old_child_ui_def_id        NUMBER;
21688 
21689   BEGIN
21690 
21691     --
21692     -- initialize FND variables/packages
21693     --
21694     Initialize(x_return_status,x_msg_count,x_msg_data);
21695 
21696     --
21697     -- get primary_navigation, page_set_id of target UI
21698     --
21699     SELECT primary_navigation, page_set_id
21700       INTO l_target_primary_navigation, l_target_page_set_id
21701       FROM CZ_UI_DEFS
21702      WHERE ui_def_id=p_new_target_ui_def_id;
21703 
21704     IF l_target_primary_navigation <> G_MODEL_TREE_MENU THEN
21705 
21706       --
21707       -- if target primary_navigation <> G_MODEL_TREE_MENU ( Dynamic Tree Menu )
21708       -- then delete a corresponding CZ_UI_PAGE_REFS record from source UI
21709       -- ( CZ_UI_PAGE_REFS.target_persistent_node_id=p_ref_persistent_node_id )
21710       --
21711       UPDATE CZ_UI_PAGE_REFS
21712          SET deleted_flag=G_YES_FLAG
21713        WHERE ui_def_id=p_ui_def_id AND
21714              target_persistent_node_id=p_ref_persistent_node_id AND
21715              deleted_flag=G_NO_FLAG;
21716 
21717     ELSE -- if target primary_navigation = G_MODEL_TREE_MENU
21718 
21719       set_UI_Context(p_ui_def_id);
21720 
21721       SELECT ps_node_id,parent_id,name
21722         INTO l_ref_ps_node_id,l_ref_parent_id,l_reference_name
21723         FROM CZ_PS_NODES
21724        WHERE devl_project_id=g_UI_Context.devl_project_id AND
21725              persistent_node_id=p_ref_persistent_node_id AND
21726              deleted_flag=G_NO_FLAG;
21727 
21728       SELECT persistent_node_id
21729         INTO l_ref_parent_persist_node_id
21730         FROM CZ_PS_NODES
21731        WHERE ps_node_id=l_ref_parent_id AND
21732              deleted_flag=G_NO_FLAG;
21733 
21734       FOR i IN(SELECT page_ref_id,node_depth,page_set_id,page_ref_type, seq_nbr
21735                  FROM CZ_UI_PAGE_REFS
21736                 WHERE ui_def_id=p_ui_def_id AND
21737                       target_persistent_node_id=l_ref_parent_persist_node_id AND
21738                       page_ref_type=G_MODEL_TREE_MENU AND
21739                       deleted_flag=G_NO_FLAG)
21740       LOOP
21741 	-- skip this block for Root record in split pages case to avoid data corruption
21742  	IF (i.node_depth <> 0 AND i.seq_nbr <> 0) THEN
21743           --
21744           -- update target_ui_def_id and target_page_set_id
21745           --
21746           UPDATE CZ_UI_PAGE_REFS
21747              SET target_ui_def_id=p_new_target_ui_def_id,
21748                  target_page_set_id=l_target_page_set_id
21749            WHERE ui_def_id=p_ui_def_id AND
21750                  parent_page_ref_id=i.page_ref_id AND
21751                  target_persistent_node_id=p_ref_persistent_node_id AND
21752                  deleted_flag=G_NO_FLAG;
21753 
21754           IF SQL%ROWCOUNT=0 THEN
21755 
21756             l_page_ref_id := allocateId('CZ_UI_PAGE_REFS_S');
21757 
21758             l_ref_pagebase_path := get_Page_Path(l_ref_ps_node_id, i.page_set_id);
21759 
21760             SELECT NVL(MAX(seq_nbr),0)+1 INTO l_seq_nbr
21761               FROM CZ_UI_PAGE_REFS
21762              WHERE ui_def_id=p_ui_def_id AND
21763                    parent_page_ref_id=i.page_ref_id AND
21764                    deleted_flag=G_NO_FLAG;
21765 
21766            SELECT MIN(model_ref_expl_id) INTO l_expl_node_id FROM CZ_MODEL_REF_EXPLS
21767             WHERE model_id=g_UI_Context.devl_project_id AND
21768                   referring_node_id=p_ref_persistent_node_id AND
21769                   deleted_flag=G_NO_FLAG;
21770 
21771             INSERT INTO CZ_UI_PAGE_REFS
21772               (ui_def_id,
21773                page_set_id,
21774                page_ref_id,
21775                parent_page_ref_id,
21776                seq_nbr,
21777                node_depth,
21778                condition_id,
21779                NAME,
21780                caption_source,
21781                target_persistent_node_id,
21782                target_path,
21783                target_ui_def_id,
21784                target_page_set_id,
21785                target_page_id,
21786                modified_flags,
21787                path_to_prev_page,
21788                path_to_next_page,
21789                page_ref_type,
21790                target_expl_node_id,
21791                caption_rule_id,
21792                deleted_flag)
21793              VALUES
21794                (p_ui_def_id,
21795                i.page_set_id,
21796                l_page_ref_id,
21797                i.page_ref_id,
21798                l_seq_nbr,
21799                i.node_depth+1,
21800                NULL,
21801                l_reference_name,
21802                G_DEFAULT_CAPTION_RULE_ID,
21803                p_ref_persistent_node_id,
21804                l_ref_pagebase_path,
21805                p_new_target_ui_def_id,
21806                l_target_page_set_id,
21807                NULL,
21808                0,
21809                NULL,
21810                NULL,
21811                i.page_ref_type,
21812                l_expl_node_id,
21813                NULL,
21814                G_NO_FLAG);
21815           END IF; --  end of IF SQL%ROWCOUNT=0
21816         END IF; -- end of IF i.node_depth<>0 and i.seq_nbr<>0
21817       END LOOP;
21818 
21819     END IF; -- end of IF l_target_primary_navigation <> G_MODEL_TREE_MENU
21820 
21821     -- handle page include region
21822     -- Note the link to the old target child ui is still there at this point
21823     SELECT ref_ui_def_id INTO l_old_child_ui_def_id
21824     FROM cz_ui_refs
21825     WHERE ui_def_id = p_ui_def_id AND ref_persistent_node_id = p_ref_persistent_node_id;
21826 
21827     UPDATE cz_ui_page_elements
21828     SET target_page_ui_def_id = NULL, target_page_id = NULL
21829     WHERE deleted_flag = '0' AND target_page_ui_def_id = l_old_child_ui_def_id AND
21830           target_page_id IN (SELECT page_id FROM cz_ui_pages
21831                              WHERE ui_def_id = l_old_child_ui_def_id AND deleted_flag = '0') AND
21832           element_signature_id = G_PAGE_INCL_REGION_SIGNATURE;
21833 
21834   EXCEPTION
21835     WHEN OTHERS THEN
21836       x_return_status := FND_API.G_RET_STS_ERROR;
21837       x_msg_count := 1;
21838       x_msg_data  := SUBSTR(DBMS_UTILITY.format_error_backtrace,1,4000);
21839       fnd_msg_pub.add_exc_msg('CZ_UIOA_PVT', 'update_UI_Reference', x_msg_data);
21840       DEBUG('update_UI_Reference() : '||x_msg_data);
21841 
21842   END update_UI_Reference;
21843 
21844   ------------------------------------------------------------------------------
21845   ------------- some procedures for fast access to UI Generation ---------------
21846   ------------------------------------------------------------------------------
21847 
21848   PROCEDURE cui(p_model_id           IN NUMBER,
21849                 p_master_template_id IN NUMBER DEFAULT NULL,
21850                 p_ui_name            IN VARCHAR2 DEFAULT NULL,
21851                 p_description        IN VARCHAR2 DEFAULT NULL,
21852                 p_show_all_nodes     IN VARCHAR2 DEFAULT NULL,
21853                 p_create_empty_ui    IN VARCHAR2 DEFAULT NULL,
21854                 p_handling_mode      IN VARCHAR2 DEFAULT NULL) IS
21855 
21856     l_ui_context    CZ_UI_DEFS%ROWTYPE;
21857     l_return_status VARCHAR2(255);
21858     l_msg_count     NUMBER;
21859     l_msg_data      VARCHAR2(255);
21860 
21861   BEGIN
21862 
21863     Initialize(l_return_status,l_msg_count,l_msg_data);
21864 
21865     g_Use_Cache := FALSE;
21866 
21867     --
21868     -- get UI context
21869     -- ( * also function get_UI_Context() inserts data for new UI into CZ_UI_DEFS table )
21870     --
21871     l_ui_context := create_UI_Context(p_model_id           => p_model_id,
21872                                       p_master_template_id => p_master_template_id,
21873                                       p_ui_name            => p_ui_name,
21874                                       p_description        => p_description,
21875                                       p_show_all_nodes     => p_show_all_nodes,
21876                                       p_create_empty_ui    => p_create_empty_ui);
21877 
21878     --
21879     -- generate a new UI for the current UI context
21880     --
21881     construct_UI(l_ui_context.ui_def_id, p_handling_mode);
21882 
21883     DEBUG('New UI has been generated : ui_def_id = '||TO_CHAR(l_ui_context.ui_def_id));
21884 
21885   END cui;
21886 
21887   PROCEDURE rui(p_ui_def_id     IN NUMBER,
21888                 p_handling_mode IN VARCHAR2 DEFAULT NULL) IS
21889 
21890     l_ui_context      CZ_UI_DEFS%ROWTYPE;
21891     l_return_status   VARCHAR2(255);
21892     l_msg_count       NUMBER;
21893     l_msg_data        VARCHAR2(255);
21894 
21895   BEGIN
21896 
21897     Initialize(l_return_status,l_msg_count,l_msg_data);
21898 
21899     --
21900     -- get UI context
21901     --
21902     l_ui_context := get_UI_Context(p_ui_def_id => p_ui_def_id);
21903 
21904     --
21905     -- refresh UI
21906     --
21907     construct_UI(p_ui_def_id, p_handling_mode);
21908 
21909     DEBUG('UI has been refreshed ...');
21910 
21911   END rui;
21912 
21913 BEGIN
21914   DECLARE
21915     l_status            VARCHAR2(255);
21916     l_industry          VARCHAR2(255);
21917     l_oracle_schema     VARCHAR2(255);
21918     l_ret               BOOLEAN;
21919   BEGIN
21920     l_ret := FND_INSTALLATION.GET_APP_INFO(APPLICATION_SHORT_NAME => 'CZ',
21921                                            STATUS                 => l_status,
21922                                            INDUSTRY               => l_industry,
21923                                            ORACLE_SCHEMA          => l_oracle_schema);
21924 
21925     g_UINodeINCREMENT   := get_Seq_Inc('CZ_UI_PAGE_ELEMENTS_S', l_oracle_schema);
21926     g_PageRefINCREMENT  := get_Seq_Inc('CZ_UI_PAGE_REFS_S', l_oracle_schema);
21927     g_PageINCREMENT     := get_Seq_Inc('CZ_UI_PAGES_S', l_oracle_schema);
21928     g_PageSetINCREMENT  := get_Seq_Inc('CZ_UI_PAGE_SETS_S', l_oracle_schema);
21929     g_UIActionINCREMENT := get_Seq_Inc('CZ_UI_ACTIONS_S', l_oracle_schema);
21930 
21931     SELECT template_name
21932       INTO G_DRILLDOWN_TEMPLATE_NAME
21933       FROM CZ_UI_TEMPLATES
21934      WHERE template_id=G_DRILLDOWN_BUTTON_TEMPLATE_ID AND
21935            ui_def_id=G_GLOBAL_TEMPLATES_UI_DEF_ID;
21936   END;
21937 
21938 END CZ_UIOA_PVT;