summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--cps-ri/src/main/java/org/onap/cps/spi/impl/CpsModulePersistenceServiceImpl.java22
-rw-r--r--cps-ri/src/main/java/org/onap/cps/spi/repository/SchemaSetRepository.java15
-rw-r--r--cps-service/src/main/java/org/onap/cps/spi/CpsModulePersistenceService.java10
-rw-r--r--cps-service/src/main/java/org/onap/cps/spi/exceptions/SchemaSetNotFoundException.java36
-rw-r--r--cps-service/src/main/java/org/onap/cps/spi/model/DataNode.java6
-rw-r--r--cps-service/src/main/java/org/onap/cps/spi/model/ModuleReference.java (renamed from cps-service/src/main/java/org/onap/cps/spi/model/ModuleRef.java)6
-rw-r--r--cps-service/src/main/java/org/onap/cps/yang/YangTextSchemaSourceSet.java11
-rw-r--r--cps-service/src/main/java/org/onap/cps/yang/YangTextSchemaSourceSetBuilder.java30
-rw-r--r--cps-service/src/test/groovy/org/onap/cps/api/impl/CpsModulePersistenceServiceImplSpec.groovy2
9 files changed, 129 insertions, 9 deletions
diff --git a/cps-ri/src/main/java/org/onap/cps/spi/impl/CpsModulePersistenceServiceImpl.java b/cps-ri/src/main/java/org/onap/cps/spi/impl/CpsModulePersistenceServiceImpl.java
index 3067f4834..8a1492625 100644
--- a/cps-ri/src/main/java/org/onap/cps/spi/impl/CpsModulePersistenceServiceImpl.java
+++ b/cps-ri/src/main/java/org/onap/cps/spi/impl/CpsModulePersistenceServiceImpl.java
@@ -21,6 +21,7 @@
package org.onap.cps.spi.impl;
import com.google.common.collect.ImmutableSet;
+import java.io.IOException;
import java.util.Collection;
import java.util.List;
import java.util.Map;
@@ -31,10 +32,17 @@ import org.onap.cps.spi.CpsModulePersistenceService;
import org.onap.cps.spi.entities.Dataspace;
import org.onap.cps.spi.entities.SchemaSet;
import org.onap.cps.spi.entities.YangResource;
+import org.onap.cps.spi.exceptions.CpsException;
+import org.onap.cps.spi.exceptions.ModelValidationException;
import org.onap.cps.spi.exceptions.SchemaSetAlreadyDefinedException;
+import org.onap.cps.spi.model.ModuleReference;
import org.onap.cps.spi.repository.DataspaceRepository;
import org.onap.cps.spi.repository.SchemaSetRepository;
import org.onap.cps.spi.repository.YangResourceRepository;
+import org.onap.cps.yang.YangTextSchemaSourceSet;
+import org.onap.cps.yang.YangTextSchemaSourceSetBuilder;
+import org.opendaylight.yangtools.yang.model.parser.api.YangSyntaxErrorException;
+import org.opendaylight.yangtools.yang.parser.spi.meta.ReactorException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.dao.DataIntegrityViolationException;
import org.springframework.stereotype.Component;
@@ -106,4 +114,18 @@ public class CpsModulePersistenceServiceImpl implements CpsModulePersistenceServ
.build();
}
+ @Override
+ public Collection<ModuleReference> getModuleReferences(final String dataspaceName, final String schemaSetName) {
+ final Dataspace dataspace = dataspaceRepository.getByName(dataspaceName);
+ final SchemaSet schemaSet = schemaSetRepository.getByDataspaceAndName(dataspace, schemaSetName);
+ final Map<String, String> yangResourceNameToContent = schemaSet.getYangResources().stream().collect(
+ Collectors.toMap(YangResource::getName, YangResource::getContent));
+ try {
+ final YangTextSchemaSourceSet schemaSourceSet = YangTextSchemaSourceSetBuilder
+ .of(yangResourceNameToContent);
+ return schemaSourceSet.getModuleReferences();
+ } catch (final ReactorException | YangSyntaxErrorException e) {
+ throw new ModelValidationException("Yang file validation failed", e.getMessage(), e);
+ }
+ }
}
diff --git a/cps-ri/src/main/java/org/onap/cps/spi/repository/SchemaSetRepository.java b/cps-ri/src/main/java/org/onap/cps/spi/repository/SchemaSetRepository.java
index f9746972f..035c831f2 100644
--- a/cps-ri/src/main/java/org/onap/cps/spi/repository/SchemaSetRepository.java
+++ b/cps-ri/src/main/java/org/onap/cps/spi/repository/SchemaSetRepository.java
@@ -24,6 +24,7 @@ import java.util.Optional;
import javax.validation.constraints.NotNull;
import org.onap.cps.spi.entities.Dataspace;
import org.onap.cps.spi.entities.SchemaSet;
+import org.onap.cps.spi.exceptions.SchemaSetNotFoundException;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
@@ -32,5 +33,17 @@ public interface SchemaSetRepository extends JpaRepository<SchemaSet, Integer> {
List<SchemaSet> findAllByDataspace(@NotNull Dataspace dataspace);
- Optional<SchemaSet> findByDataspaceAndName(@NotNull Dataspace dataspace, @NotNull String name);
+ Optional<SchemaSet> findByDataspaceAndName(@NotNull Dataspace dataspace, @NotNull String schemaSetName);
+
+ /**
+ * This method gets a SchemaSet by dataspace, namespace and schemaSetName.
+ *
+ * @param dataspace the dataspace
+ * @param schemaSetName the schemaSet Name
+ * @return schemaSet
+ */
+ default SchemaSet getByDataspaceAndName(@NotNull Dataspace dataspace, @NotNull String schemaSetName) {
+ return findByDataspaceAndName(dataspace, schemaSetName)
+ .orElseThrow(() -> new SchemaSetNotFoundException(dataspace.getName(), schemaSetName));
+ }
}
diff --git a/cps-service/src/main/java/org/onap/cps/spi/CpsModulePersistenceService.java b/cps-service/src/main/java/org/onap/cps/spi/CpsModulePersistenceService.java
index 7feae367e..df0f9f5a2 100644
--- a/cps-service/src/main/java/org/onap/cps/spi/CpsModulePersistenceService.java
+++ b/cps-service/src/main/java/org/onap/cps/spi/CpsModulePersistenceService.java
@@ -20,7 +20,9 @@
package org.onap.cps.spi;
+import java.util.Collection;
import java.util.Map;
+import org.onap.cps.spi.model.ModuleReference;
/**
* Service to manage modules.
@@ -52,4 +54,12 @@ public interface CpsModulePersistenceService {
*/
void storeSchemaSet(String dataspaceName, String schemaSetName, Map<String, String> yangResourcesNameToContentMap);
+ /**
+ * Returns Modules references per specific namespace / schemaSetName.
+ *
+ * @param namespace module namespace
+ * @param schemaSetName schema set name
+ * @return collection of ModuleRef
+ */
+ Collection<ModuleReference> getModuleReferences(String namespace, String schemaSetName);
}
diff --git a/cps-service/src/main/java/org/onap/cps/spi/exceptions/SchemaSetNotFoundException.java b/cps-service/src/main/java/org/onap/cps/spi/exceptions/SchemaSetNotFoundException.java
new file mode 100644
index 000000000..f92ca3729
--- /dev/null
+++ b/cps-service/src/main/java/org/onap/cps/spi/exceptions/SchemaSetNotFoundException.java
@@ -0,0 +1,36 @@
+/*
+ * ============LICENSE_START=======================================================
+ * Copyright (C) 2020 Pantheon.tech
+ * ================================================================================
+ * 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.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.cps.spi.exceptions;
+
+public class SchemaSetNotFoundException extends CpsAdminException {
+
+ private static final long serialVersionUID = 7422782395935450035L;
+
+ /**
+ * Constructor.
+ *
+ * @param dataspaceName dataspace name
+ * @param schemaSetName schema set name
+ */
+ public SchemaSetNotFoundException(final String dataspaceName, final String schemaSetName) {
+ super("Schema Set not found.",
+ String.format("Schema Set with name %s was not found for dataspace %s.", schemaSetName, dataspaceName));
+ }
+} \ No newline at end of file
diff --git a/cps-service/src/main/java/org/onap/cps/spi/model/DataNode.java b/cps-service/src/main/java/org/onap/cps/spi/model/DataNode.java
index 8bd404700..f9eb22493 100644
--- a/cps-service/src/main/java/org/onap/cps/spi/model/DataNode.java
+++ b/cps-service/src/main/java/org/onap/cps/spi/model/DataNode.java
@@ -22,16 +22,20 @@ package org.onap.cps.spi.model;
import java.util.Collection;
import java.util.Map;
+import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
+import lombok.NoArgsConstructor;
@Data
@Builder
+@NoArgsConstructor
+@AllArgsConstructor
public class DataNode {
private String dataspace;
private String moduleSetName;
- private ModuleRef moduleRef;
+ private ModuleReference moduleReference;
private String xpath;
private Map<String, Object> leaves;
private Collection<String> xpathsChildren;
diff --git a/cps-service/src/main/java/org/onap/cps/spi/model/ModuleRef.java b/cps-service/src/main/java/org/onap/cps/spi/model/ModuleReference.java
index 1f4e64a94..5af355dcd 100644
--- a/cps-service/src/main/java/org/onap/cps/spi/model/ModuleRef.java
+++ b/cps-service/src/main/java/org/onap/cps/spi/model/ModuleReference.java
@@ -20,12 +20,16 @@
package org.onap.cps.spi.model;
+import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
+import lombok.NoArgsConstructor;
@Data
@Builder
-public class ModuleRef {
+@NoArgsConstructor
+@AllArgsConstructor
+public class ModuleReference {
private String namespace;
private String revision;
diff --git a/cps-service/src/main/java/org/onap/cps/yang/YangTextSchemaSourceSet.java b/cps-service/src/main/java/org/onap/cps/yang/YangTextSchemaSourceSet.java
index 5c337770d..32ee324c5 100644
--- a/cps-service/src/main/java/org/onap/cps/yang/YangTextSchemaSourceSet.java
+++ b/cps-service/src/main/java/org/onap/cps/yang/YangTextSchemaSourceSet.java
@@ -19,13 +19,24 @@
package org.onap.cps.yang;
+import java.util.List;
import org.checkerframework.checker.nullness.qual.NonNull;
+import org.onap.cps.spi.model.ModuleReference;
import org.opendaylight.yangtools.yang.model.api.SchemaContext;
/**
* CPS YangTextSchemaSource.
*/
public interface YangTextSchemaSourceSet {
+
+ /**
+ * Returns list of modules references for given YangSchema.
+ *
+ * @return list of ModuleRef
+ */
+ @NonNull
+ List<ModuleReference> getModuleReferences();
+
/**
* Return SchemaContext for given YangSchema.
* @return SchemaContext
diff --git a/cps-service/src/main/java/org/onap/cps/yang/YangTextSchemaSourceSetBuilder.java b/cps-service/src/main/java/org/onap/cps/yang/YangTextSchemaSourceSetBuilder.java
index 1588c44d9..89eea97f6 100644
--- a/cps-service/src/main/java/org/onap/cps/yang/YangTextSchemaSourceSetBuilder.java
+++ b/cps-service/src/main/java/org/onap/cps/yang/YangTextSchemaSourceSetBuilder.java
@@ -27,8 +27,11 @@ import java.io.InputStream;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
+import org.onap.cps.spi.exceptions.CpsException;
+import org.onap.cps.spi.model.ModuleReference;
import org.opendaylight.yangtools.yang.common.Revision;
import org.opendaylight.yangtools.yang.common.YangNames;
+import org.opendaylight.yangtools.yang.model.api.Module;
import org.opendaylight.yangtools.yang.model.api.SchemaContext;
import org.opendaylight.yangtools.yang.model.parser.api.YangSyntaxErrorException;
import org.opendaylight.yangtools.yang.model.repo.api.RevisionSourceIdentifier;
@@ -55,13 +58,13 @@ public final class YangTextSchemaSourceSetBuilder {
return this;
}
- public YangTextSchemaSourceSet build() throws ReactorException, IOException, YangSyntaxErrorException {
+ public YangTextSchemaSourceSet build() throws ReactorException, YangSyntaxErrorException {
final SchemaContext schemaContext = generateSchemaContext(yangModelMap.build());
return new YangTextSchemaSourceSetImpl(schemaContext);
}
public static YangTextSchemaSourceSet of(final Map<String, String> yangResourceNameToContent)
- throws ReactorException, IOException, YangSyntaxErrorException {
+ throws ReactorException, YangSyntaxErrorException {
return new YangTextSchemaSourceSetBuilder().putAll(yangResourceNameToContent).build();
}
@@ -74,6 +77,20 @@ public final class YangTextSchemaSourceSetBuilder {
}
@Override
+ public List<ModuleReference> getModuleReferences() {
+ return schemaContext.getModules().stream()
+ .map(YangTextSchemaSourceSetImpl::toModuleReference)
+ .collect(Collectors.toList());
+ }
+
+ private static ModuleReference toModuleReference(final Module module) {
+ return ModuleReference.builder()
+ .namespace(module.getName())
+ .revision(module.getRevision().map(Revision::toString).orElse(null))
+ .build();
+ }
+
+ @Override
public SchemaContext getSchemaContext() {
return schemaContext;
}
@@ -87,11 +104,16 @@ public final class YangTextSchemaSourceSetBuilder {
* @return the schema context
*/
private SchemaContext generateSchemaContext(final Map<String, String> yangResourceNameToContent)
- throws IOException, ReactorException, YangSyntaxErrorException {
+ throws ReactorException, YangSyntaxErrorException {
final CrossSourceStatementReactor.BuildAction reactor = RFC7950Reactors.defaultReactor().newBuild();
final List<YangTextSchemaSource> yangTextSchemaSources = forResources(yangResourceNameToContent);
for (final YangTextSchemaSource yangTextSchemaSource : yangTextSchemaSources) {
- reactor.addSource(YangStatementStreamSource.create(yangTextSchemaSource));
+ try {
+ reactor.addSource(YangStatementStreamSource.create(yangTextSchemaSource));
+ } catch (final IOException e) {
+ throw new CpsException("Failed to read yangTextSchemaSource %s.",
+ yangTextSchemaSource.getIdentifier().getName(), e);
+ }
}
return reactor.buildEffective();
}
diff --git a/cps-service/src/test/groovy/org/onap/cps/api/impl/CpsModulePersistenceServiceImplSpec.groovy b/cps-service/src/test/groovy/org/onap/cps/api/impl/CpsModulePersistenceServiceImplSpec.groovy
index d2a69d655..39d8ec3bc 100644
--- a/cps-service/src/test/groovy/org/onap/cps/api/impl/CpsModulePersistenceServiceImplSpec.groovy
+++ b/cps-service/src/test/groovy/org/onap/cps/api/impl/CpsModulePersistenceServiceImplSpec.groovy
@@ -20,9 +20,7 @@
package org.onap.cps.api.impl
-import org.onap.cps.TestUtils
import org.onap.cps.spi.CpsModulePersistenceService
-import org.onap.cps.spi.exceptions.CpsException
import org.opendaylight.yangtools.yang.common.Revision
import org.opendaylight.yangtools.yang.model.api.SchemaContext
import spock.lang.Specification