diff --git a/src/data/java/de/tudresden/inf/st/pnml/base/constants/PnmlConstants.java b/src/data/java/de/tudresden/inf/st/pnml/base/constants/PnmlConstants.java index 16b20ac193f2bea3da1b4f57056a16acf18dc0b3..a005e352ffe37d56c615184889f307efa1659180 100644 --- a/src/data/java/de/tudresden/inf/st/pnml/base/constants/PnmlConstants.java +++ b/src/data/java/de/tudresden/inf/st/pnml/base/constants/PnmlConstants.java @@ -81,6 +81,7 @@ public final class PnmlConstants { // page properties public static final String PAGE_TYPE_SERVER = "serverPrototype"; + public static final String PAGE_TYPE_NODE = "nodePage"; public static final String PAGE_SERVER_INSTANCE_SUFFIX = "INSTANCE"; public static final String PAGE_SERVER_CONTAINER_SUFFIX = "CONTAINER"; diff --git a/src/main/jastadd/base/Navigation.jrag b/src/main/jastadd/base/Navigation.jrag index e0f7bf38b55394dd3a1ca8a281d698f37ccde2f6..0af771b0159a071fb2f627a03f850234cd238af0 100644 --- a/src/main/jastadd/base/Navigation.jrag +++ b/src/main/jastadd/base/Navigation.jrag @@ -57,6 +57,18 @@ aspect Navigation { eq Page.getObject().ContainingPage() = this; eq PetriNet.getPage().ContainingPage() = null; + inh Set<Page> PnObject.ContainingPageTree(); + eq Page.getObject().ContainingPageTree() { + Set<Page> res = this.ContainingPageTree(); + res.add(this); + return res; + } + eq PetriNet.getPage().ContainingPageTree() { + Set<Page> res = new HashSet<Page>(); + res.add(this.getPage(0)); + return res; + } + syn boolean PnObject.isPageNode() = false; eq Page.isPageNode() = true; diff --git a/src/main/jastadd/base/export/PnmlExporter.jadd b/src/main/jastadd/base/export/PnmlExporter.jadd index 6828eb7ad0009a86b620f9ce66568810a43f57e2..a6a5bdcc4adc4990df9850806fb8fd6c6630e6ad 100644 --- a/src/main/jastadd/base/export/PnmlExporter.jadd +++ b/src/main/jastadd/base/export/PnmlExporter.jadd @@ -161,7 +161,7 @@ aspect PnmlExporter{ assert rootPlace != null; if (p_one.getRef().getId().equals(rootPlace.getId())) { if(!convertedRefPlaceIDs.contains(p_one.getId())) { - System.out.println("Exporting Ref-Place (l1): " + p_one.getId()); + //System.out.println("Exporting Ref-Place (l1): " + p_one.getId()); RefPlaceHLAPI rph = PrimitiveElementsConverter.convertRefPlaceToPnmlObject(p_one, rootPlace, null); for (PageHLAPI pageHLAPI : convertedPages) { if (pageHLAPI.getId().equals(p_one.ContainingPage().getId())) { @@ -181,7 +181,7 @@ aspect PnmlExporter{ for (RefPlaceHLAPI convRef : convertedRefPlaces) { if (convRef.getId().equals(p_tree.getRef().getId())) { if(!convertedRefPlaceIDs.contains(p_tree.getId())) { - System.out.println("Exporting Ref-Place (ln): " + p_tree.getId()); + //System.out.println("Exporting Ref-Place (ln): " + p_tree.getId()); RefPlaceHLAPI rph = PrimitiveElementsConverter.convertRefPlaceToPnmlObject(p_tree, null, convRef); for (PageHLAPI pageHLAPI : convertedPages) { if (pageHLAPI.getId().equals(p_tree.ContainingPage().getId())) { @@ -208,14 +208,19 @@ aspect PnmlExporter{ Set<PlaceHLAPI> convertedPlaces = new HashSet<>(); for (Place p : petriNet.allPlaces()) { + //System.out.println("Place - " + p.getId() + "(" + p.ContainingPage().getId() + ")"); PlaceHLAPI convertedPlace = PrimitiveElementsConverter.convertPlaceToPnmlObject(p.asDinerosPlace()); for (PageHLAPI pageHLAPI : convertedPages) { + //System.out.println(" >> " + pageHLAPI.getId()); if (pageHLAPI.getId().equals(p.ContainingPage().getId())) { assert convertedPlace != null; + //System.out.println("Exporting Place - FOUND PAGE: " + p.getId()); convertedPlace.setContainerPageHLAPI(pageHLAPI); break; } } + + // System.out.println("Exporting Place - ADDING: " + p.getId()); convertedPlaces.add(convertedPlace); } return convertedPlaces; @@ -230,6 +235,7 @@ aspect PnmlExporter{ for (PageHLAPI pageHLAPI : convertedPages) { if (pageHLAPI.getId().equals(t.ContainingPage().getId())) { assert convertedTransition != null; + //System.out.println("Exporting Transition - FOUND PAGE: " + t.getId()); convertedTransition.setContainerPageHLAPI(pageHLAPI); break; } @@ -362,33 +368,39 @@ aspect PnmlExporter{ return convertedArcs; } + private static void buildPageSubTree(Page page, Set<PageHLAPI> convertedPages){ + + System.out.println("" + page.getId()); + for(PnObject po : page.getObjects()){ + if(po.isPageNode()){ + // System.out.println(">> Check Page: " + po.getId() + " in page " + po.asPage().ContainingPage().getId()); + for(PageHLAPI apiPage : convertedPages){ + if(apiPage.getId().equals(po.asPage().ContainingPage().getId())){ + // System.out.println("Exporting Page: " + po.getId()); + convertedPages.add(ComplexElementsConverter. + convertNonTopLevelPageContainerToPnmlObject(po.asPage(), apiPage)); + break; + } + } + } + } + + for(PnObject po : page.getObjects()){ + if(po.isPageNode()){ + buildPageSubTree(po.asPage(), convertedPages); + } + } + } + private static Set<PageHLAPI> buildPageTrees(PetriNet petriNet, PetriNetHLAPI net) { Set<PageHLAPI> convertedPages = new HashSet<>(); - // Set<String> processedPageIds = new HashSet<>(); List<Page> topLevelPages = getTopLevelPages(petriNet); - List<Page> nonTopLevelPages = getNonTopLevelPages(petriNet); for (Page page : topLevelPages) { convertedPages.add(ComplexElementsConverter.convertTopLevelPageContainerToPnmlObject(page, net)); - // processedPageIds.add(page.getId()); - } - - for (Page nonTopLevelPage : nonTopLevelPages) { - Page parent = nonTopLevelPage.ContainingPage(); - - for (PageHLAPI convertedPage : convertedPages) { - if (parent.getId().equals(convertedPage.getId())) {//&& !processedPageIds.contains(convertedPage.getId())) { - // processedPageIds.add(convertedPage.getId()); - convertedPages.add(ComplexElementsConverter.convertNonTopLevelPageContainerToPnmlObject(nonTopLevelPage, convertedPage)); - break; - } - } - - // if ((processedPageIds.size() != nonTopLevelPages.size()) && (i == (nonTopLevelPages.size() - 1))) { - // i = -1; - // } + buildPageSubTree(page, convertedPages); } return convertedPages;