From 1a6ec7b3c4343436a7d1135e0a88db07537c396e Mon Sep 17 00:00:00 2001 From: Serban Jora Date: Tue, 12 Sep 2017 15:27:05 -0400 Subject: Adds deploy plugin to maven poms Also adds more doc to service README and removes some printouts Change-Id: I4d5a1285264ce1fbfc40297114bdb11a10a5059f Signed-off-by: Serban Jora Issues-Id: MODELING-17 --- javatoscachecker/checker/pom.xml | 277 ++++++++++++--------- .../main/java/org/onap/tosca/checker/Checker.java | 6 +- .../src/main/java/org/onap/tosca/checker/Data.java | 71 ++++-- javatoscachecker/kwalify/pom.xml | 203 ++++++++------- javatoscachecker/pom.xml | 29 ++- javatoscachecker/service/README | 47 +++- javatoscachecker/service/pom.xml | 271 +++++++++++--------- 7 files changed, 542 insertions(+), 362 deletions(-) diff --git a/javatoscachecker/checker/pom.xml b/javatoscachecker/checker/pom.xml index a408bc6..61a3041 100644 --- a/javatoscachecker/checker/pom.xml +++ b/javatoscachecker/checker/pom.xml @@ -10,97 +10,100 @@ Checker - src/main/java - - - maven-compiler-plugin - 3.1 - - 1.8 - 1.8 - ${project.build.sourceEncoding} - - - - org.apache.maven.plugins - maven-dependency-plugin - 2.10 - - - copy-dependencies - package - - copy-dependencies - - - ${project.build.directory}/deps - false - false - true - - - - - - org.codehaus.mojo - buildnumber-maven-plugin - 1.4 - - - validate - - create - - - - - false - false - - - - org.apache.maven.plugins - maven-jar-plugin - 2.1 - - - - true - - - ${buildNumber} - - - - + src/main/java + + + maven-compiler-plugin + 3.1 + + 1.8 + 1.8 + ${project.build.sourceEncoding} + + + + + org.apache.maven.plugins + maven-dependency-plugin + 2.10 + + + copy-dependencies + package + + copy-dependencies + + + ${project.build.directory}/deps + false + false + true + + + + + + + org.codehaus.mojo + buildnumber-maven-plugin + 1.4 + + + validate + + create + + + + + false + false + + + + + org.apache.maven.plugins + maven-jar-plugin + 2.1 + + + + true + + + ${buildNumber} + + + + - - org.apache.maven.plugins - maven-assembly-plugin - 2.6 - - - jar-with-dependencies - - - - org.onap.tosca.checker.Checker - - - ${buildNumber} - - - - - - make-assembly - package - - single - - - - + + org.apache.maven.plugins + maven-assembly-plugin + 2.6 + + + jar-with-dependencies + + + + org.onap.tosca.checker.Checker + + + ${buildNumber} + + + + + + make-assembly + package + + single + + + + org.apache.maven.plugins @@ -113,40 +116,66 @@ - - - org.apache.maven.plugins - maven-javadoc-plugin - 3.0.0-M1 - - API for ${project.name} ${project.version} - API for ${project.name} ${project.version} - - - - - com.blackducksoftware.integration - hub-maven-plugin - 2.0.0 - false - - ${project.name} - ${project.basedir} - false - - - - create-bdio-file - package - - build-bom - - - - - - - + + + + org.apache.maven.plugins + maven-javadoc-plugin + 3.0.0-M1 + + API for ${project.name} ${project.version} + API for ${project.name} ${project.version} + + + + + org.sonatype.plugins + nexus-staging-maven-plugin + true + + ${nexusproxy} + 176c31dfe190a + ecomp-staging + + + + + + + + + + + commons-io commons-io diff --git a/javatoscachecker/checker/src/main/java/org/onap/tosca/checker/Checker.java b/javatoscachecker/checker/src/main/java/org/onap/tosca/checker/Checker.java index 5cc8233..4218b85 100644 --- a/javatoscachecker/checker/src/main/java/org/onap/tosca/checker/Checker.java +++ b/javatoscachecker/checker/src/main/java/org/onap/tosca/checker/Checker.java @@ -2821,7 +2821,7 @@ available and the available targets won't be re-processed. return true; } defs = Maps.newHashMap(defs); // - + boolean res = true; if (theSpecType == null) { theSpecType = (String)theSpec.get("type"); @@ -2838,8 +2838,6 @@ available and the available targets won't be re-processed. while (i.hasNext() && !defs.isEmpty()) { Map.Entry type = i.next(); -//System.out.println(" **** type : " + type.getKey() ); - Map typeDefs = (Map)type.getValue() .get(theFacet.name()); if (null == typeDefs) { @@ -2847,7 +2845,7 @@ available and the available targets won't be re-processed. } MapDifference diff = Maps.difference(defs, typeDefs); - + //this are the ones this type and the spec have in common (same key, //different values) Map> facetDefs = diff --git a/javatoscachecker/checker/src/main/java/org/onap/tosca/checker/Data.java b/javatoscachecker/checker/src/main/java/org/onap/tosca/checker/Data.java index 9aab6ca..2a75cfd 100644 --- a/javatoscachecker/checker/src/main/java/org/onap/tosca/checker/Data.java +++ b/javatoscachecker/checker/src/main/java/org/onap/tosca/checker/Data.java @@ -294,15 +294,11 @@ public class Data { private static boolean evalCollection(Collection theVals, Map theDef, Checker.CheckContext theCtx) { - -//System.out.println("evalCollection: " + theDef + ", " + theVals); - Data.Type entryType = null; Map entryTypeDef = (Map)theDef.get("entry_schema"); if (null != entryTypeDef) entryType = typeByName((String)entryTypeDef.get("type")); -//System.out.println("evalCollection, entry definition: " + entryTypeDef); boolean res = true; for (Object val: theVals) { //check if the value is not a function call @@ -336,8 +332,6 @@ public class Data { private static boolean evalCollectionConstraints(Collection theVals, Map theDef, Checker.CheckContext theCtx) { -//System.out.println("evalCollectionConstraints: " + theDef + ", " + theVals); - //should check overall constraints if (theVals == null) @@ -350,8 +344,6 @@ public class Data { String entryTypeName = (String)entryTypeDef.get("type"); Data.Type entryType = typeByName(entryTypeName); -//System.out.println("evalCollectionConstraints, entry definition: " + entryTypeDef); - boolean res = true; for (Object val: theVals) { Evaluator entryEvaluator = entryType.constraintsEvaluator(); @@ -367,16 +359,13 @@ public class Data { } /* - * All required properties across the hierarchical defintion must be present - * TODO: The expr cannot contain any entry not specified in the type definition + * TODO: check that */ public static boolean evalUser(Object theVal, Map theDef, Checker.CheckContext theCtx) { -//System.out.println("evalUser: " + theDef + ", " + theVal); - boolean res = true; - Map val = (Map)theVal; + Map val = new HashMap((Map)theVal); //must be done with respect to the super-type(s) definition Iterator props = theCtx.catalog() .facets(Construct.Data, @@ -385,13 +374,11 @@ public class Data { while (props.hasNext()) { Map.Entry propEntry = props.next(); Map propDef = (Map)propEntry.getValue(); - Object propVal = val.get(propEntry.getKey()); + Object propVal = val.remove(propEntry.getKey()); if (propVal != null) { Data.Type propType = typeByName((String)propDef.get("type")); -//System.out.println("evalUser: " + propVal + " of type " + propType + "/" + propType.isScalar()); - if (!propType.evaluator().eval(propVal, propDef, theCtx)) { res= false; if (propType.isScalar()) { @@ -400,6 +387,12 @@ public class Data { } } } + + if (!val.isEmpty()) { + theCtx.addError("Entries " + val + " were not expected for type " + theDef.get("type"), null); + res = false; + } + return res; } @@ -550,11 +543,52 @@ public class Data { private static boolean evalConcat( Object theVal, Map theDef, Checker.CheckContext theCtx) { + + Map val = (Map)theVal; + Map.Entry entry = (Map.Entry)val.entrySet().iterator().next(); + + if (!(entry.getValue() instanceof List)) { + theCtx.addError("concat: argument expression not a list", null); + return false; + } + + List args = (List)entry.getValue(); + if (args.size() < 2) { + theCtx.addError("concat: requires a minimum of 2 arguments", null); + return false; + } + + //TODO: every argument must be or yield a String value + //cannot be done in full + return true; } private static boolean evalToken( Object theVal, Map theDef, Checker.CheckContext theCtx) { + + Map val = (Map)theVal; + Map.Entry entry = (Map.Entry)val.entrySet().iterator().next(); + + if (!(entry.getValue() instanceof List)) { + theCtx.addError("token: argument expression not a list", null); + return false; + } + + List args = (List)entry.getValue(); + if (args.size() != 3) { + theCtx.addError("token: requires 3 arguments", null); + return false; + } + + //the first 2 argument must be String expressions so require more elaborate estimation + //but the third one must be an integer + + if (!(args.get(2) instanceof Integer)) { + theCtx.addError("token: 3rd argument must be an integer (substring index), found " + args.get(2).getClass(),null); + return false; + } + return true; } @@ -564,7 +598,7 @@ public class Data { Map.Entry entry = (Map.Entry)val.entrySet().iterator().next(); if (!(entry.getValue() instanceof String)) { - theCtx.addError("get_input: argument must be a String" ,null); + theCtx.addError("get_input: argument must be a String", null); return false; } @@ -666,6 +700,8 @@ public class Data { return false; } + //follow all 'HSOTED_ON' relationships to find a host, if any .. + return true; } else { @@ -737,7 +773,6 @@ public class Data { { String facetName = (String)args.get(facetNameIndex); for (Facet facet: theFacets) { -//System.out.println("get_data: looking at " + facetConstruct + " " + facetConstructType + ", " + facet + " " + facetName); facetSpec = theCtx.catalog() .getFacetDefinition( facetConstruct, diff --git a/javatoscachecker/kwalify/pom.xml b/javatoscachecker/kwalify/pom.xml index 7acfa80..e13e691 100644 --- a/javatoscachecker/kwalify/pom.xml +++ b/javatoscachecker/kwalify/pom.xml @@ -11,94 +11,121 @@ kwalify - src/main/java - - - maven-compiler-plugin - 3.1 - - 1.8 - 1.8 - ${project.build.sourceEncoding} - - - - org.apache.maven.plugins - maven-dependency-plugin - 2.10 - - - copy-dependencies - package - - copy-dependencies - - - ${project.build.directory}/deps - false - false - true - - - - - - org.codehaus.mojo - buildnumber-maven-plugin - 1.4 - - - validate - - create - - - - - false - false - - - - org.apache.maven.plugins - maven-jar-plugin - 2.1 - - - - true - - - ${buildNumber} - - - - + src/main/java + + + maven-compiler-plugin + 3.1 + + 1.8 + 1.8 + ${project.build.sourceEncoding} + + - - - com.blackducksoftware.integration - hub-maven-plugin - 2.0.0 - false - - ${project.name} - ${project.basedir} - false - - - - create-bdio-file - package - - build-bom - - - - - - + + org.apache.maven.plugins + maven-dependency-plugin + 2.10 + + + copy-dependencies + package + + copy-dependencies + + + ${project.build.directory}/deps + false + false + true + + + + + + + org.codehaus.mojo + buildnumber-maven-plugin + 1.4 + + + validate + + create + + + + + false + false + + + + + org.apache.maven.plugins + maven-jar-plugin + 2.1 + + + + true + + + ${buildNumber} + + + + + + + org.sonatype.plugins + nexus-staging-maven-plugin + true + + ${nexusproxy} + 176c31dfe190a + ecomp-staging + + + + + + + + + + + + - - diff --git a/javatoscachecker/pom.xml b/javatoscachecker/pom.xml index 10372d7..6bae64f 100644 --- a/javatoscachecker/pom.xml +++ b/javatoscachecker/pom.xml @@ -9,13 +9,40 @@ 0.0.1-SNAPSHOT pom TOSCA Checker tools + + + https://nexus.onap.org + /content/sites/site/${project.groupId}/${project.artifactId}/${project.version} + content/repositories/releases/ + content/repositories/snapshots/ + content/repositories/staging/ + kwalify checker service - + + + + ecomp-releases + ONAP Release Repository + ${nexusproxy}/${releases.path} + + + ecomp-snapshots + ONAP Snapshot Repository + ${nexusproxy}/${snapshots.path} + + + + scm:git:https:// scm:git:https:// diff --git a/javatoscachecker/service/README b/javatoscachecker/service/README index 94c5dde..8853dd7 100644 --- a/javatoscachecker/service/README +++ b/javatoscachecker/service/README @@ -1,6 +1,45 @@ -checker service usage +This sub-project exposes the TOSCA yaml checker functionality as a REST based service. +The service implemetation is based on the spring framework and contains a built-in default configuration that will run the service at port 8080 over plain http. -A checking request is done with respect to a namespace that a client names. Each such namespace is backed by an -in-memory catalog. -A checking request can +To start the service: + java -jar Service-0.0.1-SNAPSHOT.jar +Sample client usage (windows power shell): + + PS C:\Users\serban> Invoke-WebRequest -Uri http://localhost:8080/check_template/ -Method Post -ContentType application/json -InFile C:\src\asc-tosca\DCAE\v3\Database\Postgres-generic\schema.yaml + + +With stateful 'namespaces': + + PS C:\Users\serban> Invoke-WebRequest -Uri http://localhost:8080/check_template/database/schema.yaml -Method Post -ContentType application/json -InFile C:\src\asc-tosca\DCAE\v3\Database\Postgres-generic\schema.yaml + PS C:\Users\serban> Invoke-WebRequest -Uri http://localhost:8080/check_template/database -Method Post -ContentType application/json -InFile C:\src\asc-tosca\DCAE\v3\Database\Postgres-generic\template_postgres.yaml + +The first call creates the 'database' namespace and registers the submitted template as 'schema.yaml'. The second call submits a template as part of the same namespace containing an import of schema.yaml (from the first call); this mechanism allows for validation of multiple service templates with the same schema/type system. + + +Details + +POST /check_template/ + - unnamed (isolated/one time) service template checking + - return: a json representation of the report produced by the checker (an array with json objects as elements, one per error encoutered) + +POST /check_template/{catalog}/{name} + - named template submitted as part of the given catalog. A catalog allows a client application to isolate a particular TOSCA schema (type system) against which other templates will be checked. The catalog names are arbitrary (see catalog GET below as a way of checking if a catalog name is in use). + - return: a json representation of the report produced by the checker (an array with json objects as elements, one per error encoutered). When using the catalog based api one can use import statements within the templates but .. all import references are towards templates submitted prior hence all the errors in the report are for the submitted template). + - note: currently there is no explicit catalog creation API. A new catalog with the given name will be created if not already existing. + +GET /check_template/{catalog}/{name} + - checks if a template with the given name was submitted/checked as part of the given catalog. + - returns HTTP 200OK if a catalog with that name existed and the given name is associated with a previously submitted (named) template, 404 otherwise. No other catalog or template information is returned. + +POST /check_template/{catalog} + - unnamed template submitted as part of the given catalog. The template is processed but not registered so it cannot be referenced afterwards; it can use import statements refering to named templates within this catalog. + - return: a json representation of the report produced by the checker (an array with json objects as elements, one per error encoutered) + +GET /check_template/{catalog} + - checks if a catalog with the given name exists + - returns HTTP 200OK if a catalog with that name existed, 404 otherwise. No other catalog information is returned. + +DELETE /check_template/{catalog} + - deletes an existing catalog (and all information associated with it) + - returns HTTP 200OK if a catalog with that name existed, 404 otherwise diff --git a/javatoscachecker/service/pom.xml b/javatoscachecker/service/pom.xml index 7040aec..5b1bbcb 100644 --- a/javatoscachecker/service/pom.xml +++ b/javatoscachecker/service/pom.xml @@ -16,133 +16,158 @@ - src/main/java - - - maven-compiler-plugin - 3.1 - - 1.8 - 1.8 - ${project.build.sourceEncoding} - - + src/main/java + + + maven-compiler-plugin + 3.1 + + 1.8 + 1.8 + ${project.build.sourceEncoding} + + + - - org.codehaus.mojo - buildnumber-maven-plugin - 1.4 - - - validate - - create - - - - - false - false - - - - org.apache.maven.plugins - maven-jar-plugin - 2.4 - - - - true - - - ${buildNumber} - ${maven.build.timestamp} - - - - - - org.springframework.boot - spring-boot-maven-plugin - 1.3.3.RELEASE - - org.onap.tosca.checker.service.CheckerEngine - - - - - repackage - - - - - + + org.codehaus.mojo + buildnumber-maven-plugin + 1.4 + + + validate + + create + + + + + false + false + + - - - - - com.fasterxml.jackson.core - jackson-databind - [2.7.8,) - - - org.springframework - spring-core - [4.3.4.RELEASE,) - - - org.springframework - spring-web - [4.3.4.RELEASE,) - - - org.springframework.boot - spring-boot-starter-web - [1.3.3.RELEASE,) - - - org.springframework - spring-webmvc - [4.3.4.RELEASE,) - - + + org.apache.maven.plugins + maven-jar-plugin + 2.4 + + + + true + + + ${buildNumber} + ${maven.build.timestamp} + + + + + + org.springframework.boot - spring-boot-autoconfigure - [1.3.3.RELEASE,) - - - org.json - json - 20160212 - + spring-boot-maven-plugin + 1.3.3.RELEASE + + org.onap.tosca.checker.service.CheckerEngine + + + + + repackage + + + + + + + org.sonatype.plugins + nexus-staging-maven-plugin + true + + ${nexusproxy} + 176c31dfe190a + ecomp-staging + + + + + + + + + + + com.fasterxml.jackson.core + jackson-databind + [2.7.8,) + + + org.springframework + spring-core + [4.3.4.RELEASE,) + + + org.springframework + spring-web + [4.3.4.RELEASE,) + + + org.springframework.boot + spring-boot-starter-web + [1.3.3.RELEASE,) + + + org.springframework + spring-webmvc + [4.3.4.RELEASE,) + + + org.springframework.boot + spring-boot-autoconfigure + [1.3.3.RELEASE,) + + + org.json + json + 20160212 + - - org.onap.tosca - Checker - 0.0.1-SNAPSHOT - - + + org.onap.tosca + Checker + 0.0.1-SNAPSHOT + + + -- cgit 1.2.3-korg