DBA Data[Home] [Help]

PACKAGE BODY: APPS.IES_META_DATA_SOURCE

Source


1 PACKAGE BODY IES_META_DATA_SOURCE AS
2      /* $Header: iesmdscb.pls 115.3 2003/01/06 20:41:16 appldev noship $ */
3 
4     xml_clob    CLOB;
5     xml_buffer  VARCHAR2(32000);
6 
7     /************************ Private methods *******************************/
8 
9     -- **********************************************************************
10     --  API name    : convertNullString
11     --  Type        : Private
12     --  Function    : This function checks if the arg IS NULL and returns ''
13     --                if the arg is NULL.
14     -- **********************************************************************
15 
16     FUNCTION convertNullString(s VARCHAR2) RETURN VARCHAR2 IS
17     BEGIN
18 	IF (S IS NULL) THEN
19 	   RETURN '';
20 	ELSE
21 	   RETURN s;
22 	END IF;
23     END convertNullString;
24 
25     -- **********************************************************************
26     --  API name    : appendXMLClob
27     --  Type        : Private
28     --  Function    : This procedure appends XML Doc string to the CLOB,
29     --                Buffer used to cache the string until it reaches 32K
30     --                before appending to the CLOB.
31     -- **********************************************************************
32 
33     PROCEDURE appendXMLClob(buffer IN VARCHAR2) IS
34 
35     BEGIN
36         if (nvl(length(xml_buffer), 0) + length(buffer) <= 32000) then
37            xml_buffer := xml_buffer || buffer;
38         else
39 	   DBMS_LOB.WRITEAPPEND(xml_clob, LENGTH(xml_buffer), xml_buffer);
40            xml_buffer := buffer;
41         end if;
42 
43     END appendXMLClob;
44 
45 
46     -- **********************************************************************
47     --  API name    : convertObjPropertiesToXML
48     --  Type        : Private
49     --  Function    : This procedure queries the metadata tables and retrieves
50     --                properties of the given object and appends it to the
51     --                xml_clob
52     -- **********************************************************************
53 
54     PROCEDURE convertObjPropertiesToXML(objId IN NUMBER) IS
55        TYPE   obj_prop_type IS REF CURSOR;
56        obj_prop    obj_prop_type;
57 
58        key       VARCHAR2(256);
59        type_name VARCHAR2(256);
60        str_value VARCHAR2(2000);
61     BEGIN
62        OPEN obj_prop FOR
63           'SELECT a.name key,
64                   NVL(b.string_val, d.lookup_key) value,
65                   e.type_name
66 	     FROM ies_meta_properties a,
67 	          ies_meta_property_values b,
68 	          ies_meta_object_propvals c,
69 	          ies_meta_property_lookups d,
70 	          ies_meta_prop_datatypes e
71 	    WHERE c.object_id = :object_Id
72               AND c.propval_id = b.propval_id
73 	      AND b.property_id = a.property_id
74 	      AND a.datatype_id = e.type_id
75 	      AND b.lookup_id = d.prop_lookup_id (+)' USING objId;
76 
77 	  LOOP
78 	     FETCH obj_prop INTO key, str_value, type_name;
79 	     EXIT WHEN obj_prop%NOTFOUND;
80              appendXMLClob('    <Property NAME="'|| key || '" DATATYPE="' || type_name ||'"><![CDATA['||convertNullString(str_value)||']]></Property>"'||fnd_global.local_chr(10));
81           END LOOP;
82         CLOSE obj_prop;
83     END convertObjPropertiesToXML;
84 
85 
86     /************************ Public methods ********************************/
87 
88     -- **********************************************************************
89     --  API name    : getObjectAsXML
90     --  Type        : Public
91     --  Function    : This function returns CLOB object with XML Doc for the
92     --                given objId
93     -- **********************************************************************
94 
95     FUNCTION getObjectAsXML(objId IN NUMBER) return CLOB IS
96        len number;
97     BEGIN
98        xml_buffer := null;
99        xml_clob   := null;
100        DBMS_LOB.CreateTemporary(xml_clob, TRUE, DBMS_LOB.CALL);
101 
102        convertObjectToXML(objId);
103        DBMS_LOB.WRITEAPPEND(xml_clob, LENGTH(xml_buffer), xml_buffer);
104        --dbms_output.put_line('length is ' || to_char(dbms_lob.getlength(xml_clob)));
105        return xml_clob;
106     END getObjectAsXML;
107 
108     -- **********************************************************************
109     --  API name    : convertObjectToXML
110     --  Type        : Public
111     --  Function    : This procedure queries metadata tables for all the object
112     --                properties and creates a XML Document with these props
113     -- **********************************************************************
114 
115     PROCEDURE convertObjectToXML(objId IN NUMBER) IS
116        TYPE   obj_type IS REF CURSOR;
117        obj    obj_type;
118 
119        buffer      VARCHAR2(2000);
120        objName     VARCHAR2(256);
121        objType     VARCHAR2(256);
122        objectId    VARCHAR2(256);
123        root        VARCHAR2(256);
124        uid         VARCHAR2(256);
125     BEGIN
126         OPEN obj FOR
127            'SELECT a.object_id object_id,
128                    a.name name,
129                    b.type_name type_name,
130                    a.object_uid obj_uid
131               FROM ies_meta_objects a,
132                    ies_meta_object_types b
133   	     WHERE a.object_id = :obj_id
134                AND a.type_id = b.type_id' using objId;
135 
136 
137       LOOP
138          FETCH obj INTO objectId, objName, objType, uid;
139          EXIT WHEN obj%NOTFOUND;
140 
141       	  appendXMLClob('<JavaBean CLASS="' || objType  || '">'||fnd_global.local_chr(10));
142       	  appendXMLClob('  <Properties>'||fnd_global.local_chr(10));
143   	  appendXMLClob('    <Property NAME="name" DATATYPE="String"><![CDATA['||objName||']]></Property>'||fnd_global.local_chr(10));
144           appendXMLClob('    <Property NAME="objectId" DATATYPE="Integer"><![CDATA['||objectId||']]></Property>'||fnd_global.local_chr(10));
145           appendXMLClob('    <Property NAME="UID" DATATYPE="String"><![CDATA['||uid||']]></Property>'||fnd_global.local_chr(10));
146       END LOOP;
147       CLOSE obj;
148 
149 
150       IF (objectid IS NOT null) THEN
151   	  convertObjPropertiesToXML(objectId);
152   	  convertChildObjectsToXML(objectId);
153 
154   	  appendXMLClob('</Properties>'|| fnd_global.local_chr(10));
155   	  appendXMLClob('</JavaBean>'|| fnd_global.local_chr(10));
156       ELSE
157           appendXMLClob('<DummyTag><Dummy></Dummy></DummyTag>');
158       END IF;
159     END convertObjectToXML;
160 
161     -- **********************************************************************
162     --  API name    : convertChildObjectsToXML
163     --  Type        : Public
164     --  Function    : This procedure queries metadata tables for all the Child
165     --                objects and its object properties, creates a XML Document
166     --                with these props
167     -- **********************************************************************
168 
169     PROCEDURE convertChildObjectsToXML(objId IN NUMBER) IS
170       TYPE   child_obj_type  IS REF CURSOR;
171       child_obj child_obj_type;
172 
173       secObjId  NUMBER;
174       type_name VARCHAR2(256);
175       relId     NUMBER;
176     BEGIN
177       OPEN child_obj FOR
178         '  SELECT a.secondary_obj_id, c.type_name, c.list_relationship
179              FROM ies_meta_obj_relationships a,
180                   ies_meta_obj_relationships b,
181                   ies_meta_relationship_types c
182             WHERE a.deleted_status = 0
183               AND a.primary_obj_id = :object_id
184               AND a.primary_obj_id <> b.secondary_obj_id
185               AND a.objrel_id = b.objrel_id
186               AND a.type_id = c.type_id
187          ORDER BY a.obj_order, a.secondary_obj_id' using objId;
188 
189        LOOP
190           FETCH child_obj INTO secObjId, type_name, relId;
191           EXIT WHEN child_obj%NOTFOUND;
192 
193           if (relId = 1) then
194              appendXMLClob('<CCTPropertyList NAME="' || type_name || '">'|| fnd_global.local_chr(10));
195 	  elsif (relId = 2) then
196 	     appendXMLClob('<CCTPropertyMapList NAME="' || type_name || '">'|| fnd_global.local_chr(10));
197 	  end if;
198 
199           appendXMLClob('<Property NAME="' || type_name || '">'|| fnd_global.local_chr(10));
200           convertObjectToXML(secObjid);
201           appendXMLClob('</Property>'||fnd_global.local_chr(10));
202 
203           if (relId = 1) then
204              appendXMLClob('</CCTPropertyList>'|| fnd_global.local_chr(10));
205 	  elsif (relId = 2) then
206 	     appendXMLClob('</CCTPropertyMapList>'|| fnd_global.local_chr(10));
207 	  end if;
208 
209         END LOOP;
210         CLOSE child_obj;
211     END convertChildObjectsToXML;
212 
213 END IES_META_DATA_SOURCE;