Skip to content

Commit

Permalink
FORGE-1798: Added @subset for Configuration injection
Browse files Browse the repository at this point in the history
  • Loading branch information
gastaldi committed May 8, 2014
1 parent 6c5a90d commit 5c53119
Show file tree
Hide file tree
Showing 4 changed files with 78 additions and 5 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
/**
* Copyright 2014 Red Hat, Inc. and/or its affiliates.
*
* Licensed under the Eclipse Public License version 1.0, available at
* http://www.eclipse.org/legal/epl-v10.html
*/

package org.jboss.forge.addon.configuration;

import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
* Specifies a subset {@link Configuration} during injection
*
* Eg:
*
* <pre>
* &#064;Inject
* &#064;Subset(&quot;jira&quot;)
* Configuration configuration;
* </pre>
*
* if the equivalent of
*
* <pre>
* &#064;Inject
* Configuration configuration;
* </pre>
*
* and calling
*
* <pre>
* configuration.subset(&quot;jira&quot;);
* </pre>
*
* @author <a href="ggastald@redhat.com">George Gastaldi</a>
*/
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
public @interface Subset
{
String value();
}
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ public boolean uninstall()
@Override
public FileResource<?> getConfigLocation()
{
return getFaceted().getRootDirectory().getChild(CONFIGURATION_FILE).reify(FileResource.class);
return getFaceted().getRoot().getChild(CONFIGURATION_FILE).reify(FileResource.class);
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,17 +4,19 @@
import java.io.FileWriter;
import java.io.IOException;

import javax.enterprise.context.ApplicationScoped;
import javax.enterprise.inject.Produces;
import javax.enterprise.inject.spi.Annotated;
import javax.enterprise.inject.spi.InjectionPoint;
import javax.inject.Inject;
import javax.inject.Singleton;

import org.apache.commons.configuration.XMLConfiguration;
import org.apache.commons.configuration.reloading.FileChangedReloadingStrategy;
import org.jboss.forge.addon.resource.FileResource;
import org.jboss.forge.furnace.Furnace;
import org.jboss.forge.furnace.util.OperatingSystemUtils;

@ApplicationScoped
@Singleton
public class ConfigurationFactoryImpl implements ConfigurationFactory
{
static final String USER_CONFIG_PATH = "org.jboss.forge.addon.configuration.USER_CONFIG_PATH";
Expand All @@ -24,9 +26,19 @@ public class ConfigurationFactoryImpl implements ConfigurationFactory
@Inject
private Furnace furnace;

@Override
@Produces
@ApplicationScoped
Configuration getUserConfiguration(InjectionPoint ip) throws ConfigurationException
{
Configuration config = getUserConfiguration();
Annotated annotated = ip.getAnnotated();
if (annotated.isAnnotationPresent(Subset.class))
{
config = config.subset(annotated.getAnnotation(Subset.class).value());
}
return config;
}

@Override
public Configuration getUserConfiguration() throws ConfigurationException
{
if (furnace.isTestMode())
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -54,13 +54,18 @@ public static ForgeArchive getDeployment()
@Inject
private Configuration configuration;

@Inject
@Subset("subset")
private Configuration subsetConfiguration;

@Inject
private ProjectFactory projectFactory;

@Test
public void testConfigurationInjection() throws Exception
{
assertNotNull(configuration);
assertNotNull(subsetConfiguration);
}

@Test
Expand All @@ -75,4 +80,12 @@ public void testProjectFacet() throws Exception
assertEquals("value", config.getString("key"));
assertTrue(facet.getConfigLocation().exists());
}

@Test
public void testSubsetConfiguration() throws Exception
{
subsetConfiguration.setProperty("A", "Value");
assertEquals("Value", configuration.subset("subset").getString("A"));
}

}

0 comments on commit 5c53119

Please sign in to comment.