1
package dk.aau.cs.translations;
4
import java.util.regex.Matcher;
5
import java.util.regex.Pattern;
7
import dk.aau.cs.model.tapn.TimedInputArc;
8
import dk.aau.cs.model.tapn.TimedOutputArc;
9
import dk.aau.cs.model.tapn.TimedTransition;
10
import dk.aau.cs.util.Require;
12
// This class assumes that the transition is conservative and
13
// moreover that it is also Degree 2.
14
public class Degree2Pairing extends Pairing {
16
public Degree2Pairing(TimedTransition t) {
21
protected void generatePairing() {
22
List<TimedInputArc> inputArcs = transition.getInputArcs();
23
List<TimedOutputArc> outputArcs = transition.getOutputArcs();
25
int presetSize = inputArcs.size();
26
int postsetSize = outputArcs.size();
28
Require.that(presetSize == postsetSize, "The provided model is not conservative");
29
Require.that(presetSize <= 2, "The provided model is more than degree 2");
31
if(transition.presetSize() == 0)
33
else if(transition.getInputArcs().size() == 1)
34
add(transition.getInputArcs().get(0), transition.getOutputArcs().get(0));
36
for(TimedInputArc inputArc : inputArcs) {
37
if(isPartOfLockTemplate(inputArc.source().name())) {
38
for(TimedOutputArc outputArc : outputArcs) {
39
if(isPartOfLockTemplate(outputArc.destination().name()) && !inputArcToOutputArc.containsValue(outputArc)) {
40
add(inputArc,outputArc);
45
for(TimedOutputArc outputArc : outputArcs) {
46
if(!isPartOfLockTemplate(outputArc.destination().name()) && !inputArcToOutputArc.containsValue(outputArc)) {
47
add(inputArc,outputArc);
57
private boolean isPartOfLockTemplate(String name) {
58
Pattern pattern = Pattern.compile("^(P_(?:[a-zA-Z][a-zA-Z0-9_]*)_(?:(?:[0-9]*_(?:in|out)|check))|P_lock|P_deadlock)$");
60
Matcher matcher = pattern.matcher(name);
61
return matcher.find();