 -----
 Archetypeng - Design
 -----
 The Maven Team
 -----

Design

    The archetypeng plugin is built upon a stack.

    The top most elements are the {{{mojos.html}mojos}}, among them two are
    mojos invoking a custom lifecycle on which are binded the inner mojos.

    The inner mojos calls the top most components which perform the algorithm
    of there task and delegate some task to inner components.

Mojos

    The generate mojo calls select-archetype, configure-generation and
    generate-archetype in a lifecycle.

    The create mojo calls configure-creation and create-project in a lifecycle.

    The clean mojo performs his task without an inner mojo nor a plexus
    component.

    The select-archetype mojo is the inner mojo which delegates its task to the
    ArchetypeSelector plexus component.

    The configure-generation mojo is the inner mojo which delegates its task to
    the ArchetypeGenerationConfigurator plexus component.

    The generate-project mojo is the inner mojo which delegates its task to the
    ArchetypeGenerator plexus component.

    The configure-creation mojo is the inner mojo which delegates its task to
    the ArchetypeCreationConfigurator plexus component.

    The create-archetype mojo is the inner mojo which delegates its task to the
    ArchetypeCreator plexus component.

Main components

    The main plexus components of the plugin are the components dirrectly called
    by the mojos.

    They are ArchetypeSelector, ArchetypeGenerationConfigurator,
    ArchetypeGenerator, ArchetypeCreationConfigurator, ArchetypeCreator.

    The ArchetypeSelector component perform the algorithm of the selection step
    in the project generation.
    To performs this task, it uses the ArchetypeArtifactManager,
    ArchetypeFactory, ArchetypePropertiesManager, ArchetypeRegistryManager,
    ArchetypeSelectionQueryer components.

    The ArchetypeGenerationConfigurator component performs the algorithm of the
    configuration step in the project generation.
    To perform this task, it uses the ArchetypeArtifactManager,
    ArchetypeFactory, ArchetypeGenerationQueryer, ArchetypePropertiesManager
    components.

    The ArchetypeGenerator component performs the algorithm of the generation
    step in the project generation.
    To perform this task, it uses the ArchetypeArtifactManager,
    ArchetypeFactory, ArchetypePathResolver, ArchetypePropertiesManager,
    PomManager, VelocityComponent components.

    The ArchetypeCreationConfigurator component performs the algorithm of the
    configuration step of the archetype creation.
    To perfom this task, it uses the ArchetypeCreationQueryer, ArchetypeFactory,
    ArchetypePropertiesManager, ArchetypeTemplateResolver components.

    The ArchetypeCreator component performs the algorithm of the creation step
    in the archetype creation.
    to perfom this task, it uses the ArchetypeFactory, ArchetypePathResolver,
    ArchetypePropertiesManager, ArchetypeTemplateResolver, PomManager
    components.

Queryer components

    This kind of component is the one in charge with the interaction with the
    user during the selection and configuration steps of the generation and
    during the configuration step of the creation.

    The ArchetypeSelectionQueryer component asks all the questions of the
    selection step of the generation.
    It asks to select the group, the archetype, the version and to confirm the
    selection.

    The ArchetypeGenerationQueryer component asks all the questions of the
    configuration step of the selection.
    It asks to provide a value for a property and to confirm the configuration.

    The ArchetypeCreationQueryer component asks all the questions of the
    configuration step of the creation.
    Its asks to provide values for the archetype definition (3 questions), to
    provide values for the common properties (4 questions), to provide the
    keys and values for a specific property (2 question), if a new specific
    property is desired and to confirm the configuration.

Common components.

    They are components which provides usefull method helping the main component
    to perform their tasks.

    The ArchetypeArtifactManager component performs all the interaction with the
    repositories and gives the descriptor and classloader from which the
    generation reads the templates.

    ArchetypeFactory component construct the ArchetypeDefinition and the
    ArchetypeConfiguration objects.

    ArchetypePathResolver component resolves the pathes of the templates in the
    archetype archive, the pathes of the generated project files.

    ArchetypePropertiesManager component performs the actions which use the
    archetype.properties file.

    ArchetypeRegistryManager component performs the actions which interact with
    the registry file (located in ~/.m2/archetype.xml). That file holds the
    archetypeGroup list.

    ArchetypeTemplateResolver component find the potential templates in a
    directory, sort the templates in site sources or resources, resolve a common
    package from a list of sources templates.

    PomManager components perfroms the actions of reading and writing pom files
    and modify the poms by adding modules, adding parent or merging two poms.

