diff options
Diffstat (limited to 'src/main/java/org/openecomp/schema/RelationshipSchemaLoader.java')
-rw-r--r-- | src/main/java/org/openecomp/schema/RelationshipSchemaLoader.java | 99 |
1 files changed, 56 insertions, 43 deletions
diff --git a/src/main/java/org/openecomp/schema/RelationshipSchemaLoader.java b/src/main/java/org/openecomp/schema/RelationshipSchemaLoader.java index 89a9e58..cc6315c 100644 --- a/src/main/java/org/openecomp/schema/RelationshipSchemaLoader.java +++ b/src/main/java/org/openecomp/schema/RelationshipSchemaLoader.java @@ -66,9 +66,8 @@ public class RelationshipSchemaLoader { final static Pattern propsFilePattern = Pattern.compile(edgePropsFiles + "(.*)" + fileExt); final static Pattern versionPattern = Pattern.compile(".*(v\\d+)" + fileExt); - private static org.openecomp.cl.api.Logger logger = LoggerFactory.getInstance() - .getLogger(RelationshipSchemaLoader.class.getName()); + .getLogger(RelationshipSchemaLoader.class.getName()); public synchronized static void loadModels() throws CrudException { load(rulesFilePattern, propsFilePattern); @@ -112,7 +111,6 @@ public class RelationshipSchemaLoader { RelationshipSchemaLoader.versionContextMap = new ConcurrentHashMap<>(); } - private static void load(Pattern rulesPattern, Pattern edgePropsPattern) throws CrudException { ClassLoader cl = RelationshipSchemaLoader.class.getClassLoader(); ResourcePatternResolver rulesResolver = new PathMatchingResourcePatternResolver(cl); @@ -121,51 +119,66 @@ public class RelationshipSchemaLoader { try { // getResources method returns objects of type "Resource" - // 1. We are getting all the objects from the classpath which has "DbEdgeRules" in the name. - // 2. We run them through a filter and return only the objects which match the supplied pattern "p" - // 3. We then collect the objects in a list. At this point we have a list of the kind of files we require. + // 1. We are getting all the objects from the classpath which has + // "DbEdgeRules" in the name. + // 2. We run them through a filter and return only the objects which match + // the supplied pattern "p" + // 3. We then collect the objects in a list. At this point we have a list + // of the kind of files we require. rulesFiles = Arrays.stream(rulesResolver.getResources("classpath*:/dbedgerules/DbEdgeRules*" + fileExt)) - .filter(r -> !myMatcher(rulesPattern, r.getFilename()).isEmpty()) - .collect(Collectors.toList()); + .filter(r -> !myMatcher(rulesPattern, r.getFilename()).isEmpty()).collect(Collectors.toList()); - // This gets all the objects of type "File" from external directory (not on the classpath) - // 1. From an external directory (one not on the classpath) we get all the objects of type "File" - // 2. We only return the files whose names matched the supplied pattern "p2". - // 3. We then collect all the objects in a list and add the contents of this list - // to the previous collection (rulesFiles) - rulesFiles.addAll(Arrays.stream(new File(rulesDir).listFiles((d, name) -> - edgePropsPattern.matcher(name).matches())).collect(Collectors.toList())); + // This gets all the objects of type "File" from external directory (not + // on the classpath) + // 1. From an external directory (one not on the classpath) we get all the + // objects of type "File" + // 2. We only return the files whose names matched the supplied pattern + // "p2". + // 3. We then collect all the objects in a list and add the contents of + // this list + // to the previous collection (rulesFiles) + rulesFiles + .addAll(Arrays.stream(new File(rulesDir).listFiles((d, name) -> edgePropsPattern.matcher(name).matches())) + .collect(Collectors.toList())); if (rulesFiles.isEmpty()) { logger.error(CrudServiceMsgs.INVALID_OXM_DIR, rulesDir); throw new FileNotFoundException("DbEdgeRules and edge_properties files were not found."); } - // Sort and then group the files with their versions, convert them to the schema, and add them to versionContextMap - // 1. Sort the files. We need the DbEdgeRules files to be before the edgeProperties files. - // 2. Group the files with their versions. ie. v11 -> ["DbEdgeRule_v11.json", "edgeProperties_v11.json"]. - // The "group method" returns a HashMap whose key is the version and the value is a list of objects. - // 3. Go through each version and map the files into one schema using the "jsonFilesLoader" method. - // Also update the "versionContextMap" with the version and it's schema. + // Sort and then group the files with their versions, convert them to the + // schema, and add them to versionContextMap + // 1. Sort the files. We need the DbEdgeRules files to be before the + // edgeProperties files. + // 2. Group the files with their versions. ie. v11 -> + // ["DbEdgeRule_v11.json", "edgeProperties_v11.json"]. + // The "group method" returns a HashMap whose key is the version and the + // value is a list of objects. + // 3. Go through each version and map the files into one schema using the + // "jsonFilesLoader" method. + // Also update the "versionContextMap" with the version and it's schema. rulesFiles.stream().sorted(Comparator.comparing(RelationshipSchemaLoader::filename)) - .collect(Collectors.groupingBy(f -> myMatcher(versionPattern, filename(f)))) - .forEach((version, resourceAndFile) -> { - if (resourceAndFile.size() == 2 ) { - versionContextMap.put(version, jsonFilesLoader(version, resourceAndFile)); - } else { - String filenames = resourceAndFile.stream().map(f-> filename(f)).collect(Collectors.toList()).toString(); - String errorMsg = "Expecting a rules and a edge_properties files for " + version + ". Found: " + filenames; - logger.warn(CrudServiceMsgs.INVALID_OXM_FILE, errorMsg); - }}); - logger.info(CrudServiceMsgs.LOADED_OXM_FILE, "Relationship Schema and Properties files: " + rulesFiles.stream().map(f -> filename(f)).collect(Collectors.toList())); + .collect(Collectors.groupingBy(f -> myMatcher(versionPattern, filename(f)))) + .forEach((version, resourceAndFile) -> { + if (resourceAndFile.size() == 2) { + versionContextMap.put(version, jsonFilesLoader(version, resourceAndFile)); + } else { + String filenames = resourceAndFile.stream().map(f -> filename(f)).collect(Collectors.toList()).toString(); + String errorMsg = "Expecting a rules and a edge_properties files for " + version + ". Found: " + + filenames; + logger.warn(CrudServiceMsgs.INVALID_OXM_FILE, errorMsg); + } + }); + logger.info(CrudServiceMsgs.LOADED_OXM_FILE, "Relationship Schema and Properties files: " + + rulesFiles.stream().map(f -> filename(f)).collect(Collectors.toList())); } catch (IOException e) { logger.error(CrudServiceMsgs.INVALID_OXM_DIR, rulesDir); throw new CrudException("DbEdgeRules or edge_properties files were not found.", new FileNotFoundException()); } } - private static String filename (Object k) throws ClassCastException { - if (k instanceof UrlResource){ + private static String filename(Object k) throws ClassCastException { + if (k instanceof UrlResource) { return ((UrlResource) k).getFilename(); } else if (k instanceof File) { return ((File) k).getName(); @@ -174,7 +187,7 @@ public class RelationshipSchemaLoader { } } - private static RelationshipSchema jsonFilesLoader (String version, List<Object> files) { + private static RelationshipSchema jsonFilesLoader(String version, List<Object> files) { List<String> fileContents = new ArrayList<>(); RelationshipSchema rsSchema = null; if (files.size() == 2) { @@ -188,29 +201,29 @@ public class RelationshipSchemaLoader { } catch (CrudException | IOException e) { e.printStackTrace(); logger.error(CrudServiceMsgs.INVALID_OXM_FILE, - files.stream().map(f -> filename(f)).collect(Collectors.toList()).toString(), e.getMessage()); + files.stream().map(f -> filename(f)).collect(Collectors.toList()).toString(), e.getMessage()); } return rsSchema; } return rsSchema; } - private synchronized static void updateVersionContext(String version, RelationshipSchema rs){ + private synchronized static void updateVersionContext(String version, RelationshipSchema rs) { versionContextMap.put(version, rs); } - private synchronized static String jsonToRelationSchema (String version, Object file) { + private synchronized static String jsonToRelationSchema(String version, Object file) { InputStream inputStream = null; String content = null; try { - if (file instanceof UrlResource) { + if (file instanceof UrlResource) { inputStream = ((UrlResource) file).getInputStream(); } else { inputStream = new FileInputStream((File) file); addtimer(version, file); } - content = IOUtils.toString(inputStream, "UTF-8"); + content = IOUtils.toString(inputStream, "UTF-8"); } catch (IOException e) { e.printStackTrace(); } @@ -219,14 +232,14 @@ public class RelationshipSchemaLoader { private static void addtimer(String version, Object file) { TimerTask task = null; - task = new FileWatcher( - (File) file) { + task = new FileWatcher((File) file) { protected void onChange(File file) { // here we implement the onChange logger.info(CrudServiceMsgs.OXM_FILE_CHANGED, file.getName()); try { - // Cannot use the file object here because we also have to get the edge properties associated with that version. + // Cannot use the file object here because we also have to get the + // edge properties associated with that version. // The properties are stored in a different file. RelationshipSchemaLoader.loadModels(version); } catch (Exception e) { @@ -243,7 +256,7 @@ public class RelationshipSchemaLoader { } } - private static String myMatcher (Pattern p, String s) { + private static String myMatcher(Pattern p, String s) { Matcher m = p.matcher(s); return m.matches() ? m.group(1) : ""; } |