package dgm.modules.fsmon;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.google.common.collect.Lists;
import com.google.inject.TypeLiteral;
import com.google.inject.name.Names;
import dgm.configuration.Configuration;
import dgm.configuration.javascript.JavascriptConfiguration;
import dgm.exceptions.ConfigurationException;
import dgm.modules.ServiceModule;
import java.io.File;
import java.io.IOException;
import java.util.List;
/**
* Base class for all configuration providers
*/
abstract class AbstractConfigurationModule extends ServiceModule
{
final String scriptFolder;
final List<File> libraries;
AbstractConfigurationModule(String scriptFolder, String... libraries)
{
this.scriptFolder = scriptFolder;
this.libraries = Lists.newArrayList(toFiles(libraries));
}
@Override
protected void configure()
{
// bind paths
bind(String.class).annotatedWith(Names.named("scriptFolder")).toInstance(scriptFolder);
bind(new TypeLiteral<List<File>>(){}).annotatedWith(Names.named("libraryFiles")).toInstance(libraries);
configureModule();
}
protected abstract void configureModule();
static Configuration createConfiguration(ObjectMapper om, String scriptFolder, List<File> libraries) throws IOException
{
return new JavascriptConfiguration(om, new File(scriptFolder), libraries.toArray(new File[libraries.size()]));
}
static File[] toFiles(final String[] filenames)
{
final File[] fs = new File[filenames.length];
int i = 0;
for(final String fn : filenames)
{
final File f = new File(fn);
if(!f.getName().endsWith(".js"))
throw new ConfigurationException("Will only load .js files");
if(!f.canRead())
throw new ConfigurationException("Cannot read from '" + fn + "'");
if(!f.isFile())
throw new ConfigurationException("'" + fn + "' is not a file");
fs[i] = f;
i++;
}
return fs;
}
}