Create schema set REST API and service level
[cps.git] / cps-ri / src / main / java / org / onap / cps / spi / impl / CpsModulePersistenceServiceImpl.java
index e63ae59..ef327c2 100644 (file)
@@ -21,6 +21,7 @@
 package org.onap.cps.spi.impl;
 
 import com.google.common.collect.ImmutableSet;
+import java.util.Collection;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
@@ -31,9 +32,11 @@ 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.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.YangTextSchemaSourceSetBuilder;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.dao.DataIntegrityViolationException;
 import org.springframework.stereotype.Component;
@@ -53,7 +56,7 @@ public class CpsModulePersistenceServiceImpl implements CpsModulePersistenceServ
 
     @Override
     public void storeModule(final String namespace, final String moduleContent, final String revision,
-                            final String dataspaceName) {
+        final String dataspaceName) {
         // TODO this method should be removed as obsolete.
         // Modules to be processed within schema sets only.
     }
@@ -61,10 +64,10 @@ public class CpsModulePersistenceServiceImpl implements CpsModulePersistenceServ
     @Override
     @Transactional
     public void storeSchemaSet(final String dataspaceName, final String schemaSetName,
-                               final Set<String> yangResourcesAsStrings) {
+        final Map<String, String> yangResourcesNameToContentMap) {
 
         final Dataspace dataspace = dataspaceRepository.getByName(dataspaceName);
-        final Set<YangResource> yangResources = synchronizeYangResources(yangResourcesAsStrings);
+        final Set<YangResource> yangResources = synchronizeYangResources(yangResourcesNameToContentMap);
         final SchemaSet schemaSet = new SchemaSet();
         schemaSet.setName(schemaSetName);
         schemaSet.setDataspace(dataspace);
@@ -76,24 +79,25 @@ public class CpsModulePersistenceServiceImpl implements CpsModulePersistenceServ
         }
     }
 
-    private Set<YangResource> synchronizeYangResources(final Set<String> yangResourcesAsStrings) {
-        final Map<String, String> checksumToContentMap = yangResourcesAsStrings.stream()
-            .collect(Collectors.toMap(
-                content -> DigestUtils.md5DigestAsHex(content.getBytes()),
-                content -> content)
-            );
-
-        final List<YangResource> existingYangResources =
-            yangResourceRepository.findAllByChecksumIn(checksumToContentMap.keySet());
-        existingYangResources.forEach(yangFile -> checksumToContentMap.remove(yangFile.getChecksum()));
-
-        final List<YangResource> newYangResources = checksumToContentMap.entrySet().stream()
+    private Set<YangResource> synchronizeYangResources(final Map<String, String> yangResourcesNameToContentMap) {
+        final Map<String, YangResource> checksumToEntityMap = yangResourcesNameToContentMap.entrySet().stream()
             .map(entry -> {
                 final YangResource yangResource = new YangResource();
-                yangResource.setChecksum(entry.getKey());
+                yangResource.setName(entry.getKey());
                 yangResource.setContent(entry.getValue());
+                yangResource.setChecksum(DigestUtils.md5DigestAsHex(entry.getValue().getBytes()));
                 return yangResource;
-            }).collect(Collectors.toList());
+            })
+            .collect(Collectors.toMap(
+                YangResource::getChecksum,
+                entity -> entity
+            ));
+
+        final List<YangResource> existingYangResources =
+            yangResourceRepository.findAllByChecksumIn(checksumToEntityMap.keySet());
+        existingYangResources.forEach(yangFile -> checksumToEntityMap.remove(yangFile.getChecksum()));
+
+        final Collection<YangResource> newYangResources = checksumToEntityMap.values();
         if (!newYangResources.isEmpty()) {
             yangResourceRepository.saveAll(newYangResources);
         }
@@ -104,4 +108,12 @@ 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));
+        return YangTextSchemaSourceSetBuilder.of(yangResourceNameToContent).getModuleReferences();
+    }
 }