Search in sources :

Example 1 with ComponentImpl

use of verdict.vdm.vdm_model.ComponentImpl in project VERDICT by ge-high-assurance.

the class VDMInstrumentor method retrieve_block.

protected BlockImpl retrieve_block(ComponentType compType) {
    BlockImpl blockImpl = null;
    for (ComponentImpl cmpImpl : vdm_model.getComponentImpl()) {
        if (cmpImpl.getBlockImpl() != null) {
            blockImpl = cmpImpl.getBlockImpl();
            for (ComponentInstance cmpInstance : blockImpl.getSubcomponent()) {
                ComponentImpl impl = cmpInstance.getImplementation();
                ComponentType enumType = null;
                if (impl != null) {
                    enumType = impl.getType();
                } else {
                    enumType = cmpInstance.getSpecification();
                }
                if (compType.getId().equals(enumType.getId())) {
                    return blockImpl;
                }
            }
        }
    }
    return blockImpl;
}
Also used : BlockImpl(verdict.vdm.vdm_model.BlockImpl) ComponentType(verdict.vdm.vdm_model.ComponentType) ComponentInstance(verdict.vdm.vdm_model.ComponentInstance) ComponentImpl(verdict.vdm.vdm_model.ComponentImpl)

Example 2 with ComponentImpl

use of verdict.vdm.vdm_model.ComponentImpl in project VERDICT by ge-high-assurance.

the class VDMInstrumentor method retrieve_cmp_impl.

protected ComponentImpl retrieve_cmp_impl(ComponentType componentType) {
    ComponentImpl componentImpl = null;
    BlockImpl blockImpl = null;
    for (ComponentImpl cImpl : vdm_model.getComponentImpl()) {
        if (cImpl.getBlockImpl() != null) {
            blockImpl = cImpl.getBlockImpl();
            for (ComponentInstance cmpInstance : blockImpl.getSubcomponent()) {
                ComponentImpl impl = cmpInstance.getImplementation();
                ComponentType enumType = null;
                if (impl != null) {
                    enumType = impl.getType();
                } else {
                    enumType = cmpInstance.getSpecification();
                }
                if (componentType.getId().equals(enumType.getId())) {
                    componentImpl = cImpl;
                    return cImpl;
                }
            }
        }
    }
    return componentImpl;
}
Also used : BlockImpl(verdict.vdm.vdm_model.BlockImpl) ComponentType(verdict.vdm.vdm_model.ComponentType) ComponentInstance(verdict.vdm.vdm_model.ComponentInstance) ComponentImpl(verdict.vdm.vdm_model.ComponentImpl)

Example 3 with ComponentImpl

use of verdict.vdm.vdm_model.ComponentImpl in project VERDICT by ge-high-assurance.

the class VDMInstrumentor method dec_var_asmp_const.

/*
     * Declare and Define weak assumptions for the blame assignment.
     */
