Skip to content

Commit

Permalink
FORGE-2242: Fixed archetype-list
Browse files Browse the repository at this point in the history
  • Loading branch information
gastaldi committed Feb 19, 2015
1 parent 8b70d4d commit 36bf71d
Show file tree
Hide file tree
Showing 6 changed files with 237 additions and 164 deletions.
Expand Up @@ -8,9 +8,6 @@
package org.jboss.forge.addon.maven.projects.archetype.ui;

import java.io.PrintStream;
import java.util.Iterator;
import java.util.Set;
import java.util.TreeSet;

import javax.inject.Inject;

Expand All @@ -35,70 +32,59 @@
*/
public class ArchetypeCatalogCommands
{
@Inject
@Subset("maven.archetypes")
private Configuration configuration;
@Inject
@Subset("maven.archetypes")
private Configuration configuration;

@Inject
private ArchetypeCatalogFactoryRegistry archetypeRegistry;
@Inject
private ArchetypeCatalogFactoryRegistry archetypeRegistry;

@Command(value = "Archetype: Add", categories = { "Maven" })
public void addArchetype(
@Option(value = "named", label = "Archetype catalog Name", required = true) String name,
@Option(value = "url", label = "Archetype catalog URL", required = true) URLResource url)
{
configuration.setProperty(name, url.getFullyQualifiedName());
archetypeRegistry.addArchetypeCatalogFactory(name, url.getUnderlyingResourceObject());
}
@Command(value = "Archetype: Add", categories = {"Maven"})
public void addArchetype(
@Option(value = "named", label = "Archetype catalog Name", required = true) String name,
@Option(value = "url", label = "Archetype catalog URL", required = true) URLResource url)
{
configuration.setProperty(name, url.getFullyQualifiedName());
archetypeRegistry.addArchetypeCatalogFactory(name, url.getUnderlyingResourceObject());
}

@Command(value = "Archetype: Remove", categories = { "Maven" })
public void removeArchetype(
@Option(value = "named", label = "Archetype catalog name", required = true) String name)
{
configuration.clearProperty(name);
archetypeRegistry.removeArchetypeCatalogFactory(name);
}
@Command(value = "Archetype: Remove", categories = {"Maven"})
public void removeArchetype(
@Option(value = "named", label = "Archetype catalog name", required = true) String name)
{
configuration.clearProperty(name);
archetypeRegistry.removeArchetypeCatalogFactory(name);
}

@Command(value = "Archetype: List", categories = { "Maven" }, enabled = NonGUIEnabledPredicate.class)
public void listArchetypes(@Option(value = "named", label = "Archetype catalog name") String name, UIOutput output)
{
PrintStream out = output.out();
if (Strings.isNullOrEmpty(name))
{
Set<String> allKeys = new TreeSet<>();
Iterator<?> keys = configuration.getKeys();
while (keys.hasNext())
{
String key = keys.next().toString();
if (!key.isEmpty())
@Command(value = "Archetype: List", categories = {"Maven"}, enabled = NonGUIEnabledPredicate.class)
public void listArchetypes(@Option(value = "named", label = "Archetype catalog name") String name,
UIOutput output)
{
PrintStream out = output.out();
if (Strings.isNullOrEmpty(name))
{
for (ArchetypeCatalogFactory factory : archetypeRegistry.getArchetypeCatalogFactories())
{
allKeys.add(key);
String key = factory.getName();
String catalog = factory.toString();
out.println(key + " = " + catalog);
}
}
for (ArchetypeCatalogFactory factory : archetypeRegistry.getArchetypeCatalogFactories())
{
allKeys.add(factory.getName());
}
for (String key : allKeys)
{
String catalog = configuration.getString(key, "unknown");
out.println(key + " = " + catalog);
}
}
else
{
ArchetypeCatalogFactory archetypeCatalogFactory = archetypeRegistry.getArchetypeCatalogFactory(name);
if (archetypeCatalogFactory != null)
{
ArchetypeCatalog archetypeCatalog = archetypeCatalogFactory.getArchetypeCatalog();
if (archetypeCatalog != null)
}
else
{
ArchetypeCatalogFactory archetypeCatalogFactory = archetypeRegistry
.getArchetypeCatalogFactory(name);
if (archetypeCatalogFactory != null)
{
for (Archetype archetype : archetypeCatalog.getArchetypes())
{
out.println(archetype);
}
ArchetypeCatalog archetypeCatalog = archetypeCatalogFactory.getArchetypeCatalog();
if (archetypeCatalog != null)
{
for (Archetype archetype : archetypeCatalog.getArchetypes())
{
out.println(archetype);
}
}
}
}
}
}
}
}
}
Expand Up @@ -21,82 +21,82 @@
import org.jboss.forge.furnace.util.Strings;

