added function to get a configuration property without binding to Guice explicitly

This commit is contained in:
Adrian Cole 2011-07-22 10:35:48 +10:00
parent dddbd10490
commit b09c81177b
2 changed files with 112 additions and 0 deletions

View File

@ -0,0 +1,55 @@
/**
*
* Copyright (C) 2011 Cloud Conscious, LLC. <info@cloudconscious.com>
*
* ====================================================================
* 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.jclouds.config;
import static com.google.common.base.Preconditions.checkNotNull;
import javax.inject.Inject;
import javax.inject.Singleton;
import com.google.common.base.Function;
import com.google.inject.ConfigurationException;
import com.google.inject.Injector;
import com.google.inject.Key;
import com.google.inject.name.Names;
/**
*
* @author Adrian Cole
*/
@Singleton
public class ValueOfConfigurationKeyOrNull implements Function<String, String> {
protected final Injector injector;
@Inject
public ValueOfConfigurationKeyOrNull(Injector injector) {
this.injector = checkNotNull(injector, "injector");
}
@Override
public String apply(String configurationKey) {
checkNotNull(configurationKey, "configurationKey");
try {
return injector.getInstance(Key.get(String.class, Names.named(configurationKey)));
} catch (ConfigurationException e) {
return null;
}
}
}

View File

@ -0,0 +1,57 @@
/**
*
* Copyright (C) 2011 Cloud Conscious, LLC. <info@cloudconscious.com>
*
* ====================================================================
* 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.jclouds.config;
import static org.testng.Assert.assertEquals;
import java.util.concurrent.ExecutionException;
import org.testng.annotations.Test;
import com.google.inject.AbstractModule;
import com.google.inject.Guice;
import com.google.inject.name.Names;
/**
* Tests behavior of ValueOfConfigurationKeyOrNull
*
* @author Adrian Cole
*/
@Test(groups = "unit")
public class ValueOfConfigurationKeyOrNullTest {
@Test
public void testNotThere() throws InterruptedException, ExecutionException {
assertEquals(new ValueOfConfigurationKeyOrNull(Guice.createInjector()).apply("foo"), null);
}
@Test
public void testThere() throws InterruptedException, ExecutionException {
assertEquals(new ValueOfConfigurationKeyOrNull(Guice.createInjector(new AbstractModule() {
@Override
protected void configure() {
bindConstant().annotatedWith(Names.named("foo")).to("bar");
}
})).apply("foo"), "bar");
}
}