Beispiel #1
0
def generate_synchronizer_rm(iterable_target_names):
    """returns lstswriter"""
    outlsts = lsts.writer()

    actionnames = ["tau", "kw_return false", "kw_return true"]

    return_false_action = 1
    return_true_action = 2

    transitions = [[]]

    for t in iterable_target_names:
        start_aw_action = len(actionnames)
        actionnames.append("start_awVerify%s" % t)
        end_aw_action = len(actionnames)
        actionnames.append("end_awVerify%s" % t)
        is_true_action = len(actionnames)
        actionnames.append("kw_IsTrue $(OUT = (syncTarget == %s.id))$" % t)
        is_not_true_action = len(actionnames)
        actionnames.append("~kw_IsTrue $(OUT = (syncTarget == %s.id))$" % t)

        # from initial state
        transitions[0].append((len(transitions), start_aw_action))
        transitions.append([(len(transitions) + 1, is_true_action),
                            (len(transitions) + 3, is_not_true_action)])
        transitions.append([(len(transitions) + 1, return_true_action)])
        transitions.append([(0, end_aw_action)])
        transitions.append([(len(transitions) + 1, return_false_action)])
        transitions.append([(0, end_aw_action)])

    outlsts.set_actionnames(actionnames)
    outlsts.set_transitions(transitions)
    return outlsts
Beispiel #2
0
def generate_synchronizer_rm(iterable_target_names):
    """returns lstswriter"""
    outlsts = lsts.writer()
    
    actionnames = ["tau",
                   "kw_return false",
                   "kw_return true"]
    
    return_false_action = 1
    return_true_action = 2

    transitions = [[]]

    for t in iterable_target_names:
        start_aw_action = len(actionnames)
        actionnames.append("start_awVerify%s" % t)
        end_aw_action = len(actionnames)
        actionnames.append("end_awVerify%s" % t)
        is_true_action = len(actionnames)
        actionnames.append("kw_IsTrue $(OUT = (syncTarget == %s.id))$" % t)
        is_not_true_action = len(actionnames)
        actionnames.append("~kw_IsTrue $(OUT = (syncTarget == %s.id))$" % t)

        # from initial state
        transitions[0].append((len(transitions), start_aw_action))
        transitions.append([(len(transitions)+1, is_true_action),
                            (len(transitions)+3, is_not_true_action)])
        transitions.append([(len(transitions)+1, return_true_action)])
        transitions.append([(0, end_aw_action)])
        transitions.append([(len(transitions)+1, return_false_action)])
        transitions.append([(0, end_aw_action)])

    outlsts.set_actionnames(actionnames)
    outlsts.set_transitions(transitions)
    return outlsts
Beispiel #3
0
 def __createFlagModels(self, directory):
     
        
     for flag in self.__kendoXMLParser.getFlags():    
         actions = []
         transitions = []
         
         #Enabled state
         transitions.append([])
         enabled_index = 0            
         
         #Disabled state
         transitions.append([])
         disabled_index = 1
         
         enableAction = "ALLOW<Enabled" + flag.getName() + ">"
         disableAction = "ALLOW<Disabled" + flag.getName() + ">"
         
         toEnabledAction = "ALLOW<toEnabled" + flag.getName() + ">"
         toDisabledAction = "ALLOW<toDisabled" + flag.getName() + ">"
         
         actions.append(enableAction)
         enabled_action_index = 1
         
         actions.append(disableAction)
         disabled_action_index = 2
         
         actions.append(toDisabledAction)
         toDisabled_action_index = 3
         
         actions.append(toEnabledAction)
         toEnabled_action_index = 4
         
         transitions[enabled_index].append((disabled_index, toDisabled_action_index))
         transitions[enabled_index].append((enabled_index, enabled_action_index))
         transitions[enabled_index].append((enabled_index, toEnabled_action_index))
         
         transitions[disabled_index].append((disabled_index, toDisabled_action_index))
         transitions[disabled_index].append((disabled_index, disabled_action_index))
         transitions[disabled_index].append((enabled_index, toEnabled_action_index))
     
     
         file = open(directory + "flagmodel_" + flag.getName() + ".lsts", "w")
          
         w = lsts.writer(file)
         w.set_actionnames(actions)
         w.set_transitions(transitions)
         
         #Set right intial state based on the flag default state   
         if flag.getDefault_value() == False:
             w.get_header().initial_states = disabled_index
         else:
             w.get_header().initial_states = enabled_index
         
         w.write()  
         
         ref_machine_file = open(directory + "rm" + os.sep + "flagmodel_" + flag.getName() + "-rm.lsts", "w")
     
         #write refinement machines
         self.__writeRefinementMachine({}, ref_machine_file)
