package org.wyona.yarep.impl.repo.treefs;
import java.io.File;
import org.apache.log4j.Category;
import org.wyona.yarep.core.RepositoryException;
import org.wyona.yarep.impl.repo.fs.FileSystemNode;
/**
* This class represents a repository node.
* A repository node may be either a collection ("directory") or a resource ("file").
*/
public class TreeFileSystemNode extends FileSystemNode {
private static Category log = Category.getInstance(TreeFileSystemNode.class);
/**
* Constructor
* @throws RepositoryException
*/
public TreeFileSystemNode(TreeFileSystemRepository repository, String path, String uuid) throws RepositoryException {
super(repository, path, uuid);
}
/**
* Constructor
* @throws RepositoryException
*/
protected TreeFileSystemNode(TreeFileSystemRepository repository, String path, String uuid, boolean doInit) throws RepositoryException {
super(repository, path, uuid);
}
protected File determineContentFile(String uuid) {
return new File(this.contentDir, splitUUID(uuid));
}
protected File determineMetaDir(String uuid) {
return new File(this.contentDir, splitUUID(uuid) + META_DIR_SUFFIX);
}
protected String splitUUID(String uuid) {
int splitInterval = ((TreeFileSystemRepository)getRepository()).getSplitInterval();
int maxSplits = ((TreeFileSystemRepository)getRepository()).getMaxSplits();
//System.out.println("uuid: " + uuid);
//System.out.println("splitInterval: " + splitInterval);
//System.out.println("maxSplits: " + maxSplits);
if (uuid.startsWith("/") && uuid.length() > 1) {
uuid = uuid.substring(1);
}
String splitId = "";
int slashIndex = uuid.indexOf("/");
String part1 = uuid;
String part2 = "";
if (slashIndex > -1) {
part1 = uuid.substring(0, slashIndex);
part2 = uuid.substring(slashIndex + 1);
}
for (int i = 0; i < maxSplits && part1.length() > splitInterval; i++) {
if (splitId.length() > 0) {
splitId = splitId + "/";
}
splitId = splitId + part1.substring(0, splitInterval);
part1 = part1.substring(splitInterval);
//System.out.println("splitLevel: " + splitLevel);
//System.out.println("part1: " + part1);
}
if (part1.length() > 0) {
splitId = splitId + "/" + part1;
}
if (part2.length() > 0) {
splitId = splitId + "/" + part2;
}
//System.out.println("split uuid: " + splitId);
return splitId;
}
}