/*
* Copyright 2000-2013 Enonic AS
* http://www.enonic.com/license
*/
package com.enonic.cms.core.search;
import java.util.Map;
import org.apache.commons.lang.StringUtils;
import org.elasticsearch.common.settings.ImmutableSettings;
import org.elasticsearch.common.settings.Settings;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
import com.google.common.base.Predicate;
import com.google.common.base.Strings;
/**
* Created by IntelliJ IDEA.
* User: rmh
* Date: 11/24/11
* Time: 2:38 PM
*/
@Component
public final class NodeSettingsBuilder
extends AbstractElasticsearchSettingsBuilder
{
private final static Logger LOG = LoggerFactory.getLogger( NodeSettingsBuilder.class );
public Settings buildNodeSettings()
{
final ImmutableSettings.Builder settings = ImmutableSettings.settingsBuilder();
final Map<String, String> nodePropertyMap = getNodePropertyMap();
populateSettings( settings, nodePropertyMap, ELASTICSEARCH_PROPERTIES_PREFIX );
checkClusterSettings( settings );
return settings.build();
}
private void checkClusterSettings( final ImmutableSettings.Builder settings )
{
final Boolean local = getAsBoolean( settings.get( "node.local" ), null );
final Boolean clusterEnabled = getAsBoolean( configProperties.getProperty( "cms.cluster.enabled" ), false );
if ( local == null )
{
settings.put( "node.local", !clusterEnabled );
}
else
{
if ( local != ( !clusterEnabled ) )
{
LOG.warn( "Elasticsearch cluster enabled setting: '" + !local + "' differ from cms.cluster.enabled - property: '" +
clusterEnabled + "' which may cause unexpected behaviour" );
}
}
}
private Boolean getAsBoolean( String value, Boolean defaultValue )
{
if ( Strings.isNullOrEmpty( value ) )
{
return defaultValue;
}
return Boolean.valueOf( StringUtils.trimToNull( value ) );
}
private Map<String, String> getNodePropertyMap()
{
return configProperties.getSubMap( new Predicate<String>()
{
@Override
public boolean apply( final String input )
{
return StringUtils.startsWith( input, ELASTICSEARCH_PROPERTIES_PREFIX ) &&
!StringUtils.startsWith( input, INDEX_PROPERTIES_PREFIX );
}
} );
}
}