Package org.locationtech.geogig.storage.integration.mongo

Source Code of org.locationtech.geogig.storage.integration.mongo.TestConfigDatabase

/* 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:
* David Winslow (Boundless) - initial implementation
*/
package org.locationtech.geogig.storage.integration.mongo;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.locationtech.geogig.api.Platform;
import org.locationtech.geogig.storage.ConfigDatabase;
import org.locationtech.geogig.storage.fs.IniFileConfigDatabase;

import com.google.common.base.Optional;
import com.google.inject.Inject;

public class TestConfigDatabase implements ConfigDatabase {
    private ConfigDatabase delegate;

    private Map<String, String> overrides = new HashMap<String, String>();

    {
        final IniMongoProperties properties = new IniMongoProperties();
        final String uri = properties.get("mongodb.uri", String.class).or("mongodb://localhost:27017/");
        final String database = properties.get("mongodb.database", String.class).or("geogig");
        overrides.put("mongodb.uri", uri);
        overrides.put("mongodb.database", database);
    }

    @Inject
    public TestConfigDatabase(Platform platform) {
        this.delegate = new IniFileConfigDatabase(platform);
    }

    public Optional<String> get(String key) {
        return Optional.fromNullable(overrides.get(key)).or(delegate.get(key));
    }

    public Optional<String> getGlobal(String key) {
        return delegate.getGlobal(key);
    }

    public <T> Optional<T> get(String key, Class<T> c) {
        if (c.equals(String.class)) {
            Optional<String> res = get(key);
            if (res.isPresent()) {
                return Optional.fromNullable((T) res.get());
            } else {
                return Optional.absent();
            }
        }
        if (c.equals(Integer.class)) {
            Optional<String> res = get(key);
            if (res.isPresent()) {
                return Optional.fromNullable((T) Integer.valueOf(res.get()));
            } else {
                return Optional.absent();
            }
        }
        return delegate.get(key, c);
    }

    public <T> Optional<T> getGlobal(String key, Class<T> c) {
        return delegate.getGlobal(key, c);
    }

    public Map<String, String> getAll() {
        Map<String, String> all = delegate.getAll();
        all.putAll(overrides);
        return all;
    }

    public Map<String, String> getAllGlobal() {
        return delegate.getAllGlobal();
    }

    public Map<String, String> getAllSection(String section) {
        Map<String, String> all = delegate.getAll();
        if (section.equals("mongo"))
            all.putAll(overrides);
        return all;
    }

    public Map<String, String> getAllSectionGlobal(String section) {
        return delegate.getAllSectionGlobal(section);
    }

    public List<String> getAllSubsections(String section) {
        List<String> all = delegate.getAllSubsections(section);
        if (!all.contains("mongo"))
            all.add("mongo");
        return all;
    }

    public List<String> getAllSubsectionsGlobal(String section) {
        return delegate.getAllSubsectionsGlobal(section);
    }

    public void put(String key, Object value) {
        delegate.put(key, value);
    }

    public void putGlobal(String key, Object value) {
        delegate.putGlobal(key, value);
    }

    public void remove(String key) {
        delegate.remove(key);
    }

    public void removeGlobal(String key) {
        delegate.removeGlobal(key);
    }

    public void removeSection(String key) {
        delegate.removeSection(key);
    }

    public void removeSectionGlobal(String key) {
        delegate.removeSectionGlobal(key);
    }
}
TOP

Related Classes of org.locationtech.geogig.storage.integration.mongo.TestConfigDatabase

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.