/*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*/
package com.github.geophile.erdo.map.diskmap;
/*
* db directory
* database.properties
* maps
* <erdo id>: <map name> <record factory classname>
* ...
* forest
* <map id>.properties // manifest
* ...
* segments
* <segment id>
* ...
* summaries
* <segment id>
* ...
*/
import com.github.geophile.erdo.util.IntArray;
import java.io.File;
import java.io.FilenameFilter;
import java.io.IOException;
public class DBStructure
{
public File dbDirectory()
{
return dbDirectory;
}
public File mapsDirectory()
{
return mapsDirectory;
}
public File forestDirectory()
{
return forestDirectory;
}
public File segmentsDirectory()
{
return segmentsDirectory;
}
public File summariesDirectory()
{
return summariesDirectory;
}
public File dbPropertiesFile()
{
return dbPropertiesFile;
}
public File manifestFile(long treeId)
{
return new File(forestDirectory, String.format("%d%s", treeId, MANIFEST_FILENAME_EXTENSION));
}
public File segmentFile(long segmentId)
{
return new File(segmentsDirectory, Long.toString(segmentId));
}
public File summaryFile(long segmentId)
{
return new File(summariesDirectory, Long.toString(segmentId));
}
public IntArray treeIds()
{
IntArray treeIds = new IntArray(null);
for (String manifestFileName : forestDirectory.list(MANIFEST_FILTER)) {
String treeName =
manifestFileName.substring(0, manifestFileName.length() - MANIFEST_FILENAME_EXTENSION.length());
treeIds.append(Integer.parseInt(treeName));
}
return treeIds;
}
public File pidFile()
{
return new File(dbDirectory, PID_FILENAME);
}
public DBStructure(File dbDirectory) throws IOException
{
this.dbDirectory = dbDirectory.getCanonicalFile();
this.mapsDirectory = new File(dbDirectory, MAPS_DIRNAME).getCanonicalFile();
this.forestDirectory = new File(dbDirectory, FOREST_DIRNAME).getCanonicalFile();
this.segmentsDirectory = new File(dbDirectory, SEGMENTS_DIRNAME).getCanonicalFile();
this.summariesDirectory = new File(dbDirectory, SUMMARIES_DIRNAME).getCanonicalFile();
this.dbPropertiesFile = new File(dbDirectory, DB_PROPERTIES_FILENAME).getCanonicalFile();
}
// Class state
private final static String DB_PROPERTIES_FILENAME = "database.properties";
private final static String MAPS_DIRNAME = "maps";
private final static String FOREST_DIRNAME = "forest";
private final static String SEGMENTS_DIRNAME = "segments";
private final static String SUMMARIES_DIRNAME = "summaries";
private final static String PID_FILENAME = "erdo.pid";
private final static String MANIFEST_FILENAME_EXTENSION = ".properties";
private static final FilenameFilter MANIFEST_FILTER =
new FilenameFilter()
{
public boolean accept(File file, String filename)
{
return filename.endsWith(MANIFEST_FILENAME_EXTENSION);
}
};
// Object state
private final File dbDirectory;
private final File dbPropertiesFile;
private final File mapsDirectory;
private final File forestDirectory;
private final File segmentsDirectory;
private final File summariesDirectory;
}