From 45e8dac009b4d670ed11745c1de546e255e7fef3 Mon Sep 17 00:00:00 2001 From: SebastianEbert <sebastian.ebert@tu-dresden.de> Date: Mon, 13 Nov 2023 14:32:39 +0100 Subject: [PATCH] bugfixes on service instances --- .../inf/st/pnml/engine/ros/DiNeRosNode.java | 2 +- .../engine/transform/ServiceInstanceUtil.java | 107 +++++------------- 2 files changed, 32 insertions(+), 77 deletions(-) diff --git a/src/main/java/de/tudresden/inf/st/pnml/engine/ros/DiNeRosNode.java b/src/main/java/de/tudresden/inf/st/pnml/engine/ros/DiNeRosNode.java index 262fa78..5e4ecf9 100644 --- a/src/main/java/de/tudresden/inf/st/pnml/engine/ros/DiNeRosNode.java +++ b/src/main/java/de/tudresden/inf/st/pnml/engine/ros/DiNeRosNode.java @@ -323,7 +323,7 @@ public abstract class DiNeRosNode extends AbstractNodeMain { for (int i = 0; i < limit; i++) { System.out.println("[" + nodeName + "] Copying server page " + key + " (" + i + ")."); - Page copy = ServiceInstanceUtil.treeCopyWithoutArcs(p); + Page copy = ServiceInstanceUtil.treeCopyWithoutArcs(petriNet, p); ServiceInstanceUtil.updateInstanceIds(copy, "-INSTANCE-" + i); copy.setId(p.getId() + "-INSTANCE-" + i); copy.getName().setText(copy.getId()); diff --git a/src/main/java/de/tudresden/inf/st/pnml/engine/transform/ServiceInstanceUtil.java b/src/main/java/de/tudresden/inf/st/pnml/engine/transform/ServiceInstanceUtil.java index 9cf6c0c..bc27844 100644 --- a/src/main/java/de/tudresden/inf/st/pnml/engine/transform/ServiceInstanceUtil.java +++ b/src/main/java/de/tudresden/inf/st/pnml/engine/transform/ServiceInstanceUtil.java @@ -33,7 +33,8 @@ public class ServiceInstanceUtil { for (Arc a : originalArcs) { Page originalArcPage = Objects.requireNonNull(getObjectInPage(original, a.getId()))._2; - Page arcPage = Objects.requireNonNull(getObjectInPage(copy, originalArcPage.getId() + suffix))._1.asPage(); + Page arcPage = Objects.requireNonNull(getObjectInPage(copy, + originalArcPage.getId() + suffix))._1.asPage(); Pair<PnObject, Page> source = getObjectInPage(copy, a.getSource().getId() + suffix); Pair<PnObject, Page> target = getObjectInPage(copy, a.getTarget().getId() + suffix); Arc copyArc = new Arc(); @@ -85,11 +86,11 @@ public class ServiceInstanceUtil { } } - public static Page treeCopyWithoutArcs(Page currentPage) { - return treeCopyWithoutArcsInternal(currentPage, null); + public static Page treeCopyWithoutArcs(PetriNet petriNet, Page currentPage) { + return treeCopyWithoutArcsInternal(petriNet, currentPage, null); } - private static Page treeCopyWithoutArcsInternal(Page currentPage, Page parent) { + private static Page treeCopyWithoutArcsInternal(PetriNet petriNet, Page currentPage, Page parent) { Map<String, PnObject> rMap = new HashMap<>(); @@ -108,7 +109,7 @@ public class ServiceInstanceUtil { copyPage.setName(pnObject.getName().treeCopy()); parent.addObject(copyPage); - treeCopyWithoutArcsInternal(pnObject.asPage(), copyPage); + treeCopyWithoutArcsInternal(petriNet, pnObject.asPage(), copyPage); } if (pnObject.isPlaceObject()) { @@ -132,24 +133,26 @@ public class ServiceInstanceUtil { } for (PnObject pnObject : currentPage.getObjects()) { - if (pnObject.isTransitionObject() && - pnObject.asDinerosTransition().isRefTransition()) { + + Name n = new Name(); + n.setText(pnObject.getId()); + + if (pnObject.isRefTransitionObject()) { RefTransition copyRt = new RefTransition(); copyRt.setId(pnObject.getId()); - copyRt.setName(pnObject.getName().treeCopy()); - copyRt.setRef(rMap.get(pnObject.asDinerosTransition(). - asRefTransition().getRef().getId()).asDinerosTransition()); + copyRt.setName(n.treeCopy()); + copyRt.setRef(Objects.requireNonNull(getReferencedObject(petriNet, + rMap, pnObject.asRefTransitionObject().getRef().getId())).asDinerosTransition()); copyRt.setToolspecificList(pnObject.getToolspecificList().treeCopy()); parent.addObject(copyRt); } - if (pnObject.isPlaceObject() && - pnObject.asDinerosPlace().isRefPlace()) { + if (pnObject.isRefPlaceObject()) { RefPlace copyRp = new RefPlace(); copyRp.setId(pnObject.getId()); - copyRp.setName(pnObject.getName().treeCopy()); - copyRp.setRef(rMap.get(pnObject.asDinerosPlace(). - asRefPlace().getRef().getId()).asDinerosPlace()); + copyRp.setName(n.treeCopy()); + copyRp.setRef(Objects.requireNonNull(getReferencedObject(petriNet, + rMap, pnObject.asRefPlaceObject().getRef().getId())).asDinerosPlace()); copyRp.setToolspecificList(pnObject.getToolspecificList().treeCopy()); parent.addObject(copyRp); } @@ -158,70 +161,22 @@ public class ServiceInstanceUtil { return parent; } - /*public static void updateArcs(Page page, String suffix){ - - for(PnObject pnObject : page.getObjects()){ - - if(pnObject.isArcNode()){ - for(PnObject pnObjectIn : page.getObjects()){ - if((pnObjectIn.isPlaceObject() || pnObjectIn.isTransitionObject()) && - pnObjectIn.getId() - .equals(pnObject.asArc().getSource().getId() + suffix)){ - pnObject.asArc().setSource(pnObjectIn.asNode()); - System.out.println("Updating Arc " + pnObject.getId() + " -> new Source: " + pnObjectIn.getId()); - } - if((pnObjectIn.isPlaceObject() || pnObjectIn.isTransitionObject()) && - pnObjectIn.getId() - .equals(pnObject.asArc().getTarget().getId() + suffix)){ - pnObject.asArc().setTarget(pnObjectIn.asNode()); - System.out.println("Updating Arc " + pnObject.getId() + " -> new Target: " + pnObjectIn.getId()); - } - } - } + private static PnObject getReferencedObject(PetriNet petriNet, Map<String, PnObject> rMap, String id){ - if(pnObject.isPageNode()){ - updateArcs(pnObject.asPage(), suffix); - } - } - }*/ - - /* public static void removeIllegalRefsToArcs(Page page, String suffix){ - - for(PnObject pnObject : page.getObjects()){ - if(pnObject.isPlaceObject()){ - for (int i = 0; i < pnObject.asDinerosPlace().getInArcs().size(); i++){ - if(!pnObject.asDinerosPlace().getInArcs().get(i).getId().contains(suffix)){ - System.out.println("Removing ref on " + - pnObject.asDinerosPlace().getInArcs().get(i).getId() + " on " + pnObject.getId()); - pnObject.asDinerosPlace().getInArcs().get(i).removeSelf(); - } - } - for (int i = 0; i < pnObject.asDinerosPlace().getOutArcs().size(); i++){ - if(!pnObject.asDinerosPlace().getOutArcs().get(i).getId().contains(suffix)){ - System.out.println("Removing ref on " + - pnObject.asDinerosPlace().getOutArcs().get(i).getId() + " on " + pnObject.getId()); - pnObject.asDinerosPlace().getOutArcs().get(i).removeSelf(); - } - } - } + PnObject referencedObject = rMap.get(id); - if(pnObject.isTransitionObject()){ - for (int i = 0; i < pnObject.asDinerosTransition().getInArcs().size(); i++){ - if(!pnObject.asDinerosTransition().getInArcs().get(i).getId().contains(suffix)){ - System.out.println("Removing ref on " + - pnObject.asDinerosTransition().getInArcs().get(i).getId() + " on " + pnObject.getId()); - pnObject.asDinerosTransition().getInArcs().get(i).removeSelf(); - } - } - for (int i = 0; i < pnObject.asDinerosTransition().getOutArcList().size(); i++){ - if(!pnObject.asDinerosTransition().getOutArcs().get(i).getId().contains(suffix)){ - System.out.println("Removing ref on " + - pnObject.asDinerosTransition().getOutArcs().get(i).getId() + " on " + pnObject.getId()); - pnObject.asDinerosTransition().getOutArcs().get(i).removeSelf(); - } + if(referencedObject == null){ + System.out.println("Searching for external referenced object: " + id); + for(PnObject pnObject : petriNet.allObjects()){ + if(pnObject.getId().equals(id)){ + System.out.println("Found external referenced object: " + id); + return pnObject; } } + } else { + return referencedObject; } - }*/ -} + return null; + } +} \ No newline at end of file -- GitLab