Search in sources :

Example 1 with Archetype

use of io.fabric8.tooling.archetype.catalog.Archetype in project fabric8 by jboss-fuse.

the class ArchetypeXmlTest method testMarshalArchetypes.

@Test
public void testMarshalArchetypes() throws JAXBException {
    Archetypes archetypes = new Archetypes();
    archetypes.add(new Archetype("foo", "bar", "1.1", "Some name", "Some description"));
    archetypes.add(new Archetype("xyz", "whatever", "2.3", "Some other name", "Docs..."));
    StringWriter buffer = new StringWriter();
    Archetypes.newMarshaller().marshal(archetypes, buffer);
    System.out.println("Generated XML: " + buffer);
    Object result = Archetypes.newUnmarshaller().unmarshal(new StringReader(buffer.toString()));
    if (result instanceof Archetypes) {
        assertEquals(2, ((Archetypes) result).getArchetypes().size());
        for (Archetype a : ((Archetypes) result).getArchetypes()) {
            System.out.println(a);
        }
    } else {
        fail("Found " + result.getClass().getName() + " when expected an " + Archetypes.class.getName());
    }
}
Also used : StringWriter(java.io.StringWriter) Archetype(io.fabric8.tooling.archetype.catalog.Archetype) StringReader(java.io.StringReader) Archetypes(io.fabric8.tooling.archetype.catalog.Archetypes) Test(org.junit.Test)

Example 2 with Archetype

use of io.fabric8.tooling.archetype.catalog.Archetype in project fabric8 by jboss-fuse.

the class ArchetypeServiceImpl method activate.

@Activate
void activate(Map<String, ?> configuration, ComponentContext componentContext) throws Exception {
    if (mbeanServer != null) {
        JMXUtils.registerMBean(this, mbeanServer, OBJECT_NAME);
    }
    activateComponent();
    URL catalog = componentContext.getBundleContext().getBundle().getResource("archetype-catalog.xml");
    Archetypes archetypes = (Archetypes) Archetypes.newUnmarshaller().unmarshal(new StreamSource(catalog.openStream()));
    for (Archetype arch : archetypes.getArchetypes()) {
        this.archetypes.put(String.format("%s:%s:%s", arch.groupId, arch.artifactId, arch.version), arch);
    }
}
Also used : Archetype(io.fabric8.tooling.archetype.catalog.Archetype) StreamSource(javax.xml.transform.stream.StreamSource) Archetypes(io.fabric8.tooling.archetype.catalog.Archetypes) URL(java.net.URL) Activate(org.apache.felix.scr.annotations.Activate)

Example 3 with Archetype

use of io.fabric8.tooling.archetype.catalog.Archetype in project fabric8 by jboss-fuse.

the class ArchetypeTest method assertArchetypeCreated.

private void assertArchetypeCreated(String artifactId, String groupId, String version) throws Exception {
    Hashtable<String, String> props = new Hashtable<>();
    props.put("offline", "true");
    MavenResolver resolver = MavenResolvers.createMavenResolver(props, null);
    File archetypejar = resolver.resolveFile(new DefaultArtifact(groupId, artifactId, null, null, version));
    assertTrue("archetype jar does not exist", archetypejar.exists());
    assertArchetypeCreated(artifactId, groupId, version, archetypejar);
}
Also used : Hashtable(java.util.Hashtable) MavenResolver(io.fabric8.maven.MavenResolver) File(java.io.File) DefaultArtifact(org.eclipse.aether.artifact.DefaultArtifact)

Example 4 with Archetype

use of io.fabric8.tooling.archetype.catalog.Archetype in project fabric8 by jboss-fuse.

the class ArchetypeGenerateAction method doExecute.