Beispiel #4
0
    def __writeLsts(self, lsts_model, model_name, outputDir):

        transitions = []

        states = lsts_model.getStates()
        actions = lsts_model.getActions()
        state_props = {}
        refinements = []

        for state in lsts_model.getStates():
            state_transitions = []
            for transition in state.getTransitions():
                #print states[0] == transition.getFromState()
                state_transitions.append(
                    (states.index(transition.getToState()),
                     actions.index(transition.getAction()) + 1))

            transitions.append(state_transitions)

            for state_prop in state.getState_propositions():
                if state_prop.getName() in state_props:
                    state_props[state_prop.getName()].append(
                        states.index(state))

                else:
                    state_props[state_prop.getName()] = []
                    state_props[state_prop.getName()].append(
                        states.index(state))
                    if state_prop.getKeywords() != None and len(
                            state_prop.getKeywords()) > 0:
                        if state_prop.getName() != "svStart":
                            refinements.append((state_prop.getName(),
                                                state_prop.getKeywords()))

        action_names = []

        for action in actions:
            action_names.append(action.getName())
            if action.getRefinements() != None:
                refinements.append((action.getName(), action.getRefinements()))

        #self.__mergeStates(transitions, actions)

        action_machine_file = open(outputDir + model_name + ".lsts", "w")
        ref_machine_file = codecs.open(
            outputDir + "rm" + os.sep + model_name + "-rm.lsts", "w",
            "iso-8859-1")

        w = lsts.writer(action_machine_file)
        w.set_actionnames(action_names)
        w.set_transitions(transitions)

        w.set_stateprops(state_props)
        w.get_header().initial_states = states.index(
            lsts_model.getStart_state())

        w.write()

        #write refinement machines
        self.__writeRefinementMachine(refinements, ref_machine_file)
Beispiel #5
0
def specialiser(targetdir,input_fileobj,output_fileobj):

    # Read APPLICATION and ABSTRACTSOURCE tags
    abstract_lsts_name, application_name = None, None

#    for line in file(infofilename):
    for line in input_fileobj:
        if line[:15]=="ABSTRACTSOURCE:":
            abstract_lsts_name=os.path.join(targetdir,line.split(":")[1].strip()+".lsts")

        elif line[:12]=="APPLICATION:":
            application_name=line.split(":")[1].strip()

    if abstract_lsts_name==None: 
        raise SpecialiserError("ABSTRACTSOURCE not found")

    # Open abstract LSTS file
    abslsts=lsts.reader( open(abstract_lsts_name,'r') )
    # the new lsts is based on the abslsts
    newlsts=lsts.writer( lsts_object=abslsts ) 

    # Specialise the abstract LSTS by replacing @APPLICATION with concrete
    # application name in the action names of the LSTS
    newactionnames=[]
    for index,action in enumerate(abslsts.get_actionnames()):
        if application_name!=None and "@APPLICATION" in action:
            newactionnames.append(action.replace('@APPLICATION', application_name))
        else:
            newactionnames.append(action)

    # Write out the specialised LSTS.
    newlsts.set_actionnames(newactionnames)
    newlsts.write( output_fileobj )
