aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPavel Paroulek <pavel.paroulek@orange.com>2019-09-19 14:16:46 +0200
committerPavel Paroulek <pavel.paroulek@orange.com>2019-09-19 14:16:46 +0200
commit978bcaf8d8319633ae0532d0449e93384a6d912c (patch)
treef80d683d9f6384437677915f8902cad121d91837
parent0a6fb2e8a9e0df82035e8e23c79db79757ace25b (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.js29
-rw-r--r--graphgraph-fe/src/GraphSettings.js8
-rw-r--r--graphgraph-fe/src/requests.js4
-rw-r--r--src/main/java/org/onap/aai/graphgraph/App.java3
-rw-r--r--src/main/java/org/onap/aai/graphgraph/ModelExporter.java10
-rw-r--r--src/main/java/org/onap/aai/graphgraph/SchemaResource.java8
-rw-r--r--src/main/java/org/onap/aai/graphgraph/SchemaValidator.java2
-rw-r--r--src/main/java/org/onap/aai/graphgraph/reader/BasicSchemaReader.java17
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()));