@Override
protected Object doExecute() throws Exception {
    // if no directory then use workspace
    if (directory == null) {
        // must have a workspace location configured
        Preferences preferences = Preferences.userNodeForPackage(getClass());
        String location = preferences.get(ArchetypeWorkspace.PREFERENCE_WORKSPACE, null);
        if (location == null) {
            System.out.println("No workspace location has been set.");
            System.out.println("Use the archetype-workspace command to set a workspace first.");
            System.out.println("");
            return null;
        } else {
            System.out.println("Using current workspace: " + location);
            directory = location;
        }
    } else {
        System.out.println("Using directory as workspace: " + directory);
    }
    File target = new File(directory);
    // make sure the directory exists, auto-creating if missing
    if (!target.exists()) {
        target.mkdirs();
    }
    if (!target.exists() || !target.isDirectory()) {
        System.err.println("Workspace does not exists or is not a directory: " + directory);
        return null;
    }
    Archetype archetype = null;
    // try artifact first
    if (!isNullOrBlank(archetypeOrFilter)) {
        archetype = archetypeService.getArchetypeByArtifact(archetypeOrFilter);
        if (archetype == null) {
            // then by coordinate
            archetype = archetypeService.getArchetype(archetypeOrFilter);
        }
    }
    // no archetype yet so present a list where the user can select
    while (archetype == null) {
        List<Archetype> archetypes = archetypeService.listArchetypes(archetypeOrFilter, true);
        System.out.println("Choose archetype:");
        Iterator<Archetype> it = archetypes.iterator();
        int i = 0;
        while (it.hasNext()) {
            Archetype select = it.next();
            System.out.println(String.format("%4d: -> %-50s %s", ++i, select.artifactId, select.description));
        }
        boolean choosing = true;
        while (choosing) {
            // default select last
            String choose = ShellUtils.readLine(session, String.format("Choose a number or apply filter (case insensitive): %d: ", i), false);
            if (Strings.isNullOrBlank(choose)) {
                // user pressed enter so we select the last
                choose = "" + i;
            }
            try {
                int no = Integer.valueOf(choose);
                // is the number within range
                if (no >= 1 && no <= archetypes.size()) {
                    archetype = archetypes.get(no - 1);
                    break;
                } else {
                    System.out.println("Number " + no + " out of range. Please try again!");
                    continue;
                }
            } catch (NumberFormatException e) {
                // no its a filter, so we use this as filter, and show the list again
                archetypeOrFilter = choose;
                choosing = false;
                archetype = null;
            }
        }
    }
    // okay we have selected an archetype now
    File archetypeFile = fetchArchetype(archetype);
    if (archetypeFile == null || !archetypeFile.exists()) {
        System.err.println("No archetype found for \"" + archetypeOrFilter + "\" coordinates");
        return null;
    }
    System.out.println("----------------------------------------------------------------------------");
    System.out.println("Using archetype: " + archetype.artifactId);
    String defaultGroupId = "io.fabric8";
    String defaultArtifactId = archetype.artifactId + "-example";
    String defaultVersion = "1.0-SNAPSHOT";
    String defaultName = archetype.name;
    String defaultDescription = isNotBlank(archetype.description) ? archetype.description : "";
    System.out.println("----- Configure archetype -----");
    String groupId = ShellUtils.readLine(session, String.format("Define value for property 'groupId' (%s): ", defaultGroupId), false);
    String artifactId = ShellUtils.readLine(session, String.format("Define value for property 'artifactId' (%s): ", defaultArtifactId), false);
    String version = ShellUtils.readLine(session, String.format("Define value for property 'version' (%s): ", defaultVersion), false);
    groupId = isNullOrBlank(groupId) ? defaultGroupId : groupId;
    artifactId = isNullOrBlank(artifactId) ? defaultArtifactId : artifactId;
    version = isNullOrBlank(version) ? defaultVersion : version;
    String defaultPackageName = (groupId + "." + artifactId).replaceAll("-", ".");
    String packageName = ShellUtils.readLine(session, String.format("Define value for property 'package' (%s): ", defaultPackageName), false);
    // use artifact id as default directory name (maven does this also)
    String defaultDirectoryName = isNullOrBlank(artifactId) ? defaultArtifactId : artifactId;
    directory = ShellUtils.readLine(session, String.format("Define value for property 'directoryName' (%s): ", defaultDirectoryName), false);
    packageName = isNullOrBlank(packageName) ? defaultPackageName : packageName;
    directory = isNullOrBlank(directory) ? artifactId : directory;
    String name = ShellUtils.readLine(session, String.format("Define value for property 'name' (%s): ", defaultName), false);
    String description = ShellUtils.readLine(session, String.format("Define value for property 'description' (%s): ", defaultDescription), false);
    // use null to indicate we want out of the box description
    name = isNullOrBlank(name) ? null : name;
    description = isNullOrBlank(description) ? null : description;
    File childDir = new File(target, directory);
    ArchetypeHelper helper = new ArchetypeHelper(archetypeFile, childDir, groupId, artifactId, version, name, description);
    helper.setPackageName(packageName);
    Map<String, String> properties = helper.parseProperties();
    // if we have fabric8.profile as a property then lets configured it now, as its mandatory
    // and use artifactId as its default suggested value
    String profile = null;
    if (properties.containsKey("fabric8-profile")) {
        profile = properties.remove("fabric8-profile");
        String defaultProfile = isNullOrBlank(profile) ? artifactId : profile;
        String p = ShellUtils.readLine(session, String.format("Define value for property 'fabric8.profile' (%s): ", defaultProfile), false);
        profile = isNullOrBlank(p) ? defaultProfile : p;
    }
    // show additional properties and ask to use them as-is
    boolean mustChoose = false;
    if (!properties.isEmpty()) {
        // check if we must choose if there is an empty value or a value that has a ${ } token so we dont have a default value
        for (String value : properties.values()) {
            if (isNullOrBlank(value) || value.contains("$")) {
                mustChoose = true;
                break;
            }
        }
        if (!mustChoose) {
            System.out.println("----- Additional properties -----");
            for (String key : properties.keySet()) {
                System.out.println(String.format("Using property '%s' (%s): ", key, properties.get(key)));
            }
        }
        boolean choosing = true;
        while (mustChoose || choosing) {
            String confirm = null;
            if (!mustChoose) {
                confirm = ShellUtils.readLine(session, "Confirm additional properties configuration: (Y): ", false);
                confirm = isNullOrBlank(confirm) ? "Y" : confirm;
            }
            if (mustChoose || !"Y".equalsIgnoreCase(confirm)) {
                // ask for replacement properties suggesting the defaults
                if (!properties.isEmpty()) {
                    System.out.println("----- Configure additional properties -----");
                    for (String key : properties.keySet()) {
                        String value = properties.get(key);
                        // if the value is empty or a token, then do not show any default value
                        if (isNullOrBlank(value) || value.contains("$")) {
                            value = "";
                        }
                        String p = ShellUtils.readLine(session, String.format("Define value for property '%s' (%s): ", key, value), false);
                        p = isNullOrBlank(p) ? value : p;
                        properties.put(key, p);
                    }
                }
                mustChoose = false;
            } else {
                choosing = false;
            }
        }
    }
    // remover to include the profile back into properties
    if (profile != null) {
        properties.put("fabric8-profile", profile);
    }
    if (!properties.isEmpty()) {
        // set override properties
        helper.setOverrideProperties(properties);
    }
    String confirm = ShellUtils.readLine(session, "Create project: (Y): ", false);
    confirm = confirm == null || confirm.trim().equals("") ? "Y" : confirm;
    if ("Y".equalsIgnoreCase(confirm)) {
        System.out.println("----------------------------------------------------------------------------");
        System.out.println(String.format("Creating project in directory: %s", childDir.getCanonicalPath()));
        helper.execute();
        System.out.println("Project created successfully");
        System.out.println("");
    } else {
        System.out.println("----------------------------------------------------------------------------");
        System.out.println("Creating project aborted!");
        System.out.println("");
    }
    return null;
}
Also used : Archetype(io.fabric8.tooling.archetype.catalog.Archetype) ArchetypeHelper(io.fabric8.tooling.archetype.generator.ArchetypeHelper) Preferences(java.util.prefs.Preferences) File(java.io.File)

