def main():
    '''
    Parse argv for options and arguments, and start schema generation.
    '''
    parser = optparse.OptionParser(usage="%prog [options] <model_path> [another_model_path...]",
                                   formatter=optparse.TitledHelpFormatter())
                                   
    parser.set_description(__doc__.strip())
    
    parser.add_option("-f", "--function", dest="function", metavar="NAME",
                      help="append integrity checking actions to functions named NAME (required)",
                      action="store", default=None)
    
    parser.add_option("-o", "--output", dest='output', metavar="PATH",
                      help="save sql model instances to PATH (required)",
                      action="store", default=None)
    
    parser.add_option("-v", "--verbosity", dest='verbosity', action="count",
                      help="increase debug logging level", default=2)

    
    (opts, args) = parser.parse_args()
    if len(args) == 0 or None in [opts.output, opts.function]:
        parser.print_help()
        sys.exit(1)

    levels = {
              0: logging.ERROR,
              1: logging.WARNING,
              2: logging.INFO,
              3: logging.DEBUG,
    }
    logging.basicConfig(level=levels.get(opts.verbosity, logging.DEBUG))

    m = ooaofooa.load_metamodel(args)
    for c_c in m.select_many('C_C'):

        filt = lambda sel: ooaofooa.is_contained_in(sel, c_c) and sel.Name == opts.function
        s_sync = m.select_any('S_SYNC', filt)
        if not s_sync:
            s_sync = m.new('S_SYNC', Name=opts.function)
            pe_pe = m.new('PE_PE')
            s_dt = m.select_any('S_DT', where(Name='boolean'))
            
            relate(pe_pe, s_sync, 8001)
            relate(s_dt, s_sync, 25)

        generate_actions(m, c_c, s_sync)
    
    xtuml.persist_instances(m, opts.output)
Exemplo n.º 2
0
def build_component(m, c_c):
    '''
    Build an xsd complex element out of a C_C, including its packaged S_DT and O_OBJ.
    '''
    component = ET.Element('xs:element', name=c_c.name)
    
    classes = ET.SubElement(component, 'xs:complexType')
    classes = ET.SubElement(classes, 'xs:sequence')
    
    scope_filter = lambda selected: ooaofooa.is_contained_in(selected, c_c)
    
    for o_obj in m.select_many('O_OBJ', scope_filter):
        cls = build_class(o_obj)
        classes.append(cls)
    
    return component
Exemplo n.º 3
0
def build_component(m, c_c):
    '''
    Build an xsd complex element out of a C_C, including its packaged S_DT and O_OBJ.
    '''
    component = ET.Element('xs:element', name=c_c.name)

    classes = ET.SubElement(component, 'xs:complexType')
    classes = ET.SubElement(classes, 'xs:sequence')

    scope_filter = lambda selected: ooaofooa.is_contained_in(selected, c_c)

    for o_obj in m.select_many('O_OBJ', scope_filter):
        cls = build_class(o_obj)
        classes.append(cls)

    return component
def generate_actions(m, c_c, s_sync):
    text = ''

    handler = {
        'R_SIMP': mk_simple_association_check,
        'R_ASSOC': mk_linked_association_check,
        'R_SUBSUP': mk_subsuper_association_check,
        'R_COMP': mk_derived_association_check,
    }

    filt = lambda sel: ooaofooa.is_contained_in(sel, c_c)
    for r_rel in m.select_many('R_REL', filt):
        inst = subtype(r_rel, 206)
        fn = handler.get(inst.__class__.__name__)
        text += fn(m, inst)

    o_objs = m.select_many('O_OBJ', filt)
    for o_id in many(o_objs).O_ID[104]():
        text += mk_unique_constraint_check(m, o_id)

    text += 'return True;'
    s_sync.Action_Semantics_internal = text
    s_sync.Suc_Pars = 1
