Skip to content

Commit 930a3de

Browse files
authored
Update PlacesProvider to allow choosing an algorithm and setting discovery parameters
1 parent 00f9a07 commit 930a3de

10 files changed

Lines changed: 88 additions & 13 deletions

src/org/processmining/placebasedlpmdiscovery/prom/FromLogPlacesProvider.java

Lines changed: 53 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,10 @@
22

33
import org.deckfour.xes.model.XLog;
44
import org.processmining.placebasedlpmdiscovery.model.Place;
5+
import org.processmining.placebasedlpmdiscovery.prom.placediscovery.PlaceDiscoveryAlgorithmId;
56
import org.processmining.placebasedlpmdiscovery.prom.placediscovery.algorithms.PlaceDiscoveryAlgorithm;
67
import org.processmining.placebasedlpmdiscovery.prom.placediscovery.algorithms.PlaceDiscoveryAlgorithmFactory;
7-
import org.processmining.placebasedlpmdiscovery.prom.placediscovery.parameters.EstMinerPlaceDiscoveryParameters;
8-
import org.processmining.placebasedlpmdiscovery.prom.placediscovery.parameters.SPECppPlaceDiscoveryParameters;
8+
import org.processmining.placebasedlpmdiscovery.prom.placediscovery.parameters.*;
99

1010
import java.util.Set;
1111

@@ -19,6 +19,36 @@ public FromLogPlacesProvider(XLog log, PlaceDiscoveryAlgorithm<?, ?> algorithm)
1919
this.algorithm = algorithm;
2020
}
2121

