/* * Copyright (c) 2002-2017 "Neo Technology," * Network Engine for Objects in Lund AB [http://neotechnology.com] * * This file is part of Neo4j. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.neo4j.driver.v1.util; import java.util.Collections; import java.util.HashMap; import java.util.HashSet; import java.util.Map; import java.util.Set; import static org.neo4j.driver.internal.util.Iterables.map; public class Neo4jSettings { public static final String AUTH_ENABLED = "dbms.security.auth_enabled"; public static final String DATA_DIR = "dbms.directories.data"; public static final String CERT_DIR = "dbms.directories.certificates"; public static final String IMPORT_DIR = "dbms.directories.import"; public static final String LISTEN_ADDR = "dbms.connectors.default_listen_address"; // only valid for 3.1+ public static final String IPV6_ENABLED_ADDR = "::"; private static final String DEFAULT_IMPORT_DIR = "import"; private static final String DEFAULT_CERT_DIR = "certificates"; public static final String DEFAULT_TLS_CERT_PATH = DEFAULT_CERT_DIR + "/neo4j.cert"; public static final String DEFAULT_TLS_KEY_PATH = DEFAULT_CERT_DIR + "/neo4j.key"; public static final String DEFAULT_DATA_DIR = "data"; private final Map<String, String> settings; private final Set<String> excludes; public static Neo4jSettings TEST_SETTINGS = new Neo4jSettings( map( CERT_DIR, DEFAULT_CERT_DIR, DATA_DIR, DEFAULT_DATA_DIR, IMPORT_DIR, DEFAULT_IMPORT_DIR, AUTH_ENABLED, "true", LISTEN_ADDR, IPV6_ENABLED_ADDR ), Collections.<String>emptySet() ); private Neo4jSettings( Map<String, String> settings, Set<String> excludes ) { this.settings = settings; this.excludes = excludes; } public Map<String, String> propertiesMap() { return settings; } public Neo4jSettings updateWith( Neo4jSettings other ) { return updateWith( other.settings, other.excludes ); } public Neo4jSettings updateWith( String key, String value ) { return updateWith( map(key, value), excludes ); } private Neo4jSettings updateWith( Map<String,String> updates, Set<String> excludes ) { HashMap<String,String> newSettings = new HashMap<>( settings ); for ( Map.Entry<String,String> entry : updates.entrySet() ) { newSettings.put( entry.getKey(), entry.getValue() ); } for ( String exclude : excludes ) { newSettings.remove( exclude ); } return new Neo4jSettings( newSettings, excludes ); } public Neo4jSettings without(String key) { Set<String> newExcludes = new HashSet<>( excludes ); newExcludes.add( key ); Map<String,String> newMap = new HashMap<>( this.settings ); newMap.remove( key ); Neo4jSettings newSettings = new Neo4jSettings( newMap, newExcludes ); return newSettings; } @Override public boolean equals( Object o ) { if ( this == o ) { return true; } if ( o == null || getClass() != o.getClass() ) { return false; } Neo4jSettings that = (Neo4jSettings) o; if ( !settings.equals( that.settings ) ) { return false; } return excludes.equals( that.excludes ); } @Override public int hashCode() { return settings.hashCode(); } public Set<String> excludes() { return excludes; } }