Project

General

Profile

FwdHandler.java

Marian Edu, 04/19/2021 05:03 AM

Download (38.5 KB)

 
1
package com.goldencode.testcases;
2

    
3
import com.goldencode.p2j.util.*;
4
import com.goldencode.p2j.oo.web.WebHandler;
5
import com.goldencode.p2j.persist.*;
6
import com.goldencode.testcases.dmo._temp.*;
7
import com.goldencode.p2j.oo.web.WebResponseWriter;
8
import com.goldencode.p2j.oo.net.http.StatusCodeEnum;
9
import com.goldencode.p2j.oo.json.objectmodel.JsonObject;
10
import com.goldencode.p2j.oo.json.objectmodel.JsonArray;
11
import com.goldencode.p2j.oo.json.objectmodel.JsonConstruct;
12
import com.goldencode.p2j.oo.core.Memptr;
13
import com.goldencode.p2j.oo.json.objectmodel.ObjectModelParser;
14
import com.goldencode.testcases.dmo.fwd.*;
15
import com.goldencode.p2j.persist.lock.*;
16

    
17
import static com.goldencode.p2j.util.BlockManager.*;
18
import static com.goldencode.p2j.util.InternalEntry.Type;
19
import static com.goldencode.p2j.util.CompareOps.*;
20
import static com.goldencode.p2j.util.logical.*;
21
import static com.goldencode.p2j.util.TextOps.*;
22
import static com.goldencode.p2j.persist.TempTableBuilder.*;
23
import static com.goldencode.p2j.util.ErrorManager.*;
24

    
25
/**
26
 * Business logic (converted to Java from the 4GL source code
27
 * in FwdHandler.cls).
28
 */