Beispiel #6
0
def create_lsts(lstsdata, keep_actionnames=["tau"], keep_propositionnames=()):
    """
    Dual for create_datastructure: builds a new lsts object
    based on the given LstsData object.
    """
    newlsts = lsts.writer()

    actionnames = keep_actionnames[:]
    transitions = [[]]
    propositions = dict([(p, []) for p in keep_propositionnames])
    first_state_symbol = lstsdata.initial_state
    found_states = {
        first_state_symbol: 0
    }  # map state string in lstsdata to state number

    statestack = [first_state_symbol]

    while statestack:
        ss = statestack.pop()
        ssnum = found_states[ss]

        for t in lstsdata.tr_by_ss[ss]:
            if not t.action in actionnames:
                actionnames.append(t.action)
            acnum = actionnames.index(t.action)

            ds = '"%s"' % t.dest

            if not ds in found_states:
                found_states[ds] = len(found_states)
                transitions.append([])
                if ds in lstsdata.tr_by_ss:
                    # there are leaving transitions from ds
                    statestack.append(ds)
            dsnum = found_states[ds]

            transitions[ssnum].append((dsnum, acnum))

    newlsts.set_actionnames(actionnames)
    newlsts.set_transitions(transitions)

    for st in lstsdata.pr_by_st:
        for pr in lstsdata.pr_by_st[st]:
            if st in found_states:
                if not pr.prop in ["gt:istate"]:
                    # reserved state propositions are not written to the lsts
                    if not pr.prop in propositions:
                        propositions[pr.prop] = []
                    propositions[pr.prop].append(found_states[st])

    newlsts.set_stateprops(propositions)
    return newlsts
Beispiel #7
0
    def __writeLsts(self,lsts_model, model_name, outputDir):
        
        transitions = []
        
        states = lsts_model.getStates()
        actions = lsts_model.getActions()
        state_props = {}
        refinements = []

        for state in lsts_model.getStates():
            state_transitions = []
            for transition in state.getTransitions():
                #print states[0] == transition.getFromState()
                state_transitions.append((states.index(transition.getToState()), actions.index(transition.getAction())+1))
        
            transitions.append(state_transitions)
            
            for state_prop in state.getState_propositions():
                if state_prop.getName() in state_props:
                    state_props[state_prop.getName()].append(states.index(state))

                else:
                    state_props[state_prop.getName()] = []
                    state_props[state_prop.getName()].append(states.index(state))
                    if state_prop.getKeywords() != None and len(state_prop.getKeywords()) > 0:
                        if state_prop.getName() != "svStart":
                            refinements.append((state_prop.getName(), state_prop.getKeywords()))    
    
        action_names = []

        
        for action in actions:
            action_names.append(action.getName())
            if action.getRefinements() != None:
                refinements.append((action.getName(),action.getRefinements()))
        
        #self.__mergeStates(transitions, actions)            
        
        action_machine_file = open(outputDir + model_name + ".lsts", "w")
        ref_machine_file = codecs.open(outputDir + "rm" + os.sep + model_name + "-rm.lsts", "w", "iso-8859-1")
        
        w = lsts.writer(action_machine_file)
        w.set_actionnames(action_names)
        w.set_transitions(transitions)
        
        w.set_stateprops(state_props)     
        w.get_header().initial_states = states.index(lsts_model.getStart_state())
          
        w.write()
        
        #write refinement machines
        self.__writeRefinementMachine(refinements, ref_machine_file)
Beispiel #8
0
    def __writeRefinementMachine(self, refinements, file):

        transitions = []
        actions = []

        #add central state
        transitions.append([])

        for ref in refinements:
            refName = ref[0]
            keywords = ref[1]

            #start aw/sv
            transitions.append([])
            actions.append("start_" + refName)
            transitions[0].append((len(transitions) - 1, len(actions)))

            prev_state_index = len(transitions) - 1

            #keywords
            for kw in keywords:

                if kw.strip() == "": continue

                matches = re.findall("\$(\w+)\$", kw)
                if matches != None and len(matches) > 0:
                    for match in matches:
                        #kw = lstsmodel.escape(kw.replace(match,"(OUT = " + match + ".name" + ")"))
                        kw = kw.replace(
                            match, "(OUT = " +
                            self.__removeIllegalChars(match).lower() + ")")
                if kw in actions:
                    kw_index = actions.index(kw) + 1
                else:
                    actions.append(kw)
                    kw_index = len(actions)

                transitions.append([])
                transitions[prev_state_index].append(
                    (len(transitions) - 1, kw_index))
                prev_state_index = len(transitions) - 1

            #end aw/sv
            actions.append("end_" + refName)
            transitions[prev_state_index].append((0, len(actions)))

        w = lsts.writer(file)
        w.set_actionnames(actions)
        w.set_transitions(transitions)

        w.write()
