Class AnnotatedMountScanner


  • public class AnnotatedMountScanner
    extends Object
    Looks for mount information by scanning for classes annotated with MountPath. You can specify a package to scan (e.g., "org.mycompany.wicket.pages"). Wildcards also work (e.g., "org.mycompany.*.pages" or "org.mycompany.**.pages").

    You can also go more advanced, using any pattern supported by MatchingResources. For example, the first package example above is turned into "classpath*:/org/mycompany/wicket/pages/**/*.class".

    For each class that is annotated, an appropriate IRequestMapper implementing class is created using the information in the MountPath annotation and any supplemental annotations. Each instance is added to the list to return. Each item in the returned list can then be mounted.

    Typical usage is in your Application.init() method and utilizes the AnnotatedMountList.mount(org.apache.wicket.protocol.http.WebApplication) convenience method.

     protected void init()
     {
            new AnnotatedMountScanner().scanPackage("org.mycompany.wicket.pages").mount(this);
     }
     

    You could scan the entire classpath if you wanted by passing in null, but that might require more time to run than limiting it to known packages which have annotated classes.

    Page classes annotation usage is as follows:

     @MountPath
     private class HelloPage extends Page
     {
     }
     
     @MountPath("hello")
     private class HelloPage extends Page
     {
     }
     
     @MountPath(value = "dogs", alt = { "canines", "k9s" })
     private class DogsPage extends Page
     {
     }
     

    The first example will mount HelloPage to /HelloPage using the default mapper (as returned by getRequestMapper(java.lang.String, java.lang.Class<? extends org.apache.wicket.request.component.IRequestablePage>) which is MountedMapper.

    The second example will mount HelloPage to /hello using the default mapper (as returned by getRequestMapper(java.lang.String, java.lang.Class<? extends org.apache.wicket.request.component.IRequestablePage>) which is MountedMapper.

    The third example will mount DogsPage at "/dogs" (as the primary) and as "/canines" and "/k9s" as alternates using the MountedMapper.

    Author:
    Doug Donohoe, Ronald Tetsuo Miura
    • Constructor Detail

      • AnnotatedMountScanner

        public AnnotatedMountScanner()
    • Method Detail

      • getPatternForPackage

        public String getPatternForPackage​(String packageName)
        Get the Spring search pattern given a package name or part of a package name
        Parameters:
        packageName - a package name
        Returns:
        a Spring search pattern for the given package
      • getPackageMatches

        public List<Class<?>> getPackageMatches​(String pattern)
        Scan given a package name or part of a package name and return list of classes with MountPath annotation.
        Returns:
        A List of classes annotated with @MountPath
      • getPatternMatches

        public List<Class<?>> getPatternMatches​(String pattern)
        Scan given a Spring search pattern and return list of classes with MountPath annotation.
        Returns:
        A List of classes annotated with @MountPath
      • scanPackage

        public AnnotatedMountList scanPackage​(String packageName)
        Scan given package name or part of a package name
        Parameters:
        packageName - a package to scan (e.g., "org.mycompany.pages)
        Returns:
        An AnnotatedMountList
      • scanClass

        public AnnotatedMountList scanClass​(Class<? extends Page> pageClass)
        Scan given a class that is a sublass of Page.
        Parameters:
        pageClass - Page subclass to scan
        Returns:
        An AnnotatedMountList containing the primary and alternate strategies created for the class.
      • getDefaultMountPath

        public String getDefaultMountPath​(Class<? extends IRequestablePage> pageClass)
        Returns the default mount path for a given class (used if the path has not been specified in the @MountPath annotation). By default, this method returns the pageClass.getSimpleName().
        Parameters:
        pageClass -
        Returns:
        the default mount path for pageClass