Generated AAI Swagger file has schema violations
[aai/schema-service.git] / aai-schema-gen / src / main / java / org / onap / aai / schemagen / GenerateXsd.java
index 490e290..b69f036 100644 (file)
@@ -28,21 +28,26 @@ import java.nio.charset.StandardCharsets;
 import java.nio.file.Files;
 import java.nio.file.Path;
 import java.nio.file.Paths;
-import java.util.*;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
 
 import org.onap.aai.schemagen.genxsd.HTMLfromOXM;
 import org.onap.aai.schemagen.genxsd.NodesYAMLfromOXM;
 import org.onap.aai.schemagen.genxsd.YAMLfromOXM;
+import org.onap.aai.setup.SchemaConfigVersions;
 import org.onap.aai.setup.SchemaVersion;
-import org.onap.aai.setup.SchemaVersions;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import org.springframework.beans.BeansException;
 import org.springframework.context.annotation.AnnotationConfigApplicationContext;
 import org.w3c.dom.NodeList;
 
 public class GenerateXsd {
 
-    private static final Logger logger = LoggerFactory.getLogger("GenerateXsd.class");
+    private static final Logger logger = LoggerFactory.getLogger(GenerateXsd.class);
     protected static String apiVersion = null;
     public static AnnotationConfigApplicationContext ctx = null;
     static String apiVersionFmt = null;
@@ -104,11 +109,12 @@ public class GenerateXsd {
             return true;
         }
 
-        SchemaVersions schemaVersions = SpringContextAware.getBean(SchemaVersions.class);
-        if (schemaVersions == null) {
+        SchemaConfigVersions schemaConfigVersions =
+            SpringContextAware.getBean(SchemaConfigVersions.class);
+        if (schemaConfigVersions == null) {
             return false;
         }
-        for (SchemaVersion v : schemaVersions.getVersions()) {
+        for (SchemaVersion v : schemaConfigVersions.getVersions()) {
             if (v.toString().equals(versionToGen)) {
                 return true;
             }
@@ -149,170 +155,174 @@ public class GenerateXsd {
             fileTypeToGen = fileTypeToGen.toLowerCase();
         }
 
-        AnnotationConfigApplicationContext ctx =
-            new AnnotationConfigApplicationContext("org.onap.aai.setup", "org.onap.aai.schemagen");
+        try (AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(
+            "org.onap.aai.setup", "org.onap.aai.schemagen")) {
+            SchemaConfigVersions schemaConfigVersions = ctx.getBean(SchemaConfigVersions.class);
 
-        SchemaVersions schemaVersions = ctx.getBean(SchemaVersions.class);
-
-        if (!fileTypeToGen.equals(GENERATE_TYPE_XSD) && !fileTypeToGen.equals(GENERATE_TYPE_YAML)) {
-            System.err.println("Invalid gen_type passed. " + fileTypeToGen);
-            System.exit(1);
-        }
-
-        String responsesLabel = System.getProperty("yamlresponses_url");
-        responsesUrl = responsesLabel;
+            if (!fileTypeToGen.equals(GENERATE_TYPE_XSD)
+                && !fileTypeToGen.equals(GENERATE_TYPE_YAML)) {
+                System.err.println("Invalid gen_type passed. " + fileTypeToGen);
+                System.exit(1);
+            }
 
-        List<SchemaVersion> versionsToGen = new ArrayList<>();
-        if (!"ALL".equalsIgnoreCase(versionToGen) && !versionToGen.matches("v\\d+")
-            && !validVersion(versionToGen)) {
-            System.err.println("Invalid version passed. " + versionToGen);
-            System.exit(1);
-        } else if ("ALL".equalsIgnoreCase(versionToGen)) {
-            versionsToGen = schemaVersions.getVersions();
-            Collections.sort(versionsToGen);
-            Collections.reverse(versionsToGen);
-        } else {
-            versionsToGen.add(new SchemaVersion(versionToGen));
-        }
+            String responsesLabel = System.getProperty("yamlresponses_url");
+            responsesUrl = responsesLabel;
 
-        // process file type System property
-        if (fileTypeToGen.equals(GENERATE_TYPE_YAML)) {
-            if (responsesUrl == null || responsesUrl.length() < 1 || responsesLabel == null
-                || responsesLabel.length() < 1) {
-                System.err.println(
-                    "generating swagger yaml file requires yamlresponses_url and yamlresponses_label properties");
+            List<SchemaVersion> versionsToGen = new ArrayList<>();
+            if (!"ALL".equalsIgnoreCase(versionToGen) && versionToGen != null
+                && !versionToGen.matches("v\\d+") && !validVersion(versionToGen)) {
+                System.err.println("Invalid version passed. " + versionToGen);
                 System.exit(1);
+            } else if ("ALL".equalsIgnoreCase(versionToGen)) {
+                versionsToGen = schemaConfigVersions.getVersions();
+                Collections.sort(versionsToGen);
+                Collections.reverse(versionsToGen);
             } else {
-                responsesUrl = "description: " + "Response codes found in [response codes]("
-                    + responsesLabel + ").\n";
+                versionsToGen.add(new SchemaVersion(versionToGen));
             }
-        }
-        /*
-         * TODO: Oxm Path is config driveb
-         */
-        String oxmPath;
-        if (System.getProperty("user.dir") != null
-            && !System.getProperty("user.dir").contains(NORMAL_START_DIR)) {
-            oxmPath = BASE_AUTO_GEN_ROOT + NODE_DIR;
-        } else {
-            oxmPath = BASE_ROOT + NODE_DIR;
-        }
 
-        String outfileName = null;
-        File outfile;
-        String nodesfileName = null;
-        File nodesfile;
-        String fileContent = null;
-        String nodesContent = null;
-
-        for (SchemaVersion v : versionsToGen) {
-            apiVersion = v.toString();
-            logger.debug("YAMLdir = " + YAML_DIR);
-            logger.debug("Generating " + apiVersion + " " + fileTypeToGen);
-            apiVersionFmt = "." + apiVersion + ".";
-            generatedJavaType = new HashMap<String, String>();
-            appliedPaths = new HashMap<String, String>();
-            File edgeRuleFile = null;
-            String fileName = EDGE_DIR + "DbEdgeRules_" + apiVersion + ".json";
-            logger.debug("user.dir = " + System.getProperty("user.dir"));
+            // process file type System property
+            if (fileTypeToGen.equals(GENERATE_TYPE_YAML)) {
+                if (responsesUrl == null || responsesUrl.length() < 1 || responsesLabel == null
+                    || responsesLabel.length() < 1) {
+                    System.err.println(
+                        "generating swagger yaml file requires yamlresponses_url and yamlresponses_label properties");
+                    System.exit(1);
+                } else {
+                    responsesUrl =
+                        "description: " + "Response codes are uniform across all endpoints.\n";
+                }
+            }
+            /*
+             * TODO: Oxm Path is config driven
+             */
+            String oxmPath;
             if (System.getProperty("user.dir") != null
                 && !System.getProperty("user.dir").contains(NORMAL_START_DIR)) {
-                fileName = BASE_AUTO_GEN_ROOT + fileName;
-
+                oxmPath = BASE_AUTO_GEN_ROOT + NODE_DIR;
             } else {
-                fileName = BASE_ROOT + fileName;
-
+                oxmPath = BASE_ROOT + NODE_DIR;
             }
-            edgeRuleFile = new File(fileName);
-            // Document doc = ni.getSchema(translateVersion(v));
 
-            if (fileTypeToGen.equals(GENERATE_TYPE_XSD)) {
-                outfileName = XSD_DIR + "/aai_schema_" + apiVersion + "." + GENERATE_TYPE_XSD;
-                try {
-                    HTMLfromOXM swagger = ctx.getBean(HTMLfromOXM.class);
-                    swagger.setVersion(v);
-                    fileContent = swagger.process();
-                    if (fileContent.startsWith("Schema format issue")) {
-                        throw new Exception(fileContent);
-                    }
-                } catch (Exception e) {
-                    logger.error("Exception creating output file " + outfileName);
-                    logger.error(e.getMessage());
-                    System.exit(-1);
+            String outfileName = null;
+            File outfile;
+            String nodesfileName = null;
+            File nodesfile;
+            String fileContent = null;
+            String nodesContent = null;
+
+            for (SchemaVersion v : versionsToGen) {
+                apiVersion = v.toString();
+                logger.debug("YAMLdir = " + YAML_DIR);
+                logger.debug("Generating " + apiVersion + " " + fileTypeToGen);
+                apiVersionFmt = "." + apiVersion + ".";
+                generatedJavaType = new HashMap<String, String>();
+                appliedPaths = new HashMap<String, String>();
+                File edgeRuleFile = null;
+                String fileName = EDGE_DIR + "DbEdgeRules_" + apiVersion + ".json";
+                logger.debug("user.dir = " + System.getProperty("user.dir"));
+                if (System.getProperty("user.dir") != null
+                    && !System.getProperty("user.dir").contains(NORMAL_START_DIR)) {
+                    fileName = BASE_AUTO_GEN_ROOT + fileName;
+
+                } else {
+                    fileName = BASE_ROOT + fileName;
+
                 }
-            } else if (versionSupportsSwagger(apiVersion)) {
-                outfileName = YAML_DIR + "/aai_swagger_" + apiVersion + "." + GENERATE_TYPE_YAML;
-                nodesfileName = YAML_DIR + "/aai_swagger_" + apiVersion + "." + "nodes" + "."
-                    + GENERATE_TYPE_YAML;
-                try {
-                    YAMLfromOXM swagger = (YAMLfromOXM) ctx.getBean(YAMLfromOXM.class);
-                    swagger.setVersion(v);
-                    fileContent = swagger.process();
-                    Map combinedJavaTypes = swagger.getCombinedJavaTypes();
-                    NodesYAMLfromOXM nodesSwagger = ctx.getBean(NodesYAMLfromOXM.class);
-                    nodesSwagger.setVersion(v);
-                    nodesSwagger.setCombinedJavaTypes(combinedJavaTypes);
-                    nodesContent = nodesSwagger.process();
-                } catch (Exception e) {
-                    logger.error("Exception creating output file " + outfileName, e);
+                edgeRuleFile = new File(fileName);
+                // Document doc = ni.getSchema(translateVersion(v));
+
+                if (fileTypeToGen.equals(GENERATE_TYPE_XSD)) {
+                    outfileName = XSD_DIR + "/aai_schema_" + apiVersion + "." + GENERATE_TYPE_XSD;
+                    try {
+                        HTMLfromOXM swagger = ctx.getBean(HTMLfromOXM.class);
+                        swagger.setVersion(v);
+                        fileContent = swagger.process();
+                        if (fileContent.startsWith("Schema format issue")) {
+                            throw new Exception(fileContent);
+                        }
+                    } catch (Exception e) {
+                        logger.error("Exception creating output file " + outfileName);
+                        logger.error(e.getMessage());
+                        System.exit(-1);
+                    }
+                } else if (versionSupportsSwagger(apiVersion)) {
+                    outfileName =
+                        YAML_DIR + "/aai_swagger_" + apiVersion + "." + GENERATE_TYPE_YAML;
+                    nodesfileName = YAML_DIR + "/aai_swagger_" + apiVersion + "." + "nodes" + "."
+                        + GENERATE_TYPE_YAML;
+                    try {
+                        YAMLfromOXM swagger = (YAMLfromOXM) ctx.getBean(YAMLfromOXM.class);
+                        swagger.setVersion(v);
+                        fileContent = swagger.process();
+                        Map<String, Integer> combinedJavaTypes = swagger.getCombinedJavaTypes();
+                        NodesYAMLfromOXM nodesSwagger = ctx.getBean(NodesYAMLfromOXM.class);
+                        nodesSwagger.setVersion(v);
+                        nodesSwagger.setCombinedJavaTypes(combinedJavaTypes);
+                        nodesContent = nodesSwagger.process();
+                    } catch (Exception e) {
+                        logger.error("Exception creating output file " + outfileName, e);
+                    }
+                } else {
+                    continue;
                 }
-            } else {
-                continue;
-            }
-            outfile = new File(outfileName);
-            File parentDir = outfile.getParentFile();
-            if (!parentDir.exists()) {
-                parentDir.mkdirs();
-            }
-            if (nodesfileName != null) {
-                BufferedWriter nodesBW = null;
-                nodesfile = new File(nodesfileName);
-                parentDir = nodesfile.getParentFile();
+                outfile = new File(outfileName);
+                File parentDir = outfile.getParentFile();
                 if (!parentDir.exists()) {
                     parentDir.mkdirs();
                 }
+                if (nodesfileName != null) {
+                    BufferedWriter nodesBW = null;
+                    nodesfile = new File(nodesfileName);
+                    parentDir = nodesfile.getParentFile();
+                    if (!parentDir.exists()) {
+                        parentDir.mkdirs();
+                    }
+                    try {
+                        if (!nodesfile.createNewFile()) {
+                            logger.error("File {} already exist", nodesfileName);
+                        }
+                    } catch (IOException e) {
+                        logger.error("Exception creating output file " + nodesfileName, e);
+                    }
+                    try {
+                        Charset charset = StandardCharsets.UTF_8;
+                        Path path = Paths.get(nodesfileName);
+                        nodesBW = Files.newBufferedWriter(path, charset);
+                        nodesBW.write(nodesContent);
+                    } catch (IOException e) {
+                        logger.error("Exception writing output file " + outfileName, e);
+                    } finally {
+                        if (nodesBW != null) {
+                            nodesBW.close();
+                        }
+                    }
+                }
+
                 try {
-                    if (!nodesfile.createNewFile()) {
-                        logger.error("File {} already exist", nodesfileName);
+                    if (!outfile.createNewFile()) {
+                        logger.error("File {} already exist", outfileName);
                     }
                 } catch (IOException e) {
-                    logger.error("Exception creating output file " + nodesfileName, e);
+                    logger.error("Exception creating output file " + outfileName, e);
                 }
+                BufferedWriter bw = null;
                 try {
                     Charset charset = StandardCharsets.UTF_8;
-                    Path path = Paths.get(nodesfileName);
-                    nodesBW = Files.newBufferedWriter(path, charset);
-                    nodesBW.write(nodesContent);
+                    Path path = Paths.get(outfileName);
+                    bw = Files.newBufferedWriter(path, charset);
+                    bw.write(fileContent);
                 } catch (IOException e) {
                     logger.error("Exception writing output file " + outfileName, e);
                 } finally {
-                    if (nodesBW != null) {
-                        nodesBW.close();
+                    if (bw != null) {
+                        bw.close();
                     }
                 }
+                logger.debug("GeneratedXSD successful, saved in " + outfileName);
             }
-
-            try {
-                if (!outfile.createNewFile()) {
-                    logger.error("File {} already exist", outfileName);
-                }
-            } catch (IOException e) {
-                logger.error("Exception creating output file " + outfileName, e);
-            }
-            BufferedWriter bw = null;
-            try {
-                Charset charset = StandardCharsets.UTF_8;
-                Path path = Paths.get(outfileName);
-                bw = Files.newBufferedWriter(path, charset);
-                bw.write(fileContent);
-            } catch (IOException e) {
-                logger.error("Exception writing output file " + outfileName, e);
-            } finally {
-                if (bw != null) {
-                    bw.close();
-                }
-            }
-            logger.debug("GeneratedXSD successful, saved in " + outfileName);
+        } catch (BeansException e) {
+            logger.warn("Unable to initialize AnnotationConfigApplicationContext ", e);
         }
 
     }