%%%%%%%%%%%%%%%%%%%%%%%%%% checking %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% if it is NOT one of the recognised actions, ignore it exec(_, Action) :- Action =.. [Head|_], \+ member(Head, [create, update, delete, cond_action, post_issue, receive_issue, get_customer_requirements, get_issue_content ]). %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% triggering_conditions_satisfied(Process, PID) :- dyn(agenda(process(Instance, Process/PID, PStatus, Priority, Begin_time/End_time, Time_cost, (Provider/Provider_type, Receiver/Receiver_type), [Trigger], Precond, Action, Postcond))), (Trigger = true; Trigger = dyn(event(Instance, Event, _, Priority, Begin_time/End_time, (Provider/Provider_type, Receiver/Receiver_type), Event_content)), dyn(event(Instance, Event, TStatus, Priority, Begin_time/End_time, (Provider/Provider_type, Receiver/Receiver_type), Event_content)), TState = Status/_, \+ Status = suspended, \+ Status = cancelled, \+ Status = finished ). triggering_conditions_satisfied(Process, PID) :- write('Error: triggering event has been suspended, cancelled or is ended.'), nl, fail. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % execute the process, in 'exe.pl' %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% execute_process(Process_type, Tri_id) :- dyn(current_state(S)), read_next_state(S1), dyn(agenda(process(Instance, Process/PID, PStatus, Priority, Begin_time/End_time, Time_cost, (Provider/Provider_type, Receiver/Receiver_type), [Trigger], Precond, Action, Postcond))), exec_process(process(Instance, Process/PID, PStatus, Priority, Begin_time/End_time, Time_cost, (Provider/Provider_type, Receiver/Receiver_type), [Trigger], Precond, Action, Postcond )), % record the change of state P = dyn(agenda(process(Instance, Process/PID, PStatus, Priority, Begin_time/End_time, Time_cost, (Provider/Provider_type, Receiver/Receiver_type), [Trigger], Precond, Action, Postcond))), New = dyn(agenda(process(Instance, Process/PID, PStatus, Priority, Begin_time/End_time, Time_cost, (Provider/Provider_type, Receiver/Receiver_type), [Trigger], Precond, Action, Postcond))), retract(P), assert(dyn(pro_occ(Process_type, Tri_id))), assert(dyn(occ_begin( Process_type, Tri_id, Begin_time))), assert(dyn(occ_end( Process_type, Tri_id, End_time))), assert(dyn(change((S, S1), (Process_type, Tri_id), [Del], [dyn(pro_occ(Process_type, Tri_id)), dyn(occ_begin(Process_type, Tri_id, Begin_time)), dyn(occ_end( Process_type, Tri_id, End_time))] ))). %---------------------------------------------------------------------- % adding new trigger occurrences from the dynamic business model !! query_for_adding_triggers :- write('Would you like to add new triggers to the system? (y./n.)'),nl, read(Ans), (Ans = y, ['/hame/jessicac/kbst-bm/simulator/data/new.db'], write('* Finish importing a new trigger.'), nl; \+ Ans = y ). %-------------------------- Common Predicates------------------------- % move current state to the next state. update_state :- dyn(current_state(S)), read_next_state(ID), retract(dyn(current_state(S))), assert(dyn(current_state(ID))), dyn(state_id(X)), retract(dyn(state_id(X))), assert(dyn(state_id(ID))), dyn(current_time(Time)), assert(dyn(state(ID, time(Time)))). %----------------------------------------------------------------------- %% Initial Value. state_id/1 is separated from current_state ID so that %% state_id always generated with an unique ID (since state ID can be a %% revisited state number). read_next_state(ID1) :- dyn(state_id(ID)), ID1 is ID + 1. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% look :- report_state. %---------------------------------------------------------------------- report_state :- write('------- report dynamic system state -------'),nl, dyn(current_state(S)), dyn(state(S, time(T))), write('Shown State: '), write(S), write(' State Time: '), write(T), dyn(current_time(Tc)), Tw is Tc -1, write('. It is now time: '), write(Tw),nl,nl, findall(X, ( dyn(X), portray_clause(X),nl), _). %------------------------- End of Document -----------------------------