Skip to content

Commit

Permalink
FORGE-1100: Introduced ConfigurationFactory and ConfigurationProducer
Browse files Browse the repository at this point in the history
  • Loading branch information
gastaldi committed Aug 10, 2013
1 parent ba7b9a5 commit 27f2ada
Show file tree
Hide file tree
Showing 6 changed files with 104 additions and 51 deletions.
Original file line number Diff line number Diff line change
@@ -1,9 +1,8 @@
package org.jboss.forge.project.facets;
package org.jboss.forge.env;

import javax.inject.Inject;

import org.jboss.forge.env.Configuration;
import org.jboss.forge.env.ConfigurationScope;
import org.jboss.forge.project.facets.BaseFacet;
import org.jboss.forge.shell.plugins.Alias;

/**
Expand All @@ -14,11 +13,16 @@
@Alias("forge.configuration.facet")
public class ConfigurationFacet extends BaseFacet
{
@Inject
private Configuration configuration;
private ConfigurationFactory factory;

private Configuration projectConfiguration;

@Inject
public ConfigurationFacet(ConfigurationFactory configurationFactory)
{
this.factory = configurationFactory;
}

public Configuration getConfiguration()
{
return projectConfiguration;
Expand All @@ -27,7 +31,10 @@ public Configuration getConfiguration()
@Override
public boolean install()
{
projectConfiguration = configuration.getScopedConfiguration(ConfigurationScope.PROJECT);
if (projectConfiguration == null)
{
projectConfiguration = factory.getProjectConfig(getProject());
}
return true;
}

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package org.jboss.forge.env;

import org.jboss.forge.project.Project;

/**
* Creates {@link Configuration} objects for the requested scopes
*
* @author <a href="ggastald@redhat.com">George Gastaldi</a>
*/
public interface ConfigurationFactory
{
public Configuration getUserConfig();

public Configuration getProjectConfig(Project project);
}
Original file line number Diff line number Diff line change
Expand Up @@ -15,80 +15,64 @@
import org.jboss.forge.ForgeEnvironment;
import org.jboss.forge.env.Configuration;
import org.jboss.forge.env.ConfigurationException;
import org.jboss.forge.env.ConfigurationFactory;
import org.jboss.forge.env.ConfigurationScope;
import org.jboss.forge.project.Project;
import org.jboss.forge.resources.FileResource;
import org.jboss.forge.shell.Shell;
import org.jboss.forge.shell.squelch.ConfigAdapterQualifierLiteral;
import org.jboss.forge.shell.util.BeanManagerUtils;
import org.jboss.solder.unwraps.Unwraps;