22+
/**
23+
* Creates a PlacesProvider that discovers places using the specified algorithm.
24+
* @param log the XLog to discover places from
25+
* @param algorithmId the algorithm to use for place discovery
26+
* @return a PlacesProvider that discovers places using the specified algorithm
27+
*/
28+
public static PlacesProvider getInstance(XLog log, PlaceDiscoveryAlgorithmId algorithmId) {
29+
if (algorithmId == PlaceDiscoveryAlgorithmId.ESTMiner) {
30+
return est(log);
31+
} else if (algorithmId == PlaceDiscoveryAlgorithmId.SPECpp) {
32+
return specpp(log);
33+
} else if (algorithmId == PlaceDiscoveryAlgorithmId.HeuristicMiner) {
34+
return heuristicMiner(log);
35+
} else if (algorithmId == PlaceDiscoveryAlgorithmId.InductiveMiner) {
36+
return inductiveMiner(log);
37+
}
38+
throw new IllegalArgumentException("Unsupported PlaceDiscoveryAlgorithmId: " + algorithmId);
39+
}
40+
41+
/**
42+
* Creates a PlacesProvider that discovers places using the specified parameters.
43+
* @param log the XLog to discover places from
44+
* @param placeDiscoveryParameters the parameters to use for place discovery
45+
* @return a PlacesProvider that discovers places using the specified parameters
46+
*/
47+
public static PlacesProvider getInstance(XLog log, PlaceDiscoveryParameters placeDiscoveryParameters) {
48+
PlaceDiscoveryAlgorithmFactory factory = PlaceDiscoveryAlgorithmFactory.getInstance();
49+
return new FromLogPlacesProvider(log, placeDiscoveryParameters.getAlgorithm(factory));
50+
}
51+
2252
@Override
2353
public Set<Place> provide() {
2454
return algorithm.getPlaces(this.log).getPlaces();
@@ -39,9 +69,8 @@ public static PlacesProvider recommended(XLog log) {
3969
* @return a PlacesProvider that discovers places using the EST-Miner algorithm
4070
*/
4171
public static PlacesProvider est(XLog log) {
42-
PlaceDiscoveryAlgorithmFactory factory = new PlaceDiscoveryAlgorithmFactory();
4372
EstMinerPlaceDiscoveryParameters parameters = new EstMinerPlaceDiscoveryParameters();
44-
return new FromLogPlacesProvider(log, parameters.getAlgorithm(factory));
73+
return getInstance(log, parameters);
4574
}
4675

4776
/**
@@ -50,9 +79,27 @@ public static PlacesProvider est(XLog log) {
5079
* @return a PlacesProvider that discovers places using the SPECpp algorithm
5180
*/
5281
public static PlacesProvider specpp(XLog log) {
53-
PlaceDiscoveryAlgorithmFactory factory = new PlaceDiscoveryAlgorithmFactory();
5482
SPECppPlaceDiscoveryParameters parameters = new SPECppPlaceDiscoveryParameters();
55-
return new FromLogPlacesProvider(log, parameters.getAlgorithm(factory));
83+
return getInstance(log, parameters);
5684
}
5785

86+
/**
87+
* Creates a PlacesProvider that discovers places using the Heuristic Miner algorithm.
88+
* @param log the XLog to discover places from
89+
* @return a PlacesProvider that discovers places using the Heuristic Miner algorithm
90+
*/
91+
public static PlacesProvider heuristicMiner(XLog log) {
92+
HeuristicMinerPlaceDiscoveryParameters parameters = new HeuristicMinerPlaceDiscoveryParameters();
93+
return getInstance(log, parameters);
94+
}
95+
96+
/**
97+
* Creates a PlacesProvider that discovers places using the Inductive Miner algorithm.
98+
* @param log the XLog to discover places from
99+
* @return a PlacesProvider that discovers places using the Inductive Miner algorithm
100+
*/
101+
public static PlacesProvider inductiveMiner(XLog log) {
102+
InductiveMinerPlaceDiscoveryParameters parameters = new InductiveMinerPlaceDiscoveryParameters();
103+
return getInstance(log, parameters);
104+
}
58105
}

src/org/processmining/placebasedlpmdiscovery/prom/PlacesProvider.java

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22

33
import org.deckfour.xes.model.XLog;
44
import org.processmining.placebasedlpmdiscovery.model.Place;
5+
import org.processmining.placebasedlpmdiscovery.prom.placediscovery.PlaceDiscoveryAlgorithmId;
6+
import org.processmining.placebasedlpmdiscovery.prom.placediscovery.parameters.PlaceDiscoveryParameters;
57

68
import java.util.Set;
79

@@ -38,6 +40,26 @@ static PlacesProvider fromLog(XLog log) {
3840
return FromLogPlacesProvider.recommended(log);
3941
}
4042

43+
/**
44+
* Creates a PlacesProvider that discovers places using the specified algorithm.
45+
* @param log the XLog to discover places from
46+
* @param placeDiscoveryAlgorithmId the algorithm to use for place discovery
47+
* @return a PlacesProvider that discovers places using the specified algorithm
48+
*/
49+
static PlacesProvider fromLog(XLog log, PlaceDiscoveryAlgorithmId placeDiscoveryAlgorithmId) {
50+
return FromLogPlacesProvider.getInstance(log, placeDiscoveryAlgorithmId);
51+
}
52+
53+
/**
54+
* Creates a PlacesProvider that discovers places using the specified parameters.
55+
* @param log the XLog to discover places from
56+
* @param placeDiscoveryParameters the parameters to use for place discovery
57+
* @return a PlacesProvider that discovers places using the specified parameters
58+
*/
59+
static PlacesProvider fromLog(XLog log, PlaceDiscoveryParameters placeDiscoveryParameters) {
60+
return FromLogPlacesProvider.getInstance(log, placeDiscoveryParameters);
61+
}
62+
4163
/**
4264
* Provides a set of places.
4365
* @return a set of places

src/org/processmining/placebasedlpmdiscovery/prom/placediscovery/PlaceDiscoveryAlgorithmId.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,5 +3,6 @@
33
public enum PlaceDiscoveryAlgorithmId {
44
ESTMiner,
55
InductiveMiner,
6+
SPECpp,
67
HeuristicMiner
78
}

src/org/processmining/placebasedlpmdiscovery/prom/placediscovery/StandardPlaceDiscovery.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,8 @@ public StandardPlaceDiscovery(XLog log, PlaceDiscoveryParameters parameters){
1616
this.parameters = parameters;
1717
}
1818
public PlaceDiscoveryResult getPlaces() {
19-
PlaceDiscoveryAlgorithmFactory factory = new PlaceDiscoveryAlgorithmFactory(); // TODO: Why not using the factory directly?
19+
// TODO: Why not using the factory directly?
20+
PlaceDiscoveryAlgorithmFactory factory = PlaceDiscoveryAlgorithmFactory.getInstance();
2021
PlaceDiscoveryAlgorithm<? extends PlaceDiscoveryParameters, ?> algorithm = parameters.getAlgorithm(factory);
2122
return algorithm.getPlaces(log);
2223
}

src/org/processmining/placebasedlpmdiscovery/prom/placediscovery/algorithms/PlaceDiscoveryAlgorithmFactory.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,10 @@
88

99
public class PlaceDiscoveryAlgorithmFactory {
1010

11+
public static PlaceDiscoveryAlgorithmFactory getInstance() {
12+
return new PlaceDiscoveryAlgorithmFactory();
13+
}
14+
1115
public EstMinerPlaceDiscoveryAlgorithm createPlaceDiscoveryAlgorithm(EstMinerPlaceDiscoveryParameters parameters) {
1216
return new EstMinerPlaceDiscoveryAlgorithm(new PetriNetPlaceConverter(), parameters);
1317
}

src/org/processmining/placebasedlpmdiscovery/prom/placediscovery/parameters/EstMinerPlaceDiscoveryParameters.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
import org.processmining.v7.postproc_after_tc.MyParameters;
88
//import org.processmining.v8.eSTMinerGIT.Parameters;
99

10-
public class EstMinerPlaceDiscoveryParameters extends PlaceDiscoveryParameters {
10+
public class EstMinerPlaceDiscoveryParameters implements PlaceDiscoveryParameters {
1111
private MyParameters wrappedParameters;
1212

1313
public EstMinerPlaceDiscoveryParameters() {

src/org/processmining/placebasedlpmdiscovery/prom/placediscovery/parameters/HeuristicMinerPlaceDiscoveryParameters.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
import org.processmining.placebasedlpmdiscovery.prom.placediscovery.algorithms.PlaceDiscoveryAlgorithmFactory;
66
import org.processmining.plugins.heuristicsnet.miner.heuristics.miner.settings.HeuristicsMinerSettings;
77

8-
public class HeuristicMinerPlaceDiscoveryParameters extends PlaceDiscoveryParameters {
8+
public class HeuristicMinerPlaceDiscoveryParameters implements PlaceDiscoveryParameters {
99

1010
private HeuristicsMinerSettings settings;
1111

src/org/processmining/placebasedlpmdiscovery/prom/placediscovery/parameters/InductiveMinerPlaceDiscoveryParameters.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
import org.processmining.plugins.InductiveMiner.mining.MiningParametersIM;
88
import org.processmining.plugins.InductiveMiner.plugins.dialogs.IMMiningDialog;
99

10-
public class InductiveMinerPlaceDiscoveryParameters extends PlaceDiscoveryParameters {
10+
public class InductiveMinerPlaceDiscoveryParameters implements PlaceDiscoveryParameters {
1111
private MiningParameters miningParameters;
1212
private IMMiningDialog.Variant variant;
1313

src/org/processmining/placebasedlpmdiscovery/prom/placediscovery/parameters/PlaceDiscoveryParameters.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
import org.processmining.placebasedlpmdiscovery.prom.placediscovery.algorithms.PlaceDiscoveryAlgorithm;
44
import org.processmining.placebasedlpmdiscovery.prom.placediscovery.algorithms.PlaceDiscoveryAlgorithmFactory;
55

6-
public abstract class PlaceDiscoveryParameters {
6+
public interface PlaceDiscoveryParameters {
77

8-
public abstract PlaceDiscoveryAlgorithm<? extends PlaceDiscoveryParameters, ?> getAlgorithm(PlaceDiscoveryAlgorithmFactory factory);
8+
PlaceDiscoveryAlgorithm<? extends PlaceDiscoveryParameters, ?> getAlgorithm(PlaceDiscoveryAlgorithmFactory factory);
99
}

src/org/processmining/placebasedlpmdiscovery/prom/placediscovery/parameters/SPECppPlaceDiscoveryParameters.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
import org.processmining.specpp.config.presets.PlaceOracleComponentConfig;
1212
import org.processmining.specpp.config.presets.PlaceOracleParameters;
1313

14-
public class SPECppPlaceDiscoveryParameters extends PlaceDiscoveryParameters {
14+
public class SPECppPlaceDiscoveryParameters implements PlaceDiscoveryParameters {
1515
private final SPECppConfigBundle configBundle;
1616

1717
public SPECppPlaceDiscoveryParameters() {

0 commit comments

Comments
 (0)