Beispiel #9
0
    def __writeRefinementMachine(self, refinements, file):
        
        transitions = []
        actions = []
        
        #add central state
        transitions.append([])
        
        for ref in refinements:
            refName = ref[0]
            keywords = ref[1]
            

            #start aw/sv
            transitions.append([])
            actions.append("start_" + refName)
            transitions[0].append((len(transitions) - 1, len(actions)))
            
            prev_state_index = len(transitions) - 1
            
            #keywords
            for kw in keywords:
                
                if kw.strip() == "": continue

                matches = re.findall("\$(\w+)\$",kw)
                if matches != None and len(matches) > 0:
                    for match in matches:
                        #kw = lstsmodel.escape(kw.replace(match,"(OUT = " + match + ".name" + ")"))
                        kw = kw.replace(match,"(OUT = " + self.__removeIllegalChars(match).lower() + ")")
                if kw in actions:
                    kw_index = actions.index(kw) + 1
                else:
                    actions.append(kw)
                    kw_index = len(actions) 
                   
                transitions.append([])
                transitions[prev_state_index].append((len(transitions) - 1, kw_index))
                prev_state_index = len(transitions) - 1
            
            
            #end aw/sv
            actions.append("end_" + refName)
            transitions[prev_state_index].append((0, len(actions)))
            
        
        w = lsts.writer(file)
        w.set_actionnames(actions)
        w.set_transitions(transitions)

        w.write()
Beispiel #10
0
def create_lsts(lstsdata, keep_actionnames=["tau"], keep_propositionnames=()):
    """
    Dual for create_datastructure: builds a new lsts object
    based on the given LstsData object.
    """
    newlsts=lsts.writer()

    actionnames=keep_actionnames[:]
    transitions=[[]]
    propositions=dict([(p,[]) for p in keep_propositionnames])
    first_state_symbol=lstsdata.initial_state
    found_states={first_state_symbol:0} # map state string in lstsdata to state number

    statestack=[first_state_symbol]

    while statestack:
        ss=statestack.pop()
        ssnum=found_states[ss]

        for t in lstsdata.tr_by_ss[ss]:
            if not t.action in actionnames:
                actionnames.append(t.action)
            acnum=actionnames.index(t.action)

            ds='"%s"'%t.dest
            
            if not ds in found_states:
                found_states[ds]=len(found_states)
                transitions.append([])
                if ds in lstsdata.tr_by_ss:
                    # there are leaving transitions from ds
                    statestack.append(ds)
            dsnum=found_states[ds]
            
            transitions[ssnum].append((dsnum,acnum))

    newlsts.set_actionnames(actionnames)
    newlsts.set_transitions(transitions)

    for st in lstsdata.pr_by_st:
        for pr in lstsdata.pr_by_st[st]:
            if st in found_states:
                if not pr.prop in ["gt:istate"]:
                    # reserved state propositions are not written to the lsts
                    if not pr.prop in propositions:
                        propositions[pr.prop]=[]
                    propositions[pr.prop].append(found_states[st])

    newlsts.set_stateprops(propositions)
    return newlsts
Beispiel #11
0
def generate_synchronizer(iterable_target_names):
    """generate_synchronizer returns lsts_writer object"""
    outlsts = lsts.writer()

    actionnames = [
        "tau",
        "WAKEtgt<Begin Synchronization>",
        "REQALLtgt<Unprime Targets>",
        "SLEEPtgt<End Synchronization: Success>",
        "SLEEPtgt<End Synchronization: Failure>",
    ]

    syncsucc_state = 2
    syncfailed_action = 4

    # (dest_state, action_number)
    transitions = [[(1, 1)], [(3, 2)], [(0, 3)]]

    stateprops = {}

    for t in iterable_target_names:
        verifysucc_action = len(actionnames)
        actionnames.append("awVerify%s" % t)

        verifyfail_action = len(actionnames)
        actionnames.append("~awVerify%s" % t)

        reqprime_action = len(actionnames)
        actionnames.append("REQALLtgt<Prime %s>" % t)

        verifysucc_state = len(transitions) + 1
        verifyfail_state = len(transitions) + 2

        stateprops['successful verification of %s' % t] = [verifysucc_state]
        stateprops['failed verification of %s' % t] = [verifyfail_state]

        # from last failed verification state:
        transitions.append([(verifysucc_state, verifysucc_action),
                            (verifyfail_state, verifyfail_action)])

        # from verifysucc_state:
        transitions.append([(syncsucc_state, reqprime_action)])

    # from last failed verification state fail the whole thing:
    transitions.append([(0, syncfailed_action)])

    outlsts.set_actionnames(actionnames)
    outlsts.set_transitions(transitions)
    outlsts.set_stateprops(stateprops)
    return outlsts
