diff options
author | Pavel Paroulek <pavel.paroulek@orange.com> | 2019-09-19 14:16:46 +0200 |
---|---|---|
committer | Pavel Paroulek <pavel.paroulek@orange.com> | 2019-09-19 14:16:46 +0200 |
commit | 978bcaf8d8319633ae0532d0449e93384a6d912c (patch) | |
tree | f80d683d9f6384437677915f8902cad121d91837 | |
parent | 0a6fb2e8a9e0df82035e8e23c79db79757ace25b (diff) |
Adding validations
Adding schema validation rule and export button
Change-Id: Id30787cb5c5b98318fa0bd1c34baa31d530e1a58
Issue-ID: AAI-2583
Signed-off-by: Pavel Paroulek <pavel.paroulek@orange.com>
-rw-r--r-- | graphgraph-fe/src/DownloadExport.js | 29 | ||||
-rw-r--r-- | graphgraph-fe/src/GraphSettings.js | 8 | ||||
-rw-r--r-- | graphgraph-fe/src/requests.js | 4 | ||||
-rw-r--r-- | src/main/java/org/onap/aai/graphgraph/App.java | 3 | ||||
-rw-r--r-- | src/main/java/org/onap/aai/graphgraph/ModelExporter.java | 10 | ||||
-rw-r--r-- | src/main/java/org/onap/aai/graphgraph/SchemaResource.java | 8 | ||||
-rw-r--r-- | src/main/java/org/onap/aai/graphgraph/SchemaValidator.java | 2 | ||||
-rw-r--r-- | src/main/java/org/onap/aai/graphgraph/reader/BasicSchemaReader.java | 17 |
8 files changed, 74 insertions, 7 deletions
diff --git a/graphgraph-fe/src/DownloadExport.js b/graphgraph-fe/src/DownloadExport.js new file mode 100644 index 0000000..b031773 --- /dev/null +++ b/graphgraph-fe/src/DownloadExport.js @@ -0,0 +1,29 @@ +import React from 'react' +import { Button } from 'react-bootstrap' +import { exportSchema } from './requests' + + +class DownloadExport extends React.Component { + constructor (props, context) { + super(props, context) + this.download = this.download.bind(this) + } + + download() { + + setTimeout(() => { + const response = { + file: exportSchema(this.props.schemaVersion), + }; + window.open(response.file); + }, 100); + } + + render() { + return ( + <Button onClick={this.download}>Download as XMI</Button> + ); + } +} + +export default DownloadExport diff --git a/graphgraph-fe/src/GraphSettings.js b/graphgraph-fe/src/GraphSettings.js index 4d44aef..d511068 100644 --- a/graphgraph-fe/src/GraphSettings.js +++ b/graphgraph-fe/src/GraphSettings.js @@ -4,6 +4,7 @@ import { DropdownButton, MenuItem, Label } from 'react-bootstrap' import './GraphSettings.css' import Popup from './PopupSettings' import ValidationModal from './ValidationModal' +import DownloadExport from './DownloadExport' import { validateSchema, pathGraph, basicGraph, schemas, nodeNames } from './requests' var emptyState = { @@ -220,8 +221,13 @@ class GraphSettings extends React.Component { <Popup isDisabled={!this.state.showHops} edgeFilter={this.state.edgeFilter} parentHops={this.state.hops.parents} childHops={this.state.hops.child} cousinHops={this.state.hops.cousin} updateHops={this.updateHops}/> <div className="modal-button"> - <ValidationModal schemaProblems={this.state.schemaProblems}/> + <ValidationModal schemaProblems={this.state.schemaProblems}/> </div> + + <div className="modal-button"> + <DownloadExport schemaVersion={this.state.selectedSchema}/> + </div> + </div> </div> diff --git a/graphgraph-fe/src/requests.js b/graphgraph-fe/src/requests.js index cb23bd7..8a86e0c 100644 --- a/graphgraph-fe/src/requests.js +++ b/graphgraph-fe/src/requests.js @@ -10,6 +10,10 @@ export function validateSchema (schema) { return `${protocol}//${host}:${port}/schemas/${schema}/validation` } +export function exportSchema (schema) { + return `${protocol}//${host}:${port}/schemas/${schema}/xmiexport` +} + export function nodeNames (schema, edgeFilter) { return `${protocol}//${host}:${port}/schemas/${schema}/nodes?edgeFilter=${edgeFilter}` } diff --git a/src/main/java/org/onap/aai/graphgraph/App.java b/src/main/java/org/onap/aai/graphgraph/App.java index 58e0d66..910c086 100644 --- a/src/main/java/org/onap/aai/graphgraph/App.java +++ b/src/main/java/org/onap/aai/graphgraph/App.java @@ -20,6 +20,7 @@ package org.onap.aai.graphgraph; import static org.onap.aai.graphgraph.ModelExporter.exportModel; +import static org.onap.aai.graphgraph.ModelExporter.writeExportedModel; import java.io.IOException; import java.nio.file.Files; @@ -74,7 +75,7 @@ public class App{ edgeIngestor = (EdgeIngestor) context.getBean("edgeIngestor"); if (parser.shoudGenerateUml()){ - exportModel(parser.getSchemaVersion()); + writeExportedModel(exportModel(parser.getSchemaVersion())); System.exit(0); } } diff --git a/src/main/java/org/onap/aai/graphgraph/ModelExporter.java b/src/main/java/org/onap/aai/graphgraph/ModelExporter.java index ce7ae39..60a4231 100644 --- a/src/main/java/org/onap/aai/graphgraph/ModelExporter.java +++ b/src/main/java/org/onap/aai/graphgraph/ModelExporter.java @@ -103,15 +103,19 @@ public class ModelExporter { return new EdgeRule(edgeRuleProps); } - static void exportModel(String schemaVersion) { + static String exportModel(String schemaVersion) { Map<String, Introspector> allObjects = App.moxyLoaders.get(schemaVersion).getAllObjects(); Template t = initVelocity(); VelocityContext context = populateVelocityContext(schemaVersion, allObjects); StringWriter writer = new StringWriter(); t.merge( context, writer ); + return writer.toString(); + } + + static void writeExportedModel(String result) { try { FileWriter fw = new FileWriter(AAIMODEL_UML_FILENAME); - fw.write(writer.toString()); + fw.write(result); fw.close(); } catch (IOException e) { e.printStackTrace(); @@ -219,7 +223,7 @@ public class ModelExporter { toEntity, fromEntity, String.format("%s - %s (%s)", to, from, shortenLabel(label)), - multiplicity, + multiplicity.equals("ONE2MANY") ? "MANY2ONE" : multiplicity, true); default: return new VelocityAssociation( diff --git a/src/main/java/org/onap/aai/graphgraph/SchemaResource.java b/src/main/java/org/onap/aai/graphgraph/SchemaResource.java index 3182681..b38ef7b 100644 --- a/src/main/java/org/onap/aai/graphgraph/SchemaResource.java +++ b/src/main/java/org/onap/aai/graphgraph/SchemaResource.java @@ -25,9 +25,11 @@ import org.onap.aai.graphgraph.dto.NodeProperty; import org.onap.aai.graphgraph.dto.Property; import org.onap.aai.graphgraph.dto.ValidationProblems; import org.onap.aai.graphgraph.reader.SchemaRepository; +import org.springframework.http.MediaType; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.RestController; import javax.annotation.Resource; @@ -96,6 +98,12 @@ public class SchemaResource { public ValidationProblems validateSchema ( @PathVariable("schema") String schemaName) { return new SchemaValidator().validate(schemaName); } + + @RequestMapping(value = "/schemas/{schema}/xmiexport", produces = MediaType.TEXT_XML_VALUE) + @ResponseBody + public String exportSchema ( @PathVariable("schema") String schemaName) { + return ModelExporter.exportModel(schemaName); + } } diff --git a/src/main/java/org/onap/aai/graphgraph/SchemaValidator.java b/src/main/java/org/onap/aai/graphgraph/SchemaValidator.java index b67f1ad..28bb12e 100644 --- a/src/main/java/org/onap/aai/graphgraph/SchemaValidator.java +++ b/src/main/java/org/onap/aai/graphgraph/SchemaValidator.java @@ -2,7 +2,6 @@ package org.onap.aai.graphgraph; import io.vavr.Tuple; import io.vavr.Tuple2; -import java.util.Arrays; import java.util.HashSet; import java.util.List; import java.util.Set; @@ -24,6 +23,7 @@ public class SchemaValidator { checkIfDanglingEdgerules(validationProblems); checkIfObsoleteOxm(validationProblems); + schema.getSchemaErrors().forEach(validationProblems::addProblem); return validationProblems; } diff --git a/src/main/java/org/onap/aai/graphgraph/reader/BasicSchemaReader.java b/src/main/java/org/onap/aai/graphgraph/reader/BasicSchemaReader.java index 1c58550..b2d766b 100644 --- a/src/main/java/org/onap/aai/graphgraph/reader/BasicSchemaReader.java +++ b/src/main/java/org/onap/aai/graphgraph/reader/BasicSchemaReader.java @@ -51,9 +51,14 @@ import org.onap.aai.setup.SchemaVersion; public class BasicSchemaReader implements SchemaReader { private Map<String, Introspector> allEntities; - Graph<String, MetadataEdge> graph = new DefaultDirectedGraph<>(MetadataEdge.class); + private Graph<String, MetadataEdge> graph = new DefaultDirectedGraph<>(MetadataEdge.class); private EdgeIngestor edgeIngestor; private String version; + private List<String> schemaErrors = new LinkedList<>(); + + public List<String> getSchemaErrors() { + return schemaErrors; + } public BasicSchemaReader(String version) { this.version = version; @@ -119,10 +124,20 @@ public class BasicSchemaReader implements SchemaReader { String[] split = label.split("\\."); label = split[split.length - 1]; } + checkVertexExist(graph, parent); + checkVertexExist(graph, child); + graph.addEdge(child, parent, new MetadataEdge(EdgeType.EDGE_RULE.getTypeName(), child, parent, label)); } + private void checkVertexExist(Graph<String, MetadataEdge> graph, String vertex) { + if (! graph.vertexSet().contains(vertex)) { + graph.addVertex(vertex); + schemaErrors.add(String.format("Schema is inconsistent, missing node %s", vertex)); + } + } + private void addParentChildEdge(String parent, String child, Graph<String, MetadataEdge> graph) { graph.addEdge(parent, child, new MetadataEdge(EdgeType.PARENT.getTypeName(), parent, child, EdgeType.PARENT.getTypeName())); |