public void run()

in eclipse/eclipse-m2e-ui/src/org/apache/sling/ide/eclipse/ui/wizards/np/ChooseArchetypeWizardPage.java [295:369]


        public void run(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException {

            Logger logger = Activator.getDefault().getPluginLogger();

            monitor.beginTask("Discovering archetypes...", 5);
            // rely on internal API, until https://github.com/eclipse-m2e/m2e-core/issues/921 is solved
        	ArchetypePlugin archetypeManager = M2EUIPluginActivator.getDefault().getArchetypePlugin();
            monitor.worked(1);

            Collection<ArchetypeCatalogFactory> archetypeCatalogs = archetypeManager.getActiveArchetypeCatalogs();
            monitor.worked(2);
            ArrayList<Archetype> candidates = new ArrayList<>();
            for (ArchetypeCatalogFactory catalogFactory : archetypeCatalogs) {
                try {
                    ArchetypeCatalog catalog = catalogFactory.getArchetypeCatalog();
                    @SuppressWarnings("unchecked")
                    java.util.List<Archetype> arcs = catalog.getArchetypes();

                    logger.trace("Catalog factory {0} provided {1} archetypes", catalogFactory,
                            arcs != null ? arcs.size() : 0);

                    if (arcs != null) {
                        candidates.addAll(arcs);
                    }
                } catch (CoreException ce) {
                    throw new InvocationTargetException(ce);
                }
            }
            monitor.worked(1);
            boolean changed = false;

            logger.trace("Considering {0} archetypes from {1} archetype catalogs", candidates.size(),
                    archetypeCatalogs.size());

            for (Archetype candidate : candidates) {
                if (getWizard().acceptsArchetype(candidate)) {
                    String key = keyFor(candidate);
                    Archetype old = archetypesMap.put(key, candidate);

                    logger.trace("Registered archetype {0}", candidate);

                    if (old == null || !old.equals(candidate)) {
                        changed = true;
                    }

                    logger.trace("Old archetype was {0}, changed = {1}", old, changed);
                }
            }

            monitor.worked(1);
            if (changed || archetypesMap.isEmpty()) {
                logger.trace("Triggering refresh since changed is true");
                Display.getDefault().asyncExec(new Runnable() {
                    @Override
                    public void run() {
                        Set<String> keys = archetypesMap.keySet();
                        knownArchetypes.removeAll();
                        for (String aKey : keys) {
                            knownArchetypes.add(aKey);
                        }
                        knownArchetypes.pack();

                        if (knownArchetypes.getItemCount() == 0) {
                            setErrorMessage("No suitable archetypes found. Please make sure that the proper maven repositories are configured and indexes are up to date.");
                        } else {
                            knownArchetypes.select(0);
                            updateStatus(null);
                        }

                    }
                });
            }
            monitor.done();

        }