Beispiel #12
0
def generate_synchronizer(iterable_target_names):
    """generate_synchronizer returns lsts_writer object"""
    outlsts = lsts.writer()

    actionnames = ["tau",
                   "WAKEtgt<Begin Synchronization>",
                   "REQALLtgt<Unprime Targets>",
                   "SLEEPtgt<End Synchronization: Success>",
                   "SLEEPtgt<End Synchronization: Failure>",
                   ]

    syncsucc_state = 2
    syncfailed_action = 4

    # (dest_state, action_number)
    transitions = [[(1,1)],[(3,2)],[(0,3)]]

    stateprops = {}

    for t in iterable_target_names:
        verifysucc_action = len(actionnames)
        actionnames.append("awVerify%s" % t)
        
        verifyfail_action = len(actionnames)
        actionnames.append("~awVerify%s" % t)
        
        reqprime_action = len(actionnames)
        actionnames.append("REQALLtgt<Prime %s>" % t)

        verifysucc_state  = len(transitions)+1
        verifyfail_state  = len(transitions)+2

        stateprops['successful verification of %s' % t] = [verifysucc_state]
        stateprops['failed verification of %s' % t] = [verifyfail_state]

        # from last failed verification state:
        transitions.append([(verifysucc_state, verifysucc_action),
                            (verifyfail_state, verifyfail_action)])

        # from verifysucc_state:
        transitions.append([(syncsucc_state, reqprime_action)])
        
    # from last failed verification state fail the whole thing:
    transitions.append([(0, syncfailed_action)])

    outlsts.set_actionnames(actionnames)
    outlsts.set_transitions(transitions)
    outlsts.set_stateprops(stateprops)
    return outlsts
Beispiel #13
0
def main(working_directory, ts_type, targetname, action_machine_names, file_object ):


    running_states_apps = []
    taskswitcher=lsts.writer()

    # Create initial state and add "tau" action:
    taskswitcher.set_transitions([[]])
    taskswitcher.set_actionnames(["tau"])

    for am in action_machine_names:
        # To check the application name from the state proposition,
        # let's try to read the lsts file
        # try:
        #     amlsts=lsts.reader(open(am+".lsts"))
        #     amlsts.read()
        #     
        #     istate=amlsts.get_header().initial_states
        #     istateprops=lsts.props_by_states(amlsts)[istate]
        #     
        #     stateproplist=amlsts.get_stateprops().keys()
        #     stateproplist.sort()
        # except:
        #     istateprops=[]

        appname=""
        try:
            with open(os.path.join(working_directory,"%s.info" % am),'r') as am_file:
                appname=find_application_name( am_file )
        except IOError: 
            pass

        if not appname:
            pass
            #sys.stderr.write("generateTaskSwitcher: Warning: application name could not be found in '%s.info'%s" % (am,os.linesep))

        if ts_type in ["am","amtgts"]:
            add_activation_transitions(taskswitcher, running_states_apps, am, appname)
        elif ts_type == "rm":
            add_refinement_transitions(taskswitcher, am, appname)
        else:
            return False
            
    if ts_type == "amtgts" and targetname:
        extend_for_target_switching(taskswitcher, targetname, running_states_apps)

    taskswitcher.write(file_object)
    return True
    def createVariableModels(self):

        for v in self.__variables:

            verifyAllowActions, toAllowActions = v.getActions()
            actions = verifyAllowActions + toAllowActions

            transitions = []
            state_props = {}
            refinements = []

            state_props["SleepState"] = []

            idx = 0

            values = v.getValues()

            for value in values:
                state_transitions = []

                #Verifying allow transitions to the same state (value remains same)
                state_transitions.append((idx, idx + 1))

                #Allow transitions to other values
                for i in range(0, len(v.getValues())):

                    if i == idx:
                        continue

                    state_transitions.append(
                        (i, len(verifyAllowActions) + 1 + i))

                state_props["SleepState"].append(idx)
                state_props[v.getName() + value] = [idx]
                idx += 1
                transitions.append(state_transitions)

            action_file = open(self.__outputDir + v.getName() + ".lsts", "w")

            w = lsts.writer(action_file)
            w.set_actionnames(actions)
            w.set_transitions(transitions)

            w.set_stateprops(state_props)
            w.get_header().initial_states = 0
            w.write()
	def createVariableModels(self):
		

		for v in self.__variables:
			
			verifyAllowActions, toAllowActions = v.getActions()
			actions = verifyAllowActions + toAllowActions
			
			transitions = []
			state_props = {}
			refinements = []

			state_props["SleepState"] = []
			
			idx = 0
			
			values = v.getValues()
			
			for value in values:
				state_transitions = []
				
				#Verifying allow transitions to the same state (value remains same) 
				state_transitions.append((idx,idx+1))
				
				#Allow transitions to other values
				for i in range (0,len(v.getValues())):
					
					if i == idx:
						continue
					
					state_transitions.append((i,len(verifyAllowActions) + 1 + i))
					
				state_props["SleepState"].append(idx)
				state_props[v.getName() + value] = [idx]
				idx += 1
				transitions.append(state_transitions)
				
			action_file = open(self.__outputDir + v.getName() + ".lsts", "w")	
			
			w = lsts.writer(action_file)
			w.set_actionnames(actions)
			w.set_transitions(transitions)
			
			w.set_stateprops(state_props)     
			w.get_header().initial_states = 0
			w.write()	
