-
Eike Cochu authoredEike Cochu authored
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
Filebase.java 2.41 KiB
package de.vipra.cmd.file;
import java.io.Closeable;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import de.vipra.cmd.ex.FilebaseException;
import de.vipra.util.Config;
import de.vipra.util.Constants;
import de.vipra.util.ex.ConfigException;
import de.vipra.util.model.ArticleFull;
public abstract class Filebase implements Closeable {
public static final Logger log = LogManager.getLogger(Filebase.class);
private final String modelName;
private final File modelDir;
private final FilebaseIndex index;
private final List<ArticleFull> articles;
public Filebase(final File dataDir, final String modelName) throws FilebaseException {
this.modelName = modelName;
modelDir = new File(dataDir, modelName);
if (!modelDir.exists()) {
if (!modelDir.mkdirs()) {
throw new FilebaseException("could not create model directory: " + modelDir.getAbsolutePath());
}
}
try {
index = new FilebaseIndex(modelDir);
} catch (final IOException e) {
throw new FilebaseException("could not read index: " + e.getMessage());
}
articles = new ArrayList<>(Constants.IMPORT_BUFFER_MAX);
}
public File getModelDir() {
return modelDir;
}
public File getModelFile(final String fileName) {
if (fileName != null)
return new File(modelDir, fileName);
return new File(modelDir, modelName);
}
public FilebaseIndex getIndex() {
return index;
}
public List<ArticleFull> getArticles() {
return articles;
}
@Override
public synchronized void close() throws IOException {
write(articles);
index.close();
}
public void add(final ArticleFull article) throws FilebaseException {
index.add(article.getId().toString());
articles.add(article);
if (articles.size() >= Constants.IMPORT_BUFFER_MAX) {
try {
log.info("buffer filled, writing filebase");
write(articles);
articles.clear();
} catch (final IOException e) {
throw new FilebaseException(e);
}
}
}
public abstract void write(List<ArticleFull> articles) throws IOException;
public static Filebase getFilebase(final Config config) throws FilebaseException, ConfigException {
final File dataDir = config.getDataDirectory();
switch (Constants.ANALYZER) {
case DTM:
return new DTMFilebase(dataDir);
case JGIBB:
return new JGibbFilebase(dataDir);
default:
return null;
}
}
}