/**
* An {@link ArchetypeCatalogFactory} implementation using an {@link URL} as the source
* An {@link ArchetypeCatalogFactory} implementation using an {@link URL} as the
* source
*
* @author <a href="ggastald@redhat.com">George Gastaldi</a>
*/
@Vetoed
class URLArchetypeCatalogFactory implements ArchetypeCatalogFactory
{
private final Logger logger = Logger.getLogger(getClass().getName());
private final Logger logger = Logger.getLogger(getClass().getName());

private final String name;
private final URL catalogURL;
private final String defaultRepository;
private final String name;
private final URL catalogURL;
private final String defaultRepository;

private ArchetypeCatalog cachedArchetypes;
private ArchetypeCatalog cachedArchetypes;

public URLArchetypeCatalogFactory(String name, URL catalogURL, String defaultRepository)
{
super();
Assert.notNull(name, "Name should not be null");
Assert.notNull(catalogURL, "Catalog URL must be specified");
this.name = name;
this.catalogURL = catalogURL;
this.defaultRepository = defaultRepository;
}
public URLArchetypeCatalogFactory(String name, URL catalogURL, String defaultRepository)
{
super();
Assert.notNull(name, "Name should not be null");
Assert.notNull(catalogURL, "Catalog URL must be specified");
this.name = name;
this.catalogURL = catalogURL;
this.defaultRepository = defaultRepository;
}

public URLArchetypeCatalogFactory(String name, URL catalogUrl)
{
this(name, catalogUrl, extractRepository(catalogUrl));
}
public URLArchetypeCatalogFactory(String name, URL catalogUrl)
{
this(name, catalogUrl, extractRepository(catalogUrl));
}

private static String extractRepository(URL catalog)
{
if (catalog == null)
return null;
String url = catalog.toString();
int idx = url.lastIndexOf('/');
if (idx == -1)
{
return null;
}
return url.substring(0, idx);
}
private static String extractRepository(URL catalog)
{
if (catalog == null)
return null;
String url = catalog.toString();
int idx = url.lastIndexOf('/');
if (idx == -1)
{
return null;
}
return url.substring(0, idx);
}

@Override
public String getName()
{
return name;
}
@Override
public String getName()
{
return name;
}

@Override
public ArchetypeCatalog getArchetypeCatalog()
{
if (cachedArchetypes == null)
{
try (InputStream urlStream = catalogURL.openStream())
{
cachedArchetypes = new ArchetypeCatalogXpp3Reader().read(urlStream);
for (Archetype archetype : cachedArchetypes.getArchetypes())
@Override
public ArchetypeCatalog getArchetypeCatalog()
{
if (cachedArchetypes == null)
{
try (InputStream urlStream = catalogURL.openStream())
{
if (Strings.isNullOrEmpty(archetype.getRepository()))
{
archetype.setRepository(defaultRepository);
}
cachedArchetypes = new ArchetypeCatalogXpp3Reader().read(urlStream);
for (Archetype archetype : cachedArchetypes.getArchetypes())
{
if (Strings.isNullOrEmpty(archetype.getRepository()))
{
archetype.setRepository(defaultRepository);
}
}
} catch (Exception e)
{
logger.log(Level.SEVERE, "Error while retrieving archetypes", e);
}
}
catch (Exception e)
{
logger.log(Level.SEVERE, "Error while retrieving archetypes", e);
}
}
return cachedArchetypes;
}
}
return cachedArchetypes;
}

@Override
public String toString()
{
return "URLArchetypeCatalogFactory [name=" + name + ", catalogURL=" + catalogURL + "]";
}
@Override
public String toString()
{
return String.valueOf(catalogURL);
}
}
6 changes: 6 additions & 0 deletions maven/tests/pom.xml
Expand Up @@ -39,6 +39,12 @@
<artifactId>arquillian-furnace-classpath</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.jboss.forge.addon</groupId>
<artifactId>shell-test-harness</artifactId>
<classifier>forge-addon</classifier>
<scope>test</scope>
</dependency>

