Source code for DEMO.STARTUP

PACKAGE demo AS 
procedure startup; 
procedure header; 
procedure link; 
procedure jsp; 
procedure forward; 
procedure test(b varchar2,OK owa_image.point default owa_image.null_point); 
procedure test; 
procedure quotes; 
procedure redirect; 
procedure source; 
procedure source_xtp; 
procedure source_xtf; 
procedure source_m_tx; 
procedure notAuthorized; 
procedure flexible(name_array IN owa_util.ident_arr, 
                   value_array owa_util.ident_arr); 
url_server varchar2(2000); 
       /************************************************************************/ 
      /*  PER_PACKAGE PLSQL Agent Authorization callback function -           */ 
     /*     it is used when PLSQL Agent's authorization scheme is set to     */ 
    /*      GLOBAL or CUSTOM when there is no overriding OWA_CUSTOM package */ 
   /************************************************************************/ 
   function authorize return boolean; 
 
-- 
--  Examples of upload/download functionality 
        procedure process_upload( p_type in varchar2 default 'Insert', 
                                         p_doc in varchar2, 
                                         p_name in varchar2 ); 
        procedure process_download; 
 
        procedure show_form; 
-- 
        procedure show_all; 
 
-- 
        v_filename varchar2(255); 
-- 
 
END demo;

PACKAGE BODY demo AS 
 
procedure startup is 
begin 
        htp.htmlOpen; 
        htp.headOpen; 
        htp.title('DB Prism - IAS mod_plsql compatibility'); 
        htp.headClose; 
        htp.bodyOpen(cattributes=>'aLink=#008040 bgColor=#ffffff link=#0000ff text=#000000 vLink=#ff0000'); 
        htp.center(htf.header(3,owa_util.get_cgi_env('SERVER_SOFTWARE')||' Demo Page')); 
        htp.uListOpen; 
        htp.listItem(htf.anchor('demo.test','Input Form demo')|| 
                ' Simple Form Demo in PLSQL, post action in XML, showing CGI vars, cookies'); 
        htp.listItem(htf.anchor('!demo.flexible?a=1&b=2&a=3','Flexible parameter passing')|| 
                ' Simple Output form in PLSQL which receives parameters in a flexible form, showing CGI vars, cookies'); 
        htp.listItem(htf.anchor('demo.show_form','Upload demo in PLSQL (IAS 1.0 compatibility)')|| 
                ' Simple Upload/Download Demo in IAS support'); 
        htp.br; 
        htp.listItem(htf.anchor('m_tx.tx_start','Transactional demo in PLSQL and XML (shows new functionality of JTA jdbc drivers')|| 
                ' DB Prism transaction support by url demarcation'); 
        htp.br; 
        htp.listItem(htf.anchor('demo.source_xtp','Source of XTP (XML toolkit procedures)')|| 
                ' Need owa_util.showsource package'); 
        htp.listItem(htf.anchor('demo.source_xtf','Source of XTF (XML toolkit functions)')|| 
                ' Need owa_util.showsource package'); 
        htp.listItem(htf.anchor('demo.source','Source of this Demo ')|| 
                ' Need owa_util.showsource package'); 
        htp.listItem(htf.anchor('demo.source_m_tx','Source of Transactional Demo ')|| 
                ' Need owa_util.showsource package'); 
        htp.listItem(htf.anchor('show_open_sessions','Opened Sessions/transactions')|| 
                ' Need owa_util.showsource package'); 
        htp.listItem(htf.anchor('/examples/jsp/include/forward.jsp','JSP / DB Prism interaction through jsp:forward')|| 
                ' requires $PRISM_HOME/applications/dpls/dpls/examples-jsp/forward.jsp copy into $OC4J_HOME/examples/jsp/include directory'); 
        htp.listItem(htf.anchor('demo.quotes','Return a stock quotes xml message')|| 
                ' using xtp toolkit'); 
        htp.uListClose; 
        link; 
      htp.bodyClose; 
      htp.htmlClose; 
end startup; 
 
procedure header 
is 
begin 
        htp.htmlOpen; 
        htp.headOpen; 
        htp.title( 'DB Prism 2.0.0-alpha - mod_plsql demos' ); 
        htp.headClose; 
        htp.bodyOpen; 
end header; 
 
