/* Copyright (c) 2013-2014 Boundless and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Distribution License v1.0
* which accompanies this distribution, and is available at
* https://www.eclipse.org/org/documents/edl-v10.html
*
* Contributors:
* Johnathan Garrett (LMN Solutions) - initial implementation
*/
package org.locationtech.geogig.api;
import java.io.File;
import java.io.FileNotFoundException;
import java.util.HashSet;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
import org.locationtech.geogig.storage.fs.INIFile;
import com.google.common.base.Throwables;
/**
* Provides a means of loading a RepositoryFilter from an Ini file.
*
* @see RepositoryFilter
*/
public class IniRepositoryFilter extends RepositoryFilter {
/**
* Constructs a new {@code IniRepositoryFilter} from the provided file.
*
* @param filterFile the file with the filter definition
* @throws FileNotFoundException
*/
public IniRepositoryFilter(final String filterFile) throws FileNotFoundException {
final File f = new File(filterFile);
if (f.exists()) {
try {
final INIFile ini = new INIFile() {
@Override
public File iniFile() {
return f;
}
};
final Map<String, String> pairs = ini.getAll();
Set<String> seen = new HashSet<String>();
for (Entry<String, String> pair : pairs.entrySet()) {
String qualifiedName = pair.getKey();
String[] split = qualifiedName.split("\\.");
if (split.length == 2 && seen.add(split[0])) {
parseFilter(split[0], pairs);
}
}
} catch (Exception e) {
Throwables.propagate(e);
}
} else {
throw new FileNotFoundException();
}
}
/**
* Parses an ini section and adds it as a filter.
*
* @param featurePath the path of the features to filter
* @param config the ini
*/
private void parseFilter(String featurePath, Map<String, String> config) {
if (featurePath != null) {
String type = config.get(featurePath + ".type");
String filter = config.get(featurePath + ".filter");
addFilter(featurePath, type, filter);
}
}
}