**free
//  WATSONTR4R:  This is a demo of Watson's Language Translator V3
//               using input/output with JSON documents.
//
//               Utilizes the Db2 SQL HTTP and JSON functions
//
ctl-opt option(*srcstmt) dftactGrp(*no);

dcl-f WATSONTR1D workstn indds(dspf);

dcl-Ds dspf qualified;
   F3Exit ind pos(3);
end-Ds;

dcl-pr QCMDEXC extpgm;
  command char(200) const;
  length  packed(15: 5) const;
  igc char(3) const options(*nopass);
end-pr;

dcl-c UPPER 'ENESFRITPT';
dcl-c lower 'enesfritpt';

QCMDEXC('CHGJOB CCSID(37)': 200);

fromLang = 'en';
toLang   = 'es';

dou dspf.F3Exit = *on;

   exfmt screen1;
   if dspf.F3exit = *on;
      leave;
   endif;

   fromLang = %xlate(UPPER:lower:fromLang);
   toLang   = %xlate(UPPER:lower:toLang);
   toText = translate( fromLang: toLang: %trim(fromText) );

enddo;

*inlr = *on;
return;


dcl-proc translate;

   dcl-pi *n varchar(1000);
      fromLang char(2)       const;
      tolang   char(2)       const;
      fromText varchar(1000) const;
   end-pi;

   dcl-s userid   varchar(10);
   dcl-s password varchar(200);
   dcl-s hdr      varchar(200);
   dcl-s url      varchar(2000);
   dcl-s request  varchar(2000);
   dcl-s response varchar(5000);
   dcl-s retval   varchar(1000);

   exec sql select json_object(
                     'source' value :fromLang,
                     'target' value :toLang,
                     'text' value json_array(:fromText)
                   )
              into :request
              from SYSIBM.SYSDUMMY1;
   if %subst(sqlstt:1:2) <> '00' and %subst(sqlstt:1:2) <> '01';
      retval = '**ERROR CREATING: SQLSTT=' + sqlstt;
      return retval;
   endif;

   userid = 'apikey';
   password = '8OD0RY71zMwXjkNiBLzTN8i848R9wXMOmADjuvoKY2zw';

   url = 'https://' + userid + ':' + password + '@'
       + 'gateway.watsonplatform.net/language-translator/api'
       + '/v3/translate?version=2018-05-01';

   hdr = '<httpHeader>+
          <header name="Content-Type" value="application/json" />+
          </httpHeader>';

   exec SQL
     select SYSTOOLS.HTTPPOSTCLOB(:url, :hdr, :request)
       into :response
       from SYSIBM.SYSDUMMY1;

   if %subst(sqlstt:1:2) <> '00' and %subst(sqlstt:1:2) <> '01';
      retval = '**ERROR IN HTTP: SQLSTT=' + sqlstt;
      return retval;
   endif;

   exec SQL SELECT J."translation"
            into :retval
            from JSON_TABLE(:response, 'lax $'
                   COLUMNS(
                     "translation" VARCHAR(1000)
                       PATH 'lax $.translations[0].translation'
                   )
                  ) as J;

   if %subst(sqlstt:1:2) <> '00' and %subst(sqlstt:1:2) <> '01';
      retval = '** ERROR READING: SQLSTT=' + sqlstt;
      return retval;
   endif;

   return retval;

end-proc;
 