protected void dec_var_asmp_const(Map<String, List<String>> connection_comp_map, boolean blame_assignment, boolean link_level) {
    Set<String> vars = connection_comp_map.keySet();
    List<SymbolDefinition> vars_dec = new ArrayList<SymbolDefinition>();
    // String default_var = null;
    Set<String> var_links = new HashSet<String>();
    for (String var : vars) {
        // Declaration global variables for instrumented links.
        List<String> connections = connection_comp_map.get(var);
        String id = var.replace("::", "_double_colon_");
        SymbolDefinition var_dec = add_vars_assume(id, connections);
        if (!connections.isEmpty()) {
            vars_dec.add(var_dec);
            var_links.addAll(connections);
        }
    }
    String[] vars_assumption = new String[vars.size()];
    vars_assumption = vars.toArray(vars_assumption);
    Expression assume_expr = null;
    if (link_level) {
        String[] links = new String[var_links.size()];
        links = var_links.toArray(links);
        assume_expr = add_assume_amo(links);
    } else {
        assume_expr = add_assume_amo(vars_assumption);
    }
    // Adding Xor assumption for components.
    ComponentImpl compImpl = retrieve_main_cmp_impl();
    if (compImpl != null) {
        if (compImpl.getBlockImpl() == null) {
            compImpl = retrieve_block_impl(compImpl);
        }
        ContractSpec contractSpec = compImpl.getType().getContract();
        ContractItem assume_item = new ContractItem();
        if (assume_expr != null) {
            assume_item.setExpression(assume_expr);
            contractSpec.getAssume().add(assume_item);
        }
        if (blame_assignment == false && contractSpec != null) {
            contractSpec.getSymbol().addAll(vars_dec);
        }
    }
}
Also used : Expression(verdict.vdm.vdm_lustre.Expression) ContractItem(verdict.vdm.vdm_lustre.ContractItem) ArrayList(java.util.ArrayList) ContractSpec(verdict.vdm.vdm_lustre.ContractSpec) ComponentImpl(verdict.vdm.vdm_model.ComponentImpl) SymbolDefinition(verdict.vdm.vdm_lustre.SymbolDefinition) HashSet(java.util.HashSet)

Example 4 with ComponentImpl

use of verdict.vdm.vdm_model.ComponentImpl in project VERDICT by ge-high-assurance.

the class VDMInstrumentor method instrument_link.

