diff --git a/src/main/java/nl/utwente/groove/explore/util/StateReporter.java b/src/main/java/nl/utwente/groove/explore/util/StateReporter.java index 3240f14cf..3eb0b9a0c 100644 --- a/src/main/java/nl/utwente/groove/explore/util/StateReporter.java +++ b/src/main/java/nl/utwente/groove/explore/util/StateReporter.java @@ -48,8 +48,8 @@ public void report() throws IOException { var exporter = Exporters.getExporter(ExportKind.GRAPH, fileType); if (exporter == null) { this.logger - .append("Pattern %s does not specify known export format: states saved in native GXL%n", - this.statePattern); + .append("Pattern %s does not specify known export format: states saved in native %s%n", + this.statePattern, FileType.STATE.getExtension()); } else { this.logger.append("States saved as %s%n", fileType.getDescription()); } diff --git a/src/main/java/nl/utwente/groove/io/external/Exporters.java b/src/main/java/nl/utwente/groove/io/external/Exporters.java index b1054160b..ee09db4df 100644 --- a/src/main/java/nl/utwente/groove/io/external/Exporters.java +++ b/src/main/java/nl/utwente/groove/io/external/Exporters.java @@ -40,7 +40,8 @@ import nl.utwente.groove.io.external.format.GraphExportListener.DotListener; import nl.utwente.groove.io.external.format.LTS2ControlExporter; import nl.utwente.groove.io.external.format.ListenerExporter; -import nl.utwente.groove.io.external.format.NativePorter; +import nl.utwente.groove.io.external.format.NativeGraphExporter; +import nl.utwente.groove.io.external.format.NativeResourcePorter; import nl.utwente.groove.io.external.format.RasterExporter; import nl.utwente.groove.io.external.format.TikzExporter; import nl.utwente.groove.io.external.format.VectorExporter; @@ -129,7 +130,8 @@ public static List getExporters() { /** Creates the list of all known exporters. */ private static List createExporters() { List result = new ArrayList<>(); - result.add(NativePorter.getInstance()); + result.add(NativeResourcePorter.getInstance()); + result.add(NativeGraphExporter.getInstance()); result.add(RasterExporter.getInstance()); result.add(VectorExporter.getInstance()); result.add(AutPorter.instance()); diff --git a/src/main/java/nl/utwente/groove/io/external/Importers.java b/src/main/java/nl/utwente/groove/io/external/Importers.java index 93c9f948b..05b8d82ca 100644 --- a/src/main/java/nl/utwente/groove/io/external/Importers.java +++ b/src/main/java/nl/utwente/groove/io/external/Importers.java @@ -41,7 +41,7 @@ import nl.utwente.groove.io.external.format.AutPorter; import nl.utwente.groove.io.external.format.ColImporter; import nl.utwente.groove.io.external.format.EcorePorter; -import nl.utwente.groove.io.external.format.NativePorter; +import nl.utwente.groove.io.external.format.NativeResourcePorter; /** * Utilities for importers. @@ -131,7 +131,7 @@ public static List getImporters() { private static List createImporters() { List result = new ArrayList<>(); - result.add(NativePorter.getInstance()); + result.add(NativeResourcePorter.getInstance()); result.add(AutPorter.instance()); result.add(ColImporter.getInstance()); result.add(EcorePorter.instance()); diff --git a/src/main/java/nl/utwente/groove/io/external/format/NativeGraphExporter.java b/src/main/java/nl/utwente/groove/io/external/format/NativeGraphExporter.java new file mode 100644 index 000000000..32085ffc6 --- /dev/null +++ b/src/main/java/nl/utwente/groove/io/external/format/NativeGraphExporter.java @@ -0,0 +1,64 @@ +/* GROOVE: GRaphs for Object Oriented VErification + * Copyright 2003--2023 University of Twente + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied. See the License for the specific + * language governing permissions and limitations under the License. + * + * $Id$ + */ +package nl.utwente.groove.io.external.format; + +import java.io.File; +import java.io.IOException; + +import nl.utwente.groove.grammar.aspect.GraphConverter; +import nl.utwente.groove.grammar.model.ResourceKind; +import nl.utwente.groove.io.FileType; +import nl.utwente.groove.io.external.AbstractExporter; +import nl.utwente.groove.io.external.Exportable; +import nl.utwente.groove.io.external.PortException; +import nl.utwente.groove.io.graph.GxlIO; + +/** + * Import and export resources native to GROOVE, such as type and host graphs, and control programs + * @author Harold Bruijntjes + * @version $Revision$ + */ +public class NativeGraphExporter extends AbstractExporter { + private NativeGraphExporter() { + super(ExportKind.GRAPH); + register(ResourceKind.TYPE); + register(ResourceKind.HOST); + register(ResourceKind.RULE); + } + + /** Registers a resource kind with its default file type. */ + private void register(ResourceKind kind) { + register(kind.getFileType()); + } + + @Override + public void doExport(Exportable exportable, File file, FileType fileType) throws PortException { + var graph = GraphConverter.toAspect(exportable.graph()); + try { + GxlIO.instance().saveGraph(graph.toPlainGraph(), file); + } catch (IOException e) { + throw new PortException(e); + } + } + + /** Returns the singleton instance of this class. */ + public static final NativeGraphExporter getInstance() { + return instance; + } + + private static final NativeGraphExporter instance = new NativeGraphExporter(); +} diff --git a/src/main/java/nl/utwente/groove/io/external/format/NativePorter.java b/src/main/java/nl/utwente/groove/io/external/format/NativeResourcePorter.java similarity index 93% rename from src/main/java/nl/utwente/groove/io/external/format/NativePorter.java rename to src/main/java/nl/utwente/groove/io/external/format/NativeResourcePorter.java index e3c79fb3a..e1a88cd08 100644 --- a/src/main/java/nl/utwente/groove/io/external/format/NativePorter.java +++ b/src/main/java/nl/utwente/groove/io/external/format/NativeResourcePorter.java @@ -41,8 +41,8 @@ * @author Harold Bruijntjes * @version $Revision$ */ -public class NativePorter extends AbstractResourcePorter { - private NativePorter() { +public class NativeResourcePorter extends AbstractResourcePorter { + private NativeResourcePorter() { register(ResourceKind.TYPE); register(ResourceKind.HOST); register(ResourceKind.RULE); @@ -137,9 +137,9 @@ public void doExport(Exportable exportable, File file, FileType fileType) throws } /** Returns the singleton instance of this class. */ - public static final NativePorter getInstance() { + public static final NativeResourcePorter getInstance() { return instance; } - private static final NativePorter instance = new NativePorter(); + private static final NativeResourcePorter instance = new NativeResourcePorter(); }