Fix handling of docker image with no tags 93/2293/2 1.1.4.1
authorSerban Jora <sj2381@att.com>
Wed, 11 Jul 2018 15:26:20 +0000 (11:26 -0400)
committerSerban Jora <sj2381@att.com>
Wed, 11 Jul 2018 15:41:14 +0000 (11:41 -0400)
This rolls back to 1.1.4, for CDS 1.14 compatibility

Change-Id: I57a3d6f61d2abf0df5e68fede0fd1b2e77eca862
Signed-off-by: Serban Jora <sj2381@att.com>
Issue-ID: ACUMOS-1015
Signed-off-by: Serban Jora <sj2381@att.com>
16 files changed:
docs/release-notes.rst
gateway/pom.xml
gateway/src/main/java/org/acumos/federation/gateway/adapter/PeerGateway.java
gateway/src/main/java/org/acumos/federation/gateway/cds/Solution.java
gateway/src/main/java/org/acumos/federation/gateway/cds/SolutionBuilder.java
gateway/src/main/java/org/acumos/federation/gateway/cds/SolutionRevision.java
gateway/src/main/java/org/acumos/federation/gateway/cds/SolutionRevisionBuilder.java
gateway/src/main/java/org/acumos/federation/gateway/controller/CatalogController.java
gateway/src/main/java/org/acumos/federation/gateway/service/CatalogService.java
gateway/src/main/java/org/acumos/federation/gateway/service/impl/CatalogServiceImpl.java
gateway/src/main/java/org/acumos/federation/gateway/service/impl/CatalogServiceLocalImpl.java
gateway/src/test/java/org/acumos/federation/gateway/test/TestAdapter.java
gateway/src/test/resources/acumosa-catalog.json
gateway/src/test/resources/acumosb-catalog.json
gateway/src/test/resources/task-test-catalog.json
gateway/src/test/resources/test-catalog.json

index ff026b6..b8c8620 100644 (file)
 .. limitations under the License.
 .. ===============LICENSE_END=========================================================
 
-===============================
-Federated Gateway Release Notes
-===============================
+=============
+Release Notes
+=============
 
 The Federated Gateway server is available as a Docker image in a Docker registry.
 
-Version 1.1.5, 2018-07-6
+Version 1.1.4.1, 2018-07-11
 -------------------------
 
-* Aligns with the data model changes from CDS 1.15
+* Fix handling of docker images with no tags
 
 Version 1.1.4, 2018-06-20
 -------------------------
index 2109dc8..34e8916 100644 (file)
@@ -24,7 +24,7 @@ limitations under the License.
        <modelVersion>4.0.0</modelVersion>
        <groupId>org.acumos.federation</groupId>
        <artifactId>gateway</artifactId>
-       <version>1.1.5-SNAPSHOT</version>
+       <version>1.1.4.1-SNAPSHOT</version>
        <name>Federation Gateway</name>
        <description>Federated Acumos Interface for inter-acumos and ONAP communication</description>
 
@@ -74,7 +74,7 @@ limitations under the License.
                <dependency>
                        <groupId>org.acumos.common-dataservice</groupId>
                        <artifactId>cmn-data-svc-client</artifactId>
-                       <version>1.15.3</version>
+                       <version>1.14.4</version>
                </dependency>
                <dependency>
                        <groupId>org.json</groupId>
index ac3c198..cf390a4 100644 (file)
@@ -192,6 +192,8 @@ public class PeerGateway {
                                        "Creating Local MLP Solution for peer solution " + peerSolution);
 
                        Solution localSolution = Solution.buildFrom(peerSolution)
+                                                                                                                                       .withAccessTypeCode(this.sub.getAccessType())
+                                                                                                                                       .withValidationStatusCode(this.peer.getValidationStatusCode())
                                                                                                                                        .withProvider(this.peer.getName())
                        //should the creted/modified reflect this information or the information we got from the peer ?
                                                                                                                                        .withOwner(getOwnerId(this.sub))
