package org.rrd4j.core;
import java.io.File;
import java.io.IOException;
import java.net.URI;
/**
* An abstract backend factory which is used to store RRD data to ordinary files on the disk.
* <p>
* Every backend factory storing RRD data as ordinary files should inherit from it, some check are done
* in the code for instanceof.
*
*/
public abstract class RrdFileBackendFactory extends RrdBackendFactory {
/**
* {@inheritDoc}
*
* Method to determine if a file with the given path already exists.
*/
@Override
protected boolean exists(String path) {
return Util.fileExists(path);
}
/** {@inheritDoc} */
@Override
protected boolean shouldValidateHeader(String path) throws IOException {
return true;
}
/** {@inheritDoc} */
@Override
protected boolean shouldValidateHeader(URI uri) throws IOException {
return true;
}
/** {@inheritDoc} */
@Override
public boolean canStore(URI uri) {
if ((uri.isOpaque() || uri.isAbsolute()) && ! "file".equals(uri.getScheme())) {
return false;
} else if (uri.getAuthority() != null || uri.getFragment() != null || uri.getQuery() != null) {
return false;
} else {
return true;
}
}
@Override
public URI getCanonicalUri(URI uri) {
try {
if (uri.isOpaque()) {
return new File(uri.getSchemeSpecificPart()).getCanonicalFile().toURI();
} else if (uri.isAbsolute()) {
return new File(uri).getCanonicalFile().toURI();
} else {
return new File(uri.getPath()).getCanonicalFile().toURI();
}
} catch (IOException e) {
throw new IllegalArgumentException("can't get canonical URI from " + uri + ": " + e);
}
}
@Override
public URI getUri(String path) {
try {
return new File(path).getCanonicalFile().toURI();
} catch (IOException e) {
throw new IllegalArgumentException("can't get canonical URI from path " + path + ": " + e);
}
}
@Override
public String getPath(URI uri) {
if (uri.isOpaque()) {
return uri.getSchemeSpecificPart();
} else if (uri.isAbsolute()) {
return new File(uri).getPath();
} else {
return uri.getPath();
}
}
}