procedure source 
is 
begin 
   owa_util.showsource(cname=>'demo.startup'); 
end source; 
 
procedure source_xtp 
is 
begin 
   owa_util.showsource(cname=>'xtp.p'); 
end source_xtp; 
 
procedure source_xtf 
is 
begin 
   owa_util.showsource(cname=>'xtf.p'); 
end source_xtf; 
 
procedure source_m_tx 
is 
begin 
   owa_util.showsource(cname=>'m_tx.tx_start'); 
end source_m_tx; 
 
procedure link 
   is 
   begin 
        htp.br; 
        htp.tableOpen(cattributes=>'width="100%"'); 
        htp.tableRowOpen; 
        htp.p('<TD ALIGN=LEFT VALIGN=CENTER>'); 
        htp.anchor(url_server||'/dbprism/xmlj/DEMOj.startup','DB Prism/Cocoon2 Java Stored Procedures Demos'); 
        htp.br; 
        htp.anchor(url_server||'/dbprism/','Cocoon2 Demos Home Page'); 
        htp.br; 
        htp.anchor('mailto:mochoa@ieee.org','(C) Marcelo Fabián Ochoa'); 
        htp.p('</TD>'); 
        htp.p('<TD ALIGN=RIGHT VALIGN=CENTER>'); 
        htp.anchor('http://www.plenix.com/dbprism/',htf.img('../icons/onPrismSmall.gif',cattributes=>'border=0')); 
        htp.p('</TD>'); 
        htp.tableRowClose; 
        htp.tableClose; 
end; 
 
procedure jsp is 
        names owa_cookie.vc_arr; 
        vals owa_cookie.vc_arr; 
        num_vals integer; 
        i integer; 
begin 
        owa_util.print_cgi_env; 
        htp.hr; 
                 owa_cookie.get_all(names,vals,num_vals); 
                 for i in 1..num_vals loop 
                htp.p('Cookie =>'||names(i)||' value =>'||vals(i)); 
                htp.nl; 
        end loop; 
end jsp; 
 
procedure forward is 
begin 
    header; 
    jsp; 
    link; 
    htp.bodyClose; 
    htp.htmlClose; 
end forward; 
 
procedure redirect 
is 
begin 
    xtp.redirect_url('/index.html'); 
end redirect; 
 
procedure notAuthorized 
is 
begin 
    xtp.not_authorized('demo app'); 
end notAuthorized; 
 
procedure quotes 
is 
begin 
    xtp.header('text/xml',false); 
    xtp.setHeader('xx','yy'); 
    xtp.send('testy',22,expires=>sysdate+2,secure=>'yes'); 
    xtp.closeHeader; 
    xtp.prolog; 
    xtp.tagOpen('PORTFOLIO'); 
    for x in ( select * from quote ) 
        loop 
          xtp.tagOpen('QUOTE'); 
            xtp.tag('SYMBOL',x.symbol); 
            xtp.tag('PRICE',x.price); 
            xtp.tag('CHANGE',x.change); 
          xtp.tagClose('QUOTE'); 
        end loop; 
    xtp.tagClose('PORTFOLIO'); 
    xtp.epilog; 
end quotes; 
 
procedure test is 
      expires_gmt date; 
      expires date := sysdate-1; 
   begin 
      if (OWA_INIT.DBMS_SERVER_GMTDIFF is not NULL) 
      then 
         expires_gmt := expires-(OWA_INIT.DBMS_SERVER_GMTDIFF/24); 
      else 
         expires_gmt := new_time(expires,OWA_INIT.DBMS_SERVER_TIMEZONE,'GMT'); 
      end if; 
        owa_util.mime_header('text/html',false); 
        htp.print('Expires: '|| 
                    rtrim(to_char(expires_gmt,'Day'))|| 
                    to_char(expires_gmt,', DD-Mon-YY HH24:MI:SS')||' GMT'); 
        owa_util.http_header_close; 
        htp.htmlOpen; 
        htp.headOpen; 
        htp.title('Sample Form'); 
        htp.headClose; 
        htp.bodyOpen; 
        htp.header(1,'Sample Form'); 
        htp.formOpen('demo.test'); 
        htp.p('Please enter a Text String:');htp.formText('b');htp.nl; 
        htp.formImage('ok','../icons/ehome.gif'); 
        htp.formClose; 
        htp.bodyClose; 
        htp.htmlClose; 
