*/
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;
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;
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;
// 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;
checkSupportedRepresentation(representation);
- if(!storageDirectory.exists()) {
+ if (!storageDirectory.exists()) {
Preconditions.checkArgument(storageDirectory.mkdirs(), "Unable to create cache directory at %s", storageDirectory);
}
Preconditions.checkArgument(storageDirectory.exists());
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;
}
}
"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
*/
@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;
}
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)) {
* 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);
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 {
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();
}