// public void instrument_link(Connection connection) {
// // Connection Source
// ConnectionEnd src = connection.getSource();
// 
// // Connection Destination
// ConnectionEnd dest = connection.getDestination();
// 
// // Source Component
// Port src_port = src.getComponentPort();
// // Destination Component
// Port dest_port = dest.getComponentPort();
// 
// if (src_port == null && dest_port == null) {
// // Both are sub-compon
// System.out.println("Both are subcomponents.");
// }
// if (src_port == null && dest_port != null) {
// // Only one is Subcomponent
// System.out.println(dest_port.getId() + " -- " + dest_port.getName());
// }
// if (src_port != null && dest_port == null) {
// // One Subcomponent
// System.out.println(src_port.getId() + " -- " + src_port.getName());
// }
// }
// public void create_link(Connection old_channel, ComponentInstance
// src_componentInstance,
// ComponentInstance dest_componentInstance) {
// 
// ComponentInstance instrumented_componentInstance = new ComponentInstance();
// 
// String component_ID = src_componentInstance.getName() + "_Inst_" +
// dest_componentInstance.getName();
// instrumented_componentInstance.setId(component_ID + "_Instance");
// instrumented_componentInstance.setName(component_ID);
// 
// instrumented_componentInstance.setSpecification(value);
// instrumented_componentInstance.setImplementation(value);
// 
// ComponentType instrumented_component = new ComponentType();
// instrumented_component.setId(component_ID);
// instrumented_component.setName(component_ID);
// 
// 
// 
// Connection inst_channel = new Connection();
// 
// //Update Old connection Destination
// old_channel.setDestination(value);
// 
// //Add New Connection Source
// inst_channel.setSource(value);
// //Add New Connection Destination
// inst_channel.setDestination(value);
// 
// 
// }
public String instrument_link(String compID, Connection connection, BlockImpl blockImpl) {
    // instrument_link(connection);
    // System.out.println("Instrumented Link ***" + connection.getName());
    // Default Block Implementation
    ComponentImpl compImpl = null;
    if (compID != null) {
        compImpl = retrieve_cmp_impl(compID);
    }
    // Connections without Components Instrumentation.
    if (compImpl == null) {
        compImpl = retrieve_main_cmp_impl();
    }
    ComponentType instrumented_cmp = new ComponentType();
    // R.H.S
    ConnectionEnd src = connection.getSource();
    ComponentInstance src_componentInstance = new ComponentInstance();
    // Source Connection
    Port src_port = src.getComponentPort();
    if (src_port != null) {
        String identifier = compImpl.getId();
        // identifier = identifier.replace(".I", "_I");
        identifier = identifier.replace(".", "_dot_");
        identifier = identifier.replace("::", "_double_colon_");
        src_componentInstance.setId(identifier);
        src_componentInstance.setName(identifier);
        src_componentInstance.setImplementation(compImpl);
    }
    // if (src_port == instrumented_port) {
    CompInstancePort compInstancePort = src.getSubcomponentPort();
    if (compInstancePort != null) {
        src_componentInstance = compInstancePort.getSubcomponent();
        src_port = compInstancePort.getPort();
    }
    // R.H.S
    ConnectionEnd dest = connection.getDestination();
    ComponentInstance dest_componentInstance = new ComponentInstance();
    // Source Connection
    Port dest_port = dest.getComponentPort();
    if (dest_port != null) {
        String identifier = compImpl.getId();
        // identifier = identifier.replace(".I", "_I");
        identifier = identifier.replace(".", "_dot_");
        identifier = identifier.replace("::", "_double_colon_");
        dest_componentInstance.setId(identifier);
        dest_componentInstance.setName(identifier);
        dest_componentInstance.setImplementation(compImpl);
    }
    // if (dest_port == instrumented_port) {
    compInstancePort = dest.getSubcomponentPort();
    if (compInstancePort != null) {
        dest_componentInstance = compInstancePort.getSubcomponent();
        dest_port = compInstancePort.getPort();
    }
    String instrument_cmp_Id = src_componentInstance.getName() + "_Inst_" + dest_componentInstance.getName() + "_port_" + dest_port.getName();
    instrument_cmp_Id = instrument_cmp_Id.replace(".", "_dot_");
    // Setting Component IDs
    instrumented_cmp.setId(instrument_cmp_Id);
    instrumented_cmp.setName(instrument_cmp_Id);
    // output port
    Port instrumented_port_dest = new Port();
    instrumented_port_dest.setId(dest_port.getId());
    instrumented_port_dest.setName(dest_port.getName());
    instrumented_port_dest.setMode(dest_port.getMode());
    instrumented_port_dest.setType(dest_port.getType());
    if (dest_port.isEvent() != null && dest_port.isEvent()) {
        instrumented_port_dest.setEvent(true);
    } else {
        instrumented_port_dest.setEvent(false);
    }
    instrumented_cmp.getPort().add(instrumented_port_dest);
    // Input port
    Port instrumented_port_src = new Port();
    instrumented_port_src.setId(src_port.getId());
    instrumented_port_src.setName(src_componentInstance + "_port_" + src_port.getName());
    instrumented_port_src.setMode(src_port.getMode());
    if (src_port.isEvent() != null && src_port.isEvent()) {
        instrumented_port_src.setEvent(true);
    } else {
        instrumented_port_src.setEvent(false);
    }
    String global_constant_Id = src_componentInstance.getName();
    if (instrumented_port_src.getMode() == instrumented_port_dest.getMode()) {
        instrumented_port_src.setName(src_port.getName());
        if (instrumented_port_src.getMode() == PortMode.IN) {
            instrumented_port_src.setMode(PortMode.OUT);
        } else {
            instrumented_port_dest.setMode(PortMode.IN);
        }
    } else {
        instrumented_port_src.setName(src_port.getName());
    }
    if (dest_port.getMode() == PortMode.OUT) {
        global_constant_Id += "_port_" + dest_port.getName() + "_instrumented";
    } else {
        global_constant_Id += "_port_" + src_port.getName() + "_instrumented";
    }
    instrumented_port_src.setType(dest_port.getType());
    instrumented_cmp.getPort().add(instrumented_port_src);
    vdm_model.getComponentType().add(instrumented_cmp);
    // Modify connection.
    ConnectionEnd con_end_inst = new ConnectionEnd();
    // instrumentd_port.setPort(value);
    ComponentInstance instrumented_compInstance = new ComponentInstance();
    instrumented_compInstance.setId(connection.getName());
    instrumented_compInstance.setName(connection.getName());
    instrumented_compInstance.setSpecification(instrumented_cmp);
    // -----------------------------------------
    // Adding Auxiliary Node.
    NodeCall nodeCall = new NodeCall();
    nodeCall.setNodeId(instrumented_cmp.getId());
    Expression callExpr = new Expression();
    callExpr.setCall(nodeCall);
    ContractItem true_guarantee_item = new ContractItem();
    // true_guarantee_item.setName("true");
    Expression true_expr = new Expression();
    Boolean true_lit = Boolean.TRUE;
    true_expr.setBoolLiteral(true_lit);
    true_guarantee_item.setExpression(true_expr);
    ContractSpec contractSpec = new ContractSpec();
    contractSpec.getGuarantee().add(true_guarantee_item);
    // ---------------------------------------------
    ComponentImpl instrument_compImpl = new ComponentImpl();
    instrument_compImpl.setId(instrumented_cmp.getId() + "_dot_impl");
    instrument_compImpl.setName(instrumented_cmp.getName() + "_dot_Impl");
    instrument_compImpl.setType(instrumented_cmp);
    IfThenElse ifelse = new IfThenElse();
    // Condition
    Expression cond_expr = new Expression();
    global_constant_Id = global_constant_Id.replace(".", "_dot_");
    cond_expr.setIdentifier(global_constant_Id);
    ifelse.setCondition(cond_expr);
    // Then
    Expression then_arg = new Expression();
    then_arg.setIdentifier(dest_port.getName());
    ifelse.setThenBranch(callExpr);
    // Else
    Expression else_arg = new Expression();
    else_arg.setIdentifier(dest_port.getName());
    nodeCall.getArgument().add(else_arg);
    ifelse.setElseBranch(then_arg);
    Expression instrumented_expr = new Expression();
    instrumented_expr.setConditionalExpression(ifelse);
    NodeEquation n_eq = new NodeEquation();
    NodeEquationLHS neq_lhs = new NodeEquationLHS();
    neq_lhs.getIdentifier().add(src_port.getName() + "_instrumented");
    n_eq.setLhs(neq_lhs);
    n_eq.setRhs(instrumented_expr);
    NodeBody nodeBody = new NodeBody();
    // VariableDeclaration cond_var = new VariableDeclaration();
    // cond_var.setName(gloabal_constant_Id);
    // DataType dataType = new DataType();
    // dataType.setPlainType(PlainType.BOOL);
    // cond_var.setDataType(dataType);
    // nodeBody.getVariableDeclaration().add(cond_var);
    nodeBody.setIsMain(false);
    nodeBody.getEquation().add(n_eq);
    instrument_compImpl.setDataflowImpl(nodeBody);
    instrumented_compInstance.setImplementation(instrument_compImpl);
    vdm_model.getComponentImpl().add(instrument_compImpl);
    vdm_model.getComponentType().add(instrumented_cmp);
    // -----------------------------------------
    CompInstancePort compInstance_inst_port = new CompInstancePort();
    compInstance_inst_port.setPort(dest_port);
    compInstance_inst_port.setSubcomponent(instrumented_compInstance);
    con_end_inst.setSubcomponentPort(compInstance_inst_port);
    blockImpl.getSubcomponent().add(instrumented_compInstance);
    connection.setDestination(con_end_inst);
    Connection new_con = new Connection();
    // Copying connection related artifacts
    new_con.setName(connection.getName() + "_instrumented_channel");
    // new_con.setConnType(connection.getConnType());
    // new_con.setFlowType(connection.getFlowType());
    // 
    // new_con.setDataEncrypted(connection.isEncryptedTransmission());
    // new_con.setAuthenticated(connection.isAuthenticated());
    new_con.setSource(con_end_inst);
    compInstance_inst_port.setPort(src_port);
    new_con.setDestination(dest);
    blockImpl.getConnection().add(new_con);
    return global_constant_Id;
}
Also used : ComponentType(verdict.vdm.vdm_model.ComponentType) NodeCall(verdict.vdm.vdm_lustre.NodeCall) CompInstancePort(verdict.vdm.vdm_model.CompInstancePort) NodeBody(verdict.vdm.vdm_lustre.NodeBody) CompInstancePort(verdict.vdm.vdm_model.CompInstancePort) Port(verdict.vdm.vdm_model.Port) Connection(verdict.vdm.vdm_model.Connection) NodeEquationLHS(verdict.vdm.vdm_lustre.NodeEquationLHS) ComponentImpl(verdict.vdm.vdm_model.ComponentImpl) NodeEquation(verdict.vdm.vdm_lustre.NodeEquation) Expression(verdict.vdm.vdm_lustre.Expression) ContractItem(verdict.vdm.vdm_lustre.ContractItem) ComponentInstance(verdict.vdm.vdm_model.ComponentInstance) ContractSpec(verdict.vdm.vdm_lustre.ContractSpec) ConnectionEnd(verdict.vdm.vdm_model.ConnectionEnd) IfThenElse(verdict.vdm.vdm_lustre.IfThenElse)