end; 
 
procedure test(b varchar2,OK  owa_image.point default owa_image.null_point) is 
        names owa_cookie.vc_arr; 
        vals owa_cookie.vc_arr; 
        num_vals integer; 
        i integer; 
begin 
        htp.htmlOpen; 
        htp.headOpen; 
        htp.title('Sample Page-'||owa.auth_scheme); 
        htp.headClose; 
        htp.bodyOpen; 
        htp.header(2,b); 
        if OK is not null then 
                htp.p(owa_image.get_x(OK)); 
                htp.p(owa_image.get_y(OK)); 
        end if; 
        htp.hr; 
        owa_util.print_cgi_env; 
        htp.hr; 
                 owa_cookie.get_all(names,vals,num_vals); 
                 for i in 1..num_vals loop 
                htp.p('Cookie =>'||names(i)||' value =>'||vals(i)); 
                htp.nl; 
        end loop; 
        htp.bodyClose; 
        htp.htmlClose; 
end; 
 
procedure flexible(name_array IN owa_util.ident_arr, 
                   value_array owa_util.ident_arr) is 
begin 
        htp.htmlOpen; 
        htp.headOpen; 
        htp.title('Sample Page - of flexible parameters'); 
        htp.headClose; 
        htp.bodyOpen; 
        htp.hr; 
        owa_util.print_cgi_env; 
        htp.hr; 
        for i in name_array.first..name_array.last loop 
                htp.p('Name =>'||name_array(i)||' value =>'||value_array(i)); 
                htp.nl; 
        end loop; 
        htp.bodyClose; 
        htp.htmlClose; 
end; 
 
     /*********************************************************************/ 
    /*  PER_PACKAGE PLSQL Agent Authorization callback function -        */ 
   /*     It is used when PLSQL Agent's authorization scheme is set to  */ 
  /*      GLOBAL or CUSTOM when there is overriding OWA_CUSTOM package.*/ 
 /*       This is a default implementation. User should modify.       */ 
/*********************************************************************/ 
function authorize return boolean is 
begin 
      owa_sec.set_protection_realm('Demo Per Package Realm'); 
      if owa_sec.get_user_id() = 'scott' and owa_sec.get_password() = 'tiger' then 
         return true; 
      else 
         return false; 
      end if; 
end; 
 
function getfilepath return varchar2 
is 
        script_name             varchar2(255) default owa_util.get_cgi_env( 'SCRIPT_NAME' ); 
        path_info               varchar2(255) default owa_util.get_cgi_env( 'PATH_INFO' ); 
        pos                     number; 
begin 
        script_name := script_name || path_info; 
        pos := instr(script_name, 'docs'); 
        script_name :=  substr(script_name, pos+5, length(script_name)-pos-4); 
        return script_name; 
end getfilepath; 
 
procedure formopen 
is 
begin 
    htp.p( '<form action="demo.process_upload" method=post ' || 
           'enctype="multipart/form-data">' ); 
end formopen; 
-- 
 
function remove_invalid_chars( p_str in varchar2 ) return varchar2 
is 
        l_val   varchar2(255) default 
                'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_./'; 
 
        l_a_good_char   char(1) default substr( l_val, 1, 1 ); 
 
        l_invalid_chars varchar2(255) default 
                replace( translate( p_str, l_val, l_a_good_char ), l_a_good_char, '' ); 
 
        l_a_bad_char    char(1) default substr( l_invalid_chars, 1, 1 ); 
begin 
 
        if ( l_invalid_chars is NULL ) then 
                return p_str; 
        end if; 
 
        return replace( 
                translate( p_str, l_invalid_chars, 
                        rpad( l_a_bad_char, length(l_invalid_chars), l_a_bad_char )), 
                                        l_a_bad_char, '' ); 
