File: awsascb

package info (click to toggle)
libaws 20.2-2
  • links: PTS, VCS
  • area: main
  • in suites: bullseye
  • size: 16,656 kB
  • sloc: ada: 95,505; python: 2,270; ansic: 1,017; makefile: 829; xml: 235; javascript: 202; java: 112; sh: 106
file content (139 lines) | stat: -rwxr-xr-x 3,036 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
#!/usr/bin/python

import sys

# This is a simple script to build an aggregated SOAP server with AWS

pcks = sys.argv[1:]

# Initialize the list of CB to aggregate passed on the command line

if len(pcks) == 0:
    print("missing Ada unit service names in argument")
    exit

# First: write the spec

with open('agg_server_cb.ads', 'w') as f:
    f.write("""
--  DO NOT EDIT : generated by awsasc

with AWS.Response;
with AWS.Status;

with SOAP.Dispatchers.Callback;
with SOAP.Message.Payload;
with SOAP.WSDL.Schema;

package Agg_Server_CB is

   use AWS;
   use SOAP;

   pragma Style_Checks (Off);

   type Handler is new SOAP.Dispatchers.Callback.Handler with null record;

   overriding function Schema
     (Dispatcher : Handler;
      SOAPAction : String)
      return WSDL.Schema.Definition;

   function Create
     (HTTP_Callback : AWS.Response.Callback) return Handler;
   --  Returns an handler whose SOAP_Callback is the one below

   function SOAP_CB
     (SOAPAction : String;
      Payload    : Message.Payload.Object;
      Request    : AWS.Status.Data)
      return Response.Data;

end Agg_Server_CB;
""")

# Second: write the body

with open('agg_server_cb.adb', 'w') as f:

    f.write("--  DO NOT EDIT : generated by awsasc\n\n")
    f.write("with Ada.Strings.Unbounded;\n\n")
    f.write("with SOAP.Message.Response.Error;\n")
    f.write("with SOAP.Message.XML;\n\n")

    for cb in pcks:
        f.write("with %s.CB;\n" % cb)

    f.write("""
package body Agg_Server_CB is

   use Ada.Strings.Unbounded;

   use SOAP;

   ------------
   -- Create --
   ------------

   function Create
     (HTTP_Callback : AWS.Response.Callback) return Handler is
   begin
      return
        (SOAP.Dispatchers.Callback.Create
          (HTTP_Callback, SOAP_CB'Access,
           SOAP.WSDL.Schema.Empty) with null record);
   end Create;

   ------------
   -- Schema --
   ------------

   overriding function Schema
     (Dispatcher : Handler;
      SOAPAction : String)
      return WSDL.Schema.Definition is
   begin""")

    for cb in pcks:
        f.write("""
      %s %s.CB.Is_SOAPAction_Defined (SOAPAction) then
         return %s.Schema;
        """ % ("if" if cb == pcks[0] else "elsif", cb, cb))

    f.write("""
      else
         return SOAP.WSDL.Schema.Empty;
      end if;
   end Schema;
""")

    f.write("""
   -------------
   -- SOAP_CB --
   -------------

   function SOAP_CB
     (SOAPAction : String;
      Payload    : Message.Payload.Object;
      Request    : AWS.Status.Data)
      return Response.Data is
   begin
""")

    for cb in pcks:
        f.write("""
      %s %s.CB.Is_SOAPAction_Defined (SOAPAction) then
         return %s.CB.SOAP_CB (SOAPAction, Payload, Request);
      """ % ("if" if cb == pcks[0] else "elsif", cb, cb))

    f.write("""
      else
         return Message.Response.Build
           (Message.Response.Error.Build
             (Message.Response.Error.Client,
              "Wrong SOAP action " & SOAPAction));
      end if;
    end SOAP_CB;

end Agg_Server_CB;
""")