Former-commit-id:a02aeb236c
[formerly9f19e3f712
] [formerly06a8b51d6d
[formerly 64fa9254b946eae7e61bbc3f513b7c3696c4f54f]] Former-commit-id:06a8b51d6d
Former-commit-id:3360eb6c5f
89 lines
2.8 KiB
Python
Executable file
89 lines
2.8 KiB
Python
Executable file
#!/usr/bin/env python
|
|
|
|
#
|
|
# Licensed to the Apache Software Foundation (ASF) under one
|
|
# or more contributor license agreements. See the NOTICE file
|
|
# distributed with this work for additional information
|
|
# regarding copyright ownership. The ASF licenses this file
|
|
# to you under the Apache License, Version 2.0 (the
|
|
# "License"); you may not use this file except in compliance
|
|
# with the License. You may obtain a copy of the License at
|
|
#
|
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
#
|
|
# Unless required by applicable law or agreed to in writing,
|
|
# software distributed under the License is distributed on an
|
|
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
|
# KIND, either express or implied. See the License for the
|
|
# specific language governing permissions and limitations
|
|
# under the License.
|
|
#
|
|
|
|
import os, sys, mllib
|
|
from templating import Parser
|
|
from genutil import *
|
|
|
|
out_dir = sys.argv[1]
|
|
spec_file = sys.argv[2]
|
|
tpl_dir = sys.argv[3]
|
|
pkg_dir = os.path.join(out_dir, "org/apache/qpid/transport")
|
|
|
|
if not os.path.exists(pkg_dir):
|
|
os.makedirs(pkg_dir)
|
|
|
|
spec = mllib.xml_parse(spec_file)
|
|
|
|
def excludes(nd):
|
|
if (nd.parent is not None and
|
|
nd.parent.name == "class" and
|
|
nd.parent["@name"] in ("file", "stream")):
|
|
return False
|
|
else:
|
|
return True
|
|
|
|
def execute(output, template, **kwargs):
|
|
f = open(os.path.join(tpl_dir, template))
|
|
input = f.read()
|
|
f.close()
|
|
p = Parser(**kwargs)
|
|
p.parse(input)
|
|
fname = os.path.join(pkg_dir, output)
|
|
f = open(fname, "w")
|
|
f.write(p.output)
|
|
f.close()
|
|
|
|
execute("Type.java", "Type.tpl", spec = spec)
|
|
execute("Constant.java", "Constant.tpl", spec = spec)
|
|
|
|
structs = spec.query["amqp/struct"] + \
|
|
spec.query["amqp/class/struct", excludes] + \
|
|
spec.query["amqp/class/command/result/struct", excludes]
|
|
controls = spec.query["amqp/class/control", excludes]
|
|
commands = spec.query["amqp/class/command", excludes]
|
|
|
|
composites = structs + controls + commands
|
|
actions = controls + commands
|
|
connection = [c for c in actions if c.parent["@name"] == "connection"]
|
|
session = [c for c in actions if c.parent["@name"] != "connection"]
|
|
|
|
for c in composites:
|
|
name = cname(c)
|
|
execute("%s.java" % name, "Composite.tpl", type = c, name = name)
|
|
|
|
execute("MethodDelegate.java", "MethodDelegate.tpl", composites = actions)
|
|
execute("Option.java", "Option.tpl", composites = composites)
|
|
execute("ConnectionInvoker.java", "Invoker.tpl", invoker = "ConnectionInvoker",
|
|
composites = connection)
|
|
execute("SessionInvoker.java", "Invoker.tpl", invoker = "SessionInvoker",
|
|
composites = session)
|
|
execute("StructFactory.java", "StructFactory.tpl", composites = composites)
|
|
|
|
def is_enum(nd):
|
|
return nd["enum"] is not None
|
|
|
|
enums = spec.query["amqp/domain", is_enum] + \
|
|
spec.query["amqp/class/domain", is_enum]
|
|
|
|
for e in enums:
|
|
name = cname(e)
|
|
execute("%s.java" % name, "Enum.tpl", name = name, type = e)
|