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;
""")
 
     |