Additional validation for names/identifiers
[cps.git] / cps-service / src / main / java / org / onap / cps / api / CpsModuleService.java
index 94ebea2..79d6e03 100644 (file)
@@ -1,12 +1,14 @@
 /*
- * ============LICENSE_START=======================================================
- *  Copyright (C) 2020 Nordix Foundation
+ *  ============LICENSE_START=======================================================
+ *  Copyright (C) 2020-2022 Nordix Foundation
+ *  Modifications Copyright (C) 2020-2021 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.
 
 package org.onap.cps.api;
 
-import java.io.File;
-import org.onap.cps.spi.exceptions.CpsException;
-import org.opendaylight.yangtools.yang.model.api.SchemaContext;
+import java.util.Collection;
+import java.util.Map;
+import org.onap.cps.spi.CascadeDeleteAllowed;
+import org.onap.cps.spi.exceptions.DataInUseException;
+import org.onap.cps.spi.model.ModuleReference;
+import org.onap.cps.spi.model.SchemaSet;
 
 /**
  * Responsible for managing module sets.
@@ -29,27 +34,73 @@ import org.opendaylight.yangtools.yang.model.api.SchemaContext;
 public interface CpsModuleService {
 
     /**
-     * Parse and validate a string representing a yang model to generate a schema context.
+     * Create schema set.
      *
-     * @param yangModelContent the input stream
-     * @return the schema context
+     * @param dataspaceName                 dataspace name
+     * @param schemaSetName                 schema set name
+     * @param yangResourcesNameToContentMap yang resources (files) as a mep where key is resource name
+     *                                      and value is content
      */
-    SchemaContext parseAndValidateModel(String yangModelContent);
+    void createSchemaSet(String dataspaceName, String schemaSetName,
+                         Map<String, String> yangResourcesNameToContentMap);
 
     /**
-     * Parse and validate a file representing a yang model to generate a schema context.
+     * Create a schema set from new modules and existing modules.
+     * @param dataspaceName             Dataspace name
+     * @param schemaSetName             schema set name
+     * @param newModuleNameToContentMap YANG resources map where key is a module name and value is content
+     * @param moduleReferences          List of YANG resources module references of the modules
+     */
+    void createSchemaSetFromModules(String dataspaceName, String schemaSetName,
+                                    Map<String, String> newModuleNameToContentMap,
+                                    Collection<ModuleReference> moduleReferences);
+
+    /**
+     * Read schema set in the given dataspace.
      *
-     * @param yangModelFile the yang file
-     * @return the schema context
+     * @param dataspaceName dataspace name
+     * @param schemaSetName schema set name
+     * @return a SchemaSet
      */
-    SchemaContext parseAndValidateModel(File yangModelFile);
+    SchemaSet getSchemaSet(String dataspaceName, String schemaSetName);
 
     /**
-     * Store schema context for a yang model.
+     * Deletes Schema Set.
      *
-     * @param schemaContext the schema context
-     * @param dataspaceName the dataspace name
-     * @throws CpsException if input data already exists.
+     * @param dataspaceName        dataspace name
+     * @param schemaSetName        schema set name
+     * @param cascadeDeleteAllowed indicates the allowance to remove associated anchors and data if exist
+     * @throws DataInUseException if cascadeDeleteAllowed is set to CASCADE_DELETE_PROHIBITED and there
+     *                           is associated anchor record exists in database
      */
-    void storeSchemaContext(SchemaContext schemaContext, String dataspaceName);
+    void deleteSchemaSet(String dataspaceName, String schemaSetName,
+                         CascadeDeleteAllowed cascadeDeleteAllowed);
+
+    /**
+     * Retrieve module references for the given dataspace name.
+     *
+     * @param dataspaceName        dataspace name
+     * @return a list of ModuleReference objects
+     */
+    Collection<ModuleReference> getYangResourceModuleReferences(String dataspaceName);
+
+    /**
+     * Retrieve module references for the given dataspace name and anchor name.
+     *
+     * @param dataspaceName dataspace name
+     * @param anchorName    anchor name
+     * @return a list of ModuleReference objects
+     */
+    Collection<ModuleReference> getYangResourcesModuleReferences(String dataspaceName, String anchorName);
+
+    /**
+     * Identify previously unknown Yang Resource module references.
+     * The system will ignore the namespace of all module references.
+     *
+     * @param moduleReferencesToCheck the moduleReferencesToCheck
+     * @returns collection of module references (namespace will be always blank)
+     */
+    Collection<ModuleReference> identifyNewModuleReferences(
+        Collection<ModuleReference> moduleReferencesToCheck);
+
 }