29
@LegacyService(name = "oepas1.goldencode.web", type = "WEBHANDLER", paths = 
30
{
31
   @LegacyWebPath(path = "/fwdHandler/{id}/{value}", order = 1),
32
   @LegacyWebPath(path = "/fwdHandler/{id}", order = 2),
33
   @LegacyWebPath(path = "/fwdHandler", order = 3)
34
})
35
public class FwdHandler
36
extends WebHandler
37
{
38
   private Ttorderline_1_1.Buf ttorderline = TemporaryBuffer.define(FwdHandler.class, Ttorderline_1_1.Buf.class, "ttorderline", "ttOrderLine", false, false);
39

    
40
   private Ttorder_2_1.Buf ttorder = TemporaryBuffer.define(FwdHandler.class, Ttorder_2_1.Buf.class, "ttorder", "ttOrder", false, false);
41

    
42
   private Ttorderitem_1_1.Buf ttorderitem = TemporaryBuffer.define(FwdHandler.class, Ttorderitem_1_1.Buf.class, "ttorderitem", "ttOrderItem", false, false);
43

    
44
   private Ttordercustomer_1_1.Buf ttordercustomer = TemporaryBuffer.define(FwdHandler.class, Ttordercustomer_1_1.Buf.class, "ttordercustomer", "ttOrderCustomer", false, false);
45

    
46
   private Ttcustomer_1_1.Buf ttcustomer = TemporaryBuffer.define(FwdHandler.class, Ttcustomer_1_1.Buf.class, "ttcustomer", "ttCustomer", false, false);
47

    
48
   Customer.Buf customer = RecordBuffer.define(FwdHandler.class, Customer.Buf.class, "fwd", "customer", "customer");
49

    
50
   Order_.Buf order_ = RecordBuffer.define(FwdHandler.class, Order_.Buf.class, "fwd", "order_", "order");
51

    
52
   private final DataSet dsOrder = DataSetManager.define("dsOrder", false, false)
53
         .forBuffers(ttordercustomer, ttorderitem, ttorder, ttorderline)
54
         .addDataRelation("customerOrder", false, false, false, false, false, ttordercustomer, ttorder, new DataSet.FieldPair("customerNum", "customerNum"))
55
         .addDataRelation("Relation2", false, false, false, false, false, ttorderline, ttorderitem, new DataSet.FieldPair("itemNum", "itemNum"))
56
         .addDataRelation("Relation3", false, true, false, false, false, ttorder, ttorderline, new DataSet.FieldPair("orderNum", "orderNum"))
57
         .generate();
58

    
59
   public void __FwdHandler_execute__()
60
   {
61
      externalProcedure(FwdHandler.class, FwdHandler.this, new Block((Body) () -> 
62
      {
63
         RecordBuffer.openScope(ttcustomer, ttordercustomer, ttorderitem, ttorder, ttorderline);
64
         onBlockLevel(Condition.ERROR, Action.THROW);
65
         {
66
         }
67
      }));
68
   }
69

    
70
   @LegacySignature(type = Type.CONSTRUCTOR)
71
   public void __FwdHandler_constructor__()
72
   {
73
      internalProcedure(FwdHandler.class, this, "__FwdHandler_constructor__", new Block((Body) () -> 
74
      {
75
         __web_WebHandler_constructor__();
76
      }));
77
   }
78

    
79
   @LegacySignature(type = Type.METHOD, name = "HandleNotAllowedMethod", returns = "INTEGER", parameters = 
80
   {
81
      @LegacyParameter(name = "poRequest", type = "OBJECT", qualified = "openedge.web.iwebrequest", mode = "INPUT")
82
   })
83
   @Override
84
   protected integer handleNotAllowedMethod(final object<? extends com.goldencode.p2j.oo.web.IwebRequest> _poRequest)
85
   {
86
      object<? extends com.goldencode.p2j.oo.web.IwebRequest> poRequest = TypeFactory.initInput(_poRequest);
87
      
88
      return function(FwdHandler.class, this, "HandleNotAllowedMethod", integer.class, new Block((Body) () -> 
89
      {
90
         undoThrowTopLevel(ObjectOps.newInstance(com.goldencode.p2j.oo.lang.AppError.class, "I", "METHOD NOT IMPLEMENTED"));
91
      }));
92
   }
93

    
94
   @LegacySignature(type = Type.METHOD, name = "HandleNotImplemented", returns = "INTEGER", parameters = 
95
   {
96
      @LegacyParameter(name = "poRequest", type = "OBJECT", qualified = "openedge.web.iwebrequest", mode = "INPUT")
97
   })
98
   @Override
99
   protected integer handleNotImplemented(final object<? extends com.goldencode.p2j.oo.web.IwebRequest> _poRequest)
100
   {
101
      object<? extends com.goldencode.p2j.oo.web.IwebRequest> poRequest = TypeFactory.initInput(_poRequest);
102
      
103
      return function(FwdHandler.class, this, "HandleNotImplemented", integer.class, new Block((Body) () -> 
104
      {
105
         undoThrowTopLevel(ObjectOps.newInstance(com.goldencode.p2j.oo.lang.AppError.class, "I", "METHOD NOT IMPLEMENTED"));
106
      }));
107
   }
108

    
109
   @LegacySignature(type = Type.METHOD, name = "HandleGet", returns = "INTEGER", parameters = 
110
   {
111
      @LegacyParameter(name = "poRequest", type = "OBJECT", qualified = "openedge.web.iwebrequest", mode = "INPUT")
112
   })
113
   @Override
114
   /*------------------------------------------------------------------------------
115
               Purpose: Default handler for the HTTP GET method. The request being 
116
                        serviced and an optional status code is returned. A zero or 
117
                        null value means this method will deal with all errors.                                                               
118
               Notes:                                                                        
119
       ------------------------------------------------------------------------------*/   
120
   protected integer handleGet(final object<? extends com.goldencode.p2j.oo.web.IwebRequest> _poRequest)
121
   {
122
      object<? extends com.goldencode.p2j.oo.web.IwebRequest> poRequest = TypeFactory.initInput(_poRequest);
123
      object<? extends com.goldencode.p2j.oo.net.http.IhttpResponse> oResponse = TypeFactory.object(com.goldencode.p2j.oo.net.http.IhttpResponse.class);
124
      object<? extends WebResponseWriter> oWriter = TypeFactory.object(WebResponseWriter.class);
125
      object<? extends com.goldencode.p2j.oo.core.LegacyString> oBody = TypeFactory.object(com.goldencode.p2j.oo.core.LegacyString.class);
126
      integer pathId = TypeFactory.integer();
127
      character pathVal = TypeFactory.character();
128
      longchar jsonData = TypeFactory.longchar();
129
      
130
      /* The WebResponseWriter ensures that the status line and
131
                 all headers are writted out before the message body/entity. */
132
      return function(FwdHandler.class, this, "HandleGet", integer.class, new Block((Init) () -> 
133
      {
134
         ObjectOps.register(oBody, oWriter, oResponse);
135
      }, 
136
      (Body) () -> 
137
      {
138
         /* The WebResponse body is a wrapper around an entire HTTP response message.
139
                    It contains a status code and reason; headers; cookies and a message body.
140
                    
141
                    API-level doc for this and related classes can be found at
142
                    https://documentation.progress.com/output/oehttpclient/      */
143
         oResponse.assign(ObjectOps.newInstance(com.goldencode.p2j.oo.web.WebResponse.class));
144
         silent(() -> pathId.assign(new integer(poRequest.ref().getPathParameter(new character("id")))));
145
         silent(() -> pathVal.assign(poRequest.ref().getPathParameter(new character("value"))));
146
         oResponse.ref().setStatusCode(new integer(_or(isEqual(pathVal, ""), () -> isEqual(pathVal, "orders")) ? StatusCodeEnum.ok : StatusCodeEnum.badRequest));
147
         oResponse.ref().setContentType(new character("text/plain"));
148
         
149
         /* This body object can be a string or something else (JsonObject for instance) */
150
         if (_isGreaterThan(pathId, 0))
151
         {
152
            AdaptiveQuery query0 = new AdaptiveQuery();
153
            
154
            forEach("loopLabel0", new Block((Init) () -> 
155
            {
156
               RecordBuffer.openScope(customer);
157
               query0.initialize(customer, "customer.customernum = ?", null, "customer.customernum asc", new Object[]
158
               {
159
                  pathId
160
               }, LockType.NONE);
161
            }, 
162
            (Body) () -> 
163
            {
164
               query0.next();
165
               {
166
                  ttcustomer.create();
167
                  new BufferCopy(customer, ttcustomer).run(true);
168
                  ttordercustomer.create();
169
                  new BufferCopy(customer, ttordercustomer).run(true);
170
               }
171
            }));
172
            
173
            if ((asTempTable(ttcustomer).hasRecords()).booleanValue())
174
            {
175
               if (_isEqual(pathVal, "orders"))
176
               {
177
                  AdaptiveQuery query1 = new AdaptiveQuery();
178
                  
179
                  forEach("loopLabel1", new Block((Init) () -> 
180
                  {
181
                     RecordBuffer.openScope(order_);
182
                     query1.initialize(order_, "order_.customernum = ?", null, "order_.customernum asc", new Object[]
183
                     {
184
                        pathId
185
                     }, LockType.NONE);
186
                  }, 
187
                  (Body) () -> 
188
                  {
189
                     query1.next();
190
                     {
191
                        ttorder.create();
192
                        new BufferCopy(order_, ttorder).run(true);
193
                     }
194
                  }));
195
                  
196
                  dsOrder.writeJson(new TargetData("longchar", jsonData), new logical(true), new character("utf-8"));
197
                  oBody.assign(ObjectOps.newInstance(com.goldencode.p2j.oo.core.LegacyString.class, "I", jsonData));
198
               }
199
               else
200
               {
201
                  tempTable(ttcustomer).unwrapJsonData().writeJson(new TargetData("longchar", jsonData), new logical(true), new character("utf-8"));
202
                  oBody.assign(ObjectOps.newInstance(com.goldencode.p2j.oo.core.LegacyString.class, "I", jsonData));
203
               }
204
               
205
               oResponse.ref().setContentType(new character("application/json"));
206
            }
207
            else
208
            {
209
               oBody.assign(ObjectOps.newInstance(com.goldencode.p2j.oo.core.LegacyString.class, "I", substitute("Customer not found &1", pathId)));
210
               oResponse.ref().setStatusCode(new integer(StatusCodeEnum.notFound));
211
            }
212
         }
213
         else
214
         {
215
            oBody.assign(ObjectOps.newInstance(com.goldencode.p2j.oo.core.LegacyString.class, "I", getWebRequestInfo(poRequest).ref().getJsonText()));
216
            oResponse.ref().setContentType(new character("application/json"));
217
         }
218
         oResponse.ref().setEntity(new object(oBody));
219
         /* HTTP messages require a content type */
220
         oResponse.ref().setContentLength(new integer(oBody.ref().getSize()));
221
         oWriter.assign(ObjectOps.newInstance(WebResponseWriter.class, "I", oResponse));
222
         oWriter.ref().open();
223
         /* Finish writing the response message */
224
         oWriter.ref().close();
225
         /* A response of 0 means that this handler will build the entire response;
226
                    a non-zero value is mapped to a static handler in the webapp's /static/error folder.
227
                    The mappings are maintained in the webapps's WEB-INF/web.xml 
228
                    A predefined set of HTTP status codes is provided in the OpenEdge.Net.HTTP.StatusCodeEnum 
229
                    enumeration */
230
         returnNormal(0);
231
      }, 
232
      (Fini) () -> 
233
      {
234
         tempTable(ttcustomer).unwrapEmptyTempTable().deleteAll();
235
         tempTable(ttordercustomer).unwrapEmptyTempTable().deleteAll();
236
         tempTable(ttorder).unwrapEmptyTempTable().deleteAll();
237
      }));
238
   }
239

    
240
   @LegacySignature(type = Type.METHOD, name = "HandlePut", returns = "INTEGER", parameters = 
241
   {
242
      @LegacyParameter(name = "poRequest", type = "OBJECT", qualified = "openedge.web.iwebrequest", mode = "INPUT")
243
   })
244
   @Override
245
   /*------------------------------------------------------------------------------
246
             Purpose:                                                                
247
             Notes:                                                                        
248
     ------------------------------------------------------------------------------*/   
249
   protected integer handlePut(final object<? extends com.goldencode.p2j.oo.web.IwebRequest> _poRequest)
250
   {
251
      object<? extends com.goldencode.p2j.oo.web.IwebRequest> poRequest = TypeFactory.initInput(_poRequest);
252
      object<? extends com.goldencode.p2j.oo.net.http.IhttpResponse> oResponse = TypeFactory.object(com.goldencode.p2j.oo.net.http.IhttpResponse.class);
253
      object<? extends WebResponseWriter> oWriter = TypeFactory.object(WebResponseWriter.class);
254
      object<? extends com.goldencode.p2j.oo.core.LegacyString> oBody = TypeFactory.object(com.goldencode.p2j.oo.core.LegacyString.class);
255
      integer pathId = TypeFactory.integer();
256
      character pathVal = TypeFactory.character();
257
      longchar jsonData = TypeFactory.longchar();
258
      
259
      /* The WebResponseWriter ensures that the status line and
260
                 all headers are writted out before the message body/entity. */
261
      return function(FwdHandler.class, this, "HandlePut", integer.class, new Block((Init) () -> 
262
      {
263
         ObjectOps.register(oBody, oWriter, oResponse);
264
      }, 
265
      (Body) () -> 
266
      {
267
         /* The WebResponse body is a wrapper around an entire HTTP response message.
268
                    It contains a status code and reason; headers; cookies and a message body.
269
                    
270
                    API-level doc for this and related classes can be found at
271
                    https://documentation.progress.com/output/oehttpclient/      */
272
         oResponse.assign(ObjectOps.newInstance(com.goldencode.p2j.oo.web.WebResponse.class));
273
         silent(() -> pathId.assign(new integer(poRequest.ref().getPathParameter(new character("id")))));
274
         silent(() -> pathVal.assign(poRequest.ref().getPathParameter(new character("value"))));
275
         oResponse.ref().setStatusCode(new integer(_isNotEqual(pathId, 0) ? StatusCodeEnum.ok : StatusCodeEnum.badRequest));
276
         oResponse.ref().setContentType(new character("text/plain"));
277
         
278
         /* This body object can be a string or something else (JsonObject for instance) */
279
         if (_isGreaterThan(pathId, 0))
280
         {
281
            AdaptiveQuery query2 = new AdaptiveQuery();
282
            
283
            forEach("loopLabel2", new Block((Init) () -> 
284
            {
285
               RecordBuffer.openScope(customer);
286
               query2.initialize(customer, "customer.customernum = ?", null, "customer.customernum asc", new Object[]
287
               {
288
                  pathId
289
               }, LockType.NONE);
290
            }, 
291
            (Body) () -> 
292
            {
293
               //  if id exists we will update customer
294
               query2.next();
295
               {
296
                  ttcustomer.create();
297
                  new BufferCopy(customer, ttcustomer).run(true);
298
               }
299
            }));
300
            
301
            if ((asTempTable(ttcustomer).hasRecords()).booleanValue())
302
            {
303
               if (_isNotEqual(pathVal, ""))
304
               {
305
                  ttcustomer.setCustomername(substitute("&1-id=&2_val=&3", ttcustomer.getCustomername(), pathId, pathVal));
306
               }
307
               else
308
               {
309
                  ttcustomer.setCustomername(substitute("&1_id=&2", ttcustomer.getCustomername(), pathId));
310
               }
311
               
312
               tempTable(ttcustomer).unwrapJsonData().writeJson(new TargetData("longchar", jsonData), new logical(true), new character("utf-8"));
313
               oBody.assign(ObjectOps.newInstance(com.goldencode.p2j.oo.core.LegacyString.class, "I", jsonData));
314
            }
315
            else
316
            {
317
               oBody.assign(ObjectOps.newInstance(com.goldencode.p2j.oo.core.LegacyString.class, "I", substitute("Customer &1 not found for update", pathId)));
318
               oResponse.ref().setStatusCode(new integer(StatusCodeEnum.notFound));
319
            }
320
            oResponse.ref().setContentType(new character("application/json"));
321
         }
322
         else
323
         {
324
            if ((ObjectOps.typeOf(poRequest.ref().getEntity(), JsonConstruct.class)).booleanValue())
325
            {
326
               oBody.assign(ObjectOps.newInstance(com.goldencode.p2j.oo.core.LegacyString.class, "I", pipeWebRequest(poRequest).ref().getJsonText()));
327
            }
328
            else
329
            {
330
               oBody.assign(ObjectOps.newInstance(com.goldencode.p2j.oo.core.LegacyString.class, "I", getWebRequestInfo(poRequest).ref().getJsonText()));
331
            }
332
            
333
            oResponse.ref().setContentType(new character("application/json"));
334
         }
335
         oResponse.ref().setEntity(new object(oBody));
336
         /* HTTP messages require a content type */
337
         oResponse.ref().setContentLength(new integer(oBody.ref().getSize()));
338
         oWriter.assign(ObjectOps.newInstance(WebResponseWriter.class, "I", oResponse));
339
         oWriter.ref().open();
340
         /* Finish writing the response message */
341
         oWriter.ref().close();
342
         /* A response of 0 means that this handler will build the entire response;
343
                    a non-zero value is mapped to a static handler in the webapp's /static/error folder.
344
                    The mappings are maintained in the webapps's WEB-INF/web.xml 
345
                    A predefined set of HTTP status codes is provided in the OpenEdge.Net.HTTP.StatusCodeEnum 
346
                    enumeration */
347
         returnNormal(0);
348
      }, 
349
      (Fini) () -> 
350
      {
351
         tempTable(ttcustomer).unwrapEmptyTempTable().deleteAll();
352
      }));
353
   }
354

    
355
   @LegacySignature(type = Type.METHOD, name = "HandlePost", returns = "INTEGER", parameters = 
356
   {
357
      @LegacyParameter(name = "poRequest", type = "OBJECT", qualified = "openedge.web.iwebrequest", mode = "INPUT")
358
   })
359
   @Override
360
   /*------------------------------------------------------------------------------
361
              Purpose:                                                                
362
              Notes:                                                                        
363
      ------------------------------------------------------------------------------*/   
364
   protected integer handlePost(final object<? extends com.goldencode.p2j.oo.web.IwebRequest> _poRequest)
365
   {
366
      object<? extends com.goldencode.p2j.oo.web.IwebRequest> poRequest = TypeFactory.initInput(_poRequest);
367
      object<? extends com.goldencode.p2j.oo.net.http.IhttpResponse> oResponse = TypeFactory.object(com.goldencode.p2j.oo.net.http.IhttpResponse.class);
368
      object<? extends WebResponseWriter> oWriter = TypeFactory.object(WebResponseWriter.class);
369
      object<? extends com.goldencode.p2j.oo.core.LegacyString> oBody = TypeFactory.object(com.goldencode.p2j.oo.core.LegacyString.class);
370
      integer pathId = TypeFactory.integer();
371
      character pathVal = TypeFactory.character();
372
      longchar jsonData = TypeFactory.longchar();
373
      
374
      /* The WebResponseWriter ensures that the status line and
375
                 all headers are writted out before the message body/entity. */
376
      return function(FwdHandler.class, this, "HandlePost", integer.class, new Block((Init) () -> 
377
      {
378
         ObjectOps.register(oBody, oWriter, oResponse);
379
      }, 
380
      (Body) () -> 
381
      {
382
         /* The WebResponse body is a wrapper around an entire HTTP response message.
383
                    It contains a status code and reason; headers; cookies and a message body.
384
                    
385
                    API-level doc for this and related classes can be found at
386
                    https://documentation.progress.com/output/oehttpclient/      */
387
         oResponse.assign(ObjectOps.newInstance(com.goldencode.p2j.oo.web.WebResponse.class));
388
         silent(() -> pathId.assign(new integer(poRequest.ref().getPathParameter(new character("id")))));
389
         silent(() -> pathVal.assign(poRequest.ref().getPathParameter(new character("value"))));
390
         oResponse.ref().setStatusCode(new integer(_notUnknown(pathId) ? StatusCodeEnum.ok : StatusCodeEnum.badRequest));
391
         oResponse.ref().setContentType(new character("text/plain"));
392
         
393
         /* This body object can be a string or something else (JsonObject for instance) */
394
         if (_isGreaterThan(pathId, 0))
395
         {
396
            AdaptiveQuery query3 = new AdaptiveQuery();
397
            
398
            forEach("loopLabel3", new Block((Init) () -> 
399
            {
400
               RecordBuffer.openScope(customer);
401
               query3.initialize(customer, "customer.customernum = ?", null, "customer.customernum asc", new Object[]
402
               {
403
                  pathId
404
               }, LockType.NONE);
405
            }, 
406
            (Body) () -> 
407
            {
408
               //  check if customer exist in databse
409
               query3.next();
410
               {
411
                  ttcustomer.create();
412
                  new BufferCopy(customer, ttcustomer).run(true);
413
               }
414
            }));
415
            
416
            if ((asTempTable(ttcustomer).hasRecords()).booleanValue())
417
            {
418
               oBody.assign(ObjectOps.newInstance(com.goldencode.p2j.oo.core.LegacyString.class, "I", substitute("Customer exist in database and we can not create with given id =  &1", pathId)));
419
               oResponse.ref().setStatusCode(new integer(StatusCodeEnum.forbidden));
420
               oResponse.ref().setContentType(new character("application/json"));
421
            }
422
            else
423
            {
424
               ttcustomer.create();
425
               ttcustomer.setCustomernum(pathId);
426
               ttcustomer.setCustomername(pathVal);
427
               tempTable(ttcustomer).unwrapJsonData().writeJson(new TargetData("longchar", jsonData), new logical(true), new character("utf-8"));
428
               oBody.assign(ObjectOps.newInstance(com.goldencode.p2j.oo.core.LegacyString.class, "I", jsonData));
429
               oResponse.ref().setContentType(new character("application/json"));
430
            }
431
         }
432
         else
433
         {
434
            oBody.assign(ObjectOps.newInstance(com.goldencode.p2j.oo.core.LegacyString.class, "I", getWebRequestInfo(poRequest).ref().getJsonText()));
435
            oResponse.ref().setContentType(new character("application/json"));
436
         }
437
         oResponse.ref().setEntity(new object(oBody));
438
         /* HTTP messages require a content type */
439
         oResponse.ref().setContentLength(new integer(oBody.ref().getSize()));
440
         oWriter.assign(ObjectOps.newInstance(WebResponseWriter.class, "I", oResponse));
441
         oWriter.ref().open();
442
         /* Finish writing the response message */
443
         oWriter.ref().close();
444
         /* A response of 0 means that this handler will build the entire response;
445
                    a non-zero value is mapped to a static handler in the webapp's /static/error folder.
446
                    The mappings are maintained in the webapps's WEB-INF/web.xml 
447
                    A predefined set of HTTP status codes is provided in the OpenEdge.Net.HTTP.StatusCodeEnum 
448
                    enumeration */
449
         returnNormal(0);
450
      }, 
451
      (Fini) () -> 
452
      {
453
         tempTable(ttcustomer).unwrapEmptyTempTable().deleteAll();
454
      }));
455
   }
456

    
457
   @LegacySignature(type = Type.METHOD, name = "HandleDelete", returns = "INTEGER", parameters = 
458
   {
459
      @LegacyParameter(name = "poRequest", type = "OBJECT", qualified = "openedge.web.iwebrequest", mode = "INPUT")
460
   })
461
   @Override
462
   /*------------------------------------------------------------------------------
463
             Purpose:                                                                
464
             Notes:                                                                        
465
     ------------------------------------------------------------------------------*/   
466
   protected integer handleDelete(final object<? extends com.goldencode.p2j.oo.web.IwebRequest> _poRequest)
467
   {
468
      object<? extends com.goldencode.p2j.oo.web.IwebRequest> poRequest = TypeFactory.initInput(_poRequest);
469
      object<? extends com.goldencode.p2j.oo.net.http.IhttpResponse> oResponse = TypeFactory.object(com.goldencode.p2j.oo.net.http.IhttpResponse.class);
470
      object<? extends WebResponseWriter> oWriter = TypeFactory.object(WebResponseWriter.class);
471
      object<? extends com.goldencode.p2j.oo.core.LegacyString> oBody = TypeFactory.object(com.goldencode.p2j.oo.core.LegacyString.class);
472
      integer pathId = TypeFactory.integer();
473
      character pathVal = TypeFactory.character();
474
      
475
      /* The WebResponseWriter ensures that the status line and
476
                 all headers are writted out before the message body/entity. */
477
      return function(FwdHandler.class, this, "HandleDelete", integer.class, new Block((Init) () -> 
478
      {
479
         ObjectOps.register(oBody, oWriter, oResponse);
480
      }, 
481
      (Body) () -> 
482
      {
483
         /* The WebResponse body is a wrapper around an entire HTTP response message.
484
                    It contains a status code and reason; headers; cookies and a message body.
485
                    
486
                    API-level doc for this and related classes can be found at
487
                    https://documentation.progress.com/output/oehttpclient/      */
488
         oResponse.assign(ObjectOps.newInstance(com.goldencode.p2j.oo.web.WebResponse.class));
489
         silent(() -> pathId.assign(new integer(poRequest.ref().getPathParameter(new character("id")))));
490
         silent(() -> pathVal.assign(poRequest.ref().getPathParameter(new character("value"))));
491
         oResponse.ref().setStatusCode(new integer(_isEqual(pathVal, "") ? StatusCodeEnum.ok : StatusCodeEnum.badRequest));
492
         oResponse.ref().setContentType(new character("text/plain"));
493
         
494
         /* This body object can be a string or something else (JsonObject for instance) */
495
         if (_isGreaterThan(pathId, 0))
496
         {
497
            AdaptiveQuery query4 = new AdaptiveQuery();
498
            
499
            forEach("loopLabel4", new Block((Init) () -> 
500
            {
501
               RecordBuffer.openScope(customer);
502
               query4.initialize(customer, "customer.customernum = ?", null, "customer.customernum asc", new Object[]
503
               {
504
                  pathId
505
               }, LockType.NONE);
506
            }, 
507
            (Body) () -> 
508
            {
509
               //  update cust
510
               query4.next();
511
               {
512
                  ttcustomer.create();
513
                  new BufferCopy(customer, ttcustomer).run(true);
514
               }
515
            }));
516
            
517
            if ((asTempTable(ttcustomer).hasRecords()).booleanValue())
518
            {
519
               ttcustomer.deleteRecord();
520
               oBody.assign(ObjectOps.newInstance(com.goldencode.p2j.oo.core.LegacyString.class, "I", substitute("Customer with id &1 was deleted", pathId)));
521
               oResponse.ref().setContentType(new character("application/json"));
522
            }
523
            else
524
            {
525
               oBody.assign(ObjectOps.newInstance(com.goldencode.p2j.oo.core.LegacyString.class, "I", substitute("Customer not found &1", pathId)));
526
               oResponse.ref().setStatusCode(new integer(StatusCodeEnum.notFound));
527
            }
528
         }
529
         else
530
         {
531
            oBody.assign(ObjectOps.newInstance(com.goldencode.p2j.oo.core.LegacyString.class, "I", getWebRequestInfo(poRequest).ref().getJsonText()));
532
            oResponse.ref().setContentType(new character("application/json"));
533
         }
534
         oResponse.ref().setEntity(new object(oBody));
535
         /* HTTP messages require a content type */
536
         oResponse.ref().setContentLength(new integer(oBody.ref().getSize()));
537
         oWriter.assign(ObjectOps.newInstance(WebResponseWriter.class, "I", oResponse));
538
         oWriter.ref().open();
539
         /* Finish writing the response message */
540
         oWriter.ref().close();
541
         /* A response of 0 means that this handler will build the entire response;
542
                    a non-zero value is mapped to a static handler in the webapp's /static/error folder.
543
                    The mappings are maintained in the webapps's WEB-INF/web.xml 
544
                    A predefined set of HTTP status codes is provided in the OpenEdge.Net.HTTP.StatusCodeEnum 
545
                    enumeration */
546
         returnNormal(0);
547
      }, 
548
      (Fini) () -> 
549
      {
550
         tempTable(ttcustomer).unwrapEmptyTempTable().deleteAll();
551
      }));
552
   }
553

    
554
   @LegacySignature(type = Type.METHOD, name = "pipeWebRequest", returns = "OBJECT", qualified = "progress.json.objectmodel.jsonobject", parameters = 
555
   {
556
      @LegacyParameter(name = "poRequest", type = "OBJECT", qualified = "openedge.web.iwebrequest", mode = "INPUT")
557
   })
558
   protected object<? extends com.goldencode.p2j.oo.json.objectmodel.JsonObject> pipeWebRequest(final object<? extends com.goldencode.p2j.oo.web.IwebRequest> _poRequest)
559
   {
560
      object<? extends com.goldencode.p2j.oo.web.IwebRequest> poRequest = TypeFactory.initInput(_poRequest);
561
      object<? extends JsonObject> jsonRsp = TypeFactory.object(JsonObject.class);
562
      object<? extends ObjectModelParser> jsonParser = TypeFactory.object(ObjectModelParser.class);
563
      object<? extends com.goldencode.p2j.oo.lang.LegacyError> err_top = UndoableFactory.object(com.goldencode.p2j.oo.lang.LegacyError.class);
564
      
565
      return function(FwdHandler.class, this, "pipeWebRequest", object.class, new Block((Init) () -> 
566
      {
567
         ObjectOps.register(jsonParser, jsonRsp);
568
         catchError(com.goldencode.p2j.oo.lang.LegacyError.class, 
569
         err -> 
570
         {
571
            err_top.assign(err);
572
            jsonRsp.ref().add(new character("parseError"), err.ref().getMessage(new integer(1)));
573
         });
574
      }, 
575
      (Body) () -> 
576
      {
577
         jsonRsp.assign(ObjectOps.newInstance(JsonObject.class));
578
         jsonParser.assign(ObjectOps.newInstance(ObjectModelParser.class));
579
         addJson(jsonRsp, new character("original"), ObjectOps.cast(poRequest.ref().getEntity(), JsonConstruct.class));         
580

    
581
         //  TODO: not supported in FWD addJson(jsonRsp, 'parsed', jsonParser:Parse(web-context)).
582
         returnNormal(jsonRsp);
583
         silent(() -> 
584
         {
585
         });
586
      }, 
587
      (Fini) () -> 
588
      {
589
         silent(() -> ObjectOps.delete(jsonParser));
590
      }));
591
   }
592

    
593
   @LegacySignature(type = Type.METHOD, name = "addJson", parameters = 
594
   {
595
      @LegacyParameter(name = "jsonRsp", type = "OBJECT", qualified = "progress.json.objectmodel.jsonobject", mode = "INPUT"),
596
      @LegacyParameter(name = "propName", type = "CHARACTER", mode = "INPUT"),
597
      @LegacyParameter(name = "jsonObj", type = "OBJECT", qualified = "progress.json.objectmodel.jsonconstruct", mode = "INPUT")
598
   })
599
   protected void addJson(final object<? extends JsonObject> _jsonRsp, final character _propName, final object<? extends JsonConstruct> _jsonObj)
600
   {
601
      object<? extends JsonObject> jsonRsp = TypeFactory.initInput(_jsonRsp);
602
      character propName = TypeFactory.initInput(_propName);
603
      object<? extends JsonConstruct> jsonObj = TypeFactory.initInput(_jsonObj);
604
      
605
      internalProcedure(FwdHandler.class, this, "addJson", new Block((Body) () -> 
606
      {
607
         if ((ObjectOps.typeOf(jsonObj, JsonObject.class)).booleanValue())
608
         {
609
            jsonRsp.ref().add_1(propName, ObjectOps.cast(jsonObj, JsonObject.class));
610
         }
611
         else
612
         {
613
            jsonRsp.ref().add(propName, ObjectOps.cast(jsonObj, JsonArray.class));
614
         }
615
      }));
616
   }
617

    
618
   @LegacySignature(type = Type.METHOD, name = "getWebRequestInfo", returns = "OBJECT", qualified = "progress.json.objectmodel.jsonobject", parameters = 
619
   {
620
      @LegacyParameter(name = "poRequest", type = "OBJECT", qualified = "openedge.web.iwebrequest", mode = "INPUT")
621
   })
622
   protected object<? extends com.goldencode.p2j.oo.json.objectmodel.JsonObject> getWebRequestInfo(final object<? extends com.goldencode.p2j.oo.web.IwebRequest> _poRequest)
623
   {
624
      object<? extends com.goldencode.p2j.oo.web.IwebRequest> poRequest = TypeFactory.initInput(_poRequest);
625
      object<? extends JsonObject> jsonRsp = TypeFactory.object(JsonObject.class);
626
      object<? extends JsonObject> jsonObj = TypeFactory.object(JsonObject.class);
627
      character pathParams = TypeFactory.character();
628
      integer numItem = TypeFactory.integer();
629
      longchar contentVal = TypeFactory.longchar();
630
      character headerList = TypeFactory.character("Content-Type,Accept,Accept-Language,Accept-Encoding,Accept-Charset,Authorization,Cookie,From,Host,User-Agent");
631
      
632
      return function(FwdHandler.class, this, "getWebRequestInfo", object.class, new Block((Init) () -> 
633
      {
634
         ObjectOps.register(jsonObj, jsonRsp);
635
      }, 
636
      (Body) () -> 
637
      {
638
         jsonRsp.assign(ObjectOps.newInstance(JsonObject.class));
639
         jsonRsp.ref().add(new character("Method"), poRequest.ref().getMethod());
640
         jsonRsp.ref().add(new character("CharacterEncoding"), poRequest.ref().getCharacterEncoding());
641
         jsonRsp.ref().add(new character("ContentLength"), poRequest.ref().getContentLength());         
642

    
643
         // poRequest:ContentMD5 - proprety not implemented
644
         // md5Content = poRequest:ContentMD5.
645
         // jsonRsp:Add('ContentMD5', get-string(md5Content,1)).
646
         jsonRsp.ref().add(new character("ContentType"), poRequest.ref().getContentType());
647
         jsonRsp.ref().add(new character("DefaultCookieDomain"), poRequest.ref().getDefaultCookieDomain());
648
         jsonRsp.ref().add(new character("DefaultCookiePath"), poRequest.ref().getDefaultCookiePath());
649
         jsonRsp.ref().add(new character("LocalAddress"), poRequest.ref().getLocalAddress());
650
         jsonRsp.ref().add(new character("LocalPort"), poRequest.ref().getLocalPort());
651
         jsonRsp.ref().add(new character("PathInfo"), poRequest.ref().getPathInfo());
652
         jsonRsp.ref().add(new character("PathParameterNames"), poRequest.ref().getPathParameterNames());
653
         jsonRsp.ref().add(new character("RemoteAddress"), poRequest.ref().getRemoteAddress());
654
         jsonRsp.ref().add(new character("RemoteHost"), poRequest.ref().getRemoteHost());
655
         jsonRsp.ref().add(new character("RemotePort"), poRequest.ref().getRemotePort());
656
         jsonRsp.ref().add(new character("RemoteUser"), poRequest.ref().getRemoteUser());
657
         jsonRsp.ref().add(new character("ResolvedTransportPath"), poRequest.ref().getResolvedTransportPath());         
658

    
659
         //  jsonRsp:Add('ResolvedWebAppPath', poRequest:ResolvedWebAppPath).
660
         jsonRsp.ref().add(new character("ServerSoftware"), poRequest.ref().getServerSoftware());
661
         jsonRsp.ref().add(new character("TransferEncoding"), poRequest.ref().getTransferEncoding());
662
         jsonRsp.ref().add(new character("TransportPath"), poRequest.ref().getTransportPath());
663
         jsonRsp.ref().add(new character("URI"), poRequest.ref().getUri().ref().toLegacyString());
664
         jsonRsp.ref().add(new character("UriTemplate"), poRequest.ref().getUriTemplate());
665
         jsonRsp.ref().add(new character("Version"), poRequest.ref().getVersion());
666
         jsonRsp.ref().add(new character("WebAppPath"), poRequest.ref().getWebAppPath());
667
         pathParams.assign(poRequest.ref().getPathParameterNames());
668
         
669
         if (_isGreaterThan(pathParams, ""))
670
         {
671
            jsonObj.assign(ObjectOps.newInstance(JsonObject.class));
672
            jsonRsp.ref().add_1(new character("path"), jsonObj);
673
            
674
            loopLabel5:
675
            for (numItem.assign(1); _isLessThanOrEqual(numItem, numEntries(pathParams)); numItem.increment())
676
            {
677
               jsonObj.ref().add(entry(numItem, pathParams), poRequest.ref().getPathParameter(entry(numItem, pathParams)));
678
            }
679
         }
680
         
681
         pathParams.assign(poRequest.ref().getContextNames());
682
         
683
         if (_isGreaterThan(pathParams, ""))
684
         {
685
            jsonObj.assign(ObjectOps.newInstance(JsonObject.class));
686
            jsonRsp.ref().add_1(new character("ContextNames"), jsonObj);
687
            
688
            IntegerExpression resExpr0 = new IntegerExpression()
689
            {
690
               public integer execute()
691
               {
692
                  return numEntries(pathParams);
693
               }
694
            };
695
            ToClause toClause0 = new ToClause(numItem, 1, resExpr0);
696
            OnPhrase[] onPhrase0 = new OnPhrase[]
697
            {
698
               new OnPhrase(Condition.STOP, Action.NEXT, "loopLabel6")
699
            };
700
            
701
            doTo(TransactionType.SUB, "loopLabel6", toClause0, onPhrase0, new Block((Body) () -> 
702
            {
703
               {
704
                  silent(() -> contentVal.assign(poRequest.ref().getContextValue(entry(numItem, pathParams))));
705
                  
706
                  if (_isGreaterThan(contentVal, ""))
707
                  {
708
                     silent(() -> jsonObj.ref().add(entry(numItem, pathParams), contentVal));
709
                  }
710
               }
711
            }));
712
         }
713
         jsonObj.assign(ObjectOps.newInstance(JsonObject.class));
714
         jsonRsp.ref().add_1(new character("headers"), jsonObj);
715
         
716
         loopLabel7:
717
         for (numItem.assign(1); _isLessThanOrEqual(numItem, numEntries(headerList)); numItem.increment())
718
         {
719
            if ((poRequest.ref().hasHeader(entry(numItem, headerList))).booleanValue())
720
            {
721
               jsonObj.ref().add(entry(numItem, headerList), poRequest.ref().getHeader(entry(numItem, headerList)).ref().getValue());
722
            }
723
         }
724
         
725
         if ((poRequest.ref().getEntity().isValid()).booleanValue())
726
         {
727
            if ((ObjectOps.typeOf(poRequest.ref().getEntity(), JsonObject.class)).booleanValue())
728
            {
729
               jsonRsp.ref().add_1(new character("Body"), ObjectOps.cast(poRequest.ref().getEntity(), JsonObject.class));
730
            }
731
            else
732
            {
733
               if ((ObjectOps.typeOf(poRequest.ref().getEntity(), JsonArray.class)).booleanValue())
734
               {
735
                  jsonRsp.ref().add(new character("Body"), ObjectOps.cast(poRequest.ref().getEntity(), JsonArray.class));
736
               }
737
               else
738
               {
739
                  if ((ObjectOps.typeOf(poRequest.ref().getEntity(), Memptr.class)).booleanValue())
740
                  {
741
                     jsonRsp.ref().add(new character("Body"), ObjectOps.cast(poRequest.ref().getEntity(), Memptr.class).ref().getString(new int64(new integer(1))));
742
                  }
743
               }
744
            }
745
         }
746
         returnNormal(jsonRsp);
747
      }));
748
   }
749

    
750
   @LegacySignature(type = Type.CONSTRUCTOR)
751
   public static void __FwdHandler_constructor__static__()
752
   {
753
      externalProcedure(FwdHandler.class, new Block((Body) () -> 
754
      {
755
         onBlockLevel(Condition.ERROR, Action.THROW);
756
      }));
757
   }
758
}