/**
* @author <a href="mailto:lincolnbaxter@gmail.com">Lincoln Baxter, III</a>
*
*/
@ApplicationScoped
public class ConfigurationImpl
public class ConfigurationFactoryImpl implements ConfigurationFactory
{
private Shell shell;
private ForgeEnvironment environment;
private ScopedConfigurationAdapter userConfig;
private ScopedConfigurationAdapter projectConfig;
private Project currentProject;
private Configuration userConfig;
private BeanManager bm;

public ConfigurationImpl()
public ConfigurationFactoryImpl()
{
}

@Inject
public ConfigurationImpl(final Shell shell, BeanManager bm)
public ConfigurationFactoryImpl(final Shell shell, BeanManager bm)
{
this.bm = bm;
this.shell = shell;
this.environment = shell.getEnvironment();
}

@Unwraps
public Configuration getConfiguration() throws ConfigurationException
@Override
public Configuration getProjectConfig(Project project)
{

Project project = shell.getCurrentProject();
if ((project != null) && !project.equals(this.currentProject))
ScopedConfigurationAdapter projectConfig = new ScopedConfigurationAdapter();
XMLConfiguration projectLocalConfig;
try
{
currentProject = project;
ScopedConfigurationAdapter projectConfig = new ScopedConfigurationAdapter();
XMLConfiguration projectLocalConfig;
try
{
projectLocalConfig = new XMLConfiguration(getProjectSettings(project).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 = BeanManagerUtils.getContextualInstance(bm, ConfigurationAdapter.class,
new ConfigAdapterQualifierLiteral());
adapter.setParent(projectConfig);
adapter.setDelegate(projectLocalConfig);
adapter.setBeanManager(bm);
projectConfig.setScopedConfiguration(ConfigurationScope.PROJECT, adapter);
projectConfig.setScopedConfiguration(ConfigurationScope.USER, getUserConfig());

this.projectConfig = projectConfig;
return projectConfig;
projectLocalConfig = new XMLConfiguration(getProjectSettings(project).getUnderlyingResourceObject());
projectLocalConfig.setEncoding("UTF-8");
}
else if ((project != null) && project.equals(this.currentProject))
catch (org.apache.commons.configuration.ConfigurationException e)
{
return projectConfig;
throw new ConfigurationException(e);
}
return getUserConfig();
projectLocalConfig.setReloadingStrategy(new FileChangedReloadingStrategy());
projectLocalConfig.setAutoSave(true);

ConfigurationAdapter adapter = BeanManagerUtils.getContextualInstance(bm, ConfigurationAdapter.class,
new ConfigAdapterQualifierLiteral());
adapter.setParent(projectConfig);
adapter.setDelegate(projectLocalConfig);
adapter.setBeanManager(bm);
projectConfig.setScopedConfiguration(ConfigurationScope.PROJECT, adapter);
projectConfig.setScopedConfiguration(ConfigurationScope.USER, getUserConfig());
return projectConfig;
}

@Override
public Configuration getUserConfig() throws ConfigurationException
{
// FIXME NPE caused when no project exists because config param is null
Expand Down Expand Up @@ -116,7 +100,7 @@ public Configuration getUserConfig() throws ConfigurationException
return userConfig;
}

public FileResource<?> getProjectSettings(final Project project)
private FileResource<?> getProjectSettings(final Project project)
{
FileResource<?> settingsFile = project.getProjectRoot().getChild(".forge_settings").reify(FileResource.class);
return settingsFile;
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
package org.jboss.forge.shell.env;

import javax.enterprise.event.Event;
import javax.enterprise.inject.Produces;
import javax.inject.Inject;

import org.jboss.forge.env.Configuration;
import org.jboss.forge.env.ConfigurationException;
import org.jboss.forge.env.ConfigurationFacet;
import org.jboss.forge.env.ConfigurationFactory;
import org.jboss.forge.project.Project;
import org.jboss.forge.project.facets.events.InstallFacets;
import org.jboss.forge.shell.Shell;

public class ConfigurationProducer
{

@Inject
private ConfigurationFactory factory;

@Inject
private Event<InstallFacets> installFacets;

/**
* Returns a project-scoped configuration (if a project is in scope). Falls back to the user scope configuration if
* no project is set in the shell
*
* @return
* @throws ConfigurationException
*/
@Produces
public Configuration getConfiguration(Shell shell) throws ConfigurationException
{
Project project = shell.getCurrentProject();
if (project == null)
{
return factory.getUserConfig();
}
if (!project.hasFacet(ConfigurationFacet.class))
{
installFacets.fire(new InstallFacets(ConfigurationFacet.class));
// // Installing manually
// ConfigurationFacet facet = new ConfigurationFacet(factory);
// facet.setProject(project);
// project.installFacet(facet);
}
return project.getFacet(ConfigurationFacet.class).getConfiguration();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@
package org.jboss.forge.env;

import org.jboss.forge.project.facets.BaseFacet;
import org.jboss.forge.project.facets.ConfigurationFacet;
import org.jboss.forge.shell.plugins.Alias;
import org.jboss.forge.shell.plugins.RequiresFacet;

Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
package org.jboss.forge.env;

import org.jboss.forge.project.Project;
import org.jboss.forge.project.facets.ConfigurationFacet;
import org.jboss.forge.test.AbstractShellTest;
import org.junit.Assert;
import org.junit.Test;
Expand Down

0 comments on commit 27f2ada

Please sign in to comment.