Search in sources :

Example 1 with Archetypes

use of io.fabric8.tooling.archetype.catalog.Archetypes 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 Archetypes

use of io.fabric8.tooling.archetype.catalog.Archetypes 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 Archetypes

use of io.fabric8.tooling.archetype.catalog.Archetypes 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 4 with Archetypes

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

the class ArchetypeTest method testCreateArchetype.

@Test
public void testCreateArchetype() throws Exception {
    ArchetypeInfo archetype = archetypeIdToArchetypeInfoMap.get(archetypeId);
    assertNotNull("No archetype found for id: " + archetypeId, archetype);
    File mavenSettingsFile = getMavenSettingsFile();
    assertFileExists(mavenSettingsFile);
    // create a fabric
    // generate and deploy archetypes
    File workDir = new File(System.getProperty("basedir", "."), "target/generated-projects");
    workDir.mkdirs();
    String profileId = assertGenerateArchetype(archetype, workDir, mavenSettingsFile);
    assertNotNull("Should have a profile ID for " + archetype, profileId);
    FabricRequirements requirements = fabricController.getRequirements();
    if (!addedBroker) {
        addedBroker = true;
        requirements.profile("mq-default").minimumInstances(1);
        FabricAssertions.assertRequirementsSatisfied(fabricController, requirements);
    }
    // deploying each profile should have caused the requirements to be updated to add them all now
    // so lets load the requirements and assert they are satisfied
    requirements.profile(profileId).minimumInstances(1);
    FabricAssertions.assertRequirementsSatisfied(fabricController, requirements);
    System.out.println();
    System.out.println("Managed to create a container for " + profileId + ". Now lets stop it");
    System.out.println();
    // now lets force the container to be stopped
    requirements.profile(profileId).minimumInstances(0).maximumInstances(0);
    FabricAssertions.assertRequirementsSatisfied(fabricController, requirements);
    System.out.println();
    System.out.println("Stopped a container for " + profileId + ". Now lets clear requirements");
    System.out.println();
    requirements.removeProfileRequirements(profileId);
    FabricAssertions.assertRequirementsSatisfied(fabricController, requirements);
    System.out.println();
    System.out.println("Removed requirements for profile " + profileId);
    System.out.println();
}
Also used : FabricRequirements(io.fabric8.api.FabricRequirements) File(java.io.File) Test(org.junit.Test)

Example 5 with Archetypes

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

the class ArchetypeBuilderTest method init.

@Before
public void init() throws IOException {
    if (basedir == null) {
        basedir = ".";
    }
    catalogFile = new File(basedir, "target/test-archetypes/archetype-catalog.xml").getCanonicalFile();
    builder = new ArchetypeBuilder(catalogFile);
    builder.setIndentSize(4);
    archetypeUtils = new ArchetypeUtils();
}
Also used : File(java.io.File) ArchetypeUtils(io.fabric8.tooling.archetype.ArchetypeUtils) Before(org.junit.Before)

Aggregations

Archetype (io.fabric8.tooling.archetype.catalog.Archetype)3 File (java.io.File)3 Archetypes (io.fabric8.tooling.archetype.catalog.Archetypes)2 Test (org.junit.Test)2 FabricRequirements (io.fabric8.api.FabricRequirements)1 ArchetypeUtils (io.fabric8.tooling.archetype.ArchetypeUtils)1 ArchetypeHelper (io.fabric8.tooling.archetype.generator.ArchetypeHelper)1 StringReader (java.io.StringReader)1 StringWriter (java.io.StringWriter)1 URL (java.net.URL)1 Preferences (java.util.prefs.Preferences)1 StreamSource (javax.xml.transform.stream.StreamSource)1 Activate (org.apache.felix.scr.annotations.Activate)1 Before (org.junit.Before)1