Beispiel #16
0
def convert_to_lsts(model, filelike_object):
    action_map = dict()
    visible_set = set([str(alpha) for alpha in model.getActions()])
    visible_set.discard("tau")
    action_vec = ["tau"] + [a for a in visible_set]
    for alpha, idx in zip(action_vec, xrange(len(action_vec))):
        action_map[alpha] = idx

    try:
        stateprops = [str(prop) for prop in model.getStatePropList()]
    except AttributeError:
        stateprops = []

    conversionmodel = ConversionModel(action_map, stateprops, model.getInitialState())

    w=lsts.writer(filelike_object)
    w.set_actionnames(action_vec)
    w.set_transitions(conversionmodel.getTransitions())
    w.set_stateprops(conversionmodel.getStateProps())
    w.write()
Beispiel #17
0
def specialiser(targetdir, input_fileobj, output_fileobj):

    # Read APPLICATION and ABSTRACTSOURCE tags
    abstract_lsts_name, application_name = None, None

    #    for line in file(infofilename):
    for line in input_fileobj:
        if line[:15] == "ABSTRACTSOURCE:":
            abstract_lsts_name = os.path.join(
                targetdir,
                line.split(":")[1].strip() + ".lsts")

        elif line[:12] == "APPLICATION:":
            application_name = line.split(":")[1].strip()

    if abstract_lsts_name == None:
        raise SpecialiserError("ABSTRACTSOURCE not found")

    # Open abstract LSTS file
    abslsts = lsts.reader(open(abstract_lsts_name, 'r'))
    # the new lsts is based on the abslsts
    newlsts = lsts.writer(lsts_object=abslsts)

    # Specialise the abstract LSTS by replacing @APPLICATION with concrete
    # application name in the action names of the LSTS
    newactionnames = []
    for index, action in enumerate(abslsts.get_actionnames()):
        if application_name != None and "@APPLICATION" in action:
            newactionnames.append(
                action.replace('@APPLICATION', application_name))
        else:
            newactionnames.append(action)

    # Write out the specialised LSTS.
    newlsts.set_actionnames(newactionnames)
    newlsts.write(output_fileobj)
    def createInterface(self):

        transitions = []
        state_props = {}
        refinements = []
        actions = []

        state_props["SleepState"] = [0]

        #Add central state
        transitions.append([])
        for v in self.__variables:

            verifyTransitions = []
            values = v.getValues()

            for value in values:

                #Sets CallVerify transitions and actions
                transitions.append([])

                verifyTransitions.append(
                    (len(transitions) - 1,
                     self.__addAction__(
                         "REQ<@PARENT: " + v.getName() + value + ">",
                         actions)))
                transitions[-1].append(
                    (0,
                     self.__addAction__(
                         "SLEEPapp<ReturnVerify" + v.getName() + ":" + value +
                         ">", actions)))

                #add setValue transitions and actions
                if (value != v.getUnknownValue()):
                    transitions.append([])
                    transitions[0].append(
                        (len(transitions) - 1,
                         self.__addAction__(
                             "WAKEapp<CallSet" + v.getName() + value + ">",
                             actions)))

                    transitions.append([])
                    transitions[-2].append(
                        (len(transitions) - 1,
                         self.__addAction__(
                             "REQALL<@PARENT: To" + v.getName() + value + ">",
                             actions)))

                    transitions[-1].append(
                        (0,
                         self.__addAction__(
                             "SLEEPapp<ReturnSet" + v.getName() + value + ">",
                             actions)))

                    #Adds CallDiscovers from unknown value
                    if (v.getUnknownValue()):

                        transitions.append([])
                        transitions[0].append(
                            (len(transitions) - 1,
                             self.__addAction__(
                                 "WAKEapp<@PARENT: CallDiscover" +
                                 v.getName() + value + ">", actions)))

                        transitions.append([])
                        transitions[-2].append(
                            (len(transitions) - 1,
                             self.__addAction__(
                                 "REQ<@PARENT: " + v.getName() +
                                 v.getUnknownValue() + ">", actions)))

                        transitions.append([])
                        transitions[-3].append(
                            (len(transitions) - 1,
                             self.__addAction__(
                                 "REQ<@PARENT: " + v.getName() + value + ">",
                                 actions)))

                        transitions[-2].append(
                            (len(transitions) - 1,
                             self.__addAction__(
                                 "REQALL<@PARENT: To" + v.getName() + value +
                                 ">", actions)))

                        transitions[-1].append(
                            (0,
                             self.__addAction__(
                                 "SLEEPapp<@PARENT: ReturnDiscover" +
                                 v.getName() + value + ">", actions)))

            transitions.append(verifyTransitions)
            transitions[0].append(
                (len(transitions) - 1,
                 self.__addAction__(
                     "WAKEapp<CallVerify" + v.getName() + "Status>", actions)))

        #Add forget settings call
        foundForget = False
        for v in self.__variables:
            if v.getUnknownValue():

                if not foundForget:
                    transitions.append([])
                    transitions[0].append(
                        (len(transitions) - 1,
                         self.__addAction__("WAKEapp<CallForgetSettings>",
                                            actions)))
                    foundForget = True

                transitions.append([])
                transitions[-2].append(
                    (len(transitions) - 1,
                     self.__addAction__(
                         "REQALL<@PARENT: To" + v.getName() +
                         v.getUnknownValue() + ">", actions)))

        if foundForget:
            transitions[-1].append(
                (0,
                 self.__addAction__("SLEEPapp<ReturnForgetSettings>",
                                    actions)))

        action_file = open(self.__outputDir + "interface.lsts", "w")

        w = lsts.writer(action_file)
        w.set_actionnames(actions)
        w.set_transitions(transitions)

        w.set_stateprops(state_props)
        w.get_header().initial_states = 0
        w.write()
