Skip to content

Package: AtomarerProzess

AtomarerProzess

nameinstructionbranchcomplexitylinemethod
AtomarerProzess()
M: 0 C: 3
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 2
100%
M: 0 C: 1
100%
connectTo(AtomarerProzess)
M: 0 C: 11
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 4
100%
M: 0 C: 1
100%
erstelleVerbindungsport(AtomarerProzess)
M: 0 C: 27
100%
M: 0 C: 2
100%
M: 0 C: 2
100%
M: 0 C: 7
100%
M: 0 C: 1
100%
lambda$erstelleVerbindungsport$0(AtomarerProzess, Porttyp)
M: 0 C: 5
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 1
100%
M: 0 C: 1
100%
lambda$erstelleVerbindungsport$1(AtomarerProzess, Porttyp)
M: 0 C: 9
100%
M: 0 C: 2
100%
M: 0 C: 2
100%
M: 0 C: 1
100%
M: 0 C: 1
100%
lambda$outporttypIstBereitsTypisiert$2(Porttyp, Port)
M: 0 C: 5
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 1
100%
M: 0 C: 1
100%
lambda$outporttypIstBereitsTypisiert$3(Porttyp, Port)
M: 0 C: 5
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 1
100%
M: 0 C: 1
100%
outporttypIstBereitsTypisiert(AtomarerProzess, Porttyp)
M: 0 C: 22
100%
M: 1 C: 3
75%
M: 1 C: 2
67%
M: 0 C: 5
100%
M: 0 C: 1
100%
outporttypIstInporttypDesAnderenProzesses(AtomarerProzess, Porttyp)
M: 0 C: 6
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 1
100%
M: 0 C: 1
100%

Coverage

1: package ablaeufe.operation;
2:
3: import ablaeufe.meta.AtomarerProzesstyp;
4: import ablaeufe.meta.Porttyp;
5:
6: import java.util.Optional;
7:
8: /**
9: * Ein atomarer Prozess ist eine simple Zusammensetzung von Aktivitäten und Ports.
10: */
11: public abstract class AtomarerProzess extends Prozess {
12:
13: /**
14: * Konstruktor.
15: */
16: protected AtomarerProzess() {
17: }
18:
19: @Override
20: public abstract AtomarerProzesstyp getTyp();
21:
22: /**
23: * Verbindet den this prozess mit dem übergebenen prozess über einen Port, wenn dies möglich ist.
24: * Ist dies nicht möglich, wird eine {@link KonsistenzVerletztException} mit entsprechender Message ausgelöst.
25: * @param prozess Prozess welcher mit dem this prozess verbunden werden soll.
26: */
27: public void connectTo(final AtomarerProzess prozess) {
28: final Port verbindungsport = this.erstelleVerbindungsport(prozess);
29: this.addOutport(verbindungsport);
30: prozess.addInport(verbindungsport);
31: }
32:
33: private Port erstelleVerbindungsport(final AtomarerProzess prozess) {
34: final Optional<Porttyp> verbindungsporttyp = this.getTyp().getOutporttypen().stream()
35: .filter(porttyp -> this.outporttypIstInporttypDesAnderenProzesses(prozess, porttyp))
36:• .filter(porttyp -> !this.outporttypIstBereitsTypisiert(prozess, porttyp))
37: .findFirst();
38:• if (verbindungsporttyp.isPresent()) {
39: return Port.create(verbindungsporttyp.get());
40: }
41: throw new KonsistenzVerletztException("Die beiden Prozesse können nicht miteinander verbunden werden!"
42: + "Auf der Metaebene existiert kein Porttyp, welcher gleichzeitig Outporttyp des einen Prozesses und"
43: + " Inporttyp des anderen Prozesse ist. Oder alle gemeinsamen Porttypen sind bereits durch Ports typisiert und somit belegt!");
44: }
45:
46: private boolean outporttypIstInporttypDesAnderenProzesses(final AtomarerProzess prozess, final Porttyp porttyp) {
47: return prozess.getTyp().getInporttypen().contains(porttyp);
48: }
49:
50: private boolean outporttypIstBereitsTypisiert(final AtomarerProzess prozess, final Porttyp outporttyp) {
51: final boolean alsOutportTypisiert = this.getOutports().stream()
52: .anyMatch(port -> port.getTyp().equals(outporttyp));
53: // Diese Prüfung ist evtl. überflüssig, wenn korrekte Prozesse aufgebaut werden.
54: final boolean alsInportBeimAnderenProzessTypisiert = prozess.getInports().stream()
55: .anyMatch(port -> port.getTyp().equals(outporttyp));
56:• return alsOutportTypisiert && alsInportBeimAnderenProzessTypisiert;
57: }
58: }