Example 5 with ComponentImpl

use of verdict.vdm.vdm_model.ComponentImpl in project VERDICT by ge-high-assurance.

the class VDMInstrumentor method retrieve_block.

protected BlockImpl retrieve_block(ComponentImpl compImpl) {
    BlockImpl blockImpl = null;
    String cmpID = compImpl.getType().getId();
    for (ComponentImpl cmpImpl : vdm_model.getComponentImpl()) {
        if (cmpImpl.getBlockImpl() != null) {
            blockImpl = cmpImpl.getBlockImpl();
            for (ComponentInstance cmpInstance : blockImpl.getSubcomponent()) {
                ComponentImpl impl = cmpInstance.getImplementation();
                ComponentType enumType = null;
                if (impl != null) {
                    enumType = impl.getType();
                } else {
                    enumType = cmpInstance.getSpecification();
                }
                if (cmpID.equals(enumType.getId())) {
                    return blockImpl;
                }
            }
        }
    }
    return blockImpl;
}
Also used : BlockImpl(verdict.vdm.vdm_model.BlockImpl) ComponentType(verdict.vdm.vdm_model.ComponentType) ComponentInstance(verdict.vdm.vdm_model.ComponentInstance) ComponentImpl(verdict.vdm.vdm_model.ComponentImpl)

