Skip to content

Commit

Permalink
User configuration injection is now working
Browse files Browse the repository at this point in the history
  • Loading branch information
gastaldi committed Jun 21, 2013
1 parent b27e539 commit 2da9ea3
Show file tree
Hide file tree
Showing 10 changed files with 168 additions and 138 deletions.
5 changes: 5 additions & 0 deletions configuration/addon/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,11 @@
<artifactId>environment</artifactId>
<classifier>forge-addon</classifier>
</dependency>
<dependency>
<groupId>org.jboss.forge.addon</groupId>
<artifactId>environment</artifactId>
<classifier>forge-addon</classifier>
</dependency>

</dependencies>
<build>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,10 +13,13 @@
import java.util.List;
import java.util.Properties;

import org.jboss.forge.furnace.services.Exported;

/**
* @author <a href="mailto:lincolnbaxter@gmail.com">Lincoln Baxter, III</a>
* @author Commons Configuration team
*/
@Exported
public interface Configuration
{
/**
Expand Down

This file was deleted.

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -6,33 +6,23 @@
*/
package org.jboss.forge.addon.configuration;

import java.lang.annotation.Annotation;
import java.math.BigDecimal;
import java.math.BigInteger;
import java.util.Iterator;
import java.util.List;
import java.util.Properties;

import javax.enterprise.context.Dependent;
import javax.enterprise.context.spi.CreationalContext;
import javax.enterprise.inject.spi.Bean;
import javax.enterprise.inject.spi.BeanManager;
import javax.enterprise.inject.Vetoed;

/**
* @author <a href="mailto:lincolnbaxter@gmail.com">Lincoln Baxter, III</a>
*
*/
@Dependent
@ConfigAdapterQualifier
@Vetoed
public class ConfigurationAdapter implements Configuration
{
private ScopedConfigurationAdapter parent;
private org.apache.commons.configuration.Configuration delegate;
private BeanManager bm;

public ConfigurationAdapter()
{
}

public ConfigurationAdapter(final ScopedConfigurationAdapter parent,
final org.apache.commons.configuration.Configuration delegate)
Expand All @@ -41,32 +31,11 @@ public ConfigurationAdapter(final ScopedConfigurationAdapter parent,
this.delegate = delegate;
}

public ConfigurationAdapter(org.apache.commons.configuration.Configuration delegate)
{
this.parent = null;
this.delegate = delegate;
}

public org.apache.commons.configuration.Configuration getDelegate()
{
return delegate;
}

public void setParent(ScopedConfigurationAdapter parent)
{
this.parent = parent;
}

public void setDelegate(org.apache.commons.configuration.Configuration delegate)
{
this.delegate = delegate;
}

public void setBeanManager(BeanManager bm)
{
this.bm = bm;
}

@Override
public Configuration getScopedConfiguration(final ConfigurationScope scope)
{
Expand All @@ -80,28 +49,7 @@ public Configuration getScopedConfiguration(final ConfigurationScope scope)
@Override
public Configuration subset(final String prefix)
{
ConfigurationAdapter adapter = getContextualInstance(bm, ConfigurationAdapter.class,
new ConfigAdapterQualifierLiteral());
adapter.setParent(parent);
adapter.setDelegate(delegate.subset(prefix));
adapter.setBeanManager(bm);
return adapter;
}

@SuppressWarnings("unchecked")
private static <T> T getContextualInstance(final BeanManager manager, final Class<T> type, Annotation... qualifiers)
{
T result = null;
Bean<T> bean = (Bean<T>) manager.resolve(manager.getBeans(type, qualifiers));
if (bean != null)
{
CreationalContext<T> context = manager.createCreationalContext(bean);
if (context != null)
{
result = (T) manager.getReference(bean, type, context);
}
}
return result;
return new ConfigurationAdapter(parent, delegate.subset(prefix));
}

@Override
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,94 @@
/*
* Copyright 2013 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.io.File;

import javax.enterprise.context.ApplicationScoped;
import javax.enterprise.inject.Produces;

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

@ApplicationScoped
public class ConfigurationProducer
{

private ScopedConfigurationAdapter userConfig;
private ScopedConfigurationAdapter projectConfig;

@Produces
// public Configuration getConfiguration() throws ConfigurationException
// {
// FileResource<?> projectSettings = getProjectSettings();
// if ((project != null) && !project.equals(this.currentProject))
// {
// ScopedConfigurationAdapter projectConfig = new ScopedConfigurationAdapter();
// XMLConfiguration projectLocalConfig;
// try
// {
// projectLocalConfig = new XMLConfiguration(getProjectSettings().getUnderlyingResourceObject());
// projectLocalConfig.setEncoding("UTF-8");
// }
// catch (org.apache.commons.configuration.ConfigurationException e)
// {
// throw new ConfigurationException(e);
// }
// projectLocalConfig.setReloadingStrategy(new FileChangedReloadingStrategy());
// projectLocalConfig.setAutoSave(true);
//
// ConfigurationAdapter adapter = new ConfigurationAdapter(projectConfig, projectLocalConfig);
// projectConfig.setScopedConfiguration(ConfigurationScope.PROJECT, adapter);
// projectConfig.setScopedConfiguration(ConfigurationScope.USER, getUserConfig());
//
// this.projectConfig = projectConfig;
// return projectConfig;
// }
// else if ((project != null) && project.equals(this.currentProject))
// {
// return projectConfig;
// }
// return getUserConfig();
// }
//
public Configuration getUserConfig() throws ConfigurationException
{
// FIXME NPE caused when no project exists because config param is null
if (userConfig == null)
{
XMLConfiguration globalXml;
try
{
File userConfigurationFile = new File(OperatingSystemUtils.getUserForgeDir(), "config.xml");
globalXml = new XMLConfiguration(userConfigurationFile);
globalXml.setEncoding("UTF-8");
}
catch (org.apache.commons.configuration.ConfigurationException e)
{
throw new ConfigurationException(e);
}
globalXml.setReloadingStrategy(new FileChangedReloadingStrategy());
globalXml.setAutoSave(true);

ConfigurationAdapter adapter = new ConfigurationAdapter(null, globalXml);
userConfig = new ScopedConfigurationAdapter(ConfigurationScope.USER, adapter);
}
return userConfig;
}

private FileResource<?> getProjectSettings()
{
final Project project = null;
FileResource<?> settingsFile = project.getProjectRoot().getChild(".forge_settings").reify(FileResource.class);
return settingsFile;
}

}
23 changes: 10 additions & 13 deletions configuration/tests/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -20,18 +20,15 @@
<artifactId>configuration</artifactId>
<classifier>forge-addon</classifier>
</dependency>
<dependency>
<groupId>org.jboss.forge.test</groupId>
<artifactId>forge-test-harness</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.jboss.forge.test</groupId>
<artifactId>arquillian-forge-classpath</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.3.2</version>
<configuration>
<source>1.6</source>
<target>1.6</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
</plugins>
</build>
</project>

This file was deleted.

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
/*
* Copyright 2013 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 static org.junit.Assert.assertNotNull;

import javax.inject.Inject;

import org.jboss.arquillian.container.test.api.Deployment;
import org.jboss.arquillian.junit.Arquillian;
import org.jboss.forge.arquillian.Addon;
import org.jboss.forge.arquillian.Dependencies;
import org.jboss.forge.arquillian.archive.ForgeArchive;
import org.jboss.forge.furnace.addons.AddonId;
import org.jboss.forge.furnace.repositories.AddonDependencyEntry;
import org.jboss.shrinkwrap.api.ShrinkWrap;
import org.junit.Test;
import org.junit.runner.RunWith;

@RunWith(Arquillian.class)
public class ConfigurationTest
{

@Deployment
@Dependencies({
@Addon(name = "org.jboss.forge.addon:configuration", version = "2.0.0-SNAPSHOT")
})
public static ForgeArchive getDeployment()
{
ForgeArchive archive = ShrinkWrap
.create(ForgeArchive.class)
.addBeansXML()
.addAsAddonDependencies(
AddonDependencyEntry.create(AddonId.from("org.jboss.forge.addon:configuration",
"2.0.0-SNAPSHOT"))
);
return archive;
}

@Inject
private Configuration configuration;

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

0 comments on commit 2da9ea3

Please sign in to comment.