aboutsummaryrefslogtreecommitdiffstats
path: root/Domains/Examples/ModelGenExampleFAM_plugin/src/hu/bme/mit/inf/dslreasoner/domains/transima/fam/FamPatterns.vql
blob: f0e48d424348a264713be4cc9e0699a83adda48b (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
package hu.bme.mit.inf.dslreasoner.domains.transima.fam

import epackage "http://www.inf.mit.bme.hu/viatrasolver/example/fam"

@Constraint(message="terminatorAndInformation", severity="error", key={T})
pattern terminatorAndInformation(T : FAMTerminator, I : InformationLink) = {
	FunctionalOutput.outgoingLinks(Out,I);
	FunctionalOutput.terminator(Out,T);
} or {
	InformationLink.to(I,In);
	FunctionalInput.terminator(In,T);
}

@QueryBasedFeature 
pattern type(This : Function, Target : FunctionType) = {
	find rootElements(_Model, This);
	Target == FunctionType::Root;
} or {
	neg find parent(_Child, This);
	neg find rootElements(_Model, This);
	Target == FunctionType::Leaf;
} or  {
	find parent(This, _Par);
	find parent(_Child, This);
	Target == FunctionType::Intermediate;
}

pattern rootElements(Model: FunctionalArchitectureModel, Root : Function) = {
	FunctionalArchitectureModel.rootElements(Model, Root);
}

pattern parent(Func : Function, Par : Function) = {
	Function.parent(Func, Par);
}

@QueryBasedFeature 
pattern model(This:FunctionalElement, Target: FunctionalArchitectureModel) {
	FunctionalElement(This);
	FunctionalArchitectureModel(Target);
}

pattern hasRoot(F : Function) {
	find rootElements(_Model, F);
}
pattern hasInt(F : Function) {
	neg find parent(_Child, F);
	neg find rootElements(_Model, F);
}
pattern hasLeaf(F : Function) {
	find parent(F, _Par);
	find parent(_Child, F);
}
/*
@Constraint(message="noRoot", severity="error", key={fam})
pattern noRoot(fam: FunctionalArchitectureModel) {
	FunctionalArchitectureModel(fam);
	neg find hasRoot(_);
}
@Constraint(message="noIntermediate", severity="error", key={fam})
pattern noInt(fam: FunctionalArchitectureModel) {
	FunctionalArchitectureModel(fam);
	neg find hasInt(_);
}
@Constraint(message="noLeaf", severity="error", key={fam})
pattern noLeaf(fam: FunctionalArchitectureModel) {
	FunctionalArchitectureModel(fam);
	neg find hasLeaf(_);
}*/


/*
@QueryBasedFeature
pattern model(This : FunctionalElement, Target : FunctionalArchitectureModel) = {
	find parent+(This, Parent);
	find rootElements(Target, Parent);
} or {
	find rootElements(Target, This);
}

pattern interfaceData(FI : FunctionalInterface, FD : FunctionalData) = {
	FunctionalInterface.data(FI, FD);
}

@QueryBasedFeature
pattern inputs(This : FunctionalInterface, Target : FunctionalInput) = {
	find interfaceData(This, Target);
}

@QueryBasedFeature
pattern outputs(This : FunctionalInterface, Target : FunctionalOutput) = {
	find interfaceData(This, Target);
}

@QueryBasedFeature
pattern outgoingLinks(This : FunctionalElement, Target : InformationLink) = {
	FunctionalElement.interface.outputs(This, Output);
	InformationLink.from(Target, Output);
}

@QueryBasedFeature
pattern incomingLinks(This : FunctionalElement, Target : InformationLink) = {
	FunctionalElement.interface.inputs(This, Input);
	InformationLink.to(Target, Input);
}

@QueryBasedFeature
pattern connects(This : FunctionalElement, Target : FunctionalElement) = {
	FunctionalElement.outgoingLinks(This,Link);
	FunctionalElement.incomingLinks(Target,Link);
}*/

/*pattern frequency(a: Function, b : EInt) {
	Function.minimumFrequency(a,b);
}*/