end; 
 
 
procedure show_the_form 
is 
begin 
    if ( 1=0 ) then 
        htp.p( 'Sorry, Only Netscape 2.x/3.x can currently upload documents' ); 
    else 
                htp.p( 'Keep the name "simple". Do not include blanks or special 
                characters. A simple name like YourName.gif will do. Special 
                characters will mess up the URL when you try to retrieve it. 
                If you get a database error to the effect of "duplicate key", 
                then simply use the update button instead of insert. It just 
                means someone else has already used that name. Since this is a 
                demo, you can just overwrite their stuff. ' ); 
        htp.p( '<center>' ); 
        formOpen; 
                htp.p( 'What should the name be:' ); htp.br; 
                htp.formText( 'p_name' ); 
                htp.br; 
 
                htp.p( '<input type="file" name="p_doc" size="50" >' ); 
-- 
        htp.para; 
        htp.formSubmit( 'p_type', cvalue => 'Insert' ); 
        htp.formSubmit( 'p_type', cvalue => 'Update' ); 
        htp.formReset; 
-- 
        htp.formClose; 
        htp.p( '</center>' ); 
                htp.hr; 
                htp.anchor( 'demo.show_all', 
                                        'Wanna peek at what others have loaded...' ); 
    end if; 
end; 
 
 
procedure show_form 
is 
begin 
-- 
    header; 
    show_the_form; 
    link; 
    htp.bodyClose; 
    htp.htmlClose; 
-- 
end show_form; 
-- 
 
procedure process_upload( p_type in varchar2, p_doc in varchar2, p_name in varchar2 ) 
is 
        l_mode varchar2(25) default 'added to '; 
        l_name varchar2(255) default remove_invalid_chars( p_name ); 
        l_count number; 
begin 
    if ( owa_util.get_cgi_env('HTTP_CONTENT_TYPE') not like 
                'multipart/form-data;%' ) 
    then 
        raise_application_error( -20666, 
                                'Sorry, Only Netscape 2.x/3.x can currently upload documents' ); 
                return; 
        end if; 
 
        select count(*) into l_count from wpg_document where name = p_doc; 
 
        if ( l_count = 0 ) then 
                raise_application_error( -20666, 
                        'You uploaded a MISSING document...' ); 
        end if; 
 
        header; 
 
        if (l_name is NULL)  then 
          l_name := USER || substr(p_doc, instr(p_doc, '/')); 
        else 
          l_name := USER || '/' || l_name; 
        end if; 
 
        if ( p_type = 'Update' ) then 
                delete from wpg_document where name = l_name; 
                l_mode := 'updated in'; 
                if ( sql%rowcount > 1 ) then 
                        htp.bold( 'You have just deleted an old document' ); 
                        htp.br; 
                end if; 
        end if; 
        update wpg_document set name = l_name where name = p_doc; 
        commit; 
        htp.p( 'Document has been ' || l_mode || ' the system as ' ); 
        htp.anchor( 'docs/' || l_name, htf.bold(l_name) ); 
        htp.hr; 
        show_the_form; 
        link; 
        htp.bodyClose; 
        htp.htmlClose; 
end process_upload; 
 
procedure show_all 
is 
        sn              varchar2(255) default  'docs/'; 
begin 
        header; 
 
        htp.tableOpen( 'border' ); 
        htp.tableHeader( 'name' ); 
        htp.tableHeader( 'mime' ); 
        htp.tableHeader( 'size' ); 
        for x in ( select name, mime_type, doc_size 
                     from wpg_document where name > ' ' 
                    order by name ) 
        loop 
                htp.tableRowOpen; 
                htp.tableData( htf.anchor(  sn || x.name, x.name ) ); 
                htp.tableData( x.mime_type ); 
                htp.tableData( x.doc_size ); 
                htp.tableRowClose; 
        end loop; 
        htp.tableClose; 
        link; 
        htp.bodyClose; 
        htp.htmlClose; 
end show_all; 
 
 
procedure process_download 
is 
     v_filename varchar2(255); 
begin 
  v_filename := getfilepath; 
  select name into v_filename from wpg_document where UPPER(name) = UPPER(v_filename); 
  wpg_docload.download_file(v_filename); 
exception 
  when others then 
   v_filename := null; 
end process_download; 
 
BEGIN 
   -- where can I find xml stylesheets 
   url_server := owa_util.get_cgi_env('REQUEST_PROTOCOL')||'://'|| 
                 owa_util.get_cgi_env('SERVER_NAME')||':'|| 
                 owa_util.get_cgi_env('SERVER_PORT'); 
 
END demo;

This page was produced by the PL/SQL Web ToolKit on November 21, 2003 06:27 AM