Beispiel #19
0
    def __createFlagModels(self, directory):

        for flag in self.__kendoXMLParser.getFlags():
            actions = []
            transitions = []

            #Enabled state
            transitions.append([])
            enabled_index = 0

            #Disabled state
            transitions.append([])
            disabled_index = 1

            enableAction = "ALLOW<Enabled" + flag.getName() + ">"
            disableAction = "ALLOW<Disabled" + flag.getName() + ">"

            toEnabledAction = "ALLOW<toEnabled" + flag.getName() + ">"
            toDisabledAction = "ALLOW<toDisabled" + flag.getName() + ">"

            actions.append(enableAction)
            enabled_action_index = 1

            actions.append(disableAction)
            disabled_action_index = 2

            actions.append(toDisabledAction)
            toDisabled_action_index = 3

            actions.append(toEnabledAction)
            toEnabled_action_index = 4

            transitions[enabled_index].append(
                (disabled_index, toDisabled_action_index))
            transitions[enabled_index].append(
                (enabled_index, enabled_action_index))
            transitions[enabled_index].append(
                (enabled_index, toEnabled_action_index))

            transitions[disabled_index].append(
                (disabled_index, toDisabled_action_index))
            transitions[disabled_index].append(
                (disabled_index, disabled_action_index))
            transitions[disabled_index].append(
                (enabled_index, toEnabled_action_index))

            file = open(directory + "flagmodel_" + flag.getName() + ".lsts",
                        "w")

            w = lsts.writer(file)
            w.set_actionnames(actions)
            w.set_transitions(transitions)

            #Set right intial state based on the flag default state
            if flag.getDefault_value() == False:
                w.get_header().initial_states = disabled_index
            else:
                w.get_header().initial_states = enabled_index

            w.write()

            ref_machine_file = open(
                directory + "rm" + os.sep + "flagmodel_" + flag.getName() +
                "-rm.lsts", "w")

            #write refinement machines
            self.__writeRefinementMachine({}, ref_machine_file)
	def createInterface(self):
		
		transitions = []
		state_props = {}
		refinements = []
		actions = []
		
		state_props["SleepState"] = [0]
	

		#Add central state
		transitions.append([])
		for v in self.__variables:
			
			verifyTransitions = []
			values = v.getValues()

			
		
			for value in values:
			
				#Sets CallVerify transitions and actions
				transitions.append([])
				
				verifyTransitions.append((len(transitions)-1,self.__addAction__("REQ<@PARENT: "+ v.getName() + value + ">", actions)))
				transitions[-1].append((0,self.__addAction__("SLEEPapp<ReturnVerify" + v.getName() +":"+ value + ">", actions)))		
			
				#add setValue transitions and actions
				if ( value != v.getUnknownValue()): 
					transitions.append([])
					transitions[0].append((len(transitions)-1,self.__addAction__("WAKEapp<CallSet" + v.getName() + value + ">", actions)))

					transitions.append([])
					transitions[-2].append((len(transitions)-1,self.__addAction__("REQALL<@PARENT: To"+ v.getName() + value + ">", actions)))

					transitions[-1].append((0,self.__addAction__("SLEEPapp<ReturnSet" + v.getName() + value + ">", actions)))
				
					#Adds CallDiscovers from unknown value 
					if(v.getUnknownValue()):
		
						transitions.append([])
						transitions[0].append((len(transitions)-1,self.__addAction__("WAKEapp<@PARENT: CallDiscover" + v.getName() + value + ">", actions)))

						transitions.append([])
						transitions[-2].append((len(transitions)-1,self.__addAction__("REQ<@PARENT: "+ v.getName() + v.getUnknownValue() + ">", actions)))
						
						transitions.append([])
						transitions[-3].append((len(transitions)-1,self.__addAction__("REQ<@PARENT: "+ v.getName() + value + ">", actions)))
						
						transitions[-2].append((len(transitions)-1,self.__addAction__("REQALL<@PARENT: To"+ v.getName() + value + ">", actions)))
			
						transitions[-1].append((0,self.__addAction__("SLEEPapp<@PARENT: ReturnDiscover"+ v.getName() + value + ">", actions)))
				
			transitions.append(verifyTransitions)
			transitions[0].append((len(transitions)-1,self.__addAction__("WAKEapp<CallVerify" + v.getName() + "Status>", actions)))
			
		
		#Add forget settings call
		foundForget = False
		for v in self.__variables:
			if v.getUnknownValue():
			
				if not foundForget:
					transitions.append([])
					transitions[0].append((len(transitions)-1,self.__addAction__("WAKEapp<CallForgetSettings>", actions)))
					foundForget = True
					
				transitions.append([])
				transitions[-2].append((len(transitions)-1,self.__addAction__("REQALL<@PARENT: To" + v.getName() + v.getUnknownValue() +">", actions)))			
				
		if foundForget:
			transitions[-1].append((0,self.__addAction__("SLEEPapp<ReturnForgetSettings>", actions)))
		
	
			
		action_file = open(self.__outputDir + "interface.lsts", "w")				


		w = lsts.writer(action_file)
		w.set_actionnames(actions)
		w.set_transitions(transitions)
		
		w.set_stateprops(state_props)     
		w.get_header().initial_states = 0
		w.write()