DBA Data[Home] [Help]

PACKAGE BODY: APPS.DOM_REPOS_MIG_PKG

Source


1 PACKAGE BODY DOM_REPOS_MIG_PKG AS
2 /* $Header: DOMVRUGB.pls 120.1 2006/09/04 16:17:27 rkhasa noship $ */
3 
4 PROCEDURE UPDATE_PATH (
5   p_short_name IN VARCHAR2,
6   p_domain IN VARCHAR2,
7   p_old_str IN varchar2,
8   p_new_str IN OUT NOCOPY varchar2,
9   x_msg IN OUT NOCOPY CLOB
10   --p_isNewTable IN NUMBER
11 ) IS
12     --str_count NUMBER ;
13     doc_id NUMBER;
14     old_path VARCHAR2(1000);
15     new_path VARCHAR2(1000);
16     repos_id NUMBER ;
17     dot_index NUMBER ;    --used to check if old string is of type firs.last
18     newline_char VARCHAR2(2) ;
19     old_dav_url varchar2(240);
20     old_service_url varchar2(240);
21     idx1 number;
22     idx2 number;
23     idx3 number;
24 
25 
26     --this cursor will give us document_id, old path, new path for each set of path replacement strings
27     CURSOR doc_cur( c_old_str VARCHAR2, c_new_str VARCHAR2) IS
28         SELECT document_id,  dm_folder_path old_path, REPLACE(dm_folder_path, c_old_str, c_new_str) new_path
29         FROM
30           FND_DOCUMENTS
31         WHERE
32           dm_folder_path IS NOT NULL AND dm_node= repos_id
33           AND dm_folder_path LIKE  c_old_str ||'%';
34 
35  -- this cursor takes care of folder paths with user names
36     CURSOR doc_cur2( c_old_str VARCHAR2, c_new_str VARCHAR2) IS
37         SELECT document_id,  dm_folder_path old_path,
38         REPLACE(
39             REPLACE(c_new_str, 'first.last',SUBSTR(dm_folder_path, 2, (INSTR(dm_folder_path, '-Public')-2))),
40             '<f>',UPPER(SUBSTR(dm_folder_path, 2, 1))) || SubStr(dm_folder_path, InStr(dm_folder_path, '-Public')+7) new_path
41         FROM
42           FND_DOCUMENTS
43         WHERE
44           dm_folder_path IS NOT NULL
45           AND dm_node= repos_id
46           AND dm_folder_path LIKE   '/%-Public%'
47           AND NOT dm_folder_path LIKE '/%/%-Public%'
48     union
49     SELECT document_id,  dm_folder_path old_path,
50         REPLACE(
51             REPLACE(c_new_str, 'first.last', SUBSTR(dm_folder_path, Length('/AllPublic/Users/Users-_/')+1, (INSTR(dm_folder_path, '-Public')-(Length('/AllPublic/Users/Users-_/')+1)))),
52             '<f>',
53             UPPER(SUBSTR(dm_folder_path, Length('/AllPublic/Users/Users-_/')+1, 1))
54         )|| SubStr(dm_folder_path, InStr(dm_folder_path, '-Public')+7)  new_path
55         FROM
56           FND_DOCUMENTS
57         WHERE
58           dm_folder_path IS NOT NULL
59           AND dm_node= repos_id
60           AND dm_folder_path LIKE   '/AllPublic/Users/Users-_/%-Public%'  ;
61 
62 
63     CURSOR doc_cur3(c_old_str VARCHAR2, c_new_str VARCHAR2 ) IS
64         SELECT doc.document_id,  doc.dm_folder_path old_path,
65         REPLACE(dm_folder_path,c_old_str, c_new_str )||'/'||REPLACE(tl.file_name,'-Public','') new_path
66         from
67             fnd_documents  doc,
68             fnd_documents_tl tl
69         where
70           doc.document_id = tl.document_id
71           AND dm_node = repos_id
72           AND tl.LANGUAGE ='US'
73           AND (dm_folder_path like c_old_str OR dm_folder_path like '/AllPublic/Users/Users-_')
74           AND tl.file_name LIKE '%-Public'
75         union
76          SELECT document_id,  dm_folder_path old_path,
77               REPLACE(
78               dm_folder_path,
79                 (c_old_str ||
80                 (SUBSTR(dm_folder_path, Length(c_old_str)+1,(InStr(SUBSTR(dm_folder_path, Length(c_old_str)),'-Public') -2)))||'-Public'
81                 ),
82                (c_new_str ||
83                 (SUBSTR(dm_folder_path, Length(c_old_str)+1,(InStr(SUBSTR(dm_folder_path, Length(c_old_str)),'-Public') -2)))
84                 ||(SUBSTR(dm_folder_path, Length(c_old_str)+1,(InStr(SUBSTR(dm_folder_path, Length(c_old_str)),'-Public') -2)))||'-Public'
85                )
86                 ) new_path
87         from
88             fnd_documents
89         where
90           dm_node = repos_id
91           AND dm_folder_path like c_old_str||'%-Public%'
92           AND not dm_folder_path like c_old_str||'/%/%-Public%' ;
93 
94     CURSOR doc_cur4(c_old_str VARCHAR2, c_new_str VARCHAR2 ) IS
95         SELECT doc.document_id,  doc.dm_folder_path old_path, REPLACE(dm_folder_path,c_old_str, c_new_str ) new_path, tl.file_name file_name
96         from
97             fnd_documents  doc,
98             fnd_documents_tl tl
99         where
100           doc.document_id = tl.document_id
101           AND dm_node = repos_id
102           AND tl.LANGUAGE ='US'
103           AND tl.file_name in ('Workspaces' ,'SharedFolders')
104           AND doc.dm_folder_path = c_old_str  ;
105     --end of declaration section
106 
107     BEGIN
108           --  newline_char := '\n' ;
109            select fnd_global.local_chr(10) into newline_char from dual ;
110 
111            SELECT id, DAV_URL, SERVICE_URL INTO repos_id,old_dav_url, old_service_url FROM dom_repositories WHERE short_name = p_short_name ;
112            x_msg := newline_char || newline_char ||' ######## Repository ID:' || repos_id ;
113 
114           --updating dav_url
115            select INSTR(old_dav_url, '/files/content') , INSTR(old_dav_url, '/content') , INSTR(old_dav_url, '/content/dav')  into idx1, idx2, idx3   from dual ;
116 
117            if(idx1 > 1 and  idx3 = 0 ) THEN
118                 UPDATE dom_repositories SET
119                     DAV_URL = REPLACE(DAV_URL,'files/content','content/dav')
120                 WHERE id = repos_id ;
121 
122            elsif(idx2 > 1 and  idx3 = 0 ) THEN
123                 UPDATE dom_repositories SET
124                     DAV_URL = REPLACE(DAV_URL,'content','content/dav')
125                 WHERE id = repos_id ;
126         end if ;
127         --updating service_url
128             select INSTR(old_service_url, '/files/app') , INSTR(old_service_url, '/app') , INSTR(old_service_url, '/content/app')  into idx1, idx2, idx3   from dual ;
129            if(idx1 > 1 and  idx3 = 0 ) THEN
130                 UPDATE dom_repositories SET
131                     SERVICE_URL = REPLACE(SERVICE_URL,'files/app','content/app')
132                 WHERE id = repos_id ;
133 
134            elsif(idx2 > 1 and  idx3 = 0 ) THEN
135                 UPDATE dom_repositories SET
136                     SERVICE_URL = REPLACE(SERVICE_URL,'app','content/app')
137                 WHERE id = repos_id ;
138         end if ;
139 
140         IF(p_old_str IS NOT NULL) THEN
141                     x_msg :=  x_msg ||newline_char || p_old_str || '  -- '|| p_new_str;
142                  SELECT REPLACE(p_new_str , 'DomainName', p_domain ) into p_new_str FROM dual ;
143 
144                  IF(p_old_str = '/AllPublic' ) THEN
145                     x_msg :=  x_msg ||newline_char || 'cursor 4' ;
146                     FOR l_row IN  doc_cur4(p_old_str, p_new_str)
147                      LOOP
148                         doc_id := l_row.document_id ;
149                         old_path:= l_row.old_path ;
150                         new_path:= l_row.new_path ;
151                         x_msg := x_msg || newline_char || 'DocID :' || doc_id || '-  ' || old_path || ' -> ' || new_path ;
152                         UPDATE fnd_documents SET  dm_folder_path = new_path
153                         WHERE document_id = doc_id ;
154                         --updating eng_attachment_changes
155                         UPDATE ENG_ATTACHMENT_CHANGES SET source_path = new_path , FILE_NAME = 'Libraries'
156                         WHERE SOURCE_DOCUMENT_ID = doc_id ;
157 
158                         --changing file name
159                         x_msg := x_msg || newline_char || 'DocID :' || doc_id || '   changing file_name  for language code US, from '|| l_row.file_name || ' to Libraries '  ;
160                         UPDATE fnd_documents_tl SET  file_name = 'Libraries'
161                         WHERE document_id = doc_id ;
162 
163                      END LOOP;
164                  End IF;
165 
166                  IF(p_old_str = '/AllPublic/Workspaces' or p_old_str = '/AllPublic/SharedFolders' ) THEN
167                     x_msg :=  x_msg ||newline_char || 'cursor 3' ;
168                     FOR l_row IN  doc_cur3(p_old_str, p_new_str)
169                      LOOP
170                         doc_id := l_row.document_id ;
171                         old_path:= l_row.old_path ;
172                         new_path:= l_row.new_path ;
173                         x_msg := x_msg || newline_char || 'DocID :' || doc_id || '-  ' || old_path || ' -> ' || new_path ;
174                         UPDATE fnd_documents SET  dm_folder_path = new_path
175                         WHERE document_id = doc_id ;
176                         --updating eng_attachment_changes
177                         UPDATE ENG_ATTACHMENT_CHANGES SET source_path = new_path
178                         WHERE SOURCE_DOCUMENT_ID = doc_id ;
179 
180                      END LOOP;
181 
182                  ELSIF( INSTR(p_old_str,'.') >0 ) THEN
183                     x_msg :=  x_msg ||newline_char || 'cursor 2' ;
184                     FOR l_row IN  doc_cur2(p_old_str, p_new_str)
185                      LOOP
186                         doc_id := l_row.document_id ;
187                         old_path:= l_row.old_path ;
188                         new_path:= l_row.new_path ;
189                         x_msg := x_msg || newline_char || 'DocID :' || doc_id || '-  ' || old_path || ' -> ' || new_path ;
190                         UPDATE fnd_documents SET  dm_folder_path = new_path
191                         WHERE document_id = doc_id ;
192                         --updating eng_attachment_changes
193                         UPDATE ENG_ATTACHMENT_CHANGES SET source_path = new_path
194                         WHERE SOURCE_DOCUMENT_ID = doc_id ;
195                      END LOOP;
196 
197                 ELSE
198                     x_msg :=  x_msg ||newline_char || 'cursor 1' ;
199                      FOR l_row IN  doc_cur(p_old_str, p_new_str)
200                      LOOP
201                         doc_id := l_row.document_id ;
202                         old_path:= l_row.old_path ;
203                         new_path:= l_row.new_path ;
204                         x_msg := x_msg || newline_char || 'DocID :' || doc_id || '-  ' || old_path || ' -> ' || new_path ;
205                         UPDATE fnd_documents SET  dm_folder_path = new_path
206                         WHERE document_id = doc_id ;
207                         --updating eng_attachment_changes
208                         UPDATE ENG_ATTACHMENT_CHANGES SET source_path = new_path
209                         WHERE SOURCE_DOCUMENT_ID = doc_id ;
210                      END LOOP;
211                 END IF;
212         END IF;
213             x_msg := x_msg || newline_char || '*** Folder path updated successfully  for path : ' || p_old_str || ' -> '|| p_new_str || '  ***' ;
214     EXCEPTION
215         WHEN NO_DATA_FOUND THEN
216               x_msg := x_msg || newline_char ||  '*** Script failed : Invalid repository short name ***' ;
217               x_msg := x_msg || newline_char || 'RollBack Done' ;
218               rollback;
219         WHEN OTHERS THEN
220           x_msg := x_msg || newline_char || newline_char ||' *** Script failed with error error is :' || SQLERRM || '***';
221           x_msg := x_msg || newline_char || 'RollBack Done' ;
222           rollback;
223     END;
224 
225 
226 
227 PROCEDURE GET_NEW_PATH (
228   p_short_name IN VARCHAR2,
229   p_domain IN VARCHAR2,
230   p_old_str IN varchar2,
231   p_new_str IN OUT NOCOPY varchar2,
232   p_doc_id IN Number,
233   x_msg IN OUT NOCOPY varchar2
234   --p_isNewTable IN NUMBER
235 ) IS
236     --str_count NUMBER ;
237     doc_id NUMBER;
238     old_path VARCHAR2(1000);
239     new_path VARCHAR2(1000);
240     repos_id NUMBER ;
241     dot_index NUMBER ;    --used to check if old string is of type firs.last
242     newline_char VARCHAR2(2) ;
243     old_dav_url varchar2(240);
244     old_service_url varchar2(240);
245     idx1 number;
246     idx2 number;
247     idx3 number;
248 
249 
250     --this cursor will give us document_id, old path, new path for each set of path replacement strings
254           FND_DOCUMENTS
251     CURSOR doc_cur( c_old_str VARCHAR2, c_new_str VARCHAR2) IS
252         SELECT document_id,  dm_folder_path old_path, REPLACE(dm_folder_path, c_old_str, c_new_str) new_path
253         FROM
255         WHERE
256           dm_folder_path IS NOT NULL AND dm_node= repos_id
257           AND dm_folder_path LIKE  c_old_str ||'%'
258           AND document_id = p_doc_id ;
259 
260  -- this cursor takes care of folder paths with user names
261     CURSOR doc_cur2( c_old_str VARCHAR2, c_new_str VARCHAR2) IS
262         SELECT document_id,  dm_folder_path old_path,
263         REPLACE(
264             REPLACE(c_new_str, 'first.last',SUBSTR(dm_folder_path, 2, (INSTR(dm_folder_path, '-Public')-2))),
265             '<f>',UPPER(SUBSTR(dm_folder_path, 2, 1))) || SubStr(dm_folder_path, InStr(dm_folder_path, '-Public')+7) new_path
266         FROM
267           FND_DOCUMENTS
268         WHERE
269           dm_folder_path IS NOT NULL
270           AND dm_node= repos_id
271           AND dm_folder_path LIKE   '/%-Public%'
272           AND NOT dm_folder_path LIKE '/%/%-Public%'
273           AND document_id = p_doc_id
274     union
275     SELECT document_id,  dm_folder_path old_path,
276         REPLACE(
277             REPLACE(c_new_str, 'first.last', SUBSTR(dm_folder_path, Length('/AllPublic/Users/Users-_/')+1, (INSTR(dm_folder_path, '-Public')-(Length('/AllPublic/Users/Users-_/')+1)))),
278             '<f>',
279             UPPER(SUBSTR(dm_folder_path, Length('/AllPublic/Users/Users-_/')+1, 1))
280         )|| SubStr(dm_folder_path, InStr(dm_folder_path, '-Public')+7)  new_path
281         FROM
282           FND_DOCUMENTS
283         WHERE
284           dm_folder_path IS NOT NULL
285           AND dm_node= repos_id
286           AND dm_folder_path LIKE   '/AllPublic/Users/Users-_/%-Public%'
287           AND document_id = p_doc_id ;
288 
289 
290     CURSOR doc_cur3(c_old_str VARCHAR2, c_new_str VARCHAR2 ) IS
291         SELECT doc.document_id,  doc.dm_folder_path old_path,
292         REPLACE(dm_folder_path,c_old_str, c_new_str )||'/'||REPLACE(tl.file_name,'-Public','') new_path
293         from
294             fnd_documents  doc,
295             fnd_documents_tl tl
296         where
297           doc.document_id = tl.document_id
298           AND dm_node = repos_id
299           AND tl.LANGUAGE ='US'
300           AND (dm_folder_path like c_old_str OR dm_folder_path like '/AllPublic/Users/Users-_')
301           AND tl.file_name LIKE '%-Public'
302           AND doc.document_id = p_doc_id
303         union
304          SELECT document_id,  dm_folder_path old_path,
305               REPLACE(
306               dm_folder_path,
307                 (c_old_str ||
308                 (SUBSTR(dm_folder_path, Length(c_old_str)+1,(InStr(SUBSTR(dm_folder_path, Length(c_old_str)),'-Public') -2)))||'-Public'
309                 ),
310                (c_new_str ||
311                 (SUBSTR(dm_folder_path, Length(c_old_str)+1,(InStr(SUBSTR(dm_folder_path, Length(c_old_str)),'-Public') -2)))
312                 ||(SUBSTR(dm_folder_path, Length(c_old_str)+1,(InStr(SUBSTR(dm_folder_path, Length(c_old_str)),'-Public') -2)))||'-Public'
313                )
314                 ) new_path
315         from
316             fnd_documents
317         where
318           dm_node = repos_id
319           AND dm_folder_path like c_old_str||'%-Public%'
320           AND not dm_folder_path like c_old_str||'/%/%-Public%'
321           AND document_id = p_doc_id ;
322 
323     CURSOR doc_cur4(c_old_str VARCHAR2, c_new_str VARCHAR2 ) IS
324         SELECT doc.document_id,  doc.dm_folder_path old_path, REPLACE(dm_folder_path,c_old_str, c_new_str ) new_path, tl.file_name file_name
325         from
326             fnd_documents  doc,
327             fnd_documents_tl tl
328         where
329           doc.document_id = tl.document_id
330           AND dm_node = repos_id
331           AND tl.LANGUAGE ='US'
332           AND tl.file_name in ('Workspaces' ,'SharedFolders')
333           AND doc.dm_folder_path = c_old_str
334           AND doc.document_id = p_doc_id ;
335     --end of declaration section
336 
337     BEGIN
338           --  newline_char := '\n' ;
339            select fnd_global.local_chr(10) into newline_char from dual ;
340 
341            SELECT id, DAV_URL, SERVICE_URL INTO repos_id,old_dav_url, old_service_url FROM dom_repositories WHERE short_name = p_short_name ;
342            x_msg := newline_char || newline_char ||' ######## Repository ID:' || repos_id ;
343 
344 
345         IF(p_old_str IS NOT NULL) THEN
346                     x_msg :=  x_msg ||newline_char || p_old_str || '  -- '|| p_new_str;
347                  SELECT REPLACE(p_new_str , 'DomainName', p_domain ) into p_new_str FROM dual ;
348 
349                  IF(p_old_str = '/AllPublic' ) THEN
350                     x_msg :=  x_msg ||newline_char || 'cursor 4' ;
351                     FOR l_row IN  doc_cur4(p_old_str, p_new_str)
352                      LOOP
353                         doc_id := l_row.document_id ;
354                         old_path:= l_row.old_path ;
355                         new_path:= l_row.new_path ;
356                         x_msg := x_msg || newline_char || 'DocID :' || doc_id || '-  ' || old_path || ' -> ' || new_path ;
357 
358                         --changing file name
359                         x_msg := x_msg || newline_char || 'DocID :' || doc_id || '   changing file_name  for language code US, from '|| l_row.file_name || ' to Libraries '  ;
360 
361                      END LOOP;
362                  End IF;
363 
364                  IF(p_old_str = '/AllPublic/Workspaces' or p_old_str = '/AllPublic/SharedFolders' ) THEN
365                     x_msg :=  x_msg ||newline_char || 'cursor 3' ;
366                     FOR l_row IN  doc_cur3(p_old_str, p_new_str)
367                      LOOP
368                         doc_id := l_row.document_id ;
369                         old_path:= l_row.old_path ;
370                         new_path:= l_row.new_path ;
371                         x_msg := x_msg || newline_char || 'DocID :' || doc_id || '-  ' || old_path || ' -> ' || new_path ;
372                      END LOOP;
373 
374                  ELSIF( INSTR(p_old_str,'.') >0 ) THEN
375                     x_msg :=  x_msg ||newline_char || 'cursor 2' ;
376                     FOR l_row IN  doc_cur2(p_old_str, p_new_str)
377                      LOOP
378                         doc_id := l_row.document_id ;
379                         old_path:= l_row.old_path ;
380                         new_path:= l_row.new_path ;
381                         x_msg := x_msg || newline_char || 'DocID :' || doc_id || '-  ' || old_path || ' -> ' || new_path ;
382                      END LOOP;
383 
384                 ELSE
385                     x_msg :=  x_msg ||newline_char || 'cursor 1' ;
386                      FOR l_row IN  doc_cur(p_old_str, p_new_str)
387                      LOOP
388                         doc_id := l_row.document_id ;
389                         old_path:= l_row.old_path ;
390                         new_path:= l_row.new_path ;
391                         x_msg := x_msg || newline_char || 'DocID :' || doc_id || '-  ' || old_path || ' -> ' || new_path ;
392                      END LOOP;
393                 END IF;
394         END IF;
395         x_msg := new_path ;
396             --x_msg := x_msg || newline_char || '*** Folder path updated successfully  for path : ' || p_old_str || ' -> '|| p_new_str || '  ***' ;
397     EXCEPTION
398         WHEN NO_DATA_FOUND THEN
399               x_msg := 'NO_DATA_FOUND' ;
400               rollback;
401         WHEN OTHERS THEN
402           x_msg := x_msg || newline_char || newline_char ||' *** Script failed with error error is :' || SQLERRM || '***';
403           rollback;
404     END;
405 
406 END DOM_REPOS_MIG_PKG;