Packages
bpe
4.10.5
13.5.22-aleph
11.4.16
11.4.15
11.4.14
11.4.13
9.9.7
9.9.6
8.12.4
8.12.3
8.12.1
8.12.0
retired
8.2.1
8.2.0
8.1.0
7.11.0
7.10.4
7.10.3
7.10.2
7.10.1
7.9.1
7.9.0
7.8.2
7.8.1
7.8.0
7.6.4
7.6.3
7.6.2
7.6.1
7.6.0
7.5.15
7.5.14
7.5.13
7.5.12
7.5.11
7.5.10
7.5.9
7.5.8
7.5.7
7.5.6
7.5.5
7.5.3
7.5.2
7.5.1
7.5.0
7.4.11
7.4.10
7.4.9
7.4.8
7.4.7
7.4.6
7.4.5
7.4.4
7.4.3
7.4.2
7.4.1
7.4.0
7.3.0
7.2.8
7.2.7
7.2.6
7.1.6
7.1.5
7.1.4
7.1.3
7.1.2
6.12.7
6.12.6
6.12.5
6.12.3
6.12.2
6.12.1
6.12.0
6.11.0
6.10.0
6.5.3
6.5.2
6.5.1
6.5.0
6.4.0
6.3.0
5.12.0
5.11.4
5.11.3
5.11.2
5.11.1
5.11.0
5.8.7
5.8.6
5.8.5
5.8.4
5.8.3
5.8.2
5.8.1
5.8.0
5.7.0
5.6.0
5.5.2
5.5.1
5.4.0
5.2.0
5.1.3
5.1.2
5.1.1
4.12.4
4.12.3
4.12.2
4.12.1
4.12.0
4.11.8
4.11.7
4.11.6
4.11.5
4.11.4
4.11.3
4.11.2
4.11.1
4.11.0
4.10.24
4.10.23
4.10.22
4.10.21
4.10.20
4.10.19
4.10.18
4.10.17
4.10.16
4.10.15
4.10.14
4.10.13
4.10.12
4.10.11
4.10.10
4.10.9
4.10.8
4.10.7
4.10.6
4.10.5
4.10.4
4.10.3
4.10.2
4.10.1
4.10.0
4.9.18
4.9.17
4.9.16
4.9.15
4.9.14
4.9.13
4.9.12
4.9.11
4.9.10
4.9.9
4.9.8
4.9.7
4.9.6
4.9.5
4.9.4
4.9.3
4.9.2
4.9.1
4.9.0
4.8.1
4.8.0
4.7.5
4.7.3
4.7.2
4.7.1
4.7.0
4.6.0
2.4.0
0.7.16
ERP/1: RTP GST WebRTC ICE SDP H.264 H.265 MP4 MPEG-2 HLS HEVC
Current section
Files
Jump to
Current section
Files
src/ext/bpe_gateways.erl
-module(bpe_gateways).
-author('Oleksandr Naumov').
-include("bpe.hrl").
-include("doc.hrl").
-export([def/0]).
-compile(export_all).
-import(lists, [reverse/1, keyfind/3, keyreplace/4]).
def() ->
R_raw=[{r1, a,b},
{r2, b,c},
{r3, b,d},
{r4, c,e},
{r5, c,f},
{r6, d,g},
{r7, e,h},
{r8, h,j},
{r9, f,i},
{r10,i,j},
{r11,f,g},
{r12,g,j},
{r13,j,k}],
{R,N}=getEdgesAndVertices(R_raw),
P = #process { name = 'Graph',
flows = R,
tasks = N,
beginEvent = a,
endEvent = k,
events=[]},
fixGateways(fixBeginEndEvents(P)).
%%vertices(R,N=[]) -> N
vertices(R) -> vertices(reverse(R),[]).
vertices([], N) -> N;
vertices([#sequenceFlow{name=Id, source=From, target=To} | Rtail], N) ->
N1 = case keyfind(From, #task.name, N) of
false -> [#task{name=From, out=[Id], module=?MODULE} | N];
V = #task{out=L} -> keyreplace(From, #task.name, N, V#task{out=[Id|L]})
end,
NewN = case keyfind(To, #task.name, N1) of
false -> [#task{name=To, in=[Id], module=?MODULE} | N1];
V1 = #task{in=L1} -> keyreplace(To, #task.name, N1, V1#task{in=[Id|L1]})
end,
vertices(Rtail, NewN).
getEdgesAndVertices(Edges_Raw) ->
R=[#sequenceFlow{name = Id, source=From, target=To} || {Id, From, To} <- Edges_Raw],
{R,vertices(R)}.
setVertexType(Id, Type, Vertices) ->
NewVertex = (keyfind(Id, #task.name, Vertices))#gateway{type=Type}, %should be #gateway{type=Type}
keyreplace(Id, #sequenceFlow.name, Vertices, NewVertex).
fixBeginEndEvents (Proc) ->
Tasks = Proc#process.tasks,
[BeginTask] = [T || #task{in=In}=T <- Tasks, In==[]],
#task{name=BName, out=_BOut, module=Module} = BeginTask,
[EndTask] = [T || #task{out=Out}=T <- Tasks, Out==[]],
#task{name=EName, in=_EIn, out=[], module=Module} = EndTask,
BeginEvent = #beginEvent{name=BName, module=Module},
EndEvent = #endEvent{name=EName, module=Module},
Proc#process{tasks = [BeginEvent, EndEvent | Tasks -- [BeginTask,EndTask]],
beginEvent = BName,
endEvent = EName}.
fixGateways(#process{tasks=Tasks}=Proc) -> %%Tasks should contain correct in/out
Proc#process{ tasks = [convertIfNeeded(T) || T <- Tasks ] }.
convertIfNeeded(#task{name=Name, in=In, out=Out, module=Module}) when length(In)>1; length(Out)>1 -> #gateway{name=Name, type=parallel, in=In, out=Out, module=Module};
convertIfNeeded(Task) -> Task.
action({request,_,_}, Proc) ->
{reply,Proc}.