+ File file = null;
+ String rev = identifier.getRevision();
+ if (rev == null || rev.isEmpty()) {
+ file = findFileWithNewestRev(identifier);
+ } else {
+ file = new File(storageDirectory, identifier.toYangFilename());
+ }
+ return file;
+ }
+
+ private File findFileWithNewestRev(final SourceIdentifier identifier) {
+ File[] files = storageDirectory.listFiles(new FilenameFilter() {
+ final String regex = identifier.getName() + "(\\.yang|@\\d\\d\\d\\d-\\d\\d-\\d\\d.yang)";
+ @Override
+ public boolean accept(File dir, String name) {
+ if (name.matches(regex)) {
+ return true;
+ } else {
+ return false;
+ }
+ }
+ });
+
+ if (files.length == 0) {
+ return new File(storageDirectory, identifier.toYangFilename());
+ }
+ if (files.length == 1) {
+ return files[0];
+ }
+
+ File file = null;
+ Pattern p = Pattern.compile("\\d\\d\\d\\d-\\d\\d-\\d\\d");
+ TreeMap<Date, File> map = new TreeMap<>();
+ for (File sorted : files) {
+ String fileName = sorted.getName();
+ Matcher m = p.matcher(fileName);
+ if (m.find()) {
+ String revStr = m.group();
+ DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
+ try {
+ Date d = df.parse(revStr);
+ map.put(d, sorted);
+ } catch (ParseException e) {
+ LOG.info("Unable to parse date from yang file name");
+ map.put(new Date(0L), sorted);
+ }
+
+ } else {
+ map.put(new Date(0L), sorted);
+ }
+ }
+ file = map.lastEntry().getValue();
+
+ return file;