Class AnnotatedMountScanner
- java.lang.Object
-
- org.wicketstuff.annotation.scan.AnnotatedMountScanner
-
public class AnnotatedMountScanner extends Object
Looks for mount information by scanning for classes annotated withMountPath
. 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 theMountPath
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 theAnnotatedMountList.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 isMountedMapper
.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 isMountedMapper
.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 Summary
Constructors Constructor Description AnnotatedMountScanner()
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description 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).List<Class<?>>
getPackageMatches(String pattern)
Scan given a package name or part of a package name and return list of classes with MountPath annotation.String
getPatternForPackage(String packageName)
Get the Spring search pattern given a package name or part of a package nameList<Class<?>>
getPatternMatches(String pattern)
Scan given a Spring search pattern and return list of classes with MountPath annotation.IRequestMapper
getRequestMapper(String mountPath, Class<? extends IRequestablePage> pageClass)
Returns the default mapper given a mount path and class.AnnotatedMountList
scanClass(Class<? extends Page> pageClass)
Scan given a class that is a sublass ofPage
.protected AnnotatedMountList
scanList(List<Class<?>> mounts)
Scan a list of classes which are annotated with MountPathAnnotatedMountList
scanPackage(String packageName)
Scan given package name or part of a package nameAnnotatedMountList
scanPattern(String pattern)
Scan given a Spring search pattern.
-
-
-
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
-
scanPattern
public AnnotatedMountList scanPattern(String pattern)
Scan given a Spring search pattern.- Parameters:
pattern
-- Returns:
- An
AnnotatedMountList
-
scanList
protected AnnotatedMountList scanList(List<Class<?>> mounts)
Scan a list of classes which are annotated with MountPath- Parameters:
mounts
-- Returns:
- An
AnnotatedMountList
-
scanClass
public AnnotatedMountList scanClass(Class<? extends Page> pageClass)
Scan given a class that is a sublass ofPage
.- Parameters:
pageClass
-Page
subclass to scan- Returns:
- An
AnnotatedMountList
containing the primary and alternate strategies created for the class.
-
getRequestMapper
public IRequestMapper getRequestMapper(String mountPath, Class<? extends IRequestablePage> pageClass)
Returns the default mapper given a mount path and class.- Parameters:
mountPath
-pageClass
-- Returns:
MountedMapper
-
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
-
-