Eliminate custom SimpleDateFormat instances
[yangtools.git] / yang / yang-model-util / src / main / java / org / opendaylight / yangtools / yang / model / repo / util / FilesystemSchemaSourceCache.java
index 175ed601d7d2bc82084e4a9c9c08923dead95759..e2d7d5d2b74fe85a95a4ed1704c79b66a0e9f05f 100644 (file)
@@ -7,7 +7,6 @@
  */
 package org.opendaylight.yangtools.yang.model.repo.util;
 
-import com.google.common.annotations.Beta;
 import com.google.common.base.MoreObjects;
 import com.google.common.base.Optional;
 import com.google.common.base.Preconditions;
@@ -28,7 +27,6 @@ import java.nio.file.StandardCopyOption;
 import java.nio.file.attribute.BasicFileAttributes;
 import java.text.DateFormat;
 import java.text.ParseException;
-import java.text.SimpleDateFormat;
 import java.util.Collections;
 import java.util.Date;
 import java.util.List;
@@ -36,7 +34,9 @@ import java.util.Map;
 import java.util.TreeMap;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
+import org.opendaylight.yangtools.yang.common.SimpleDateFormatUtil;
 import org.opendaylight.yangtools.yang.model.repo.api.MissingSchemaSourceException;
+import org.opendaylight.yangtools.yang.model.repo.api.RevisionSourceIdentifier;
 import org.opendaylight.yangtools.yang.model.repo.api.SchemaSourceException;
 import org.opendaylight.yangtools.yang.model.repo.api.SchemaSourceRepresentation;
 import org.opendaylight.yangtools.yang.model.repo.api.SourceIdentifier;
@@ -55,9 +55,14 @@ public final class FilesystemSchemaSourceCache<T extends SchemaSourceRepresentat
 
     // Init storage adapters
     private static final Map<Class<? extends SchemaSourceRepresentation>, StorageAdapter<? extends SchemaSourceRepresentation>> STORAGE_ADAPTERS =
-            Collections.<Class<? extends SchemaSourceRepresentation>, StorageAdapter<? extends SchemaSourceRepresentation>> singletonMap(
+            Collections.singletonMap(
                     YangTextSchemaSource.class, new YangTextSchemaStorageAdapter());
 
+    private static final Pattern CACHED_FILE_PATTERN =
+            Pattern.compile(
+                    "(?<moduleName>[^@]+)" +
+                    "(@(?<revision>" + SourceIdentifier.REVISION_PATTERN + "))?");
+
     private final Class<T> representation;
     private final File storageDirectory;
 
@@ -69,7 +74,7 @@ public final class FilesystemSchemaSourceCache<T extends SchemaSourceRepresentat
 
         checkSupportedRepresentation(representation);
 
-        if(!storageDirectory.exists()) {
+        if (!storageDirectory.exists()) {
             Preconditions.checkArgument(storageDirectory.mkdirs(), "Unable to create cache directory at %s", storageDirectory);
         }
         Preconditions.checkArgument(storageDirectory.exists());
@@ -82,7 +87,7 @@ public final class FilesystemSchemaSourceCache<T extends SchemaSourceRepresentat
 
     private static void checkSupportedRepresentation(final Class<? extends SchemaSourceRepresentation> representation) {
         for (final Class<? extends SchemaSourceRepresentation> supportedRepresentation : STORAGE_ADAPTERS.keySet()) {
-            if(supportedRepresentation.isAssignableFrom(representation)) {
+            if (supportedRepresentation.isAssignableFrom(representation)) {
                 return;
             }
         }
@@ -91,11 +96,6 @@ public final class FilesystemSchemaSourceCache<T extends SchemaSourceRepresentat
                 "This cache does not support representation: %s, supported representations are: %s", representation, STORAGE_ADAPTERS.keySet()));
     }
 
-    private static final Pattern CACHED_FILE_PATTERN =
-            Pattern.compile(
-                    "(?<moduleName>[^@]+)" +
-                    "(@(?<revision>" + SourceIdentifier.REVISION_PATTERN + "))?");
-
     /**
      * Restore cache state
      */
@@ -117,21 +117,21 @@ public final class FilesystemSchemaSourceCache<T extends SchemaSourceRepresentat
     @Override
     public synchronized CheckedFuture<? extends T, SchemaSourceException> getSource(final SourceIdentifier sourceIdentifier) {
         final File file = sourceIdToFile(sourceIdentifier, storageDirectory);
-        if(file.exists() && file.canRead()) {
+        if (file.exists() && file.canRead()) {
             LOG.trace("Source {} found in cache as {}", sourceIdentifier, file);
             final SchemaSourceRepresentation restored = STORAGE_ADAPTERS.get(representation).restore(sourceIdentifier, file);
             return Futures.immediateCheckedFuture(representation.cast(restored));
         }
 
         LOG.debug("Source {} not found in cache as {}", sourceIdentifier, file);
-        return Futures.<T, SchemaSourceException>immediateFailedCheckedFuture(new MissingSchemaSourceException("Source not found", sourceIdentifier));
+        return Futures.immediateFailedCheckedFuture(new MissingSchemaSourceException("Source not found", sourceIdentifier));
     }
 
     @Override
     protected synchronized void offer(final T source) {
         LOG.trace("Source {} offered to cache", source.getIdentifier());
         final File file = sourceIdToFile(source);
-        if(file.exists()) {
+        if (file.exists()) {
             LOG.debug("Source {} already in cache as {}", source.getIdentifier(), file);
             return;
         }
@@ -144,13 +144,8 @@ public final class FilesystemSchemaSourceCache<T extends SchemaSourceRepresentat
     private File sourceIdToFile(final T source) {
         return sourceIdToFile(source.getIdentifier(), storageDirectory);
     }
-    /*
-     *  FIXME: Move of code from deprecated FilesystemSchemaCachingProvider
-     *  to reduce cycle. Decrease visibility once FilesystemSchemaCachingProvider
-     *  is removed.
-     */
-    @Beta
-    public static File sourceIdToFile(final SourceIdentifier identifier, final File storageDirectory) {
+
+    static File sourceIdToFile(final SourceIdentifier identifier, final File storageDirectory) {
         final String rev = identifier.getRevision();
         final File file;
         if (Strings.isNullOrEmpty(rev)) {
@@ -190,7 +185,7 @@ public final class FilesystemSchemaSourceCache<T extends SchemaSourceRepresentat
                  * String is comparable, pattern check tested format
                  * so comparing as ASCII string should be sufficient
                  */
-                DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
+                DateFormat df = SimpleDateFormatUtil.getRevisionFormat();
                 try {
                     Date d = df.parse(revStr);
                     map.put(d, sorted);
@@ -282,7 +277,7 @@ public final class FilesystemSchemaSourceCache<T extends SchemaSourceRepresentat
             fileName = com.google.common.io.Files.getNameWithoutExtension(fileName);
 
             final Optional<SourceIdentifier> si = getSourceIdentifier(fileName);
-            if(si.isPresent()) {
+            if (si.isPresent()) {
                 LOG.trace("Restoring cached file {} as {}", file, si.get());
                 cachedSchemas.add(si.get());
             } else {
@@ -296,7 +291,7 @@ public final class FilesystemSchemaSourceCache<T extends SchemaSourceRepresentat
             if (matcher.matches()) {
                 final String moduleName = matcher.group("moduleName");
                 final String revision = matcher.group("revision");
-                return Optional.of(new SourceIdentifier(moduleName, Optional.fromNullable(revision)));
+                return Optional.of(RevisionSourceIdentifier.create(moduleName, Optional.fromNullable(revision)));
             }
             return Optional.absent();
         }