/* Copyright (c) 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: * Gabriel Roldan (Boundless) - initial implementation */ package org.locationtech.geogig.cli; import org.locationtech.geogig.api.Context; import org.locationtech.geogig.api.ContextBuilder; import org.locationtech.geogig.di.GeogigModule; import org.locationtech.geogig.di.PluginDefaults; import org.locationtech.geogig.di.PluginsModule; import org.locationtech.geogig.di.VersionedFormat; import org.locationtech.geogig.di.caching.CachingModule; import org.locationtech.geogig.metrics.MetricsModule; import org.locationtech.geogig.repository.Hints; import org.locationtech.geogig.storage.GraphDatabase; import org.locationtech.geogig.storage.ObjectDatabase; import org.locationtech.geogig.storage.RefDatabase; import org.locationtech.geogig.storage.StagingDatabase; import org.locationtech.geogig.storage.bdbje.JEGraphDatabase_v0_1; import org.locationtech.geogig.storage.bdbje.JEGraphDatabase_v0_2; import org.locationtech.geogig.storage.bdbje.JEObjectDatabase_v0_1; import org.locationtech.geogig.storage.bdbje.JEObjectDatabase_v0_2; import org.locationtech.geogig.storage.bdbje.JEStagingDatabase_v0_1; import org.locationtech.geogig.storage.bdbje.JEStagingDatabase_v0_2; import org.locationtech.geogig.storage.fs.FileRefDatabase; import org.locationtech.geogig.storage.mongo.MongoGraphDatabase; import org.locationtech.geogig.storage.mongo.MongoObjectDatabase; import org.locationtech.geogig.storage.mongo.MongoStagingDatabase; import org.locationtech.geogig.storage.sqlite.SQLiteStorage; import org.locationtech.geogig.storage.sqlite.XerialGraphDatabase; import org.locationtech.geogig.storage.sqlite.XerialObjectDatabase; import org.locationtech.geogig.storage.sqlite.XerialStagingDatabase; import com.google.inject.AbstractModule; import com.google.inject.Guice; import com.google.inject.Scopes; import com.google.inject.multibindings.MapBinder; import com.google.inject.util.Modules; public class CLIContextBuilder extends ContextBuilder { private static final VersionedFormat DEFAULT_REFS = new VersionedFormat("file", "1.0"); private static final VersionedFormat DEFAULT_OBJECTS = new VersionedFormat("bdbje", "0.2"); private static final VersionedFormat DEFAULT_STAGING = new VersionedFormat("bdbje", "0.2"); private static final VersionedFormat DEFAULT_GRAPH = new VersionedFormat("bdbje", "0.2"); private static final PluginDefaults defaults = new PluginDefaults(DEFAULT_OBJECTS,// DEFAULT_STAGING,// DEFAULT_REFS,// DEFAULT_GRAPH); @Override public Context build(Hints hints) { return Guice.createInjector( Modules.override(new GeogigModule(), new CachingModule()).with(new MetricsModule(), new PluginsModule(), new DefaultPlugins(), new HintsModule(hints))) .getInstance(org.locationtech.geogig.api.Context.class); } public static class DefaultPlugins extends AbstractModule { @Override protected void configure() { bind(PluginDefaults.class).toInstance(defaults); MapBinder<VersionedFormat, RefDatabase> refPlugins = MapBinder.newMapBinder(binder(), VersionedFormat.class, RefDatabase.class); refPlugins // .addBinding(DEFAULT_REFS)// .to(FileRefDatabase.class)// .in(Scopes.SINGLETON); MapBinder<VersionedFormat, ObjectDatabase> objectPlugins = MapBinder.newMapBinder( binder(), VersionedFormat.class, ObjectDatabase.class); objectPlugins // .addBinding(new VersionedFormat("bdbje", "0.2"))// .to(JEObjectDatabase_v0_2.class)// .in(Scopes.SINGLETON);// objectPlugins // .addBinding(new VersionedFormat("bdbje", "0.1"))// .to(JEObjectDatabase_v0_1.class)// .in(Scopes.SINGLETON); objectPlugins // .addBinding(new VersionedFormat("mongodb", "0.1"))// .to(MongoObjectDatabase.class)// .in(Scopes.SINGLETON); objectPlugins // .addBinding( new VersionedFormat(SQLiteStorage.FORMAT_NAME, SQLiteStorage.VERSION))// .to(XerialObjectDatabase.class)// .in(Scopes.SINGLETON); MapBinder<VersionedFormat, StagingDatabase> stagingPlugins = MapBinder.newMapBinder( binder(), VersionedFormat.class, StagingDatabase.class); stagingPlugins // .addBinding(new VersionedFormat("mongodb", "0.1"))// .to(MongoStagingDatabase.class)// .in(Scopes.SINGLETON); stagingPlugins // .addBinding(new VersionedFormat("bdbje", "0.2"))// .to(JEStagingDatabase_v0_2.class)// .in(Scopes.SINGLETON); stagingPlugins // .addBinding(new VersionedFormat("bdbje", "0.1"))// .to(JEStagingDatabase_v0_1.class)// .in(Scopes.SINGLETON); stagingPlugins // .addBinding( new VersionedFormat(SQLiteStorage.FORMAT_NAME, SQLiteStorage.VERSION))// .to(XerialStagingDatabase.class)// .in(Scopes.SINGLETON); MapBinder<VersionedFormat, GraphDatabase> graphPlugins = MapBinder.newMapBinder( binder(), VersionedFormat.class, GraphDatabase.class); graphPlugins // .addBinding(new VersionedFormat("bdbje", "0.2")) // .to(JEGraphDatabase_v0_2.class) // .in(Scopes.SINGLETON); graphPlugins // .addBinding(new VersionedFormat("bdbje", "0.1")) // .to(JEGraphDatabase_v0_1.class) // .in(Scopes.SINGLETON); graphPlugins // .addBinding(new VersionedFormat("mongodb", "0.1")) // .to(MongoGraphDatabase.class) // .in(Scopes.SINGLETON); graphPlugins // .addBinding( new VersionedFormat(SQLiteStorage.FORMAT_NAME, SQLiteStorage.VERSION)) // .to(XerialGraphDatabase.class) // .in(Scopes.SINGLETON); } } }