package org.geowebcache.storage.blobstore.file;
public class FilePathUtils {
public static String gridsetZoomLevelDir(String gridSetId, long zoomLevel) {
String gridSetStr = filteredGridSetId(gridSetId);
StringBuilder sb = new StringBuilder(gridSetStr);
sb.append('_');
zeroPadder(zoomLevel, 2, sb);
return sb.toString();
}
public static String zeroPadder(long number, int order) {
StringBuilder sb = new StringBuilder();
zeroPadder(number, order, sb);
return sb.toString();
}
/**
* Silly way to pad numbers with leading zeros, since I don't know a fast way of doing this in
* Java.
*
* @param number
* @param order
* @return
*/
public static void zeroPadder(long number, int order, StringBuilder padding) {
int numberOrder = 1;
if (number > 9) {
if (number > 11) {
numberOrder = (int) Math.ceil(Math.log10(number) - 0.001);
} else {
numberOrder = 2;
}
}
int diffOrder = order - numberOrder;
if (diffOrder > 0) {
while (diffOrder > 0) {
padding.append('0');
diffOrder--;
}
padding.append(number);// toString() + Long.toString(number);
} else {
padding.append(number);
}
}
public static String filteredGridSetId(String gridSetId) {
return gridSetId.replace(':', '_');
}
public static String filteredLayerName(String layerName) {
return layerName.replace(':', '_').replace(' ', '_');
}
public static void appendFiltered(String str, StringBuilder path) {
char c;
for (int i = 0; i < str.length(); i++) {
c = str.charAt(i);
if (':' == c || ' ' == c) {
c = '_';
}
path.append(c);
}
}
/**
* Extracts the zoomLevel from {@code <gridsetPrefix>_<zLevel>[_<parametersId>]})
*
* @precondition {@code dirName.startsWith(gridsetPrefix + "_")}
*/
public static int findZoomLevel(final String gridsetPrefix, final String dirName) {
assert dirName.startsWith(gridsetPrefix + "_");
String[] parts = dirName.substring(gridsetPrefix.length() + 1).split("_");
String zlevel = parts[0];
try {
return Integer.parseInt(zlevel);
} catch (NumberFormatException e) {
throw new RuntimeException(String.format("unable to find zoom level in '%s'",
gridsetPrefix), e);
}
}
/**
* Extracts the parametersId from {@code <gridsetPrefix>_<zLevel>[_<parametersId>]})
*
* @precondition {@code dirName.startsWith(gridsetPrefix + "_")}
*/
public static String findParameter(final String gridsetPrefix, final String dirName) {
assert dirName.startsWith(gridsetPrefix + "_");
String[] parts = dirName.substring(gridsetPrefix.length() + 1).split("_");
if (parts.length == 2) {
return parts[1];
} else {
return null;
}
}
/**
* Adds the gridset and zoom level fors the standard file system layout path
*/
public static void appendGridsetZoomLevelDir(String gridSetId, long z, StringBuilder path) {
appendFiltered(gridSetId, path);
path.append('_');
zeroPadder(z, 2, path);
}
}