Example 5 with Archetype

use of io.fabric8.tooling.archetype.catalog.Archetype in project fabric8 by jboss-fuse.

the class ArchetypeListAction method doExecute.

@Override
protected Object doExecute() throws Exception {
    TablePrinter table = new TablePrinter();
    if (verbose) {
        table.columns("groupId", "artifactId", "version", "description");
    } else {
        table.columns("artifactId", "description");
    }
    for (Archetype archetype : archetypeService.listArchetypes()) {
        if (verbose) {
            table.row(archetype.groupId, archetype.artifactId, archetype.version, archetype.description);
        } else {
            // only list artifact id in short format
            table.row(archetype.artifactId, archetype.description);
        }
    }
    table.print();
    return null;
}
Also used : Archetype(io.fabric8.tooling.archetype.catalog.Archetype) TablePrinter(io.fabric8.utils.TablePrinter)

Aggregations

Archetype (io.fabric8.tooling.archetype.catalog.Archetype)7 File (java.io.File)6 MavenResolver (io.fabric8.maven.MavenResolver)2 Archetypes (io.fabric8.tooling.archetype.catalog.Archetypes)2 ArrayList (java.util.ArrayList)2 Test (org.junit.Test)2 DownloadCallback (io.fabric8.agent.download.DownloadCallback)1 DownloadManager (io.fabric8.agent.download.DownloadManager)1 Downloader (io.fabric8.agent.download.Downloader)1 StreamProvider (io.fabric8.agent.download.StreamProvider)1 FabricRequirements (io.fabric8.api.FabricRequirements)1 AetherResult (io.fabric8.insight.maven.aether.AetherResult)1 WebDriverFacade (io.fabric8.selenium.WebDriverFacade)1 ArchetypeUtils (io.fabric8.tooling.archetype.ArchetypeUtils)1 ArchetypeHelper (io.fabric8.tooling.archetype.generator.ArchetypeHelper)1 TablePrinter (io.fabric8.utils.TablePrinter)1 IOException (java.io.IOException)1 StringReader (java.io.StringReader)1 StringWriter (java.io.StringWriter)1 URL (java.net.URL)1