diff --git a/config/api/src/main/java/org/jboss/windup/config/phase/ArchiveExtraction.java b/config/api/src/main/java/org/jboss/windup/config/phase/ArchiveExtraction.java index cfffacaa34..aecb8f206e 100644 --- a/config/api/src/main/java/org/jboss/windup/config/phase/ArchiveExtraction.java +++ b/config/api/src/main/java/org/jboss/windup/config/phase/ArchiveExtraction.java @@ -5,7 +5,12 @@ import org.jboss.windup.config.WindupRuleProvider; /** + * Previous: {@link Discovery}
+ * Next: {@link ArchiveMetadataExtraction} + * + *

* Unzipping of any input files (such as an incoming ear file) occur during this phase. + *

* * @author jsightler * diff --git a/config/api/src/main/java/org/jboss/windup/config/phase/ArchiveMetadataExtraction.java b/config/api/src/main/java/org/jboss/windup/config/phase/ArchiveMetadataExtraction.java index b4c5ddc2f3..6198434f76 100644 --- a/config/api/src/main/java/org/jboss/windup/config/phase/ArchiveMetadataExtraction.java +++ b/config/api/src/main/java/org/jboss/windup/config/phase/ArchiveMetadataExtraction.java @@ -5,8 +5,13 @@ import org.jboss.windup.config.WindupRuleProvider; /** + * Previous: {@link ArchiveExtraction}
+ * Next: {@link ClassifyFileTypes} + * + *

* Occurs immediately after archive extraction. This handles things like calculating checksums for archives or determining the specific type of * archive (ear vs other types of archives). + *

* */ public class ArchiveMetadataExtraction extends RulePhase diff --git a/config/api/src/main/java/org/jboss/windup/config/phase/ClassifyFileTypes.java b/config/api/src/main/java/org/jboss/windup/config/phase/ClassifyFileTypes.java index 921b96f8cc..6f4f738aea 100644 --- a/config/api/src/main/java/org/jboss/windup/config/phase/ClassifyFileTypes.java +++ b/config/api/src/main/java/org/jboss/windup/config/phase/ClassifyFileTypes.java @@ -5,8 +5,14 @@ import org.jboss.windup.config.WindupRuleProvider; /** + * Previous: {@link ArchiveMetadataExtraction}
+ * Next: {@link Decompilation}
+ * + *

* This scans files and attaches metadata to them. For example, this may find all of the Java files in an application and mark them as Java, or it may * find all of the bash scripts in an input and identify them appropriately. + *

+ * . * */ public class ClassifyFileTypes extends RulePhase diff --git a/config/api/src/main/java/org/jboss/windup/config/phase/DecompilationPhase.java b/config/api/src/main/java/org/jboss/windup/config/phase/Decompilation.java similarity index 62% rename from config/api/src/main/java/org/jboss/windup/config/phase/DecompilationPhase.java rename to config/api/src/main/java/org/jboss/windup/config/phase/Decompilation.java index 0ee8c4f658..5a1bdac954 100644 --- a/config/api/src/main/java/org/jboss/windup/config/phase/DecompilationPhase.java +++ b/config/api/src/main/java/org/jboss/windup/config/phase/Decompilation.java @@ -5,17 +5,22 @@ import org.jboss.windup.config.WindupRuleProvider; /** + * Previous: {@link ClassifyFileTypes}
+ * Next: {@link DiscoverProjectStructure} + * + *

* Any required decompilation of an input application would occur during this phase. + *

* * @author jsightler * */ -public class DecompilationPhase extends RulePhase +public class Decompilation extends RulePhase { @Override public List> getExecuteAfter() { - return asClassList(ArchiveMetadataExtraction.class); + return asClassList(ClassifyFileTypes.class); } } diff --git a/config/api/src/main/java/org/jboss/windup/config/phase/DiscoverProjectStructure.java b/config/api/src/main/java/org/jboss/windup/config/phase/DiscoverProjectStructure.java index fed022d74b..5bcd5b9ace 100644 --- a/config/api/src/main/java/org/jboss/windup/config/phase/DiscoverProjectStructure.java +++ b/config/api/src/main/java/org/jboss/windup/config/phase/DiscoverProjectStructure.java @@ -5,7 +5,13 @@ import org.jboss.windup.config.WindupRuleProvider; /** - * Discovering of the project structure of the input application will occur during this phase. + * Previous: {@link Decompilation}
+ * Next: {@link InitialAnalysis} + * + *

+ * Discovering of the project structure of the input application will occur during this phase. This will discover which files are in which project + * (including determining subprojects) and analyze as much metadata as possible for supported project types (for example, Maven projects). + *

* * @author jsightler * @@ -16,6 +22,6 @@ public class DiscoverProjectStructure extends RulePhase @Override public List> getExecuteAfter() { - return asClassList(ClassifyFileTypes.class); + return asClassList(Decompilation.class); } } diff --git a/config/api/src/main/java/org/jboss/windup/config/phase/Discovery.java b/config/api/src/main/java/org/jboss/windup/config/phase/Discovery.java index 40ff6efdcb..682a23b736 100644 --- a/config/api/src/main/java/org/jboss/windup/config/phase/Discovery.java +++ b/config/api/src/main/java/org/jboss/windup/config/phase/Discovery.java @@ -5,7 +5,12 @@ import org.jboss.windup.config.WindupRuleProvider; /** + * Previous: {@link Initialization}
+ * Next: {@link ArchiveExtraction} + * + *

* This discovers files from the input (for example, find all of the files in the input directory). + *

* * @author jsightler * diff --git a/config/api/src/main/java/org/jboss/windup/config/phase/Finalize.java b/config/api/src/main/java/org/jboss/windup/config/phase/Finalize.java index ff4a3a3aa8..9a7439ed5b 100644 --- a/config/api/src/main/java/org/jboss/windup/config/phase/Finalize.java +++ b/config/api/src/main/java/org/jboss/windup/config/phase/Finalize.java @@ -5,8 +5,13 @@ import org.jboss.windup.config.WindupRuleProvider; /** + * Previous: {@link PostReportRendering}
+ * Next: {@link PostFinalize} + * + *

* This occurs at the end of execution. {@link Rule}s in this phase are responsible for any cleanup of resources that may have been opened during * {@link Rule}s from earlier {@link WindupRuleProvider}s. + *

* * @author jsightler * diff --git a/config/api/src/main/java/org/jboss/windup/config/phase/InitialAnalysis.java b/config/api/src/main/java/org/jboss/windup/config/phase/InitialAnalysis.java index 419fff35f9..2239581605 100644 --- a/config/api/src/main/java/org/jboss/windup/config/phase/InitialAnalysis.java +++ b/config/api/src/main/java/org/jboss/windup/config/phase/InitialAnalysis.java @@ -5,9 +5,14 @@ import org.jboss.windup.config.WindupRuleProvider; /** + * Previous: {@link DiscoverProjectStructure}
+ * Next: {@link MigrationRules} + * + *

* This phase occurs after the application has been unzipped, files have been discovered (including basic filetype information), and the project * structure has been ascertained. {@link Rule}s from this phase will perform tasks such as the analysis of source code for placement within the graph * (for use by later {@link Rule}s). + *

* * @author jsightler * diff --git a/config/api/src/main/java/org/jboss/windup/config/phase/Initialization.java b/config/api/src/main/java/org/jboss/windup/config/phase/Initialization.java index 698273b80e..38aeba19cb 100644 --- a/config/api/src/main/java/org/jboss/windup/config/phase/Initialization.java +++ b/config/api/src/main/java/org/jboss/windup/config/phase/Initialization.java @@ -5,8 +5,13 @@ import org.jboss.windup.config.WindupRuleProvider; /** + * Previous: {@link ArchiveExtraction}
+ * Next: {@link Discovery} + * + *

* This is the first phase of Windup Execution. Initialization related tasks (such as copying configuration data to the graph) should occur during * this phase. + *

* * @author jsightler * diff --git a/config/api/src/main/java/org/jboss/windup/config/phase/MigrationRules.java b/config/api/src/main/java/org/jboss/windup/config/phase/MigrationRules.java index 9ed64473c7..20789c8f8f 100644 --- a/config/api/src/main/java/org/jboss/windup/config/phase/MigrationRules.java +++ b/config/api/src/main/java/org/jboss/windup/config/phase/MigrationRules.java @@ -5,8 +5,13 @@ import org.jboss.windup.config.WindupRuleProvider; /** + * Previous: {@link InitialAnalysis}
+ * Next: {@link PostMigrationRules} + * + *

* Most {@link Rule}s will go in this {@link RulePhase}. These include {@link Rule}s that detect code in the source application (or server) that will * need to be changed and produce metadata to be reported on regarding these changes. + *

* * @author jsightler * diff --git a/config/api/src/main/java/org/jboss/windup/config/phase/PostFinalize.java b/config/api/src/main/java/org/jboss/windup/config/phase/PostFinalize.java index d99d7f88d0..b6d65e4757 100644 --- a/config/api/src/main/java/org/jboss/windup/config/phase/PostFinalize.java +++ b/config/api/src/main/java/org/jboss/windup/config/phase/PostFinalize.java @@ -5,6 +5,9 @@ import org.jboss.windup.config.WindupRuleProvider; /** + * Previous: {@link Finalize} + * + *

* This occurs immediately after finalize. This is an ideal place to put {@link Rule}s that would like to be the absolute last things to fire. * Examples: * @@ -12,6 +15,7 @@ *

  • Reporting on the execution time of previous rules
  • *
  • Reporting on all of the rules that have executed and which {@link WindupRuleProvider}s executed them
  • * + *

    * * @author jsightler * diff --git a/config/api/src/main/java/org/jboss/windup/config/phase/PostMigrationRules.java b/config/api/src/main/java/org/jboss/windup/config/phase/PostMigrationRules.java index b68a73a624..ae13bcd7fc 100644 --- a/config/api/src/main/java/org/jboss/windup/config/phase/PostMigrationRules.java +++ b/config/api/src/main/java/org/jboss/windup/config/phase/PostMigrationRules.java @@ -5,7 +5,13 @@ import org.jboss.windup.config.WindupRuleProvider; /** - * This occurs immediately after {@link MigrationRules}. + * Previous: {@link MigrationRules}
    + * Next: {@link PreReportGeneration} + * + *

    + * This occurs immediately after {@link MigrationRules}. This can be used in cases where some rule wants to execute immediately after all other + * migration rules. The primary use case at the moment involves unit tests. + *

    * * @author jsightler * diff --git a/config/api/src/main/java/org/jboss/windup/config/phase/PostReportGeneration.java b/config/api/src/main/java/org/jboss/windup/config/phase/PostReportGeneration.java index a3bd15c26b..cb78b036d2 100644 --- a/config/api/src/main/java/org/jboss/windup/config/phase/PostReportGeneration.java +++ b/config/api/src/main/java/org/jboss/windup/config/phase/PostReportGeneration.java @@ -5,8 +5,13 @@ import org.jboss.windup.config.WindupRuleProvider; /** + * Previous: {@link ReportGeneration}
    + * Next: {@link ReportRendering} + * + *

    * This occurs immediately after the main tasks of report generation. This can be used to generate reports that will need data from all of the other * reports that have been previously generated. + *

    * * @author jsightler * diff --git a/config/api/src/main/java/org/jboss/windup/config/phase/PostReportRendering.java b/config/api/src/main/java/org/jboss/windup/config/phase/PostReportRendering.java index 6644feb01d..aa5cd3683e 100644 --- a/config/api/src/main/java/org/jboss/windup/config/phase/PostReportRendering.java +++ b/config/api/src/main/java/org/jboss/windup/config/phase/PostReportRendering.java @@ -5,8 +5,13 @@ import org.jboss.windup.config.WindupRuleProvider; /** + * Previous: {@link ReportRendering}
    + * Next: {@link Finalize} + * + *

    * This occurs immediately after reports have been rendered. It can be used to render any reports that need to execute last. One possible use is to * render all of the contents of the graph itself. + *

    * * @author jsightler * diff --git a/config/api/src/main/java/org/jboss/windup/config/phase/PreReportGeneration.java b/config/api/src/main/java/org/jboss/windup/config/phase/PreReportGeneration.java index 54ac709acf..7d22132b22 100644 --- a/config/api/src/main/java/org/jboss/windup/config/phase/PreReportGeneration.java +++ b/config/api/src/main/java/org/jboss/windup/config/phase/PreReportGeneration.java @@ -5,8 +5,13 @@ import org.jboss.windup.config.WindupRuleProvider; /** + * Previous: {@link PostMigrationRules}
    + * Next: {@link ReportGeneration} + * + *

    * This occurs immediately before {@link ReportGeneration} and can be used for initialization related tasks that will be needed by all reports during * {@link ReportGeneration}. + *

    * * @author jsightler * @@ -17,6 +22,6 @@ public class PreReportGeneration extends RulePhase @Override public List> getExecuteAfter() { - return asClassList(MigrationRules.class); + return asClassList(PostMigrationRules.class); } } diff --git a/config/api/src/main/java/org/jboss/windup/config/phase/ReportGeneration.java b/config/api/src/main/java/org/jboss/windup/config/phase/ReportGeneration.java index 9d3282f18b..6245e04eea 100644 --- a/config/api/src/main/java/org/jboss/windup/config/phase/ReportGeneration.java +++ b/config/api/src/main/java/org/jboss/windup/config/phase/ReportGeneration.java @@ -5,7 +5,12 @@ import org.jboss.windup.config.WindupRuleProvider; /** + * Previous: {@link PreReportGeneration}
    + * Next: {@link PostReportGeneration} + * + *

    * During this phase, report information will be gathered and stored in the graph. + *

    * * @author jsightler * diff --git a/config/api/src/main/java/org/jboss/windup/config/phase/ReportRendering.java b/config/api/src/main/java/org/jboss/windup/config/phase/ReportRendering.java index cc97d5ae1f..2303d65326 100644 --- a/config/api/src/main/java/org/jboss/windup/config/phase/ReportRendering.java +++ b/config/api/src/main/java/org/jboss/windup/config/phase/ReportRendering.java @@ -5,7 +5,12 @@ import org.jboss.windup.config.WindupRuleProvider; /** + * Previous: {@link PostReportGeneration}
    + * Next: {@link PostReportRendering} + * + *

    * Reports will be rendered to the disk during this phase. + *

    * * @author jsightler * diff --git a/reporting/impl/src/main/java/org/jboss/windup/reporting/freemarker/IsRulePhaseMethod.java b/reporting/impl/src/main/java/org/jboss/windup/reporting/freemarker/IsRulePhaseMethod.java new file mode 100644 index 0000000000..b00999412b --- /dev/null +++ b/reporting/impl/src/main/java/org/jboss/windup/reporting/freemarker/IsRulePhaseMethod.java @@ -0,0 +1,51 @@ +package org.jboss.windup.reporting.freemarker; + +import java.util.List; + +import org.jboss.windup.config.GraphRewrite; +import org.jboss.windup.config.phase.RulePhase; + +import freemarker.ext.beans.StringModel; +import freemarker.template.TemplateModelException; + +/** + * Returns true if the passed in object is a and instanceof {@link RulePhase}.
    + * + * isRulePhase(Object):boolean + * + */ +public class IsRulePhaseMethod implements WindupFreeMarkerMethod +{ + + @Override + public Object exec(@SuppressWarnings("rawtypes") List arguments) throws TemplateModelException + { + if (arguments.size() != 1) + { + throw new TemplateModelException( + "Error, method expects one argument (Object)"); + } + StringModel stringModel = (StringModel) arguments.get(0); + Object object = stringModel.getWrappedObject(); + return object instanceof RulePhase; + } + + @Override + public String getMethodName() + { + return "isRulePhase"; + } + + @Override + public String getDescription() + { + return "Returns true if the passed in object is an instance of " + RulePhase.class.getSimpleName() + "."; + } + + @Override + public void setContext(GraphRewrite event) + { + + } + +} diff --git a/reporting/impl/src/main/resources/reports/templates/ruleprovidersummary.ftl b/reporting/impl/src/main/resources/reports/templates/ruleprovidersummary.ftl index 09fcca3534..af3c93500b 100644 --- a/reporting/impl/src/main/resources/reports/templates/ruleprovidersummary.ftl +++ b/reporting/impl/src/main/resources/reports/templates/ruleprovidersummary.ftl @@ -51,9 +51,14 @@
    <#list getAllRuleProviders() as ruleProvider> + <#if isRulePhase(ruleProvider)> +
    +

    Phase: ${ruleProvider.ID}

    +
    + <#else>

    ${ruleProvider.ID}

    - Phase: ${ruleProvider.phase?replace("_", " ")?capitalize} + Phase: ${ruleProvider.phase.simpleName}
    @@ -100,6 +105,7 @@
    +
    diff --git a/rules-java/src/main/java/org/jboss/windup/rules/apps/java/binary/DecompileArchivesRuleProvider.java b/rules-java/src/main/java/org/jboss/windup/rules/apps/java/binary/DecompileArchivesRuleProvider.java index fae1a48e19..d6997786df 100644 --- a/rules-java/src/main/java/org/jboss/windup/rules/apps/java/binary/DecompileArchivesRuleProvider.java +++ b/rules-java/src/main/java/org/jboss/windup/rules/apps/java/binary/DecompileArchivesRuleProvider.java @@ -5,7 +5,7 @@ import org.jboss.windup.config.operation.Commit; import org.jboss.windup.config.operation.IterationProgress; import org.jboss.windup.config.operation.Log; -import org.jboss.windup.config.phase.DecompilationPhase; +import org.jboss.windup.config.phase.Decompilation; import org.jboss.windup.config.phase.RulePhase; import org.jboss.windup.config.query.Query; import org.jboss.windup.config.query.QueryGremlinCriterion; @@ -27,7 +27,7 @@ public class DecompileArchivesRuleProvider extends WindupRuleProvider @Override public Class getPhase() { - return DecompilationPhase.class; + return Decompilation.class; } // @formatter:off