Exemplo n.º 5
0
def build_schema(m, c_c):
    '''
    Build an xsd schema from a bridgepoint component.
    '''
    schema = ET.Element('xs:schema')
    schema.set('xmlns:xs', 'http://www.w3.org/2001/XMLSchema')

    global_filter = lambda selected: ooaofooa.is_global(selected)
    for s_dt in m.select_many('S_DT', global_filter):
        datatype = build_type(s_dt)
        if datatype is not None:
            schema.append(datatype)
    
    scope_filter = lambda selected: ooaofooa.is_contained_in(selected, c_c)
    for s_dt in m.select_many('S_DT', scope_filter):
        datatype = build_type(s_dt)
        if datatype is not None:
            schema.append(datatype)
            
    component = build_component(m, c_c)
    schema.append(component)
    
    return schema
Exemplo n.º 6
0
def build_schema(m, c_c):
    '''
    Build an xsd schema from a bridgepoint component.
    '''
    schema = ET.Element('xs:schema')
    schema.set('xmlns:xs', 'http://www.w3.org/2001/XMLSchema')

    global_filter = lambda selected: ooaofooa.is_global(selected)
    for s_dt in m.select_many('S_DT', global_filter):
        datatype = build_type(s_dt)
        if datatype is not None:
            schema.append(datatype)

    scope_filter = lambda selected: ooaofooa.is_contained_in(selected, c_c)
    for s_dt in m.select_many('S_DT', scope_filter):
        datatype = build_type(s_dt)
        if datatype is not None:
            schema.append(datatype)

    component = build_component(m, c_c)
    schema.append(component)

    return schema
def generate_actions(m, c_c, s_sync):
    text = ''
    
    handler = {
        'R_SIMP': mk_simple_association_check,
        'R_ASSOC': mk_linked_association_check,
        'R_SUBSUP': mk_subsuper_association_check,
        'R_COMP': mk_derived_association_check,
    }

    filt = lambda sel: ooaofooa.is_contained_in(sel, c_c)
    for r_rel in m.select_many('R_REL', filt):
        inst = subtype(r_rel, 206)
        fn = handler.get(inst.__class__.__name__)
        text += fn(m, inst)

    o_objs = m.select_many('O_OBJ', filt)
    for o_id in many(o_objs).O_ID[104]():
        text += mk_unique_constraint_check(m, o_id)
    
    text += 'return True;'
    s_sync.Action_Semantics_internal = text
    s_sync.Suc_Pars = 1
def main():
    '''
    Parse argv for options and arguments, and start schema generation.
    '''
    parser = optparse.OptionParser(
        usage="%prog [options] <model_path> [another_model_path...]",
        formatter=optparse.TitledHelpFormatter())

    parser.set_description(__doc__.strip())

    parser.add_option(
        "-f",
        "--function",
        dest="function",
        metavar="NAME",
        help=
        "append integrity checking actions to functions named NAME (required)",
        action="store",
        default=None)

    parser.add_option("-o",
                      "--output",
                      dest='output',
                      metavar="PATH",
                      help="save sql model instances to PATH (required)",
                      action="store",
                      default=None)

    parser.add_option("-v",
                      "--verbosity",
                      dest='verbosity',
                      action="count",
                      help="increase debug logging level",
                      default=2)

    (opts, args) = parser.parse_args()
    if len(args) == 0 or None in [opts.output, opts.function]:
        parser.print_help()
        sys.exit(1)

    levels = {
        0: logging.ERROR,
        1: logging.WARNING,
        2: logging.INFO,
        3: logging.DEBUG,
    }
    logging.basicConfig(level=levels.get(opts.verbosity, logging.DEBUG))

    m = ooaofooa.load_metamodel(args)
    for c_c in m.select_many('C_C'):

        filt = lambda sel: ooaofooa.is_contained_in(
            sel, c_c) and sel.Name == opts.function
        s_sync = m.select_any('S_SYNC', filt)
        if not s_sync:
            s_sync = m.new('S_SYNC', Name=opts.function)
            pe_pe = m.new('PE_PE')
            s_dt = m.select_any('S_DT', where(Name='boolean'))

            relate(pe_pe, s_sync, 8001)
            relate(s_dt, s_sync, 25)

        generate_actions(m, c_c, s_sync)

    xtuml.persist_instances(m, opts.output)