<!-- Furnace Container -->
<dependency>
Expand Down
Expand Up @@ -30,49 +30,50 @@
public class ArchetypeRegistryTest
{

@Deployment
@Dependencies({
@AddonDependency(name = "org.jboss.forge.addon:projects"),
@AddonDependency(name = "org.jboss.forge.addon:maven")
})
public static ForgeArchive getDeployment()
{
ForgeArchive archive = ShrinkWrap
.create(ForgeArchive.class)
.addBeansXML()
.addClass(TestArchetypeCatalogFactory.class)
.addAsAddonDependencies(
AddonDependencyEntry.create("org.jboss.forge.furnace.container:cdi"),
AddonDependencyEntry.create("org.jboss.forge.addon:maven"),
AddonDependencyEntry.create("org.jboss.forge.addon:projects")
);
@Deployment
@Dependencies({
@AddonDependency(name = "org.jboss.forge.addon:projects"),
@AddonDependency(name = "org.jboss.forge.addon:maven")
})
public static ForgeArchive getDeployment()
{
ForgeArchive archive = ShrinkWrap
.create(ForgeArchive.class)
.addBeansXML()
.addClass(TestArchetypeCatalogFactory.class)
.addAsAddonDependencies(
AddonDependencyEntry.create("org.jboss.forge.furnace.container:cdi"),
AddonDependencyEntry.create("org.jboss.forge.addon:maven"),
AddonDependencyEntry.create("org.jboss.forge.addon:projects")
);

return archive;
}
return archive;
}

@Inject
private ArchetypeCatalogFactoryRegistry archetypeRegistry;
@Inject
private ArchetypeCatalogFactoryRegistry archetypeRegistry;

@Test
public void testArchetypeCatalogFactory()
{
ArchetypeCatalogFactory archetypeCatalogFactory = archetypeRegistry
.getArchetypeCatalogFactory("Test");
Assert.assertNotNull(archetypeCatalogFactory);
ArchetypeCatalog archetypes = archetypeCatalogFactory.getArchetypeCatalog();
Assert.assertNotNull(archetypes);
Assert.assertNotNull(archetypes.getArchetypes());
Assert.assertEquals(1, archetypes.getArchetypes().size());
Archetype expected = new Archetype();
expected.setGroupId("groupId");
expected.setArtifactId("artifactId");
expected.setVersion("1.0.0");
expected.setDescription("Description");
Assert.assertEquals(expected, archetypes.getArchetypes().get(0));
}
@Test
public void testArchetypeCatalogFactory()
{
ArchetypeCatalogFactory archetypeCatalogFactory = archetypeRegistry
.getArchetypeCatalogFactory("Test");
Assert.assertNotNull(archetypeCatalogFactory);
ArchetypeCatalog archetypes = archetypeCatalogFactory.getArchetypeCatalog();
Assert.assertNotNull(archetypes);
Assert.assertNotNull(archetypes.getArchetypes());
Assert.assertEquals(1, archetypes.getArchetypes().size());
Archetype expected = new Archetype();
expected.setGroupId("groupId");
expected.setArtifactId("artifactId");
expected.setVersion("1.0.0");
expected.setDescription("Description");
Assert.assertEquals(expected, archetypes.getArchetypes().get(0));
}

@Test
public void testHasArchetypeCatalogFactory() {
Assert.assertTrue(archetypeRegistry.hasArchetypeCatalogFactories());
}
@Test
public void testHasArchetypeCatalogFactory()
{
Assert.assertTrue(archetypeRegistry.hasArchetypeCatalogFactories());
}
}
Expand Up @@ -35,5 +35,11 @@ public ArchetypeCatalog getArchetypeCatalog()
archetypes.addArchetype(archetype);
return archetypes;
}

@Override
public String toString()
{
return "A Test Archetype";
}

}

0 comments on commit 36bf71d

Please sign in to comment.