Package org.jboss.forge.addon.maven.projects.archetype.ui

Source Code of org.jboss.forge.addon.maven.projects.archetype.ui.ArchetypeCatalogCommands

/**
* 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.maven.projects.archetype.ui;

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

import javax.inject.Inject;

import org.apache.maven.archetype.catalog.Archetype;
import org.apache.maven.archetype.catalog.ArchetypeCatalog;
import org.jboss.forge.addon.configuration.Configuration;
import org.jboss.forge.addon.configuration.Subset;
import org.jboss.forge.addon.maven.archetype.ArchetypeCatalogFactory;
import org.jboss.forge.addon.maven.archetype.ArchetypeCatalogFactoryRegistry;
import org.jboss.forge.addon.resource.URLResource;
import org.jboss.forge.addon.ui.annotation.Command;
import org.jboss.forge.addon.ui.annotation.Option;
import org.jboss.forge.addon.ui.annotation.predicate.NonGUIEnabledPredicate;
import org.jboss.forge.addon.ui.output.UIOutput;

import com.google.common.base.Strings;

/**
* Commands for {@link ArchetypeCatalogFactory} registration
*
* @author <a href="ggastald@redhat.com">George Gastaldi</a>
*/
public class ArchetypeCatalogCommands
{
   @Inject
   @Subset("maven.archetypes")
   private Configuration configuration;

   @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: 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())
            {
               allKeys.add(key);
            }
         }
         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)
            {
               for (Archetype archetype : archetypeCatalog.getArchetypes())
               {
                  out.println(archetype);
               }
            }
         }
      }
   }
}
TOP

Related Classes of org.jboss.forge.addon.maven.projects.archetype.ui.ArchetypeCatalogCommands

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.