@@ -218,8 +220,6 @@ public class PeerGateway {
                        SolutionRevision localRevision = SolutionRevision.buildFrom(peerRevision)
                                                                                                                                                                        .withOwner(getOwnerId(this.sub))
                                                                                                                                                                        .withSource(this.peer.getPeerId())
-                                                                                                                                                                       .withAccessTypeCode(this.sub.getAccessType())
-                                                                                                                                                                       .withValidationStatusCode(this.peer.getValidationStatusCode())
                                                                                                                                                                        .build();
                        try {
                                cdsClient.createSolutionRevision(localRevision);
@@ -278,6 +278,8 @@ public class PeerGateway {
 
                        //start with the peer solution and pick the few local values we ought to preserve or impose
                        Solution solution = Solution.buildFrom(peerSolution)
+                                                                                                                       .withAccessTypeCode(localSolution.getAccessTypeCode())
+                                                                                                                       .withValidationStatusCode(this.peer.getValidationStatusCode()) //reset
                                                                                                                        .withProvider(this.peer.getName())
                                                                                                                        .withOwner((Object... args) -> {
                                                                                                                                        String newOwnerId = getOwnerId(this.sub);
index 2259709..3ae7545 100644 (file)
@@ -47,7 +47,7 @@ public class Solution extends MLPSolution {
                public static final String sourceId = "sourceId";
        };
 
-       private List<? extends MLPSolutionRevision>             revisions;
+       private List<MLPSolutionRevision>               revisions;
 
        public Solution() {
        }
@@ -56,11 +56,11 @@ public class Solution extends MLPSolution {
                super(theCDSSolution);
        }
 
-       public void setRevisions(List<? extends MLPSolutionRevision> theRevisions) {
+       public void setRevisions(List<MLPSolutionRevision> theRevisions) {
                this.revisions = theRevisions;
        }
 
-       public List<? extends MLPSolutionRevision>      getRevisions() {
+       public List<MLPSolutionRevision>        getRevisions() {
                return this.revisions;
        }
        
index 877bd82..c87ef59 100644 (file)
@@ -78,6 +78,11 @@ public class SolutionBuilder {
                return this;
        }
 
+       public SolutionBuilder withAccessTypeCode(String theCode) {
+               this.solution.setAccessTypeCode(theCode);
+               return this;
+       }
+
        public SolutionBuilder withModelTypeCode(String theCode) {
                this.solution.setModelTypeCode(theCode);
                return this;
@@ -88,6 +93,11 @@ public class SolutionBuilder {
                return this;
        }
 
+       public SolutionBuilder withValidationStatusCode(String theCode) {
+               this.solution.setValidationStatusCode(theCode);
+               return this;
+       }
+
        public SolutionBuilder withOrigin(String theOrigin) {
                this.solution.setOrigin(theOrigin);
                return this;
index 7b4a883..b37c82a 100644 (file)
@@ -30,7 +30,7 @@ import org.acumos.cds.domain.MLPArtifact;
  */
 public class SolutionRevision extends MLPSolutionRevision {
 
-       private List<? extends MLPArtifact>             artifacts;
+       private List<MLPArtifact>               artifacts;
 
        public SolutionRevision() {
        }
@@ -39,11 +39,11 @@ public class SolutionRevision extends MLPSolutionRevision {
                super(theCDSRevision);
        }
 
-       public void setArtifacts(List<? extends MLPArtifact> theArtifacts) {
+       public void setArtifacts(List<MLPArtifact> theArtifacts) {
                this.artifacts = theArtifacts;
        }
 
-       public List<? extends MLPArtifact>      getArtifacts() {
+       public List<MLPArtifact>        getArtifacts() {
                return this.artifacts;
        }
 
index 927e9db..241597c 100644 (file)
@@ -66,16 +66,6 @@ public class SolutionRevisionBuilder {
                return this;
        }
 
-       public SolutionRevisionBuilder withValidationStatusCode(String theCode) {
-               this.revision.setValidationStatusCode(theCode);
-               return this;
-       }
-
-       public SolutionRevisionBuilder withAccessTypeCode(String theCode) {
-               this.revision.setAccessTypeCode(theCode);
-               return this;
-       }
-
        public SolutionRevisionBuilder withOrigin(String theOrigin) {
                this.revision.setOrigin(theOrigin);
                return this;
index 5e013b5..6f77083 100644 (file)
@@ -392,10 +392,12 @@ public class CatalogController extends AbstractController {
                        if (artifactUri != null) {
                                Identifier imageId = Identifier.fromCompoundString(artifactUri);
                        
-                               String imageTag = imageId.tag.get(); //there should always be a tag, right??
-                               log.debug(EELFLoggerDelegate.debugLogger,       "getSolutionRevisionArtifacts: encoded docker image uri to tag " + imageTag);
-                               theArtifact.setName(imageTag);
-                               theArtifact.setDescription(imageTag);
+                               String imageTag = imageId.tag.orNull();
+                               if (imageTag != null) {
+                                       log.debug(EELFLoggerDelegate.debugLogger,       "getSolutionRevisionArtifacts: encoded docker image uri to tag " + imageTag);
+                                       theArtifact.setName(imageTag);
+                                       theArtifact.setDescription(imageTag);
+                               }
                        }
                }
        }
index 989bbc1..e28272c 100644 (file)
@@ -29,13 +29,10 @@ import java.util.List;
 
 import org.springframework.core.io.InputStreamResource;
 
-import org.acumos.federation.gateway.cds.Artifact;
-import org.acumos.federation.gateway.cds.Solution;
-import org.acumos.federation.gateway.cds.SolutionRevision;
-
 import org.acumos.cds.domain.MLPArtifact;
 import org.acumos.cds.domain.MLPSolution;
 import org.acumos.cds.domain.MLPSolutionRevision;
+import org.acumos.cds.transport.RestPageResponse;
 
 /**
  * Handles access to the solutions catalog. The APIs of tis interface take a
@@ -83,11 +80,10 @@ public interface CatalogService {
         *            solution identifier (UUID).
         * @param theContext
         *            the execution context
-        * @return Extended solution information, possibly inclulding related revision information.
-        *                               Will return null if the given solution id does not match an existing solution;
+        * @return solution information. Will return null if the given solution id does not match an existing solution;
         * @throws ServiceException if an error is encoutered during processing
         */
-       public Solution getSolution(String theSolutionId, ServiceContext theContext) throws ServiceException ;
+       public MLPSolution getSolution(String theSolutionId, ServiceContext theContext) throws ServiceException ;
 
        /**
         * Default solution access interface for calls in behalf of the local Acumos
@@ -95,10 +91,10 @@ public interface CatalogService {
         *
         * @param theSolutionId
         *            solution identifier (UUID).
-        * @return Extended solution information
+        * @return solution information
         * @throws ServiceException if an error is encoutered during processing
         */
-       public default Solution getSolution(String theSolutionId) throws ServiceException {
+       public default MLPSolution getSolution(String theSolutionId) throws ServiceException {
                return getSolution(theSolutionId, selfService());
        }
 
@@ -128,11 +124,10 @@ public interface CatalogService {
         *            revision identifier (UUID).
         * @param theContext
         *            the execution context
-        * @return Extended solution revision information, possibly including related artifact information.
-        *                               Null if given solution id/revision id do ont match existing information.
+        * @return solution revision information
         * @throws ServiceException if an error is encoutered during processing
         */
-       public SolutionRevision getSolutionRevision(String theSolutionId, String theRevisionId,
+       public MLPSolutionRevision getSolutionRevision(String theSolutionId, String theRevisionId,
                        ServiceContext theContext) throws ServiceException ;
 
        /**
@@ -143,10 +138,10 @@ public interface CatalogService {
         *            solution identifier (UUID).
         * @param theRevisionId
         *            revision identifier (UUID).
-        * @return Extended solution revision information
+        * @return solution revision information
         * @throws ServiceException if an error is encoutered during processing
         */
-       public default SolutionRevision getSolutionRevision(String theSolutionId, String theRevisionId) throws ServiceException {
+       public default MLPSolutionRevision getSolutionRevision(String theSolutionId, String theRevisionId) throws ServiceException {
                return getSolutionRevision(theSolutionId, theRevisionId, selfService());
        }
 
@@ -188,10 +183,10 @@ public interface CatalogService {
         *            retrieved
         * @param theContext
         *            the execution context
-        * @return Extended artifact information
+        * @return the artifact information
         * @throws ServiceException if an error is encoutered during processing
         */
-       public Artifact getSolutionRevisionArtifact(String theArtifactId, ServiceContext theContext)
+       public MLPArtifact getSolutionRevisionArtifact(String theArtifactId, ServiceContext theContext)
                                                                                                                                                                                                                                                                                                                                                                        throws ServiceException;
 
        /**
@@ -200,10 +195,10 @@ public interface CatalogService {
         * @param theArtifactId
         *            identifier of the acumos artifact whose content needs to be
         *            retrieved
-        * @return Extended artifact information
+        * @return the artifact information
         * @throws ServiceException if an error is encoutered during processing
         */
-       public default Artifact getSolutionRevisionArtifact(String theArtifactId) throws ServiceException {
+       public default MLPArtifact getSolutionRevisionArtifact(String theArtifactId) throws ServiceException {
                return getSolutionRevisionArtifact(theArtifactId, selfService());
        }
 
index 3cf6022..9256c0b 100644 (file)
@@ -66,7 +66,6 @@ import org.springframework.web.client.HttpStatusCodeException;
 
 import org.acumos.federation.gateway.cds.Solution;
 import org.acumos.federation.gateway.cds.SolutionRevision;
-import org.acumos.federation.gateway.cds.Artifact;
 
 /**
  * CDS based implementation of the CatalogService.
@@ -145,12 +144,12 @@ public class CatalogServiceImpl extends AbstractServiceImpl
                }
                while (!pageResponse.isLast());
 
-               log.debug(EELFLoggerDelegate.debugLogger, "getSolutions: solutions count {}", solutions.size());
+               log.debug(EELFLoggerDelegate.debugLogger, "getSolutions: cds solutions count {}", solutions.size());
                return solutions;
        }
 
        @Override
-       public Solution getSolution(String theSolutionId, ServiceContext theContext) throws ServiceException {
+       public MLPSolution getSolution(String theSolutionId, ServiceContext theContext) throws ServiceException {
 
                log.trace(EELFLoggerDelegate.debugLogger, "getSolution {}", theSolutionId);
                ICommonDataServiceRestClient cdsClient = getClient();
@@ -183,7 +182,7 @@ public class CatalogServiceImpl extends AbstractServiceImpl
        }
 
        @Override
-       public SolutionRevision getSolutionRevision(String theSolutionId, String theRevisionId,
+       public MLPSolutionRevision getSolutionRevision(String theSolutionId, String theRevisionId,
                        ServiceContext theContext) throws ServiceException {
 
                log.trace(EELFLoggerDelegate.debugLogger, "getSolutionRevision");
@@ -223,11 +222,11 @@ public class CatalogServiceImpl extends AbstractServiceImpl
         * @throws ServiceException if failing to retrieve artifact information or retrieve content 
         */
        @Override
-       public Artifact getSolutionRevisionArtifact(String theArtifactId, ServiceContext theContext) throws ServiceException {
+       public MLPArtifact getSolutionRevisionArtifact(String theArtifactId, ServiceContext theContext) throws ServiceException {
 
                log.trace(EELFLoggerDelegate.debugLogger, "getSolutionRevisionArtifact");
                try {
-                       return (Artifact)getClient().getArtifact(theArtifactId);
+                       return getClient().getArtifact(theArtifactId);
                }       
                catch (HttpStatusCodeException restx) {
                        if (Errors.isCDSNotFound(restx))
index e4591f8..2e2121a 100644 (file)
@@ -54,11 +54,6 @@ import org.acumos.federation.gateway.service.ServiceContext;
 import org.acumos.federation.gateway.service.ServiceException;
 import org.acumos.federation.gateway.util.Utils;
 
-import org.acumos.federation.gateway.cds.Solution;
-import org.acumos.federation.gateway.cds.SolutionRevision;
-import org.acumos.federation.gateway.cds.Artifact;
-import org.acumos.federation.gateway.cds.Mapper;
-
 import org.acumos.cds.AccessTypeCode;
 import org.acumos.cds.ValidationStatusCode;
 import org.acumos.cds.client.ICommonDataServiceRestClient;
@@ -86,7 +81,7 @@ public class CatalogServiceLocalImpl extends AbstractServiceLocalImpl implements
 
        private static final EELFLoggerDelegate log = EELFLoggerDelegate.getLogger(CatalogServiceLocalImpl.class.getName());
 
-       private List<Solution> solutions;
+       private List<FLPSolution> solutions;
 
        @PostConstruct
        public void initService() {
@@ -115,7 +110,7 @@ public class CatalogServiceLocalImpl extends AbstractServiceLocalImpl implements
        private void loadSolutionsCatalogInfo() {
                synchronized (this) {
                        try {
-                               ObjectReader objectReader = Mapper.build().reader(Solution.class);
+                               ObjectReader objectReader = new ObjectMapper().reader(FLPSolution.class);
                                MappingIterator objectIterator = objectReader.readValues(this.resource.getURL());
                                this.solutions = objectIterator.readAll();
                                log.info(EELFLoggerDelegate.debugLogger, "loaded " + this.solutions.size() + " solutions");
@@ -136,7 +131,7 @@ public class CatalogServiceLocalImpl extends AbstractServiceLocalImpl implements
        }
 
        @Override
-       public Solution getSolution(final String theSolutionId, ServiceContext theContext) throws ServiceException {
+       public MLPSolution getSolution(final String theSolutionId, ServiceContext theContext) throws ServiceException {
 
                log.debug(EELFLoggerDelegate.debugLogger, "getSolution");
                return solutions.stream().filter(solution -> {
@@ -148,18 +143,23 @@ public class CatalogServiceLocalImpl extends AbstractServiceLocalImpl implements
        public List<MLPSolutionRevision> getSolutionRevisions(final String theSolutionId, ServiceContext theContext) throws ServiceException {
 
                log.debug(EELFLoggerDelegate.debugLogger, "getSolutionRevisions");
+               FLPSolution solution = this.solutions.stream().filter(sol -> sol.getSolutionId().equals(theSolutionId))
+                               .findFirst().orElse(null);
 
-               Solution solution = getSolution(theSolutionId, theContext);
-               return (solution == null) ? Collections.EMPTY_LIST : (List)solution.getRevisions();
+               return (solution == null) ? null : solution.getMLPRevisions();
        }
 
        @Override
-       public SolutionRevision getSolutionRevision(String theSolutionId, String theRevisionId,
+       public MLPSolutionRevision getSolutionRevision(String theSolutionId, String theRevisionId,
                        ServiceContext theContext) throws ServiceException  {
 
                log.debug(EELFLoggerDelegate.debugLogger, "getSolutionRevision");
-               return (SolutionRevision)getSolutionRevisions(theSolutionId, theContext).stream()
-                                               .filter(rev -> rev.getRevisionId().equals(theRevisionId)).findFirst().orElse(null);
+               List<MLPSolutionRevision> revisions = getSolutionRevisions(theSolutionId, theContext);
+
+               if (revisions == null)
+                       return null;
+
+               return revisions.stream().filter(rev -> rev.getRevisionId().equals(theRevisionId)).findFirst().orElse(null);
        }
 
        @Override
@@ -167,20 +167,21 @@ public class CatalogServiceLocalImpl extends AbstractServiceLocalImpl implements
                        ServiceContext theContext) throws ServiceException {
                log.debug(EELFLoggerDelegate.debugLogger, "getSolutionRevisionArtifacts");
 
-               SolutionRevision revision = getSolutionRevision(theSolutionId, theRevisionId, theContext);
-               return (revision == null) ? Collections.EMPTY_LIST : (List)revision.getArtifacts();
+               FLPRevision revision = (FLPRevision) getSolutionRevision(theSolutionId, theRevisionId, theContext);
+
+               return (revision == null) ? null : revision.getArtifacts();
        }
 
        @Override
-       public Artifact getSolutionRevisionArtifact(String theArtifactId, ServiceContext theContext) 
+       public MLPArtifact getSolutionRevisionArtifact(String theArtifactId, ServiceContext theContext) 
                                                                                                                                                                                                                                                                                                                                                                                                throws ServiceException {
                log.debug(EELFLoggerDelegate.debugLogger, "getSolutionRevisionArtifact");
                // cumbersome
-               for (Solution solution : this.solutions) {
-                       for (MLPSolutionRevision revision : solution.getRevisions()) {
-                               for (MLPArtifact artifact : ((SolutionRevision)revision).getArtifacts()) {
+               for (FLPSolution solution : this.solutions) {
+                       for (FLPRevision revision : solution.getRevisions()) {
+                               for (MLPArtifact artifact : revision.getArtifacts()) {
                                        if (artifact.getArtifactId().equals(theArtifactId)) {
-                                               return (Artifact)artifact;
+                                               return artifact;
                                        }
                                }
                        }
@@ -188,4 +189,61 @@ public class CatalogServiceLocalImpl extends AbstractServiceLocalImpl implements
 
                return null;
        }
+
+       /** */
+       public static class FLPSolution extends MLPSolution {
+
+               @JsonProperty(access = JsonProperty.Access.WRITE_ONLY)
+               private List<FLPRevision> revisions = Collections.EMPTY_LIST;
+
+               // @JsonIgnore
+               public List<FLPRevision> getRevisions() {
+                       return this.revisions;
+               }
+
+               // @JsonIgnore
+               protected List<MLPSolutionRevision> getMLPRevisions() {
+                       return this.revisions == null ? null
+                                       : this.revisions.stream().map(rev -> (MLPSolutionRevision) rev).collect(Collectors.toList());
+               }
+
+               public void setRevisions(List<FLPRevision> theRevisions) {
+                       this.revisions = theRevisions;
+               }
+
+       }
+
+       /** */
+       public static class FLPRevision extends MLPSolutionRevision {
+
+               @JsonProperty(access = JsonProperty.Access.WRITE_ONLY)
+               private List<MLPArtifact> artifacts = Collections.EMPTY_LIST;
+
+               // @JsonIgnore
+               // we send a deep clone as the client can modify them and we only have one copy
+               public List<MLPArtifact> getArtifacts() {
+                       List<MLPArtifact> copy = new LinkedList<MLPArtifact>();
+                       for (MLPArtifact artifact : this.artifacts) {
+                               MLPArtifact acopy = new MLPArtifact();
+                               acopy.setArtifactId(artifact.getArtifactId());
+                               acopy.setArtifactTypeCode(artifact.getArtifactTypeCode());
+                               acopy.setDescription(artifact.getDescription());
+                               acopy.setUri(artifact.getUri());
+                               acopy.setName(artifact.getName());
+                               acopy.setSize(artifact.getSize());
+                               acopy.setOwnerId(artifact.getOwnerId());
+                               acopy.setCreated(artifact.getCreated());
+                               acopy.setModified(artifact.getModified());
+                               acopy.setMetadata(artifact.getMetadata());
+
+                               copy.add(acopy);
+                       }
+                       return copy;
+               }
+
+               public void setArtifacts(List<MLPArtifact> theArtifacts) {
+                       this.artifacts = theArtifacts;
+               }
+       }
+
 }
index 6cd3da4..44e4888 100644 (file)
@@ -136,7 +136,7 @@ public class TestAdapter {
                                        try {
                                                Solution sol = (Solution)fedClient.getSolution(solution.getSolutionId()).getContent();
                                                log.info(EELFLoggerDelegate.debugLogger, "retrieved solution {}", solution);
-                                               revisions = (List)sol.getRevisions();
+                                               revisions = sol.getRevisions();
                                        }
                                        catch (Exception x) {
                                                log.error(EELFLoggerDelegate.errorLogger, "Failed to retrieve revisions", x);
index f922381..32c6536 100644 (file)
@@ -6,6 +6,7 @@
   "active":"true",
   "modelTypeCode":"CL",
   "toolkitTypeCode":"",
+  "validationStatusCode":"",
   "metadata":"acumosa",
   "created":"2017-08-10",
   "modified":"2017-08-11",
@@ -19,8 +20,6 @@
     "ownerId":"admin",
        "created":"2017-08-10",
        "modified":"2017-08-11",
-       "validationStatusCode":"PS",
-    "accessTypeCode":"PB",
     "artifacts":[
      {
       "artifactId":"4fd46d93-e627-473b-a984-be9898ad1123",
index e5c17b9..6b220af 100644 (file)
@@ -6,6 +6,7 @@
   "active":"true",
   "modelTypeCode":"RT",
   "toolkitTypeCode":"",
+  "validationStatusCode":"",
   "metadata":"acumosb",
   "created":"2017-09-10",
   "modified":"2017-09-11",
@@ -16,8 +17,6 @@
     "description":"First attempt",
     "version":"1.0",
     "metadata":"acumosb",
-       "validationStatusCode":"PS",
-       "accessTypeCode":"PB",
     "ownerId":"ak1234",
        "created":"2017-09-10",
        "modified":"2017-09-11",
index dc12260..62388a1 100644 (file)
@@ -6,6 +6,7 @@
   "active":"true",
   "modelTypeCode":"CL",
   "toolkitTypeCode":"",
+  "validationStatusCode":"",
   "metadata":"acumosa",
   "created":"2017-08-10",
   "modified":"2017-08-11",
@@ -16,8 +17,6 @@
     "description":"First attempt",
     "version":"1.0",
     "metadata":"acumosa",
-    "validationStatusCode":"PS",
-    "accessTypeCode":"PB",
     "ownerId":"admin",
        "created":"2017-08-10",
        "modified":"2017-08-11",
index c1fd37d..62388a1 100644 (file)
@@ -6,6 +6,7 @@
   "active":"true",
   "modelTypeCode":"CL",
   "toolkitTypeCode":"",
+  "validationStatusCode":"",
   "metadata":"acumosa",
   "created":"2017-08-10",
   "modified":"2017-08-11",
@@ -16,8 +17,6 @@
     "description":"First attempt",
     "version":"1.0",
     "metadata":"acumosa",
-       "validationStatusCode":"PS",
-    "accessTypeCode":"PB",
     "ownerId":"admin",
        "created":"2017-08-10",
        "modified":"2017-08-11",