Skip to content
Open
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -36,3 +36,5 @@ obj/



graphwalker-cli-4.2.0 .jar
java-plugin-generator/pet.json
3 changes: 3 additions & 0 deletions java-plugin-generator/.vscode/settings.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
{
"java.configuration.updateBuildConfiguration": "interactive"
}
17 changes: 16 additions & 1 deletion java-plugin-generator/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,21 @@
<artifactId>graphwalker-core</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>com.googlecode.json-simple</groupId>
<artifactId>json-simple</artifactId>
<version>1.1.1</version>
</dependency>
<dependency>
<groupId>org.json</groupId>
<artifactId>json</artifactId>
<version>20200518</version>
</dependency>
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.8.9</version>
</dependency>
</dependencies>

</project>
37 changes: 37 additions & 0 deletions java-plugin-generator/src/main/java/com/mycompany/lib/Edge.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
package com.mycompany.lib;

public class Edge {

private String name;
private String id;
private String sourceVertexId;
private String targetVertexId;

public String getSourceVertexId() {
return sourceVertexId;
}

public String getTargetVertexId() {
return targetVertexId;
}

public void setTargetVertexId(String targetVertexId) {
this.targetVertexId = targetVertexId;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public String getId() {
return id;
}

public void setId(String id) {
this.id = id;
}
}
72 changes: 72 additions & 0 deletions java-plugin-generator/src/main/java/com/mycompany/lib/Model.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
package com.mycompany.lib;

import java.util.ArrayList;
import java.util.List;

public class Model {

public Model(){}
private String name;
private String id;
private String startElementId;
private String generator;
private List<String> predefinedPath = new ArrayList<>();
private List<Vertex> vertices;
private List<Edge> edges;

public List<Edge> getEdges() {
return edges;
}

public void setEdges(List<Edge> edges) {
this.edges = edges;
}

public List<Vertex> getVertices() {
return vertices;
}

public void setVertices(List<Vertex> vertices) {
this.vertices = vertices;
}

public List<String> getPredefinedPath() {
return predefinedPath;
}

public void setPredefinedPath(List<String> predefinedPath) {
this.predefinedPath = predefinedPath;
}

public String getGenerator() {
return generator;
}

public void setGenerator(String generator) {
this.generator = generator;
}

public String getStartElementId() {
return startElementId;
}

public void setStartElementId(String startElementId) {
this.startElementId = startElementId;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public String getId() {
return id;
}

public void setId(String id) {
this.id = id;
}
}
15 changes: 15 additions & 0 deletions java-plugin-generator/src/main/java/com/mycompany/lib/Models.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package com.mycompany.lib;

import java.util.List;

public class Models {
private List<Model> models;

public List<Model> getModels() {
return models;
}

public void setModels(List<Model> models) {
this.models = models;
}
}

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,100 @@
package com.mycompany.lib;

import org.graphwalker.core.model.Edge;
import org.graphwalker.core.model.Vertex;

import org.graphwalker.core.condition.StopCondition;
import org.graphwalker.core.generator.NoPathFoundException;
import org.graphwalker.core.generator.PathGeneratorBase;
import org.graphwalker.core.machine.Context;
import org.graphwalker.core.model.Element;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.google.gson.Gson;

import java.util.List;

import org.json.simple.JSONObject;
import org.json.simple.parser.JSONParser;
import java.io.FileReader;

public class PredefinedPathGenerator extends PathGeneratorBase<StopCondition> {

private static final Logger LOG = LoggerFactory.getLogger(PredefinedPathGenerator.class);
private List<String> predefinedPath;
private int currentPathIndex = 0;

private void Setfile(String path) {
JSONParser parser = new JSONParser();
try {
Object obj = parser.parse(new FileReader(path));
JSONObject fullFile = (JSONObject) obj;
Gson gson = new Gson();
Models models = gson.fromJson(fullFile.toJSONString(), Models.class);
predefinedPath = models.getModels().get(0).getPredefinedPath();

} catch (Exception e) {
e.printStackTrace();
}
}

public PredefinedPathGenerator(StopCondition stopCondition) {
setStopCondition(stopCondition);
Setfile("C:\\app\\inputs\\SimpleModel.json");

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This method will be modified to utilize custom json handling

}

@Override
public Context getNextStep() {
Context context = super.getNextStep();
Element currentElement = context.getCurrentElement();
List<Element> reachableElements = context.filter(context.getModel().getElements(currentElement));

if (reachableElements.isEmpty()) {
LOG.error("currentElement: " + currentElement);
LOG.error("context.getModel().getElements(): " + context.getModel().getElements());
throw new NoPathFoundException(context.getCurrentElement());
}
Element nextElement;

if (currentElement instanceof Edge.RuntimeEdge) {
nextElement = getNextElementFromEdge(context, reachableElements, (Edge.RuntimeEdge) currentElement);
} else if (currentElement instanceof Vertex.RuntimeVertex) {
nextElement = getNextElementFromVertex(context, reachableElements, (Vertex.RuntimeVertex) currentElement);
} else {
LOG.error("Current element is neither an edge or a vertex");
throw new NoPathFoundException(context.getCurrentElement());
}
context.setCurrentElement(nextElement);
return context;
}

private Element getNextElementFromEdge(Context context, List<Element> reachableElements,
Edge.RuntimeEdge currentElement) {
if (reachableElements.size() != 1) {
LOG.error("Next vertex of predefined path is ambiguous (after step " + currentPathIndex
+ ", from edge with id \"" + currentElement.getId() + "\")");
throw new NoPathFoundException(currentElement);
}
currentPathIndex++;
return reachableElements.get(0);
}

private Element getNextElementFromVertex(Context context, List<Element> reachableElements,
Vertex.RuntimeVertex currentElement) {
for (Element elem : reachableElements) {
if (elem.getId().equals(predefinedPath.get(currentPathIndex))) {
return elem;
}
}
LOG.error("Next edge with id \"" + predefinedPath.get(currentPathIndex)
+ "\" from predefined path is unreachable (either the guarding condition was not met or the edge has a different source vertex.");
throw new NoPathFoundException(currentElement);
}

@Override
public boolean hasNextStep() {
return (currentPathIndex < predefinedPath.size());
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@

// import org.graphwalker.core.condition.StopConditionBase;
// import org.graphwalker.core.model.Edge;
// import org.graphwalker.core.model.Vertex;

// public class PredefinedPathStopCondition extends StopConditionBase {

// public PredefinedPathStopCondition() {
// super("PredefinedPath");
// }

// @Override
// public boolean isFulfilled() {
// return getCurrentStepCount() == getTotalStepCount();
// }

// @Override
// public double getFulfilment() {
// return (double) getCurrentStepCount() / getTotalStepCount();
// }

// private int getCurrentStepCount() {
// // *2 because each index increment corresponds to a vertex-edge step pair
// int currentStepCount = getContext().getPredefinedPathCurrentEdgeIndex() * 2;
// if (getContext().getCurrentElement() instanceof Vertex.RuntimeVertex) {
// return currentStepCount + 1;
// }
// return currentStepCount;
// }

// private int getTotalStepCount() {
// return (getContext().getModel().getPredefinedPath().size() * 2) + 1;
// }

// }
20 changes: 20 additions & 0 deletions java-plugin-generator/src/main/java/com/mycompany/lib/Vertex.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
package com.mycompany.lib;

public class Vertex {
private String name;
private String id;

public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}

public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
}