Aggregations

ComponentImpl (verdict.vdm.vdm_model.ComponentImpl)33 ComponentInstance (verdict.vdm.vdm_model.ComponentInstance)25 ComponentType (verdict.vdm.vdm_model.ComponentType)24 BlockImpl (verdict.vdm.vdm_model.BlockImpl)17 HashSet (java.util.HashSet)13 GenericAttribute (verdict.vdm.vdm_data.GenericAttribute)9 CompInstancePort (verdict.vdm.vdm_model.CompInstancePort)9 Port (verdict.vdm.vdm_model.Port)9 ArrayList (java.util.ArrayList)8 ConnectionEnd (verdict.vdm.vdm_model.ConnectionEnd)7 Connection (verdict.vdm.vdm_model.Connection)6 HashMap (java.util.HashMap)5 Expression (verdict.vdm.vdm_lustre.Expression)5 Table (com.ge.research.osate.verdict.aadl2csv.Table)4 ContractItem (verdict.vdm.vdm_lustre.ContractItem)4 ContractSpec (verdict.vdm.vdm_lustre.ContractSpec)4 ConstantDeclaration (verdict.vdm.vdm_lustre.ConstantDeclaration)3 NodeBody (verdict.vdm.vdm_lustre.NodeBody)3 NodeEquation (verdict.vdm.vdm_lustre.NodeEquation)3 SymbolDefinition (verdict.vdm.vdm_lustre.SymbolDefinition)3