Showing preview only (490K chars total). Download the full file or copy to clipboard to get everything.
Repository: MarcGiffing/wicket-spring-boot
Branch: master
Commit: 74a6f03fb4f8
Files: 243
Total size: 389.0 KB
Directory structure:
gitextract_rhrs615o/
├── .github/
│ ├── dependabot.yml
│ └── workflows/
│ └── maven.yml
├── .gitignore
├── README.adoc
├── pom.xml
├── wicket-spring-boot-context/
│ ├── .gitignore
│ ├── README.md
│ ├── pom.xml
│ └── src/
│ └── main/
│ └── java/
│ └── com/
│ └── giffing/
│ └── wicket/
│ └── spring/
│ └── boot/
│ └── context/
│ ├── condition/
│ │ ├── ConditionalOnWicket.java
│ │ └── WicketSettingsCondition.java
│ ├── exceptions/
│ │ ├── WicketSpringBootException.java
│ │ └── extensions/
│ │ └── ExtensionMisconfigurationException.java
│ ├── extensions/
│ │ ├── ApplicationInitExtension.java
│ │ ├── WicketApplicationInitConfiguration.java
│ │ ├── boot/
│ │ │ └── actuator/
│ │ │ ├── WicketAutoConfig.java
│ │ │ └── WicketEndpointRepository.java
│ │ └── types/
│ │ ├── DurationUnit.java
│ │ ├── SessionUnit.java
│ │ └── TypeParser.java
│ ├── scan/
│ │ ├── WicketAccessDeniedPage.java
│ │ ├── WicketExpiredPage.java
│ │ ├── WicketHomePage.java
│ │ ├── WicketInternalErrorPage.java
│ │ └── WicketSignInPage.java
│ └── security/
│ └── AuthenticatedWebSessionConfig.java
├── wicket-spring-boot-starter/
│ ├── .gitignore
│ ├── pom.xml
│ └── src/
│ └── main/
│ ├── java/
│ │ └── com/
│ │ └── giffing/
│ │ └── wicket/
│ │ └── spring/
│ │ └── boot/
│ │ └── starter/
│ │ ├── WicketAutoConfiguration.java
│ │ ├── WicketBootWebApplicationAutoConfiguration.java
│ │ ├── app/
│ │ │ ├── WicketBootSecuredWebApplication.java
│ │ │ ├── WicketBootStandardWebApplication.java
│ │ │ ├── WicketBootWebApplication.java
│ │ │ ├── classscanner/
│ │ │ │ ├── ClassCandidateScanner.java
│ │ │ │ ├── ClassCandidateScannerConfiguration.java
│ │ │ │ └── candidates/
│ │ │ │ ├── WicketClassCandidate.java
│ │ │ │ └── WicketClassCandidatesHolder.java
│ │ │ └── verifier/
│ │ │ ├── WicketDependencyMismatchDetectedException.java
│ │ │ ├── WicketDependencyVersionChecker.java
│ │ │ ├── WicketDependencyVersionCheckerFailureAnalyzer.java
│ │ │ └── WicketDependencyVersionCheckerProperties.java
│ │ ├── configuration/
│ │ │ ├── CustomAnnotationBeanNameGenerator.java
│ │ │ └── extensions/
│ │ │ ├── WicketExtensionLocation.java
│ │ │ ├── core/
│ │ │ │ ├── csrf/
│ │ │ │ │ ├── CsrfAttacksPreventionConfig.java
│ │ │ │ │ └── CsrfAttacksPreventionProperties.java
│ │ │ │ ├── datastore/
│ │ │ │ │ ├── DataStoreHttpSessionConfig.java
│ │ │ │ │ └── DataStoreHttpSessionProperties.java
│ │ │ │ ├── requestmapper/
│ │ │ │ │ ├── CryptMapperConfig.java
│ │ │ │ │ └── CryptMapperProperties.java
│ │ │ │ ├── resources/
│ │ │ │ │ └── SpringBootMainClassResourceRegistration.java
│ │ │ │ ├── resourcesettings/
│ │ │ │ │ └── packageresourceguard/
│ │ │ │ │ ├── PackageResourceGuardConfig.java
│ │ │ │ │ └── PackageResourceGuardProperties.java
│ │ │ │ ├── serializer/
│ │ │ │ │ └── deflated/
│ │ │ │ │ ├── DeflatedJavaSerializerConfig.java
│ │ │ │ │ └── DeflatedJavaSerializerProperties.java
│ │ │ │ └── settings/
│ │ │ │ ├── application/
│ │ │ │ │ └── ApplicationSettingsConfig.java
│ │ │ │ ├── debug/
│ │ │ │ │ ├── DebugSettingsConfig.java
│ │ │ │ │ └── DebugSettingsProperties.java
│ │ │ │ ├── exceptions/
│ │ │ │ │ ├── ExceptionSettingsConfig.java
│ │ │ │ │ └── ExceptionSettingsProperties.java
│ │ │ │ ├── general/
│ │ │ │ │ └── GeneralSettingsProperties.java
│ │ │ │ ├── markup/
│ │ │ │ │ ├── MarkupSettingsConfig.java
│ │ │ │ │ └── MarkupSettingsProperties.java
│ │ │ │ ├── pagestore/
│ │ │ │ │ ├── StoreSettingsConfig.java
│ │ │ │ │ └── StoreSettingsProperties.java
│ │ │ │ ├── requestlogger/
│ │ │ │ │ ├── RequestLoggerSettingsConfig.java
│ │ │ │ │ └── RequestLoggerSettingsProperties.java
│ │ │ │ ├── requrestcycle/
│ │ │ │ │ ├── RequestCycleSettingsConfig.java
│ │ │ │ │ └── RequestCycleSettingsProperties.java
│ │ │ │ └── resource/
│ │ │ │ ├── ResourceSettingsConfig.java
│ │ │ │ └── ResourceSettingsProperties.java
│ │ │ ├── external/
│ │ │ │ ├── beanvalidation/
│ │ │ │ │ ├── BeanValidationConfig.java
│ │ │ │ │ └── BeanValidationProperties.java
│ │ │ │ ├── development/
│ │ │ │ │ ├── devutils/
│ │ │ │ │ │ ├── diskstorebrowser/
│ │ │ │ │ │ │ ├── DiskStoreBrowserConfig.java
│ │ │ │ │ │ │ └── DiskStoreBrowserProperties.java
│ │ │ │ │ │ ├── inspector/
│ │ │ │ │ │ │ ├── InspectorConfig.java
│ │ │ │ │ │ │ └── InspectorProperties.java
│ │ │ │ │ │ └── statelesschecker/
│ │ │ │ │ │ ├── StatelessCheckerConfig.java
│ │ │ │ │ │ └── StatelessCheckerProperties.java
│ │ │ │ │ ├── springboot/
│ │ │ │ │ │ └── devtools/
│ │ │ │ │ │ ├── SpringDevToolsProperties.java
│ │ │ │ │ │ ├── SpringDevToolsSerializer.java
│ │ │ │ │ │ ├── SpringDevtoolsSerializerConfig.java
│ │ │ │ │ │ └── WicketDevToolsPropertyDefaultsPostProcessor.java
│ │ │ │ │ └── wicketsource/
│ │ │ │ │ ├── WicketSourceConfig.java
│ │ │ │ │ └── WicketSourceProperties.java
│ │ │ │ ├── spring/
│ │ │ │ │ ├── boot/
│ │ │ │ │ │ └── actuator/
│ │ │ │ │ │ ├── WicketEndpoint.java
│ │ │ │ │ │ ├── WicketEndpointConfiguration.java
│ │ │ │ │ │ └── WicketEndpointRepositoryDefault.java
│ │ │ │ │ └── security/
│ │ │ │ │ ├── SecureWebSession.java
│ │ │ │ │ ├── SpringSecurityConfig.java
│ │ │ │ │ └── SpringSecurityProperties.java
│ │ │ │ └── webjars/
│ │ │ │ ├── WebjarsConfig.java
│ │ │ │ └── WebjarsProperties.java
│ │ │ └── stuff/
│ │ │ ├── annotationscan/
│ │ │ │ ├── AnnotatedMountScannerConfig.java
│ │ │ │ └── AnnotatedMountScannerProperties.java
│ │ │ ├── datastore/
│ │ │ │ ├── cassandra/
│ │ │ │ │ ├── DataStoreCassandraConfig.java
│ │ │ │ │ └── DataStoreCassandraProperties.java
│ │ │ │ ├── hazelcast/
│ │ │ │ │ ├── DataStoreHazelcastConfig.java
│ │ │ │ │ └── DataStoreHazelcastProperties.java
│ │ │ │ ├── memcached/
│ │ │ │ │ ├── DataStoreMemcachedConfig.java
│ │ │ │ │ └── DataStoreMemcachedProperties.java
│ │ │ │ └── redis/
│ │ │ │ ├── DataStoreRedisConfig.java
│ │ │ │ └── DataStoreRedisProperties.java
│ │ │ ├── htmlcompressor/
│ │ │ │ ├── HTMLCompressingConfig.java
│ │ │ │ └── HTMLCompressingProperties.java
│ │ │ ├── monitoring/
│ │ │ │ └── jamon/
│ │ │ │ ├── BootJamonAdminPage.java
│ │ │ │ ├── JamonConfig.java
│ │ │ │ ├── JamonCssResourceReference.java
│ │ │ │ ├── JamonProperties.java
│ │ │ │ └── css/
│ │ │ │ └── jamon.css
│ │ │ ├── restannotations/
│ │ │ │ ├── RestAnnotationsConfig.java
│ │ │ │ └── RestAnnotationsProperties.java
│ │ │ ├── serializer/
│ │ │ │ ├── fast2/
│ │ │ │ │ ├── WicketSerializerFast2Config.java
│ │ │ │ │ └── WicketSerializerFast2Properties.java
│ │ │ │ └── kryo2/
│ │ │ │ ├── WicketSerializerKryo2Config.java
│ │ │ │ └── WicketSerializerKryo2Properties.java
│ │ │ ├── shiro/
│ │ │ │ ├── ShiroSecurityConfig.java
│ │ │ │ └── ShiroSecurityProperties.java
│ │ │ └── springreference/
│ │ │ ├── SpringReferenceConfig.java
│ │ │ └── SpringReferenceProperties.java
│ │ └── web/
│ │ ├── WicketWebInitializer.java
│ │ ├── WicketWebInitializerProperties.java
│ │ ├── config/
│ │ │ ├── WicketWebInitializerAutoConfig.java
│ │ │ └── WicketWebInitializerConfig.java
│ │ └── servlet/
│ │ ├── standard/
│ │ │ └── StandardWicketWebInitializer.java
│ │ └── websocket/
│ │ ├── DummyWicketSessionResolver.java
│ │ ├── WebSocketMessageBroadcaster.java
│ │ ├── WebSocketMessageSenderDefault.java
│ │ ├── WebSocketWicketWebInitializer.java
│ │ ├── WicketServerEndpointConfigRegister.java
│ │ └── WicketSessionResolver.java
│ └── resources/
│ ├── META-INF/
│ │ ├── spring/
│ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports
│ │ ├── spring-devtools.properties
│ │ └── spring.factories
│ └── application-development.yml
└── wicket-spring-boot-starter-example/
├── .gitignore
├── pom.xml
└── src/
├── main/
│ ├── doc/
│ │ └── index.adoc
│ ├── java/
│ │ └── com/
│ │ └── giffing/
│ │ └── wicket/
│ │ └── spring/
│ │ └── boot/
│ │ └── example/
│ │ ├── WicketApplication.java
│ │ ├── WicketApplication.properties
│ │ ├── model/
│ │ │ └── Customer.java
│ │ ├── repository/
│ │ │ ├── DefaultFilter.java
│ │ │ ├── Domain.java
│ │ │ ├── Filter.java
│ │ │ ├── FilterService.java
│ │ │ ├── Sort.java
│ │ │ └── services/
│ │ │ ├── DefaultRepositoryService.java
│ │ │ └── customer/
│ │ │ ├── CustomerRepository.java
│ │ │ ├── CustomerRepositoryService.java
│ │ │ ├── CustomerRepositoryServiceImpl.java
│ │ │ ├── filter/
│ │ │ │ ├── CustomerFilter.java
│ │ │ │ └── CustomerSort.java
│ │ │ └── specs/
│ │ │ └── CustomerSpecs.java
│ │ └── web/
│ │ ├── SpringBootWebPackageIdentifier.java
│ │ ├── assets/
│ │ │ └── base/
│ │ │ ├── CustomStylesCssRessourceReference.java
│ │ │ └── custom.css
│ │ ├── general/
│ │ │ ├── action/
│ │ │ │ └── panel/
│ │ │ │ ├── ActionPanel.html
│ │ │ │ ├── ActionPanel.java
│ │ │ │ └── items/
│ │ │ │ ├── AbstractActionItemLink.html
│ │ │ │ ├── AbstractActionItemLink.java
│ │ │ │ ├── AbstrractActionItem.java
│ │ │ │ ├── links/
│ │ │ │ │ ├── ActionItemLink.html
│ │ │ │ │ └── ActionItemLink.java
│ │ │ │ └── yesno/
│ │ │ │ └── YesNoLink.java
│ │ │ └── notify/
│ │ │ ├── NotyJSReference.java
│ │ │ ├── NotyPackagedJSReference.java
│ │ │ ├── NotyThemeBootstrapJSReference.java
│ │ │ ├── jquery.noty.js
│ │ │ └── noty.theme.bootstrap.js
│ │ ├── html/
│ │ │ ├── autocomplete/
│ │ │ │ ├── AutoCompleteTextField.css
│ │ │ │ └── AutoCompleteTextField.java
│ │ │ ├── basic/
│ │ │ │ └── YesNoLabel.java
│ │ │ ├── border/
│ │ │ │ └── behavior/
│ │ │ │ ├── ValidationMsgBehavior.html
│ │ │ │ └── ValidationMsgBehavior.java
│ │ │ ├── form/
│ │ │ │ ├── ValidationForm.java
│ │ │ │ ├── ValidationFormVisitor.java
│ │ │ │ └── focus/
│ │ │ │ └── FocusBehaviour.java
│ │ │ ├── modal/
│ │ │ │ ├── YesNoModal.html
│ │ │ │ ├── YesNoModal.java
│ │ │ │ ├── YesNoPanel.html
│ │ │ │ └── YesNoPanel.java
│ │ │ ├── panel/
│ │ │ │ ├── FeedbackPanel.html
│ │ │ │ └── FeedbackPanel.java
│ │ │ └── repeater/
│ │ │ └── data/
│ │ │ └── table/
│ │ │ └── filter/
│ │ │ ├── AbstractCheckBoxFilter.html
│ │ │ ├── AbstractCheckBoxFilter.java
│ │ │ ├── AbstractTextFieldFilter.html
│ │ │ └── AbstractTextFieldFilter.java
│ │ ├── pages/
│ │ │ ├── BaseAuthenticatedPage.html
│ │ │ ├── BaseAuthenticatedPage.java
│ │ │ ├── BaseAuthenticatedPage.properties
│ │ │ ├── BasePage.html
│ │ │ ├── BasePage.java
│ │ │ ├── WicketBootstrapInitializer.java
│ │ │ ├── customers/
│ │ │ │ ├── CustomerListPage.html
│ │ │ │ ├── CustomerListPage.java
│ │ │ │ ├── create/
│ │ │ │ │ ├── CustomerCreatePage.html
│ │ │ │ │ └── CustomerCreatePage.java
│ │ │ │ ├── edit/
│ │ │ │ │ ├── CustomerEditPage.java
│ │ │ │ │ └── CustomerEditPage.properties
│ │ │ │ ├── events/
│ │ │ │ │ ├── CustomerChangedEvent.java
│ │ │ │ │ └── CustomerDeletedEvent.java
│ │ │ │ └── model/
│ │ │ │ ├── CustomerDataProvider.java
│ │ │ │ ├── UsernameSearchTextField.java
│ │ │ │ └── UsernameTextField.java
│ │ │ ├── errors/
│ │ │ │ ├── AccessDeniedPage.html
│ │ │ │ ├── AccessDeniedPage.java
│ │ │ │ ├── ExpiredPage.html
│ │ │ │ ├── ExpiredPage.java
│ │ │ │ ├── InternalErrorPage.html
│ │ │ │ └── InternalErrorPage.java
│ │ │ ├── footer/
│ │ │ │ ├── Footer.html
│ │ │ │ └── Footer.java
│ │ │ ├── login/
│ │ │ │ ├── LoginPage.html
│ │ │ │ └── LoginPage.java
│ │ │ └── websocket/
│ │ │ ├── ChatPage.css
│ │ │ ├── ChatPage.html
│ │ │ ├── ChatPage.java
│ │ │ ├── ChatPage.properties
│ │ │ ├── ChatParticipant.java
│ │ │ ├── ChatService.java
│ │ │ └── events/
│ │ │ ├── CustomerMessageEvent.java
│ │ │ ├── JoinChatEvent.java
│ │ │ └── LeftChatEvent.java
│ │ ├── security/
│ │ │ ├── SpringSecurityWicketSessionResolver.java
│ │ │ └── WicketWebSecurityAdapterConfig.java
│ │ └── wicket/
│ │ └── dataprovider/
│ │ └── DefaultDataProvider.java
│ └── resources/
│ ├── META-INF/
│ │ └── spring-devtools.properties
│ ├── application.yml
│ ├── db/
│ │ └── changelog/
│ │ ├── db.changelog-master.xml
│ │ ├── init.xml
│ │ ├── table_customer.xml
│ │ └── test-data.xml
│ └── logback.xml
└── test/
├── java/
│ ├── com/
│ │ └── giffing/
│ │ └── wicket/
│ │ └── spring/
│ │ └── boot/
│ │ └── example/
│ │ └── web/
│ │ ├── WicketBaseIntTest.java
│ │ ├── WicketBaseTest.java
│ │ ├── WicketMockServletContext.java
│ │ ├── pages/
│ │ │ └── customers/
│ │ │ ├── CustomerListIntTest.java
│ │ │ ├── CustomerListPageTest.java
│ │ │ ├── create/
│ │ │ │ ├── CustomerCreatePageIntTest.java
│ │ │ │ └── CustomerCreatePageTest.java
│ │ │ └── edit/
│ │ │ └── CustomerEditPageTest.java
│ │ └── security/
│ │ └── WicketWebSecurityAdapterTestConfig.java
│ └── test/
│ └── com/
│ └── giffing/
│ └── wicket/
│ └── spring/
│ └── boot/
│ └── example/
│ └── web/
│ └── WicketWebApplicationConfig.java
└── resources/
├── application.yml
└── db/
└── changelog/
└── db.changelog-master-test.xml
================================================
FILE CONTENTS
================================================
================================================
FILE: .github/dependabot.yml
================================================
# To get started with Dependabot version updates, you'll need to specify which
# package ecosystems to update and where the package manifests are located.
# Please see the documentation for all configuration options:
# https://docs.github.com/code-security/dependabot/dependabot-version-updates/configuration-options-for-the-dependabot.yml-file
version: 2
updates:
- package-ecosystem: "maven" # See documentation for possible values
directory: "/" # Location of package manifests
schedule:
interval: "weekly"
================================================
FILE: .github/workflows/maven.yml
================================================
# This workflow will build a Java project with Maven, and cache/restore any dependencies to improve the workflow execution time
# For more information see: https://docs.github.com/en/actions/automating-builds-and-tests/building-and-testing-java-with-maven
# This workflow uses actions that are not certified by GitHub.
# They are provided by a third-party and are governed by
# separate terms of service, privacy policy, and support
# documentation.
name: Java CI with Maven
on:
push:
branches: [ "master" ]
pull_request:
branches: [ "master" ]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Set up JDK 17
uses: actions/setup-java@v3
with:
java-version: '17'
distribution: 'temurin'
cache: maven
- name: Build with Maven
run: mvn -B package --file pom.xml
# Optional: Uploads the full dependency graph to GitHub to improve the quality of Dependabot alerts this repository can receive
#- name: Update dependency graph
# uses: advanced-security/maven-dependency-submission-action@571e99aab1055c2e71a1e2309b9691de18d6b7d6
================================================
FILE: .gitignore
================================================
/target/
/.settings/
.classpath
.project
.idea/
*.iml
================================================
FILE: README.adoc
================================================
= Wicket autoconfiguration with Spring Boot
Current release version:
* 4.1.x - http://wicket.apache.org/[Wicket 10.6] with Spring Boot 3.5.x - Branch master
* 4.0.x - http://wicket.apache.org/[Wicket 10.0] with Spring Boot 3.2.x - Branch master
NOTE: http://search.maven.org/#search|ga|1|com.giffing.wicket.spring.boot
NOTE: Example projects: https://github.com/MarcGiffing/wicket-spring-boot-examples
* <<introduction>>
* <<getting_started>>
* <<how_does_it_work>>
* <<spring_profile_dev_configuration>>
* <<custom-conditions>>
* <<extension>>
* <<war_deployment>>
[[introduction]]
== Introduction
https://dzone.com/articles/enhance-wicket-with-spring-boot *by Andrea Del Bene*
This project makes it easy to create a new Wicket projects with a minimum
of configuration effort. It uses Spring Boot to autoconfigure Wickets core and
its extension (related projects like wicketstuff, beanvalidation...) with an reasonable default value which can be overridden over property files.
* Core Features
** Configures an embedded Servlet Container by default (Spring Boot Feature).
** Autoconfiguration of the needed link:wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/web/WicketWebInitializer.java[Wicket Servlet filters].
** Autoconfiguration for Spring/Spring-Security and dependency injection support with @SpringBean.
** Autoconfiguration of Wicket <<extension>>.
** Faster development support with <<extension-springboot-devtools>>
[[getting_started]]
== Getting started
To get started you have to create a new Maven Project (or another preferred dependency/build-management tool)
and add the *wicket-spring-boot-starter* dependency to your configuration.
[source,xml]
----
<dependency>
<groupId>com.giffing.wicket.spring.boot.starter</groupId>
<artifactId>wicket-spring-boot-starter</artifactId>
</dependency>
----
Beside the Maven dependency configuration we need the following steps to do
. Create a class which is marked with @SpringBootApplication - see http://docs.spring.io/spring-boot/docs/current-SNAPSHOT/reference/htmlsingle/#using-boot-using-springbootapplication-annotation[Springs documentation]
. Create your HomePage class (with HTML) which will me marked with @WicketHomePage
[source,java]
----
@SpringBootApplication
public class WicketApplication {
public static void main(String[] args) throws Exception {
new SpringApplicationBuilder()
.sources(WicketApplication.class)
.run(args);
}
}
@WicketHomePage
public class HomePage extends WebPage {
}
<html xmlns:wicket="http://wicket.apache.org">
<head></head>
<body>
You content
<wicket:child/>
</body>
</html>
----
Thats all! When you execute the main method you will get a fully working and configured
Wicket application. An embedded Tomcat is automatically started.
In a usal Wicket application you would like to provide custom configuration in Wickets WebApplication init() method.
You could create your own 'extension' by creating a bean which implements WicketApplicationInitConfiguration
[source,java]
----
@ApplicationInitExtension
public class YouExtensionConif implements WicketApplicationInitConfiguration {
@Override
public void init(WebApplication webApplication) {
// your custom configuration
}
}
----
If this configuration is not enough and you want to override special methods of Wickets WebApplication class you have
to create a bean which extends one of the following two classes
* WicketBootStandardWebApplication - Without Security
* WicketBootSecuredWebApplication - With Security - You'll need a security provider like <<extension-spring-security>>
[source,java]
----
@Component
public class WicketWebApplication extends WicketBootSecuredWebApplication {
@Override
protected void init() {
super.init();
}
}
----
The custom WicketWebApplication is automatically picked up instead of the default provided one.
You can also override the getHomePage method() if you don't want to use the special @WicketHomePage annotations
to mark the home page.
To package the application as an executable jar you have to add the spring-boot-maven-plugin.
[source,xml]
----
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
----
Resource files (html, css, js, ...) are not copied to the target folder if placed in the *src/main/java*
folder. You have to tell Maven to copy these files:
[source,xml]
----
<resources>
<resource>
<directory>src/main/resources</directory>
</resource>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**</include>
</includes>
<excludes>
<exclude>**/*.java</exclude>
</excludes>
</resource>
</resources>
----
[[how_does_it_work]]
== How does it work?
To fully understand how http://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#boot-features-developing-auto-configuration[Spring Boots autconfiguration]
and in general Spring Boot works you should read the excellent
http://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/[documentation] from this fantastic http://projects.spring.io/spring-boot/[project].
As an an example we will look to the AnnotatedMountScanner configuration. The https://github.com/wicketstuff/core/wiki/Annotation[annotated mount scanner]
is an project which supports bookmarkable URLs configured by annotations on WebPage classes. If you have this '@MountPath("login")' annotation on a
WebPage then the Page is mounted to 'http://localhost/login'.
In this project each configuration is separated in two classes to configure this particular feature/extension. The extension
consists of a property and a configuration class.
The property class holds properties to configure the specific feature. In the AnnotatedMountScannerProperties class we
found two properties:
[source,java]
----
@ConfigurationProperties(prefix = AnnotatedMountScannerProperties.PROPERTY_PREFIX)
public class AnnotatedMountScannerProperties {
public static final String PROPERTY_PREFIX = "wicket.stuff.annotationscan";
/**
* @see AnnotatedMountScannerConfig
*/
private boolean enabled = true;
/**
* An alternative package name for scanning for mount path if the
* WicketApplication should not used as the root scan package
*/
private String packagename;
----
This property file can be imported in the configuration class AnnotatedMountScannerConfig.
[source,java]
----
/**
* Auto configuration for the {@link AnnotatedMountScanner}.
*
* It uses the user defined {@link WebApplication} as the default package scan
* root directory.
*
* Enables annotate mount scanner if the following two condition matches:
*
* 1. The {@link AnnotatedMountScanner} is in the classpath.
*
* 2. The property {@link AnnotatedMountScannerProperties#PROPERTY_PREFIX}
* .enabled is true (default = true)
*
*
* @author Marc Giffing
*
*/
@ApplicationInitExtension
@ConditionalOnProperty(prefix = AnnotatedMountScannerProperties.PROPERTY_PREFIX, value = "enabled", matchIfMissing = true)
@ConditionalOnClass(value = org.wicketstuff.annotation.scan.AnnotatedMountScanner.class)
@EnableConfigurationProperties({ AnnotatedMountScannerProperties.class })
public class AnnotatedMountScannerConfig implements WicketApplicationInitConfiguration {
@Autowired
private AnnotatedMountScannerProperties prop;
@Override
public void init(WebApplication webApplication) {
String packagename = webApplication.getClass().getPackage().getName();
if (prop.getPackagename() != null) {
packagename = prop.getPackagename();
}
new AnnotatedMountScanner().scanPackage(packagename).mount(webApplication);
}
}
----
If all conditions on the AnnotatedMountScannerConfig matches the configuration class is configured as
a spring bean. All Spring beans which implements the interface WicketApplicationInitConfiguration will
be injected as a list in the default WicketBootWebApplication class.
In the WicketBootWebApplication class we iterate in Wickets init method over the list and call on each the
init method to configure the application.
[source,java]
----
public class WicketBootWebApplication extends AuthenticatedWebApplication {
@Autowired(required = false)
private List<WicketApplicationInitConfiguration> configurations = new ArrayList<>();
@Override
protected void init() {
super.init();
for (WicketApplicationInitConfiguration configuration : configurations) {
configuration.init(this);
}
}
}
----
[[spring_profile_dev_configuration]]
=== Spring profile configuration
The Wicket Spring Boot Starter project ships with a default development configuration.
It can be activated by activating the 'development' Spring profile in the main class or over
external JVM/Maven arguments.
The default configuration can be overridden with a custom property file. See Spring Boots reference documentation http://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#boot-features-external-config[here].
include::wicket-spring-boot-starter/src/main/resources/application-development.yml[]
[source,yml]
----
wicket:
core:
settings:
general:
configuration-type: development
debug:
enabled: true
component-use-check: true
development-utilities-enabled: true
stuff:
htmlcompressor:
enabled: false
features:
removeComments: false
removeMultiSpaces: false
removeIntertagSpaces: false
removeQuotes: false
compressJavaScript: false
compressCss: false
simpleDoctype: false
removeScriptAttributes: false
removeStyleAttributes: false
removeLinkAttributes: false
removeFormAttributes: false
removeInputAttributes: false
simpleBooleanAttributes: false
removeJavaScriptProtocol: false
removeHttpProtocol: false
removeHttpsProtocol: false
preserveLineBreaks: false
external:
development:
devutils:
statelesschecker:
enabled: true
interceptor:
enable-live-sessions-page: true
diskstorebrowser:
enabled: true
wicketsource:
enabled: true
----
[[custom-conditions]]
== Custom conditions
This section lists custom conditional configuration like Spring Boot ones.
=== @ConditionalOnWicket
With the ConditionOnWicket annotation you can check that configuration classes only apply
on a specific Wicket major version. If some functionality is only available on Wicket 7
you can use this annotation.
[source,java]
----
@ApplicationInitExtension
@ConditionalOnWicket(value=7, range=Range.EQUALS_OR_HIGHER)
public ConditionalConfig implements WicketApplicationInitConfiguration{
@Override
public void init(WebApplication webApplication) {
// configuration option which only apply to Wickets major version 7 or higher
}
}
----
[[extension]]
== Extensions
The following section describes the current extensions and the
required dependencies. An extension is a custom labeling in this project
which is used to auto-configure a specific part of an Wicket application. An extension
may require an external dependency or is using Wickets core features. See section
<<how_does_it_work>> to get a deeper knowledge.
* <<extension-general>>
** DEPLOYMENT-CONFIGURATIONS
*** <<extension-spring-security>>
*** <<extension-wicket-websocket>>
*** <<extension-beanvalidation>>
*** <<extension-core-csrf-prevention>>
*** <<extension-webjars>>
*** <<extension-wicketstuff-htmlcompressor>>
*** <<extension-wicketstuff-annotationscan>>
*** <<extension-core-serializer-deflated>>
*** <<extension-wicketstuff-serializer-fast2>>
*** <<extension-wicketstuff-serializer-kryo2>>
*** <<extension-wicketstuff-restannotations>>
*** <<extension-datastore-httpsession>>
*** <<extension-datastore-cassandra>>
*** <<extension-datastore-hazelcast>>
*** <<extension-datastore-memcached>>
*** <<extension-datastore-redis>>
*** <<extension-wicketstuff-jamon>>
** DEVELOPMENT-CONFIGURATIONS
*** <<extension-general-debugsettings>>
*** <<extension-devutils-diskstorebrowser>>
*** <<extension-devutils-inspector>>
*** <<extension-devutils-statelesschecker>>
*** <<extension-wicketsource>>
*** <<extension-springboot-devtools>>
[[extension-general]]
=== General
Wicket can be started in DEVELOPMENT and DEPLOYMENT mode. You can change the
configuration type over the following property configuration. The given property
is automatically mapped to Wickets ConfigurationType enumeration.
[source,properties]
----
wicket.core.settings.general.configuration-type=development # development/deployment(default)
wicket.web.servlet.filter-mapping-param=/*
wicket.web.servlet.dispatcher-types=request, error, async # request, error, async, include, forward
wicket.web.servlet.init-parameters.*= # map<string,string> - configuration support for additional servlet init parameters
#exception settings
wicket.core.settings.exceptions.thread-dump-strategy=thread_holding_lock
wicket.core.settings.exceptions.error-handling-strategy-during-ajax-requests=redirect_to_error_page
wicket.core.settings.requestcycle.render-strategy=redirect-to-buffer # redirect-to-buffer / one-pass-render / redirect-to-render
wicket.core.settings.requestcycle.buffer-response=true
wicket.core.settings.requestcycle.gather-extended-browser-info=false
wicket.core.settings.requestcycle.response-request-encoding=UTF-8
wicket.core.settings.requestcycle.timeout-size=1
wicket.core.settings.requestcycle.timeout-unit=minutes
wicket.core.settings.requestcycle.exception-retry-count=10
#Markup - Settings
wicket.core.settings.markup.default-markup-encoding=UTF-8 # if null it uses the system default
wicket.core.settings.markup.automatic-linking=false
wicket.core.settings.markup.compress-whitespace=false
wicket.core.settings.markup.strip-comments=false
wicket.core.settings.markup.strip-wicket-tags=true
wicket.core.settings.markup.throw-exception-on-missing-xml-declaration=false
#RequestLogger - Settings
wicket.core.settings.requestlogger.enabled=false
wicket.core.settings.requestlogger.record-session-size
wicket.core.settings.requestlogger.requests-window-size
wicket.core.requestmapper.cryptmapper.enabled=false # URL encryption support
wicket.core.settings.pagestore.enabled=false # enables custom store settings
wicket.core.settings.pagestore.session-size=2
wicket.core.settings.pagestore.session-unit=megabytes
wicket.core.settings.pagestore.asynchronous= # overrides wickets default value only when set
wicket.core.settings.pagestore.asynchronous-queue-capacity= # overrides wickets default value only when set
wicket.core.settings.pagestore.file-store-folder= # overrides wickets default value only when set
wicket.core.settings.pagestore.inmemory-cache-size= # overrides wickets default value only when set
----
If you insert e.g. developmentx you will get a startup error:
[listing]
Field error in object 'wicket' on field 'configurationType': rejected value [developmentx]; codes [typeMismatch.wicket.configurationType
==== Special Annotations
* @WicketHomePage
** A Page marked with this annotation will be configured as the default home page. If multiple WicketHomePage annotation found an exception is thrown.
* @WicketSignInPage
** A Page marked with this annotation will be configured as the default login page. A security provider like Spring Security is needed. If multiple annotations found an exception is thrown.
* @WicketAccessDeniedPage
** A Page marked with this annotation will be configured as the default access denied page.
* @WicketInternalErrorPage
** A Page marked with this annotation will be configured as the default internal error page.
* @WicketExpiredPage
** A Page marked with this annotation will be configured as the default expired page.
[[extension-spring-security]]
=== Spring Security
This starter detects automatically Spring Security if the Spring Boot Starter Security dependency is added.
Internally the WicketBootSecuredWebApplication is used instead of the WicketBootStandardWebApplication class.
[source,xml]
----
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
----
If you wan't to disable the Spring Security configuration for Wicket use the following property.
[source,properties]
----
wicket.external.spring.security=false
----
[[extension-wicket-websocket]]
=== Wicket Native WebSockets
https://ci.apache.org/projects/wicket/guide/7.x/guide/single.html#nativewebsockets[Documentation]
This project provides an auto configuration support for native WebSockets. If the required dependencies
are in the classpath a JavaxWebSocketFilter servlet filter is configured instead of the default WicketFilter.
To simplify the usage of sending WebSocket messages a class named WebSocketMessageBroadcaster is automatically registered as a
spring bean. You can inject the class anywhere with @SpringBean and use the 'send' method to send WebSocket messages.
[source,properties]
----
wicket.external.websocket=true # enables WebSocket support - dependency required (move documentation to seperated section)
----
[source,xml]
----
<dependency>
<groupId>org.apache.wicket</groupId>
<artifactId>wicket-native-websocket-javax</artifactId>
</dependency>
----
[[extension-beanvalidation]]
=== Bean validation
Wicket support for JSR 303 Bean validation.
See Wickets user guide
https://ci.apache.org/projects/wicket/guide/7.x/guide/single.html[Validation with JSR 303]
To enable Wickets bean validation you have to add the *wicket-bean-validation* dependency to your
project. It will automatically configured and can be used in the project.
[source,properties]
----
wicket.external.beanvalidation.enabled=true # enabled by default if bean validation project is present
----
[source,xml]
----
<dependency>
<groupId>org.apache.wicket</groupId>
<artifactId>wicket-bean-validation</artifactId>
</dependency>
----
[[extension-core-csrf-prevention]]
=== Core - Prevention of CSRF Attacks
[source,properties]
----
wicket.core.csrf.enabled=true
wicket.core.csrf.no-origin-action=allow
wicket.core.csrf.conflicting-origin-action=abort
wicket.core.csrf.error-code=400
wicket.core.csrf.error-message=Origin does not correspond to request
wicket.core.csrf.accepted-origins[0]=domain.name.tld # Just the domain name, no protocol
wicket.core.csrf.accepted-origins[1]=other-domain.name.tld # Add more origins by increasing the index
#TODO: There are some configuration options which should be added
----
[[extension-webjars]]
=== Webjars
https://github.com/l0rdn1kk0n/wicket-webjars
[source,properties]
----
wicket.external.webjars.enabled=true
----
[source,xml]
----
<dependency>
<groupId>de.agilecoders.wicket.webjars</groupId>
<artifactId>wicket-webjars</artifactId>
</dependency>
----
[[extension-wicketstuff-annotationscan]]
=== Wicketstuff - annotationscan
Use wicketstuff-annotation to use Java Annotations and class path searching to mount your Wicket pages.
See https://github.com/wicketstuff/core/wiki/Annotation[documentation]
[source,xml]
----
<dependency>
<groupId>org.wicketstuff</groupId>
<artifactId>wicketstuff-annotation</artifactId>
</dependency>
----
[source,properties]
----
wicket.stuff.annotationscan.enabled=true
wicket.stuff.annotationscan.packagename=
----
[[extension-wicketstuff-htmlcompressor]]
=== Wicketstuff - htmlcompressor
See https://github.com/wicketstuff/core/wiki/Htmlcompressor[documentation]
[source,xml]
----
<dependency>
<groupId>org.wicketstuff</groupId>
<artifactId>wicketstuff-htmlcompressor</artifactId>
</dependency>
<dependency>
<groupId>com.yahoo.platform.yui</groupId>
<artifactId>yuicompressor</artifactId>
</dependency>
----
[source,properties]
----
wicket.stuff.htmlcompressor.enabled=true
wicket.stuff.htmlcompressor.features.*=
----
[[extension-core-serializer-deflated]]
=== Core - serializer-deflated
[source,properties]
----
wicket.core.serializer.deflated.enabled=false # has to be explicit enabled. deflates the outputstream, reducing page store size by up to a factor 8 at a price of about 2-20ms
----
[[extension-wicketstuff-serializer-fast2]]
=== Wicketstuff - serializer-fast2
See https://github.com/wicketstuff/core/wiki/FastSerializer2[documentation]
[source,xml]
----
<dependency>
<groupId>org.wicketstuff</groupId>
<artifactId>wicketstuff-serializer-fast2</artifactId>
</dependency>
----
[source,properties]
----
wicket.stuff.serializer.fast2.enabled=true
----
[[extension-wicketstuff-serializer-kryo2]]
=== Wicketstuff - serializer-kryo2
See https://github.com/wicketstuff/core/wiki/Kryo-Serializer[documentation]
[source,xml]
----
<dependency>
<groupId>org.wicketstuff</groupId>
<artifactId>wicketstuff-serializer-kryo2</artifactId>
</dependency>
----
[source,properties]
----
wicket.stuff.serializer.fast2.enabled=true
----
[[extension-wicketstuff-restannotations]]
=== Wicketstuff - restannotations
See https://github.com/wicketstuff/core/tree/master/wicketstuff-restannotations-parent[documentation]
[source,xml]
----
<dependency>
<groupId>org.wicketstuff</groupId>
<artifactId>wicketstuff-restannotations</artifactId>
</dependency>
<dependency>
<groupId>org.wicketstuff</groupId>
<artifactId>wicketstuff-restannotations-json</artifactId>
</dependency>
----
[source,properties]
----
wicket.stuff.restannotations.enabled=true
wicket.stuff.restannotations.packagename= # the package name to scan for project specific annotations
----
[[extension-general-debugsettings]]
=== General - debugsettings
Wicket provides some debug settings which could be
[source,properties]
----
wicket.core.settings.debug.enabled=false
wicket.core.settings.debug.developmentUtilitiesEnabled=true # Enables all of the panels and pages, etc, from wicket-devutils package.
wicket.core.settings.debug.ajaxDebugModeEnabled=true # if true: wicket-ajax-debug.js is added to header
wicket.core.settings.debug.componentUseCheck=true
wicket.core.settings.debug.outputMarkupContainerClassName=false
wicket.core.settings.debug.componentPathAttributeName=
----
[[extension-datastore]]
== Datastore
[[extension-datastore-httpsession]]
=== Datastore HttpSession
[source,properties]
----
wicket.core.datastore.httpsession.enabled=false
wicket.core.datastore.httpsession.pagesNumber=20 # the maximum number of pages the data store can hold
----
[[extension-datastore-cassandra]]
=== Datastore cassandra
See https://github.com/wicketstuff/core/wiki/DataStores[Documentation]
[source,properties]
----
wicket.stuff.datastore.cassandra.enabled=true
wicket.stuff.datastore.cassandra.contact-points= #comma-separated list
wicket.stuff.datastore.cassandra.table-name=pagestore
wicket.stuff.datastore.cassandra.keyspace-name=wicket
wicket.stuff.datastore.cassandra.record-ttl=30
wicket.stuff.datastore.cassandra.record-ttl-unit=minutes
wicket.stuff.datastore.cassandra.session-size=2
wicket.stuff.datastore.cassandra.session-unit=megabytes
----
[source,xml]
----
<dependency>
<groupId>org.wicketstuff</groupId>
<artifactId>wicketstuff-datastore-cassandra</artifactId>
</dependency>
----
[[extension-datastore-hazelcast]]
=== Datastore hazelcast
See https://github.com/wicketstuff/core/wiki/DataStores[Documentation]
[source,properties]
----
wicket.stuff.datastore.hazelcast.enabled=true
wicket.stuff.datastore.hazelcast.session-size=2L
wicket.stuff.datastore.hazelcast.session-unit=megabytes
----
[source,xml]
----
<dependency>
<groupId>org.wicketstuff</groupId>
<artifactId>wicketstuff-datastore-hazelcast</artifactId>
</dependency>
<dependency>
<groupId>com.hazelcast</groupId>
<artifactId>hazelcast</artifactId>
</dependency>
----
[[extension-datastore-memcached]]
=== Datastore memcached
See https://github.com/wicketstuff/core/wiki/DataStores[Documentation]
[source,properties]
----
wicket.stuff.datastore.memcached.enabled=true
wicket.stuff.datastore.memcached.session-size=2L
wicket.stuff.datastore.memcached.session-unit=megabytes
wicket.stuff.datastore.memcached.expiration-time=30
wicket.stuff.datastore.memcached.port=11211
wicket.stuff.datastore.memcached.server-names=
wicket.stuff.datastore.memcached.shutdown-timeout=30
wicket.stuff.datastore.memcached.shutdown-timeout-unit=minutes
----
[source,xml]
----
<dependency>
<groupId>org.wicketstuff</groupId>
<artifactId>wicketstuff-datastore-memcached</artifactId>
</dependency>
----
[[extension-datastore-redis]]
=== Datastore redis
See https://github.com/wicketstuff/core/wiki/DataStores[Documentation]
[source,properties]
----
wicket.stuff.datastore.redis.enabled=true
wicket.stuff.datastore.redis.session-size=2L
wicket.stuff.datastore.redis.session-unit=megabytes
wicket.stuff.datastore.redis.expiration-time=30
wicket.stuff.datastore.redis.port=11211
wicket.stuff.datastore.redis.server-names=
wicket.stuff.datastore.redis.shutdown-timeout=30
wicket.stuff.datastore.redis.shutdown-timeout-unit=minutes
----
[source,xml]
----
<dependency>
<groupId>org.wicketstuff</groupId>
<artifactId>wicketstuff-datastore-redis</artifactId>
</dependency>
----
[[extension-wicketstuff-jamon]]
=== Wicketstuff - JAMon
Used to monitor page requests. Provides a statistic page.
See https://github.com/wicketstuff/core/blob/master/jamon-parent/[Github]
[source,properties]
----
wicket.stuff.monitoring.jamon.enabled=true
wicket.stuff.monitoring.jamon.include-source-name-in-monitor-label=true
wicket.stuff.monitoring.jamon.mountPage=/monitoring/jamon # the url to which the statistic page is mounted
----
[source,xml]
----
<dependency>
<groupId>org.wicketstuff</groupId>
<artifactId>wicketstuff-jamon</artifactId>
</dependency>
----
NOTE: JAMon includes hazelcast to gather statistics. You may need to disable the datastore hazelcast support: <<extension-datastore-hazelcast>>
[[extension-devutils]]
=== Devutils
[source,xml]
----
<dependency>
<groupId>org.apache.wicket</groupId>
<artifactId>wicket-devutils</artifactId>
</dependency>
----
[[extension-devutils-diskstorebrowser]]
==== Devutils - diskstorebrowser
[source,properties]
----
wicket.external.development.devutils.diskstorebrowser.enabled=false
wicket.external.development.devutils.diskstorebrowser.mountPage=devutils/diskstore/browser
----
[[extension-devutils-inspector]]
==== Devutils - inspector
[source,properties]
----
wicket.external.development.devutils.diskstorebrowser.enabled=false
wicket.external.development.devutils.diskstorebrowser.mountPage=devutils/diskstore/browser
----
[[extension-devutils-statelesschecker]]
==== Devutils - statelesschecker
[source,properties]
----
wicket.external.development.devutils.interceptor.enableLiveSessionsPage=false
wicket.external.development.devutils.interceptor.liveSessionPageMount=devutils/inspector/live-session-page
----
[[extension-wicketsource]]
=== Wicket-Source
See https://github.com/jennybrown8/wicket-source/wiki[documentation]
[source,xml]
----
<dependency>
<groupId>com.github.jennybrown8.wicket-source</groupId>
<artifactId>wicket-source</artifactId>
</dependency>
----
[source,properties]
----
wicket.external.development.wicketsource.enabled=false
----
[[extension-springboot-devtools]]
==== Spring Boot - DevTools
See https://spring.io/blog/2015/06/17/devtools-in-spring-boot-1-3[Spring Boot DevTools]
The project tries to improve the development-time experience when working with Spring Boot.
There is a problem with Wickets default and other serializer (fast2, kryo2...). See https://github.com/MarcGiffing/wicket-spring-boot/issues/29[Issue 29]
If the spring-boot-devtools dependency is in the classpath a
link:/wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/configuration/extensions/external/development/springboot/devtools/SpringDevToolsSerializer.java[special Spring serializer]
will be activated.
All other serializer will only be activated if the Spring Boot DevTools dependency is not in the classpath.
[source,xml]
----
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
</dependency>
</dependencies>
----
[[war_deployment]]
== Configure as WAR for deploy on Servlet Container
#115
To run the application as a *war* file in the Servlet Container like Tomcat you have to do the following steps.
* Set the packaging to war in your build system (maven, gradle)
* Mark the *spring-boot-starter-tomcat* dependency as provided
* Use the Spring provided plugins to repackage the project
* Extend from SpringBootServletInitializer
** Here you can optionally set configurations which only apply when deployed as a war in a Servlet Container
** http://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#build-tool-plugins-maven-packaging[maven]
** http://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#build-tool-plugins-gradle-repackage-configuration[gradle]
[source,java]
----
@SpringBootApplication
public class WicketApplication extends SpringBootServletInitializer {
//Can be used while developing
public static void main(String[] args) throws Exception {
new SpringApplicationBuilder()
.sources(WicketApplication.class)
.run(args);
}
//Executed when deployed as a WAR in a Servlet container.
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
builder.properties( WebSocketWicketWebInitializerAutoConfiguration.REGISTER_SERVER_ENDPOINT_ENABLED + "=false" );
return super.configure( builder );
}
}
----
If you already extend from a Wicket specific class you can create a separated class which extends from SpringBootServletInitializer (https://github.com/MarcGiffing/wicket-spring-boot/issues/115#issuecomment-311712298).
================================================
FILE: pom.xml
================================================
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.giffing.wicket.spring.boot.starter</groupId>
<artifactId>wicket-spring-boot-starter-parent</artifactId>
<version>4.1.1</version>
<packaging>pom</packaging>
<name>Wicket Spring Boot Starter Parent</name>
<description>
This project (should) makes it easy to create
Wicket projects with a minimum of configuration effort.
Is uses Spring Boot to autoconfigure Wickets core and extension
with an reasonable default value which can be overridden
over property files.
This parent project holds default configuration for the underlying
sub modules
</description>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>3.5.5</version>
<relativePath /> <!-- lookup parent from repository -->
</parent>
<url>https://github.com/MarcGiffing/wicket-spring-boot</url>
<licenses>
<license>
<name>Apache License, Version 2.0</name>
<url>http://www.apache.org/licenses/LICENSE-2.0</url>
</license>
</licenses>
<scm>
<url>https://github.com/MarcGiffing/wicket-spring-boot/</url>
<connection>scm:git:https://github.com/MarcGiffing/wicket-spring-boot.git</connection>
<tag>wicket-spring-boot-starter-parent-3.1.2</tag>
</scm>
<developers>
<developer>
<id>mgiffing</id>
<name>Marc Giffing</name>
<roles>
<role>Project lead</role>
</roles>
</developer>
</developers>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<java.version>17</java.version>
<apache-shiro.version>2.0.5</apache-shiro.version>
<wicket.version>10.6.0</wicket.version>
<wicketstuff.version>10.6.0</wicketstuff.version>
</properties>
<dependencyManagement>
<dependencies>
<!-- internal dependencies -->
<dependency>
<groupId>com.giffing.wicket.spring.boot.starter</groupId>
<artifactId>wicket-spring-boot-context</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>com.giffing.wicket.spring.boot.starter</groupId>
<artifactId>wicket-spring-boot-starter</artifactId>
<version>${project.version}</version>
</dependency>
<!-- Wicket dependencies -->
<dependency>
<groupId>org.apache.wicket</groupId>
<artifactId>wicket-core</artifactId>
<version>${wicket.version}</version>
</dependency>
<dependency>
<groupId>org.apache.wicket</groupId>
<artifactId>wicket-auth-roles</artifactId>
<version>${wicket.version}</version>
</dependency>
<dependency>
<groupId>org.apache.wicket</groupId>
<artifactId>wicket-ioc</artifactId>
<version>${wicket.version}</version>
</dependency>
<dependency>
<groupId>org.apache.wicket</groupId>
<artifactId>wicket-extensions</artifactId>
<version>${wicket.version}</version>
</dependency>
<dependency>
<groupId>org.apache.wicket</groupId>
<artifactId>wicket-request</artifactId>
<version>${wicket.version}</version>
</dependency>
<dependency>
<groupId>org.apache.wicket</groupId>
<artifactId>wicket-spring</artifactId>
<version>${wicket.version}</version>
</dependency>
<dependency>
<groupId>org.apache.wicket</groupId>
<artifactId>wicket-util</artifactId>
<version>${wicket.version}</version>
</dependency>
<!-- Wicketstuff dependencies -->
<dependency>
<groupId>org.wicketstuff</groupId>
<artifactId>wicketstuff-annotation</artifactId>
<version>${wicketstuff.version}</version>
</dependency>
<dependency>
<groupId>org.wicketstuff</groupId>
<artifactId>wicketstuff-htmlcompressor</artifactId>
<version>${wicketstuff.version}</version>
</dependency>
<dependency> <!-- required for the wicketstuff-htmlcompressor -->
<groupId>com.yahoo.platform.yui</groupId>
<artifactId>yuicompressor</artifactId>
<version>2.4.8</version>
</dependency>
<dependency>
<groupId>org.wicketstuff</groupId>
<artifactId>wicketstuff-serializer-kryo2</artifactId>
<version>${wicketstuff.version}</version>
</dependency>
<dependency>
<groupId>org.wicketstuff</groupId>
<artifactId>wicketstuff-serializer-fast2</artifactId>
<version>${wicketstuff.version}</version>
</dependency>
<dependency>
<groupId>org.wicketstuff</groupId>
<artifactId>wicketstuff-restannotations</artifactId>
<version>${wicketstuff.version}</version>
</dependency>
<dependency>
<groupId>org.wicketstuff</groupId>
<artifactId>wicketstuff-restannotations-json</artifactId>
<version>${wicketstuff.version}</version>
</dependency>
<dependency>
<groupId>org.wicketstuff</groupId>
<artifactId>wicketstuff-springreference</artifactId>
<version>${wicketstuff.version}</version>
</dependency>
<dependency>
<groupId>org.wicketstuff.htmlvalidator</groupId>
<artifactId>wicketstuff-htmlvalidator</artifactId>
<version>${wicketstuff.version}</version>
</dependency>
<dependency>
<groupId>org.wicketstuff</groupId>
<artifactId>wicketstuff-jamon</artifactId>
<version>${wicketstuff.version}</version>
</dependency>
<!-- Wicket other dependencies -->
<dependency>
<groupId>org.apache.wicket</groupId>
<artifactId>wicket-bean-validation</artifactId>
<version>${wicket.version}</version>
</dependency>
<dependency>
<groupId>de.agilecoders.wicket.webjars</groupId>
<artifactId>wicket-webjars</artifactId>
<version>4.0.11</version>
</dependency>
<!-- Wicket datastore dependencies -->
<dependency>
<groupId>org.wicketstuff</groupId>
<artifactId>wicketstuff-datastore-common</artifactId>
<version>${wicketstuff.version}</version>
</dependency>
<dependency>
<groupId>org.wicketstuff</groupId>
<artifactId>wicketstuff-datastore-cassandra</artifactId>
<version>${wicketstuff.version}</version>
</dependency>
<dependency>
<groupId>org.wicketstuff</groupId>
<artifactId>wicketstuff-datastore-hazelcast</artifactId>
<version>${wicketstuff.version}</version>
</dependency>
<dependency>
<groupId>org.wicketstuff</groupId>
<artifactId>wicketstuff-datastore-memcached</artifactId>
<version>${wicketstuff.version}</version>
</dependency>
<dependency>
<groupId>org.wicketstuff</groupId>
<artifactId>wicketstuff-datastore-redis</artifactId>
<version>${wicketstuff.version}</version>
</dependency>
<!-- Wicket websockets -->
<dependency>
<groupId>org.apache.wicket</groupId>
<artifactId>wicket-native-websocket-javax</artifactId>
<version>${wicket.version}</version>
</dependency>
<!-- Wicket development dependencies -->
<dependency>
<groupId>org.apache.wicket</groupId>
<artifactId>wicket-devutils</artifactId>
<version>${wicket.version}</version>
</dependency>
<dependency>
<groupId>com.github.jennybrown8.wicket-source</groupId>
<artifactId>wicket-source</artifactId>
<version>9.0.0</version>
</dependency>
<dependency>
<groupId>org.apache.wicket</groupId>
<artifactId>wicket-tester</artifactId>
<version>${wicket.version}</version>
</dependency>
<!-- Security - Apache Shiro -->
<dependency>
<groupId>org.wicketstuff</groupId>
<artifactId>wicketstuff-shiro</artifactId>
<version>${wicketstuff.version}</version>
</dependency>
<dependency>
<groupId>org.apache.shiro</groupId>
<artifactId>shiro-spring-boot-web-starter</artifactId>
<version>${apache-shiro.version}</version>
</dependency>
</dependencies>
</dependencyManagement>
<distributionManagement>
<snapshotRepository>
<id>ossrh</id>
<url>https://s01.oss.sonatype.org/content/repositories/snapshots</url>
</snapshotRepository>
<repository>
<id>ossrh</id>
<url>https://s01.oss.sonatype.org/service/local/staging/deploy/maven2/</url>
</repository>
</distributionManagement>
<profiles>
<profile>
<id>release</id>
<modules>
<module>wicket-spring-boot-context</module>
<module>wicket-spring-boot-starter</module>
<module>wicket-spring-boot-starter-example</module>
</modules>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-gpg-plugin</artifactId>
<version>3.2.8</version>
<executions>
<execution>
<id>sign-artifacts</id>
<phase>verify</phase>
<goals>
<goal>sign</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<version>3.3.1</version>
<executions>
<execution>
<id>attach-sources</id>
<goals>
<goal>jar-no-fork</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
<version>3.11.3</version>
<executions>
<execution>
<id>attach-javadocs</id>
<goals>
<goal>jar</goal>
</goals>
</execution>
</executions>
<configuration>
<source>${java.version}</source>
</configuration>
</plugin>
<plugin>
<groupId>org.sonatype.plugins</groupId>
<artifactId>nexus-staging-maven-plugin</artifactId>
<version>1.7.0</version>
<extensions>true</extensions>
<configuration>
<serverId>ossrh</serverId>
<nexusUrl>https://ossrh-staging-api.central.sonatype.com</nexusUrl>
<autoReleaseAfterClose>true</autoReleaseAfterClose>
</configuration>
</plugin>
</plugins>
</build>
</profile>
<profile>
<id>default</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<modules>
<module>wicket-spring-boot-context</module>
<module>wicket-spring-boot-starter</module>
<module>wicket-spring-boot-starter-example</module>
</modules>
</profile>
</profiles>
<build>
<plugins>
<plugin>
<groupId>org.sonatype.plugins</groupId>
<artifactId>nexus-staging-maven-plugin</artifactId>
<version>1.7.0</version>
<extensions>true</extensions>
<configuration>
<serverId>ossrh</serverId>
<nexusUrl>https://s01.oss.sonatype.org/</nexusUrl>
<autoReleaseAfterClose>true</autoReleaseAfterClose>
</configuration>
</plugin>
</plugins>
</build>
<repositories>
<repository>
<id>apache.snapshots.https</id>
<url>https://repository.apache.org/content/repositories/snapshots</url>
<releases>
<enabled>false</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
<repository>
<id>sonatype</id>
<url>https://s01.oss.sonatype.org/content/repositories/snapshots</url>
<releases>
<enabled>false</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
</project>
================================================
FILE: wicket-spring-boot-context/.gitignore
================================================
/target/
/.settings/
.classpath
.project
================================================
FILE: wicket-spring-boot-context/README.md
================================================
# wicket-spring-boot-context
Advanced Level, a typical spring-boot user does not need this module.
###Description
This module is used to create **custom auto configuration classes**. All necessary code
is decoupled, thus a developer does not depend on the wicket-spring-boot-starter module
itself.
All dependencies in the wicket-spring-boot-context module are scoped as `provided` so the
user of the context module is not forced to use any spring/wicket dependencies.
Each configuration class should be marked with the annotation **@ApplicationInitExtension**
and has to implement `WicketApplicationInitConfiguration`.
The module contains also common exceptions which should be used on e.g. configuration errors.
Here is also the place for common configuration checks which can be used by other projects.
The annotation **@ConditionalOnWicket** can be used to activate a configuration only on a
specific version of `Apache Wicket`.
================================================
FILE: wicket-spring-boot-context/pom.xml
================================================
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.giffing.wicket.spring.boot.starter</groupId>
<artifactId>wicket-spring-boot-starter-parent</artifactId>
<version>4.1.1</version>
</parent>
<artifactId>wicket-spring-boot-context</artifactId>
<name>Context</name>
<description>
Provides several constructs which allow developers to build
custom auto-configuration classes.
</description>
<dependencies>
<dependency>
<groupId>org.apache.wicket</groupId>
<artifactId>wicket-core</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.apache.wicket</groupId>
<artifactId>wicket-auth-roles</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-autoconfigure</artifactId>
<scope>provided</scope>
</dependency>
</dependencies>
</project>
================================================
FILE: wicket-spring-boot-context/src/main/java/com/giffing/wicket/spring/boot/context/condition/ConditionalOnWicket.java
================================================
package com.giffing.wicket.spring.boot.context.condition;
import org.springframework.context.annotation.Conditional;
import java.lang.annotation.*;
/**
* Conditional annotation to pre-check if an extension should be picked for autoconfiguration.
* <p>
* You can define the major Wicket version on which the extension
* should or should not be executed.
*
* @author Marc Giffing
*/
@Target({ElementType.TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Conditional(WicketSettingsCondition.class)
public @interface ConditionalOnWicket {
/**
* @return The major java version to check with the current value
*/
int value();
/**
* @return Defines how the given major version should be checked with the current version
*/
Range range() default Range.EQUALS_OR_HIGHER;
enum Range {
/**
* The Wicket major version equals the
*/
EQUALS,
/**
* The Wicket major version equals or is newer
*/
EQUALS_OR_HIGHER,
/**
* The Wicket major version equals or is lower
*/
EQUALS_OR_LOWER,
}
}
================================================
FILE: wicket-spring-boot-context/src/main/java/com/giffing/wicket/spring/boot/context/condition/WicketSettingsCondition.java
================================================
package com.giffing.wicket.spring.boot.context.condition;
import com.giffing.wicket.spring.boot.context.condition.ConditionalOnWicket.Range;
import org.apache.wicket.settings.FrameworkSettings;
import org.springframework.boot.autoconfigure.condition.ConditionOutcome;
import org.springframework.boot.autoconfigure.condition.SpringBootCondition;
import org.springframework.context.annotation.ConditionContext;
import org.springframework.core.type.AnnotatedTypeMetadata;
import org.springframework.util.StringUtils;
import java.util.Map;
/**
* Retrieves the current major Wicket Version from the classpath and matches it against
* the given conditional value in the {@link ConditionalOnWicket} annotation.
*
* @author Marc Giffing
*/
public class WicketSettingsCondition extends SpringBootCondition {
@Override
public ConditionOutcome getMatchOutcome(ConditionContext context, AnnotatedTypeMetadata metadata) {
String wicketVersion = retrieveWicketVersion();
Map<String, Object> attributes = metadata
.getAnnotationAttributes(ConditionalOnWicket.class.getName());
Range range = (Range) attributes.get("range");
int expectedVersion = (int) attributes.get("value");
String[] splittedWicketVersion = wicketVersion.split("\\.");
int majorWicketVersion = Integer.parseInt(splittedWicketVersion[0]);
return getMatchOutcome(range, majorWicketVersion, expectedVersion);
}
protected ConditionOutcome getMatchOutcome(Range range, int runningVersion,
int expectedVersion) {
boolean match = matches(range, expectedVersion, runningVersion);
return new ConditionOutcome(match, getMessage(match, range, runningVersion, expectedVersion));
}
private boolean matches(Range range, int expectedVersion, int runningVersion) {
return switch (range) {
case EQUALS -> runningVersion == expectedVersion;
case EQUALS_OR_LOWER -> runningVersion <= expectedVersion;
case EQUALS_OR_HIGHER -> runningVersion >= expectedVersion;
};
}
private String getMessage(boolean matches, Range range, int runningVersion,
int expectedVersion) {
if (matches) {
return "Wicket version matches current: " + runningVersion + " " + range + " expected: " + expectedVersion;
} else {
return "Wicket version does not match current: " + runningVersion + " " + range + " expected: " + expectedVersion;
}
}
private String retrieveWicketVersion() {
String implVersion = null;
var pkg = FrameworkSettings.class.getPackage();
if (pkg != null) {
implVersion = pkg.getImplementationVersion();
}
return StringUtils.hasLength(implVersion) ? implVersion : "0";
}
}
================================================
FILE: wicket-spring-boot-context/src/main/java/com/giffing/wicket/spring/boot/context/exceptions/WicketSpringBootException.java
================================================
package com.giffing.wicket.spring.boot.context.exceptions;
/**
* General extension from which all exception should extend
*
* @author Marc Giffing
*/
public class WicketSpringBootException extends RuntimeException {
public WicketSpringBootException() {
super();
}
public WicketSpringBootException(String message,
Throwable cause,
boolean enableSuppression,
boolean writableStackTrace) {
super(message, cause, enableSuppression, writableStackTrace);
}
public WicketSpringBootException(String message, Throwable cause) {
super(message, cause);
}
public WicketSpringBootException(String message) {
super(message);
}
public WicketSpringBootException(Throwable cause) {
super(cause);
}
}
================================================
FILE: wicket-spring-boot-context/src/main/java/com/giffing/wicket/spring/boot/context/exceptions/extensions/ExtensionMisconfigurationException.java
================================================
package com.giffing.wicket.spring.boot.context.exceptions.extensions;
import com.giffing.wicket.spring.boot.context.exceptions.WicketSpringBootException;
/**
* This exception should be thrown if a extension misconfiguration is detected.
* <p>
* It can e.g. thrown if you detect an extension which configures the same aspect
* as two serializers
*
* @author Marc Giffing
*/
public class ExtensionMisconfigurationException extends WicketSpringBootException {
public ExtensionMisconfigurationException(String message) {
super(message);
}
}
================================================
FILE: wicket-spring-boot-context/src/main/java/com/giffing/wicket/spring/boot/context/extensions/ApplicationInitExtension.java
================================================
package com.giffing.wicket.spring.boot.context.extensions;
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Inherited;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;
/**
* To be independent of Springs annotation this annotation was introduced
* which is a replacement for the {@link Component} annotation.
* <p>
* In the future, you may introduce different configuration options.
*
* @author Marc Giffing
*/
@Configuration
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@Order(ApplicationInitExtension.DEFAULT_PRECEDENCE)
public @interface ApplicationInitExtension {
int HIGHEST_PRECEDENCE = Integer.MIN_VALUE;
int DEFAULT_PRECEDENCE = Integer.MAX_VALUE / 2;
int LOWEST_PRECEDENCE = Integer.MAX_VALUE;
String value() default "";
}
================================================
FILE: wicket-spring-boot-context/src/main/java/com/giffing/wicket/spring/boot/context/extensions/WicketApplicationInitConfiguration.java
================================================
package com.giffing.wicket.spring.boot.context.extensions;
import org.apache.wicket.protocol.http.WebApplication;
/**
* To provide custom modification of the init Method of Wickets {@link WebApplication}
* class. An extension class should implement this interface. All classes implementing
* this interface are injected in Wickets starter WicketBootWebApplication class as a list and on
* each implementation the init method is called with the current {@link WebApplication}.
* <p>
* Every Spring Bean regardless to the package location which implements this interface
* will be considered as an extension. This means that you can write your own extension
* in a different project. You only have to ensure that the class will picked up by Springs
* component scan (or other bean configuration possibilities.
*
* @author Marc Giffing
*/
public interface WicketApplicationInitConfiguration {
/**
* With the given {@link WebApplication} the
* {@link WicketApplicationInitConfiguration}s can modify/extend the init()
* method of the {@link WebApplication}.
*
* @param webApplication the current {@link WebApplication}
*/
void init(WebApplication webApplication);
}
================================================
FILE: wicket-spring-boot-context/src/main/java/com/giffing/wicket/spring/boot/context/extensions/boot/actuator/WicketAutoConfig.java
================================================
package com.giffing.wicket.spring.boot.context.extensions.boot.actuator;
import java.io.Serializable;
import java.util.Collections;
import java.util.LinkedHashMap;
import java.util.Map;
import lombok.Getter;
import org.springframework.util.Assert;
@Getter
public class WicketAutoConfig implements Serializable {
private final String key;
private final Map<String, Object> details;
private WicketAutoConfig(Builder builder) {
Assert.notNull(builder, "Builder must not be null");
this.key = builder.configurationClass != null ? builder.configurationClass.getSimpleName() : null;
this.details = Collections.unmodifiableMap(builder.details);
}
public static class Builder {
private final Class<?> configurationClass;
private Map<String, Object> details;
public Builder() {
this.configurationClass = null;
this.details = new LinkedHashMap<>();
}
public Builder(Class<?> configurationClass) {
Assert.notNull(configurationClass, "ConfigurationClass must not be null");
this.configurationClass = configurationClass;
this.details = new LinkedHashMap<>();
}
public Builder(Class<?> configurationClass, Map<String, ?> details) {
Assert.notNull(configurationClass, "ConfigurationClass must not be null");
Assert.notNull(details, "Details must not be null");
this.configurationClass = configurationClass;
this.details = new LinkedHashMap<>(details);
}
public Builder withDetail(String key, Object value) {
Assert.notNull(key, "Key must not be null");
this.details.put(key, value);
return this;
}
public WicketAutoConfig build() {
return new WicketAutoConfig(this);
}
}
}
================================================
FILE: wicket-spring-boot-context/src/main/java/com/giffing/wicket/spring/boot/context/extensions/boot/actuator/WicketEndpointRepository.java
================================================
package com.giffing.wicket.spring.boot.context.extensions.boot.actuator;
import java.util.List;
/**
* This repository can be used to collect Wicket configuration information which can (e.g.) be displayed in
* a Spring Boot Actuator Wicket endpoint.
*
* @author Marc Giffing
*/
public interface WicketEndpointRepository {
void add(WicketAutoConfig autoconfig);
List<WicketAutoConfig> getConfigs();
}
================================================
FILE: wicket-spring-boot-context/src/main/java/com/giffing/wicket/spring/boot/context/extensions/types/DurationUnit.java
================================================
package com.giffing.wicket.spring.boot.context.extensions.types;
public enum DurationUnit {
MILLISECONDS,
SECONDS,
MINUTES,
HOURS,
DAYS,
}
================================================
FILE: wicket-spring-boot-context/src/main/java/com/giffing/wicket/spring/boot/context/extensions/types/SessionUnit.java
================================================
package com.giffing.wicket.spring.boot.context.extensions.types;
public enum SessionUnit {
BYTES,
KILOBYTES,
MEGABYTES,
TERABYTES
}
================================================
FILE: wicket-spring-boot-context/src/main/java/com/giffing/wicket/spring/boot/context/extensions/types/TypeParser.java
================================================
package com.giffing.wicket.spring.boot.context.extensions.types;
import lombok.AccessLevel;
import lombok.NoArgsConstructor;
import org.apache.wicket.util.lang.Bytes;
import com.giffing.wicket.spring.boot.context.exceptions.WicketSpringBootException;
import java.time.Duration;
@NoArgsConstructor(access = AccessLevel.PRIVATE)
public class TypeParser {
public static Bytes parse(Long size, SessionUnit sessionUnit){
return switch (sessionUnit) {
case BYTES -> Bytes.bytes(size);
case KILOBYTES -> Bytes.kilobytes(size);
case MEGABYTES -> Bytes.megabytes(size);
case TERABYTES -> Bytes.terabytes(size);
};
}
public static Duration parse(Long time, DurationUnit durationUnit){
return switch (durationUnit) {
case DAYS -> Duration.ofDays(time);
case HOURS -> Duration.ofHours(time);
case MILLISECONDS -> Duration.ofMillis(time);
case MINUTES -> Duration.ofMinutes(time);
case SECONDS -> Duration.ofSeconds(time);
};
}
}
================================================
FILE: wicket-spring-boot-context/src/main/java/com/giffing/wicket/spring/boot/context/scan/WicketAccessDeniedPage.java
================================================
package com.giffing.wicket.spring.boot.context.scan;
import java.lang.annotation.ElementType;
import java.lang.annotation.Inherited;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import org.apache.wicket.Page;
import org.apache.wicket.settings.ApplicationSettings;
/**
* This annotation can be used to mark a {@link Page} which will automatically configured
* as the access denied page in the {@link ApplicationSettings}.
*
* @author Marc Giffing
*/
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Inherited
public @interface WicketAccessDeniedPage {
}
================================================
FILE: wicket-spring-boot-context/src/main/java/com/giffing/wicket/spring/boot/context/scan/WicketExpiredPage.java
================================================
package com.giffing.wicket.spring.boot.context.scan;
import java.lang.annotation.ElementType;
import java.lang.annotation.Inherited;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import org.apache.wicket.Page;
import org.apache.wicket.settings.ApplicationSettings;
/**
* This annotation can be used to mark a {@link Page} which will automatically configured
* as the page expired error page in the {@link ApplicationSettings}.
*
* @author Marc Giffing
*/
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Inherited
public @interface WicketExpiredPage {
}
================================================
FILE: wicket-spring-boot-context/src/main/java/com/giffing/wicket/spring/boot/context/scan/WicketHomePage.java
================================================
package com.giffing.wicket.spring.boot.context.scan;
import java.lang.annotation.ElementType;
import java.lang.annotation.Inherited;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import org.apache.wicket.Page;
import org.apache.wicket.protocol.http.WebApplication;
/**
* Should be used to mark the home page which should automatically configures in the {@link WebApplication}.
* Only one {@link Page} should be marked with this annotation.
*
* @author Marc Giffing
*/
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Inherited
public @interface WicketHomePage {
}
================================================
FILE: wicket-spring-boot-context/src/main/java/com/giffing/wicket/spring/boot/context/scan/WicketInternalErrorPage.java
================================================
package com.giffing.wicket.spring.boot.context.scan;
import java.lang.annotation.ElementType;
import java.lang.annotation.Inherited;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import org.apache.wicket.Page;
import org.apache.wicket.settings.ApplicationSettings;
/**
* This annotation can be used to mark a {@link Page} which will automatically configured
* as the internal error page in the {@link ApplicationSettings}.
*
* @author Marc Giffing
*/
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Inherited
public @interface WicketInternalErrorPage {
}
================================================
FILE: wicket-spring-boot-context/src/main/java/com/giffing/wicket/spring/boot/context/scan/WicketSignInPage.java
================================================
package com.giffing.wicket.spring.boot.context.scan;
import java.lang.annotation.ElementType;
import java.lang.annotation.Inherited;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import org.apache.wicket.Page;
import org.apache.wicket.protocol.http.WebApplication;
/**
* Should be used to mark the sign-in page which should be automatically configured in the {@link WebApplication} class.
* Only one {@link Page} should be marked with this annotation.
*
* @author Marc Giffing
*/
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Inherited
public @interface WicketSignInPage {
}
================================================
FILE: wicket-spring-boot-context/src/main/java/com/giffing/wicket/spring/boot/context/security/AuthenticatedWebSessionConfig.java
================================================
package com.giffing.wicket.spring.boot.context.security;
import org.apache.wicket.authroles.authentication.AbstractAuthenticatedWebSession;
import org.apache.wicket.authroles.authentication.AuthenticatedWebApplication;
/**
* Enables the dynamic configuration of the {@link AbstractAuthenticatedWebSession} for the
* {@link AuthenticatedWebApplication}. E.g. if spring security is present it provides a default WebSession
* configuration.
* <p>
* Security providers should provide different implementations.
*
* @author Marc Giffing
*/
public interface AuthenticatedWebSessionConfig {
Class<? extends AbstractAuthenticatedWebSession> getAuthenticatedWebSessionClass();
}
================================================
FILE: wicket-spring-boot-starter/.gitignore
================================================
/target/
/.settings/
/.classpath
.project
/.apt_generated/
.factorypath
================================================
FILE: wicket-spring-boot-starter/pom.xml
================================================
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.giffing.wicket.spring.boot.starter</groupId>
<artifactId>wicket-spring-boot-starter-parent</artifactId>
<version>4.1.1</version>
<relativePath>..</relativePath>
</parent>
<artifactId>wicket-spring-boot-starter</artifactId>
<name>Wicket Spring Boot Starter</name>
<description>
Enables and configures Apache Wicket from within a Spring Boot
Application. Used **only** in combination with Spring Boot.
</description>
<dependencies>
<!-- Internal -->
<dependency>
<groupId>com.giffing.wicket.spring.boot.starter</groupId>
<artifactId>wicket-spring-boot-context</artifactId>
</dependency>
<!-- Spring -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-autoconfigure</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-actuator</artifactId>
<scope>provided</scope>
</dependency>
<!-- Wicket -->
<dependency>
<groupId>org.apache.wicket</groupId>
<artifactId>wicket-core</artifactId>
</dependency>
<dependency>
<groupId>org.apache.wicket</groupId>
<artifactId>wicket-auth-roles</artifactId>
</dependency>
<dependency>
<groupId>org.apache.wicket</groupId>
<artifactId>wicket-ioc</artifactId>
</dependency>
<dependency>
<groupId>org.apache.wicket</groupId>
<artifactId>wicket-spring</artifactId>
</dependency>
<!-- The following modules are *not* linked. They are used from the starters
conditional configuration (if a module exists, then some comfiguration is
applied). -->
<!-- Wicketstuff -->
<dependency>
<groupId>org.wicketstuff</groupId>
<artifactId>wicketstuff-annotation</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.wicketstuff</groupId>
<artifactId>wicketstuff-htmlcompressor</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.wicketstuff</groupId>
<artifactId>wicketstuff-serializer-kryo2</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.wicketstuff</groupId>
<artifactId>wicketstuff-serializer-fast2</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.apache.wicket</groupId>
<artifactId>wicket-bean-validation</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.wicketstuff</groupId>
<artifactId>wicketstuff-restannotations</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.wicketstuff</groupId>
<artifactId>wicketstuff-springreference</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.wicketstuff</groupId>
<artifactId>wicketstuff-shiro</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.apache.shiro</groupId>
<artifactId>shiro-spring-boot-web-starter</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.wicketstuff</groupId>
<artifactId>wicketstuff-jamon</artifactId>
<scope>provided</scope>
</dependency>
<!-- Wicket Deployment -->
<dependency>
<groupId>de.agilecoders.wicket.webjars</groupId>
<artifactId>wicket-webjars</artifactId>
<scope>provided</scope>
</dependency>
<!-- Wicket Datastore -->
<dependency>
<groupId>org.wicketstuff</groupId>
<artifactId>wicketstuff-datastore-cassandra</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.wicketstuff</groupId>
<artifactId>wicketstuff-datastore-hazelcast</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.wicketstuff</groupId>
<artifactId>wicketstuff-datastore-memcached</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.wicketstuff</groupId>
<artifactId>wicketstuff-datastore-redis</artifactId>
<scope>provided</scope>
</dependency>
<!-- Wicket Websockets -->
<dependency>
<groupId>org.apache.wicket</groupId>
<artifactId>wicket-native-websocket-javax</artifactId>
<scope>provided</scope>
</dependency>
<!-- Wicket / Spring Development -->
<dependency>
<groupId>com.github.jennybrown8.wicket-source</groupId>
<artifactId>wicket-source</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.apache.wicket</groupId>
<artifactId>wicket-devutils</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
</dependencies>
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
</resource>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**</include>
</includes>
<excludes>
<exclude>**/*.java</exclude>
</excludes>
</resource>
</resources>
</build>
</project>
================================================
FILE: wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/WicketAutoConfiguration.java
================================================
package com.giffing.wicket.spring.boot.starter;
import com.giffing.wicket.spring.boot.starter.app.classscanner.ClassCandidateScannerConfiguration;
import com.giffing.wicket.spring.boot.starter.app.verifier.WicketDependencyVersionChecker;
import com.giffing.wicket.spring.boot.starter.configuration.CustomAnnotationBeanNameGenerator;
import com.giffing.wicket.spring.boot.starter.configuration.extensions.WicketExtensionLocation;
import com.giffing.wicket.spring.boot.starter.configuration.extensions.core.settings.general.GeneralSettingsProperties;
import com.giffing.wicket.spring.boot.starter.web.WicketWebInitializer;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;
/**
* The main starter configuration class which will be called by spring.
* The class is configured in META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
*
* @author Marc Giffing
*/
@Configuration
@Import({
WicketDependencyVersionChecker.class,
ClassCandidateScannerConfiguration.class,
WicketBootWebApplicationAutoConfiguration.class,
WicketWebInitializer.class
})
@EnableConfigurationProperties({GeneralSettingsProperties.class})
@ComponentScan(basePackageClasses = WicketExtensionLocation.class, nameGenerator = CustomAnnotationBeanNameGenerator.class)
public class WicketAutoConfiguration {
}
================================================
FILE: wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/WicketBootWebApplicationAutoConfiguration.java
================================================
package com.giffing.wicket.spring.boot.starter;
import com.giffing.wicket.spring.boot.starter.app.WicketBootSecuredWebApplication;
import com.giffing.wicket.spring.boot.starter.app.WicketBootStandardWebApplication;
import com.giffing.wicket.spring.boot.starter.app.WicketBootWebApplication;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* Configures the standard {@link WicketBootWebApplication} configuration
* without security options.
* <p>
* The {@link WicketBootStandardWebApplication} will only be activated if there
* is no other {@link WicketBootWebApplication} present and if there is not
* {@link WicketBootSecuredWebApplication} present.
*
* @author Marc Giffing
*/
@Configuration
@ConditionalOnMissingBean({WicketBootSecuredWebApplication.class, WicketBootWebApplication.class})
public class WicketBootWebApplicationAutoConfiguration {
@Bean
public WicketBootStandardWebApplication wicketBootWebApplication() {
return new WicketBootStandardWebApplication();
}
}
================================================
FILE: wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/app/WicketBootSecuredWebApplication.java
================================================
package com.giffing.wicket.spring.boot.starter.app;
import java.util.ArrayList;
import java.util.List;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.wicket.Page;
import org.apache.wicket.RuntimeConfigurationType;
import org.apache.wicket.authroles.authentication.AbstractAuthenticatedWebSession;
import org.apache.wicket.authroles.authentication.AuthenticatedWebApplication;
import org.apache.wicket.markup.html.WebPage;
import org.apache.wicket.spring.injection.annot.SpringBean;
import org.apache.wicket.spring.injection.annot.SpringComponentInjector;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import com.giffing.wicket.spring.boot.context.extensions.WicketApplicationInitConfiguration;
import com.giffing.wicket.spring.boot.context.extensions.boot.actuator.WicketAutoConfig;
import com.giffing.wicket.spring.boot.context.extensions.boot.actuator.WicketEndpointRepository;
import com.giffing.wicket.spring.boot.context.scan.WicketHomePage;
import com.giffing.wicket.spring.boot.context.scan.WicketSignInPage;
import com.giffing.wicket.spring.boot.context.security.AuthenticatedWebSessionConfig;
import com.giffing.wicket.spring.boot.starter.app.classscanner.candidates.WicketClassCandidate;
import com.giffing.wicket.spring.boot.starter.app.classscanner.candidates.WicketClassCandidatesHolder;
import com.giffing.wicket.spring.boot.starter.configuration.extensions.core.settings.general.GeneralSettingsProperties;
/**
* Default Wicket Application which should be subclassed by framework clients to
* enable autoconfiguration with help of Spring Boot.
*
* It automatically configures the {@link SpringComponentInjector} to
* enable injection of Spring components via the {@link SpringBean} annotation.
*
* Beside Springs injection support it also automatically enables security support.
* You also have to add a security provider like Spring Security (@link SpringSecurityConfig)
* or Apache shiro.
*
* To initialize the application in an decoupled way a list of {@link WicketApplicationInitConfiguration}
* is injected as a list in this class. Each configuration item will be called in the init method.
*
* @author Marc Giffing
*
*/
@RequiredArgsConstructor
@Slf4j
public class WicketBootSecuredWebApplication extends AuthenticatedWebApplication implements WicketBootWebApplication {
@Autowired
@Getter
private ApplicationContext applicationContext;
@Autowired
@Getter
private GeneralSettingsProperties generalSettingsProperties;
/**
* Injects all active extension which matches the predefined conditions. May be empty
* if no extension matches the given preconditions.
*/
@Autowired
@Getter
private List<WicketApplicationInitConfiguration> configurations = new ArrayList<>();
@Autowired
private WicketClassCandidatesHolder classCandidates;
@Autowired
private WicketEndpointRepository wicketEndpointRepository;
@Override
protected void init() {
super.init();
getComponentInstantiationListeners().add(new SpringComponentInjector(this, applicationContext));
WicketAutoConfig.Builder builder = new WicketAutoConfig.Builder(this.getClass());
wicketEndpointRepository.add(builder
.withDetail("signInPages", classCandidates.getSignInPageCandidates())
.withDetail("homePages", classCandidates.getHomePageCandidates())
.build());
for (WicketApplicationInitConfiguration configuration : configurations) {
log.info("init-config: {}", configuration.getClass().getName());
configuration.init(this);
}
}
@Override
public RuntimeConfigurationType getConfigurationType() {
return generalSettingsProperties.getConfigurationType();
}
@Override
protected Class<? extends AbstractAuthenticatedWebSession> getWebSessionClass() {
return applicationContext.getBean(AuthenticatedWebSessionConfig.class).getAuthenticatedWebSessionClass();
}
@SuppressWarnings("unchecked")
@Override
protected Class<? extends WebPage> getSignInPageClass() {
if(classCandidates.getSignInPageCandidates().isEmpty()){
throw new IllegalStateException("Couldn't find sign in page - please annotate the sign in page with @" + WicketSignInPage.class.getName());
}
if(classCandidates.getSignInPageCandidates().size() > 1 ){
String message = "Multiple sign in pages found - please annotate exactly one class with @" + WicketSignInPage.class.getName();
message += "\n";
for (WicketClassCandidate<WebPage> classCandidate : classCandidates.getSignInPageCandidates()) {
message += "\t" + classCandidate.getCandidate() + "\n";
}
throw new IllegalStateException(message);
}
return classCandidates.getSignInPageCandidates().iterator().next().getCandidate();
}
@SuppressWarnings("unchecked")
@Override
public Class<? extends Page> getHomePage() {
if(classCandidates.getHomePageCandidates().isEmpty()){
throw new IllegalStateException("Couldn't find home page - please annotate the home page with @" + WicketHomePage.class.getName());
}
if(classCandidates.getHomePageCandidates().size() > 1 ){
String message = "Multiple home pages found - please annotate exactly one class with @" + WicketHomePage.class.getName();
message += "\n";
for(WicketClassCandidate<Page> classCandidate : classCandidates.getHomePageCandidates()) {
message += "\t" + classCandidate.getCandidate() + "\n";
}
throw new IllegalStateException(message);
}
return classCandidates.getHomePageCandidates().iterator().next().getCandidate();
}
}
================================================
FILE: wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/app/WicketBootStandardWebApplication.java
================================================
package com.giffing.wicket.spring.boot.starter.app;
import java.util.ArrayList;
import java.util.List;
import lombok.Getter;
import lombok.extern.slf4j.Slf4j;
import org.apache.wicket.Page;
import org.apache.wicket.RuntimeConfigurationType;
import org.apache.wicket.protocol.http.WebApplication;
import org.apache.wicket.spring.injection.annot.SpringBean;
import org.apache.wicket.spring.injection.annot.SpringComponentInjector;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.Lazy;
import com.giffing.wicket.spring.boot.context.extensions.WicketApplicationInitConfiguration;
import com.giffing.wicket.spring.boot.context.extensions.boot.actuator.WicketAutoConfig;
import com.giffing.wicket.spring.boot.context.extensions.boot.actuator.WicketEndpointRepository;
import com.giffing.wicket.spring.boot.context.scan.WicketHomePage;
import com.giffing.wicket.spring.boot.starter.app.classscanner.candidates.WicketClassCandidate;
import com.giffing.wicket.spring.boot.starter.app.classscanner.candidates.WicketClassCandidatesHolder;
import com.giffing.wicket.spring.boot.starter.configuration.extensions.core.settings.general.GeneralSettingsProperties;
/**
* Default Wicket Application which should be subclassed by framework clients to
* enable autoconfiguration with help of Spring Boot.
*
* It automatically configures the {@link SpringComponentInjector} to
* enable injection of Spring components via the {@link SpringBean} annotation.
*
* To initialize the application in an decoupled way a list of {@link WicketApplicationInitConfiguration}
* is injected as a list in this class. Each configuration item will be called in the init method.
*
* @author Marc Giffing
*
*/
@Lazy
@Slf4j
public class WicketBootStandardWebApplication extends WebApplication implements WicketBootWebApplication {
@Autowired
@Getter
private ApplicationContext applicationContext;
@Autowired
@Getter
private GeneralSettingsProperties generalSettingsProperties;
/**
* Injects all active extension which matches the predefined conditions. May be empty
* if no extension matches the given preconditions.
*/
@Autowired(required = false)
@Getter
private List<WicketApplicationInitConfiguration> configurations = new ArrayList<>();
@Autowired
@Getter
private WicketClassCandidatesHolder classCandidates;
@Autowired
private WicketEndpointRepository wicketEndpointRepository;
@Override
protected void init() {
super.init();
getComponentInstantiationListeners().add(new SpringComponentInjector(this, applicationContext));
WicketAutoConfig.Builder builder = new WicketAutoConfig.Builder(this.getClass());
wicketEndpointRepository.add(builder
.withDetail("signInPages", classCandidates.getSignInPageCandidates())
.withDetail("homePages", classCandidates.getHomePageCandidates())
.build());
for (WicketApplicationInitConfiguration configuration : configurations) {
log.info("init-config: {}", configuration.getClass().getName());
configuration.init(this);
}
}
@Override
public RuntimeConfigurationType getConfigurationType() {
return generalSettingsProperties.getConfigurationType();
}
@SuppressWarnings("unchecked")
@Override
public Class<? extends Page> getHomePage() {
if(classCandidates.getHomePageCandidates().isEmpty()){
throw new IllegalStateException("Couldn't find home page - please annotate the home page with @" + WicketHomePage.class.getName());
}
if(classCandidates.getHomePageCandidates().size() > 1 ){
StringBuilder message = new StringBuilder("Multiple home pages found - please annotate exactly one class with @" + WicketHomePage.class.getName());
message.append("\n");
for(var classCandidate : classCandidates.getHomePageCandidates()) {
message.append("\t").append(classCandidate.getCandidate()).append("\n");
}
throw new IllegalStateException(message.toString());
}
return classCandidates.getHomePageCandidates().iterator().next().getCandidate();
}
}
================================================
FILE: wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/app/WicketBootWebApplication.java
================================================
package com.giffing.wicket.spring.boot.starter.app;
import org.apache.wicket.protocol.http.WebApplication;
import com.giffing.wicket.spring.boot.starter.web.WicketWebInitializer;
/**
* All Wicket Spring Boot Starter {@link WebApplication} classes should
* implement this interface to access the current configures
* {@link WebApplication} bean within spring.
* <p>
* Look at {@link WicketWebInitializer} to see the dynamical retrieval of the
* bean name with use of this interface.
*
* @author Marc Giffing
*/
public interface WicketBootWebApplication {
}
================================================
FILE: wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/app/classscanner/ClassCandidateScanner.java
================================================
package com.giffing.wicket.spring.boot.starter.app.classscanner;
import com.giffing.wicket.spring.boot.context.scan.*;
import com.giffing.wicket.spring.boot.starter.app.classscanner.candidates.WicketClassCandidate;
import com.giffing.wicket.spring.boot.starter.app.classscanner.candidates.WicketClassCandidatesHolder;
import lombok.RequiredArgsConstructor;
import org.apache.wicket.Page;
import org.apache.wicket.markup.html.WebPage;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.boot.autoconfigure.AutoConfigurationPackages;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.ClassPathScanningCandidateComponentProvider;
import org.springframework.core.env.Environment;
import org.springframework.core.io.ResourceLoader;
import org.springframework.core.type.filter.AnnotationTypeFilter;
import org.springframework.util.ClassUtils;
import org.springframework.util.StringUtils;
import java.util.Collection;
import java.util.Collections;
/**
* The candidate class scanner is used to find class with special annotations.
*
* @author Marc Giffing
*/
@RequiredArgsConstructor
public class ClassCandidateScanner {
private final Environment environment;
private final ResourceLoader resourceLoader;
private final BeanFactory beanFactory;
private final ClassLoader classLoader;
private final WicketClassCandidatesHolder classCandidates;
public void postConstruct() {
var scanner = new ClassPathScanningCandidateComponentProvider(false);
scanner.setEnvironment(this.environment);
scanner.setResourceLoader(this.resourceLoader);
scanner.addIncludeFilter(new AnnotationTypeFilter(SpringBootApplication.class));
scanner.addIncludeFilter(new AnnotationTypeFilter(WicketHomePage.class));
scanner.addIncludeFilter(new AnnotationTypeFilter(WicketSignInPage.class));
scanner.addIncludeFilter(new AnnotationTypeFilter(WicketAccessDeniedPage.class));
scanner.addIncludeFilter(new AnnotationTypeFilter(WicketExpiredPage.class));
scanner.addIncludeFilter(new AnnotationTypeFilter(WicketInternalErrorPage.class));
for (var basePackage : getMappingBasePackages(beanFactory)) {
if (StringUtils.hasText(basePackage)) {
classCandidates.getBasePackages().add(basePackage);
var beanDefinitions = scanner.findCandidateComponents(basePackage);
for (var beanDefinition : beanDefinitions) {
Class<?> beanClass;
try {
beanClass = ClassUtils.forName(beanDefinition.getBeanClassName(), classLoader);
} catch (ClassNotFoundException e) {
throw new IllegalStateException(e);
}
if (beanClass.isAnnotationPresent(WicketHomePage.class)) {
classCandidates.getHomePageCandidates()
.add(new WicketClassCandidate<>((Class<Page>) beanClass));
}
if (beanClass.isAnnotationPresent(WicketSignInPage.class)) {
classCandidates.getSignInPageCandidates()
.add(new WicketClassCandidate<>((Class<WebPage>) beanClass));
}
if (beanClass.isAnnotationPresent(WicketAccessDeniedPage.class)) {
classCandidates.getAccessDeniedPageCandidates()
.add(new WicketClassCandidate<>((Class<Page>) beanClass));
}
if (beanClass.isAnnotationPresent(WicketExpiredPage.class)) {
classCandidates.getExpiredPageCandidates()
.add(new WicketClassCandidate<>((Class<Page>) beanClass));
}
if (beanClass.isAnnotationPresent(WicketInternalErrorPage.class)) {
classCandidates.getInternalErrorPageCandidates()
.add(new WicketClassCandidate<>((Class<Page>) beanClass));
}
if (beanClass.isAnnotationPresent(SpringBootApplication.class)) {
classCandidates.setSpringBootMainClass(beanClass);
}
}
}
}
}
private static Collection<String> getMappingBasePackages(BeanFactory beanFactory) {
try {
return AutoConfigurationPackages.get(beanFactory);
} catch (IllegalStateException ex) {
// no auto-configuration package registered yet
return Collections.emptyList();
}
}
}
================================================
FILE: wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/app/classscanner/ClassCandidateScannerConfiguration.java
================================================
package com.giffing.wicket.spring.boot.starter.app.classscanner;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.env.Environment;
import org.springframework.core.io.ResourceLoader;
import com.giffing.wicket.spring.boot.starter.app.classscanner.candidates.WicketClassCandidatesHolder;
@Configuration
@RequiredArgsConstructor
public class ClassCandidateScannerConfiguration {
private final Environment environment;
private final ResourceLoader resourceLoader;
private final BeanFactory beanFactory;
@Bean
public WicketClassCandidatesHolder pageCandidates() {
var result = new WicketClassCandidatesHolder();
// TODO Why is the ClassCandidateScanner initialized?
new ClassCandidateScanner(environment,
resourceLoader,
beanFactory,
getClass().getClassLoader(),
result)
.postConstruct();
return result;
}
}
================================================
FILE: wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/app/classscanner/candidates/WicketClassCandidate.java
================================================
package com.giffing.wicket.spring.boot.starter.app.classscanner.candidates;
import java.lang.ref.WeakReference;
/**
* @param <T> candidate class type
* @author Marc Giffing
*/
public class WicketClassCandidate<T> {
private WeakReference<Class<T>> candidate;
public WicketClassCandidate(Class<T> candidate) {
this.candidate = new WeakReference<>(candidate);
}
public Class<T> getCandidate() {
return candidate.get();
}
}
================================================
FILE: wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/app/classscanner/candidates/WicketClassCandidatesHolder.java
================================================
package com.giffing.wicket.spring.boot.starter.app.classscanner.candidates;
import java.util.HashSet;
import java.util.Set;
import lombok.Getter;
import lombok.Setter;
import org.apache.wicket.Page;
import org.apache.wicket.markup.html.WebPage;
/**
* Holds class candidates which should be configured in Wicket.
* It holds e.g. home page classes which should be configured in Wicket.
*
* @author Marc Giffing
*
*/
@Getter
@Setter
public class WicketClassCandidatesHolder {
private Set<String> basePackages = new HashSet<>();
private Class<?> springBootMainClass = null;
private Set<WicketClassCandidate<Page>> homePageCandidates = new HashSet<>();
private Set<WicketClassCandidate<WebPage>> signInPageCandidates = new HashSet<>();
private Set<WicketClassCandidate<Page>> accessDeniedPageCandidates = new HashSet<>();
private Set<WicketClassCandidate<Page>> expiredPageCandidates = new HashSet<>();
private Set<WicketClassCandidate<Page>> internalErrorPageCandidates = new HashSet<>();
}
================================================
FILE: wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/app/verifier/WicketDependencyMismatchDetectedException.java
================================================
package com.giffing.wicket.spring.boot.starter.app.verifier;
import com.giffing.wicket.spring.boot.starter.app.verifier.WicketDependencyVersionChecker.MavenDependency;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
import java.util.List;
/**
* Should be thrown if the version of wicket dependencies doesn't match the core dependency version
*
* @author Marc Giffing
*/
@Getter
@RequiredArgsConstructor
public class WicketDependencyMismatchDetectedException extends RuntimeException {
private final String wicketCoreVersion;
private final List<MavenDependency> dependencies;
}
================================================
FILE: wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/app/verifier/WicketDependencyVersionChecker.java
================================================
package com.giffing.wicket.spring.boot.starter.app.verifier;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
import java.util.Properties;
import java.util.concurrent.atomic.AtomicBoolean;
import jakarta.annotation.PostConstruct;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.ResourceLoaderAware;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.Resource;
import org.springframework.core.io.ResourceLoader;
import org.springframework.core.io.support.ResourcePatternResolver;
import org.springframework.core.io.support.ResourcePatternUtils;
@Configuration
@ConditionalOnProperty(prefix = WicketDependencyVersionCheckerProperties.PROPERTY_PREFIX, value = "enabled", matchIfMissing = true)
@EnableConfigurationProperties({WicketDependencyVersionCheckerProperties.class})
@Slf4j
public class WicketDependencyVersionChecker implements ResourceLoaderAware {
private static final String DEFAULT_RESOURCE_PATTERN = "/META-INF/maven/**/pom.properties";
private static final String WICKETSTUFF_GROUPID = "org.wicketstuff";
private static final String WICKET_JQUERYUI_GROUPID = "com.googlecode.wicket-jquery-ui";
private static final String WICKET_CORE_GROUPID = "org.apache.wicket";
private ResourcePatternResolver resourcePatternResolver;
private final WicketDependencyVersionCheckerProperties props;
@Autowired
public WicketDependencyVersionChecker(WicketDependencyVersionCheckerProperties props) {
this.props = props;
}
@Override
public void setResourceLoader(ResourceLoader resourceLoader) {
this.resourcePatternResolver = ResourcePatternUtils.getResourcePatternResolver(resourceLoader);
}
@PostConstruct
public void detectWicketDependencyVersionMismatch() {
var wicketMavenDependencies = collectWicketMavenDependencies();
List<MavenDependency> mismatchVersionDependencies = new ArrayList<>();
var versionMismatchFound = new AtomicBoolean(false);
Optional<String> wicketCoreVersionOpt = findWicketCoreVersion(wicketMavenDependencies);
wicketCoreVersionOpt.ifPresent(wicketCoreVersion -> {
for (var mavenDependency : wicketMavenDependencies) {
if (mavenDependency.groupId.equals(WICKET_CORE_GROUPID)
&& !mavenDependency.version.equals(wicketCoreVersion)) {
log.error("########## INVALID WICKET VERSION DETECTED - CORE: {} - DEPENDENCY: {}",
wicketCoreVersion, mavenDependency);
versionMismatchFound.set(true);
mismatchVersionDependencies.add(mavenDependency);
} else if (mavenDependency.groupId.equals(WICKETSTUFF_GROUPID) || mavenDependency.groupId.equals(WICKET_JQUERYUI_GROUPID)) {
var majorWicketCoreVersion = wicketCoreVersion.substring(0, wicketCoreVersion.indexOf('.'));
var majorMavenDependencyVersion = mavenDependency.version.substring(0, mavenDependency.version.indexOf('.'));
if (!majorWicketCoreVersion.equals(majorMavenDependencyVersion)) {
log.error("########## INVALID {} MAJOR VERSION DETECTED - WICKET: {} - DEPENDENCY: {}",
mavenDependency.groupId, majorWicketCoreVersion, majorMavenDependencyVersion);
versionMismatchFound.set(true);
mismatchVersionDependencies.add(mavenDependency);
}
}
}
});
if (versionMismatchFound.get() && props.isThrowExceptionOnDependencyVersionMismatch()) {
throw new WicketDependencyMismatchDetectedException(wicketCoreVersionOpt.orElse("unknown"), mismatchVersionDependencies);
}
}
private Optional<String> findWicketCoreVersion(List<MavenDependency> wicketMavenDependencies) {
for (var wicketMavenDependency : wicketMavenDependencies) {
if (wicketMavenDependency.groupId.equals(WICKET_CORE_GROUPID) && wicketMavenDependency.artifactId.equals("wicket-core")) {
return Optional.of(wicketMavenDependency.version);
}
}
return Optional.empty();
}
private List<MavenDependency> collectWicketMavenDependencies() {
var packageSearchPath = ResourcePatternResolver.CLASSPATH_ALL_URL_PREFIX + DEFAULT_RESOURCE_PATTERN;
try {
var resources = this.resourcePatternResolver.getResources(packageSearchPath);
return collectWicketMavenDependencies(resources);
} catch (IOException e) {
// do not throw checked exception in @PostConstruct method to provide better JavaEE compatibility
throw new IllegalStateException(e);
}
}
private List<MavenDependency> collectWicketMavenDependencies(Resource[] resources) throws IOException {
List<MavenDependency> wicketMavenDependencies = new ArrayList<>();
for (var resource : resources) {
if (resource.isReadable()
&& resource.getURL().getPath().contains("wicket")) {
var props = new Properties();
props.load(resource.getInputStream());
var groupId = (String) props.get("groupId");
var artifactId = (String) props.get("artifactId");
var version = (String) props.get("version");
wicketMavenDependencies.add(new MavenDependency(groupId, artifactId, version));
}
}
return wicketMavenDependencies;
}
@RequiredArgsConstructor
public static class MavenDependency {
public final String groupId;
public final String artifactId;
public final String version;
@Override
public String toString() {
return groupId + ":" + artifactId + ":" + version;
}
}
}
================================================
FILE: wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/app/verifier/WicketDependencyVersionCheckerFailureAnalyzer.java
================================================
package com.giffing.wicket.spring.boot.starter.app.verifier;
import org.springframework.boot.diagnostics.AbstractFailureAnalyzer;
import org.springframework.boot.diagnostics.FailureAnalysis;
import com.giffing.wicket.spring.boot.starter.app.verifier.WicketDependencyVersionChecker.MavenDependency;
public class WicketDependencyVersionCheckerFailureAnalyzer extends AbstractFailureAnalyzer<WicketDependencyMismatchDetectedException> {
@Override
protected FailureAnalysis analyze(Throwable rootFailure, WicketDependencyMismatchDetectedException cause) {
var descriptionMessage = new StringBuilder("One or more Wicket dependencies (jars) doesn't match the wicket-core dependency.\n\r"
+ "Wicket Core Version: %s%s".formatted(cause.getWicketCoreVersion(), System.lineSeparator()));
for (MavenDependency dependency : cause.getDependencies()) {
descriptionMessage.append("\t").append(dependency).append(System.lineSeparator());
}
String actionMessage = """
Please check the Wicket versions configured in your dependency management system (Maven, Gradle, ...)
You can disable this check via the property:
\twicket.verifier.dependencies.enabled=false.
You can prevent throwing the exception but still log the detected problems via the property:
\twicket.verifier.dependencies.throw-exception-on-dependency-version-mismatch=false""";
return new FailureAnalysis(descriptionMessage.toString(), actionMessage, cause);
}
}
================================================
FILE: wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/app/verifier/WicketDependencyVersionCheckerProperties.java
================================================
package com.giffing.wicket.spring.boot.starter.app.verifier;
import lombok.Getter;
import lombok.Setter;
import org.springframework.boot.context.properties.ConfigurationProperties;
@ConfigurationProperties(prefix = WicketDependencyVersionCheckerProperties.PROPERTY_PREFIX)
@Getter
@Setter
public class WicketDependencyVersionCheckerProperties {
public static final String PROPERTY_PREFIX = "wicket.verifier.dependencies";
private boolean enabled = true;
private boolean throwExceptionOnDependencyVersionMismatch = true;
}
================================================
FILE: wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/configuration/CustomAnnotationBeanNameGenerator.java
================================================
package com.giffing.wicket.spring.boot.starter.configuration;
import org.springframework.beans.factory.config.BeanDefinition;
import org.springframework.beans.factory.support.BeanDefinitionRegistry;
import org.springframework.context.annotation.AnnotationBeanNameGenerator;
import org.springframework.util.StringUtils;
/**
* To prevent spring bean naming clashes with user defined beans we will
* prefix each bean name with wicketextension and capitalize the from spring
* generated bean name.
*
* @author Marc Giffing
*/
public class CustomAnnotationBeanNameGenerator extends AnnotationBeanNameGenerator {
@Override
public String generateBeanName(BeanDefinition definition, BeanDefinitionRegistry registry) {
return "wicketextension" + StringUtils.capitalize(super.generateBeanName(definition, registry));
}
}
================================================
FILE: wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/configuration/extensions/WicketExtensionLocation.java
================================================
package com.giffing.wicket.spring.boot.starter.configuration.extensions;
/**
* Marker interface to locate the Wicket Extensions.
* This class is used for Springs component scanning.
*
* @author Marc Giffing
*/
public interface WicketExtensionLocation {
}
================================================
FILE: wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/configuration/extensions/core/csrf/CsrfAttacksPreventionConfig.java
================================================
package com.giffing.wicket.spring.boot.starter.configuration.extensions.core.csrf;
import com.giffing.wicket.spring.boot.context.extensions.ApplicationInitExtension;
import com.giffing.wicket.spring.boot.context.extensions.WicketApplicationInitConfiguration;
import com.giffing.wicket.spring.boot.context.extensions.boot.actuator.WicketAutoConfig;
import com.giffing.wicket.spring.boot.context.extensions.boot.actuator.WicketEndpointRepository;
import lombok.RequiredArgsConstructor;
import org.apache.wicket.protocol.http.FetchMetadataResourceIsolationPolicy;
import org.apache.wicket.protocol.http.OriginResourceIsolationPolicy;
import org.apache.wicket.protocol.http.ResourceIsolationRequestCycleListener;
import org.apache.wicket.protocol.http.WebApplication;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
/**
* Enables CSRF protection if the following condition matches.
* <p>
* 1. The {@link ResourceIsolationRequestCycleListener} class is in the classpath.
* <p>
* 2. The property {@link CsrfAttacksPreventionProperties#PROPERTY_PREFIX}.enabled has to be true (default = true)
* <p>
* The protection should be enabled by default cause the {@link ResourceIsolationRequestCycleListener} is located
* in Wickets core project.
*
* @author Marc Giffing
*/
@ApplicationInitExtension
@ConditionalOnProperty(prefix = CsrfAttacksPreventionProperties.PROPERTY_PREFIX, value = "enabled", matchIfMissing = true)
@ConditionalOnClass(value = org.apache.wicket.protocol.http.ResourceIsolationRequestCycleListener.class)
@EnableConfigurationProperties({CsrfAttacksPreventionProperties.class})
@RequiredArgsConstructor
public class CsrfAttacksPreventionConfig implements WicketApplicationInitConfiguration {
private final CsrfAttacksPreventionProperties props;
private final WicketEndpointRepository wicketEndpointRepository;
@Override
public void init(WebApplication webApplication) {
var originResourceIsolationPolicy = new OriginResourceIsolationPolicy();
props.getAcceptedOrigins().forEach(originResourceIsolationPolicy::addAcceptedOrigin);
var listener = new ResourceIsolationRequestCycleListener(
new FetchMetadataResourceIsolationPolicy(),
originResourceIsolationPolicy);
listener.setUnknownOutcomeAction(props.getUnknownOutcomeAction());
listener.setDisallowedOutcomeAction(props.getDisallowedOutcomeAction());
listener.setErrorCode(props.getErrorCode());
listener.setErrorMessage(props.getErrorMessage());
webApplication.getRequestCycleListeners().add(listener);
wicketEndpointRepository.add(new WicketAutoConfig.Builder(this.getClass())
.withDetail("properties", props)
.build());
}
}
================================================
FILE: wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/configuration/extensions/core/csrf/CsrfAttacksPreventionProperties.java
================================================
package com.giffing.wicket.spring.boot.starter.configuration.extensions.core.csrf;
import java.util.ArrayList;
import java.util.List;
import lombok.Getter;
import lombok.Setter;
import org.apache.wicket.protocol.http.ResourceIsolationRequestCycleListener.CsrfAction;
import org.springframework.boot.context.properties.ConfigurationProperties;
@ConfigurationProperties(prefix = CsrfAttacksPreventionProperties.PROPERTY_PREFIX)
@Getter
@Setter
public class CsrfAttacksPreventionProperties {
public static final String PROPERTY_PREFIX = "wicket.core.csrf";
/**
* Action to perform when a request is disallowed by a resource isolation policy.
* Default is {@link CsrfAction#ABORT}.
*/
private CsrfAction disallowedOutcomeAction = CsrfAction.ABORT;
/**
* Action to perform when none of the resource isolation policies can come to an outcome.
* Default is {@link CsrfAction#ABORT}.
*/
private CsrfAction unknownOutcomeAction = CsrfAction.ABORT;
/**
* The error code to report when the action to take for a CSRF request is
* {@link CsrfAction#ABORT}. Default {@code 400 BAD REQUEST}.
*/
private int errorCode = jakarta.servlet.http.HttpServletResponse.SC_BAD_REQUEST;
/**
* The error message to report when the action to take for a CSRF request is {@code ERROR}.
* Default {@code "Origin does not correspond to request"}.
*/
private String errorMessage = "Origin does not correspond to request";
/**
* A white list of accepted origins (host names/domain names) presented as
* <domainname>.<TLD>. The domain part can contain subdomains.
*/
private List<String> acceptedOrigins = new ArrayList<>();
/**
* Enables Wickets CSRF protection
*/
private boolean enabled = true;
}
================================================
FILE: wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/configuration/extensions/core/datastore/DataStoreHttpSessionConfig.java
================================================
package com.giffing.wicket.spring.boot.starter.configuration.extensions.core.datastore;
import com.giffing.wicket.spring.boot.context.extensions.ApplicationInitExtension;
import com.giffing.wicket.spring.boot.context.extensions.WicketApplicationInitConfiguration;
import com.giffing.wicket.spring.boot.context.extensions.boot.actuator.WicketAutoConfig;
import com.giffing.wicket.spring.boot.context.extensions.boot.actuator.WicketEndpointRepository;
import lombok.RequiredArgsConstructor;
import org.apache.wicket.DefaultPageManagerProvider;
import org.apache.wicket.pageStore.IPageStore;
import org.apache.wicket.protocol.http.WebApplication;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.wicketstuff.shiro.wicket.page.store.SessionPageStore;
@ApplicationInitExtension
@ConditionalOnProperty(prefix = DataStoreHttpSessionProperties.PROPERTY_PREFIX, value = "enabled", matchIfMissing = false)
@EnableConfigurationProperties({DataStoreHttpSessionProperties.class})
@RequiredArgsConstructor
public class DataStoreHttpSessionConfig implements WicketApplicationInitConfiguration {
private final DataStoreHttpSessionProperties props;
private final WicketEndpointRepository wicketEndpointRepository;
@Override
public void init(WebApplication webApplication) {
webApplication.setPageManagerProvider(new DefaultPageManagerProvider(webApplication) {
@Override
protected IPageStore newPersistentStore() {
return new SessionPageStore(webApplication.getName(), props.getPagesNumber());
}
});
wicketEndpointRepository.add(new WicketAutoConfig.Builder(this.getClass())
.withDetail("properties", props)
.build());
}
}
================================================
FILE: wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/configuration/extensions/core/datastore/DataStoreHttpSessionProperties.java
================================================
package com.giffing.wicket.spring.boot.starter.configuration.extensions.core.datastore;
import lombok.Getter;
import lombok.Setter;
import org.springframework.boot.context.properties.ConfigurationProperties;
@ConfigurationProperties(prefix = DataStoreHttpSessionProperties.PROPERTY_PREFIX)
@Getter
@Setter
public class DataStoreHttpSessionProperties {
public static final String PROPERTY_PREFIX = "wicket.core.datastore.httpsession";
private boolean enabled = true;
/**
* the maximum number of pages the data store can hold
*/
private int pagesNumber = 20;
}
================================================
FILE: wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/configuration/extensions/core/requestmapper/CryptMapperConfig.java
================================================
package com.giffing.wicket.spring.boot.starter.configuration.extensions.core.requestmapper;
import com.giffing.wicket.spring.boot.context.extensions.ApplicationInitExtension;
import com.giffing.wicket.spring.boot.context.extensions.WicketApplicationInitConfiguration;
import com.giffing.wicket.spring.boot.context.extensions.boot.actuator.WicketAutoConfig;
import com.giffing.wicket.spring.boot.context.extensions.boot.actuator.WicketEndpointRepository;
import lombok.RequiredArgsConstructor;
import org.apache.wicket.core.request.mapper.CryptoMapper;
import org.apache.wicket.protocol.http.WebApplication;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.core.annotation.Order;
@ApplicationInitExtension
@ConditionalOnProperty(prefix = CryptMapperProperties.PROPERTY_PREFIX, value = "enabled", matchIfMissing = false)
@EnableConfigurationProperties({ CryptMapperProperties.class })
@Order(ApplicationInitExtension.DEFAULT_PRECEDENCE + 100)
@RequiredArgsConstructor
public class CryptMapperConfig implements WicketApplicationInitConfiguration {
private final CryptMapperProperties props;
private final WicketEndpointRepository wicketEndpointRepository;
@Override
public void init(WebApplication webApplication) {
webApplication.setRootRequestMapper(new CryptoMapper(webApplication.getRootRequestMapper(), webApplication));
wicketEndpointRepository.add(new WicketAutoConfig.Builder(this.getClass())
.withDetail("properties", props)
.build());
}
}
================================================
FILE: wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/configuration/extensions/core/requestmapper/CryptMapperProperties.java
================================================
package com.giffing.wicket.spring.boot.starter.configuration.extensions.core.requestmapper;
import org.springframework.boot.context.properties.ConfigurationProperties;
@ConfigurationProperties(CryptMapperProperties.PROPERTY_PREFIX)
public class CryptMapperProperties {
public static final String PROPERTY_PREFIX = "wicket.core.requestmapper.cryptmapper";
}
================================================
FILE: wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/configuration/extensions/core/resources/SpringBootMainClassResourceRegistration.java
================================================
package com.giffing.wicket.spring.boot.starter.configuration.extensions.core.resources;
import com.giffing.wicket.spring.boot.context.extensions.ApplicationInitExtension;
import com.giffing.wicket.spring.boot.context.extensions.WicketApplicationInitConfiguration;
import com.giffing.wicket.spring.boot.starter.app.classscanner.candidates.WicketClassCandidatesHolder;
import lombok.RequiredArgsConstructor;
import org.apache.wicket.protocol.http.WebApplication;
import org.apache.wicket.resource.loader.ClassStringResourceLoader;
@ApplicationInitExtension
@RequiredArgsConstructor
public class SpringBootMainClassResourceRegistration implements WicketApplicationInitConfiguration {
private final WicketClassCandidatesHolder classCandidates;
@Override
public void init(WebApplication webApplication) {
if (classCandidates.getSpringBootMainClass() != null) {
webApplication.getResourceSettings().getStringResourceLoaders().add(new ClassStringResourceLoader(classCandidates.getSpringBootMainClass()));
}
}
}
================================================
FILE: wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/configuration/extensions/core/resourcesettings/packageresourceguard/PackageResourceGuardConfig.java
================================================
package com.giffing.wicket.spring.boot.starter.configuration.extensions.core.resourcesettings.packageresourceguard;
import com.giffing.wicket.spring.boot.context.extensions.ApplicationInitExtension;
import com.giffing.wicket.spring.boot.context.extensions.WicketApplicationInitConfiguration;
import com.giffing.wicket.spring.boot.context.extensions.boot.actuator.WicketAutoConfig;
import com.giffing.wicket.spring.boot.context.extensions.boot.actuator.WicketEndpointRepository;
import lombok.RequiredArgsConstructor;
import org.apache.wicket.markup.html.SecurePackageResourceGuard;
import org.apache.wicket.protocol.http.WebApplication;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
@ApplicationInitExtension
@EnableConfigurationProperties({PackageResourceGuardProperties.class})
@RequiredArgsConstructor
public class PackageResourceGuardConfig implements WicketApplicationInitConfiguration {
private final PackageResourceGuardProperties props;
private final WicketEndpointRepository wicketEndpointRepository;
@Override
public void init(WebApplication webApplication) {
var packageResourceGuard = webApplication.getResourceSettings().getPackageResourceGuard();
if (packageResourceGuard instanceof SecurePackageResourceGuard guard) {
for (String pattern : props.getPattern()) {
guard.addPattern(pattern);
}
}
wicketEndpointRepository.add(new WicketAutoConfig.Builder(this.getClass())
.withDetail("properties", props)
.build());
}
}
================================================
FILE: wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/configuration/extensions/core/resourcesettings/packageresourceguard/PackageResourceGuardProperties.java
================================================
package com.giffing.wicket.spring.boot.starter.configuration.extensions.core.resourcesettings.packageresourceguard;
import java.util.ArrayList;
import java.util.List;
import lombok.Getter;
import lombok.Setter;
import org.springframework.boot.context.properties.ConfigurationProperties;
@ConfigurationProperties(PackageResourceGuardProperties.PROPERTY_PREFIX)
@Getter
@Setter
public class PackageResourceGuardProperties {
public static final String PROPERTY_PREFIX = "wicket.core.resourcesettings.packageresourceguard";
private List<String> pattern = new ArrayList<>();
}
================================================
FILE: wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/configuration/extensions/core/serializer/deflated/DeflatedJavaSerializerConfig.java
================================================
package com.giffing.wicket.spring.boot.starter.configuration.extensions.core.serializer.deflated;
import lombok.RequiredArgsConstructor;
import org.apache.wicket.protocol.http.WebApplication;
import org.apache.wicket.serialize.ISerializer;
import org.apache.wicket.serialize.java.DeflatedJavaSerializer;
import org.apache.wicket.serialize.java.JavaSerializer;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import com.giffing.wicket.spring.boot.context.exceptions.extensions.ExtensionMisconfigurationException;
import com.giffing.wicket.spring.boot.context.extensions.ApplicationInitExtension;
import com.giffing.wicket.spring.boot.context.extensions.WicketApplicationInitConfiguration;
import com.giffing.wicket.spring.boot.context.extensions.boot.actuator.WicketAutoConfig;
import com.giffing.wicket.spring.boot.context.extensions.boot.actuator.WicketEndpointRepository;
/**
* Enables the deflated java serializer if the following condition matches.
* <p>
* 1. The property {@link DeflatedJavaSerializerProperties#PROPERTY_PREFIX}.enabled has to be true (default = false)
*
* @author Marc Giffing
*/
@ApplicationInitExtension
@ConditionalOnProperty(prefix = DeflatedJavaSerializerProperties.PROPERTY_PREFIX, value = "enabled", matchIfMissing = false)
@EnableConfigurationProperties({DeflatedJavaSerializerProperties.class})
@RequiredArgsConstructor
public class DeflatedJavaSerializerConfig implements WicketApplicationInitConfiguration {
private final DeflatedJavaSerializerProperties props;
private final WicketEndpointRepository wicketEndpointRepository;
@Override
public void init(WebApplication webApplication) {
var currentSerializer = webApplication.getFrameworkSettings().getSerializer();
if (currentSerializer instanceof JavaSerializer) {
webApplication.getFrameworkSettings().setSerializer(new DeflatedJavaSerializer(webApplication.getApplicationKey()));
} else {
throw new ExtensionMisconfigurationException("DeflatedJavaSerializer: There is already another serializer configured " + currentSerializer);
}
wicketEndpointRepository.add(new WicketAutoConfig.Builder(this.getClass())
.withDetail("properties", props)
.build());
}
}
================================================
FILE: wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/configuration/extensions/core/serializer/deflated/DeflatedJavaSerializerProperties.java
================================================
package com.giffing.wicket.spring.boot.starter.configuration.extensions.core.serializer.deflated;
import lombok.Getter;
import lombok.Setter;
import org.springframework.boot.context.properties.ConfigurationProperties;
@ConfigurationProperties(DeflatedJavaSerializerProperties.PROPERTY_PREFIX)
@Getter
@Setter
public class DeflatedJavaSerializerProperties {
public static final String PROPERTY_PREFIX = "wicket.core.serializer.deflated";
/**
* Toggle debug settings
*/
private boolean enabled = false;
}
================================================
FILE: wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/configuration/extensions/core/settings/application/ApplicationSettingsConfig.java
================================================
package com.giffing.wicket.spring.boot.starter.configuration.extensions.core.settings.application;
import com.giffing.wicket.spring.boot.context.extensions.ApplicationInitExtension;
import com.giffing.wicket.spring.boot.context.extensions.WicketApplicationInitConfiguration;
import com.giffing.wicket.spring.boot.context.extensions.boot.actuator.WicketAutoConfig;
import com.giffing.wicket.spring.boot.context.extensions.boot.actuator.WicketAutoConfig.Builder;
import com.giffing.wicket.spring.boot.context.extensions.boot.actuator.WicketEndpointRepository;
import com.giffing.wicket.spring.boot.context.scan.WicketAccessDeniedPage;
import com.giffing.wicket.spring.boot.context.scan.WicketExpiredPage;
import com.giffing.wicket.spring.boot.context.scan.WicketInternalErrorPage;
import com.giffing.wicket.spring.boot.starter.app.classscanner.candidates.WicketClassCandidate;
import com.giffing.wicket.spring.boot.starter.app.classscanner.candidates.WicketClassCandidatesHolder;
import lombok.RequiredArgsConstructor;
import org.apache.wicket.Page;
import org.apache.wicket.protocol.http.WebApplication;
import org.apache.wicket.settings.ApplicationSettings;
import java.util.ArrayList;
import java.util.List;
@ApplicationInitExtension
@RequiredArgsConstructor
public class ApplicationSettingsConfig implements WicketApplicationInitConfiguration {
private final WicketClassCandidatesHolder holder;
private final WicketEndpointRepository wicketEndpointRepository;
@Override
public void init(WebApplication webApplication) {
var applicationSettings = webApplication.getApplicationSettings();
var builder = new WicketAutoConfig.Builder(this.getClass());
configureExpiredPage(applicationSettings, new ArrayList<>(holder.getExpiredPageCandidates()), builder);
configureAccessDeniedPage(applicationSettings, new ArrayList<>(holder.getAccessDeniedPageCandidates()), builder);
configureInternalErrorPage(applicationSettings, new ArrayList<>(holder.getInternalErrorPageCandidates()), builder);
wicketEndpointRepository.add(builder.build());
}
private void configureInternalErrorPage(ApplicationSettings applicationSettings, List<WicketClassCandidate<Page>> internalErrorPageCandidates, Builder builder) {
Class<Page> candidate = null;
if (!internalErrorPageCandidates.isEmpty()) {
if (internalErrorPageCandidates.size() == 1) {
WicketClassCandidate<Page> internalErrorPage = internalErrorPageCandidates.get(0);
candidate = internalErrorPage.getCandidate();
applicationSettings.setInternalErrorPage(internalErrorPage.getCandidate());
} else {
throwExceptionOnMultipleAnnotations(WicketInternalErrorPage.class, internalErrorPageCandidates);
}
}
builder.withDetail("internalErrorPage", candidate);
}
private void configureAccessDeniedPage(ApplicationSettings applicationSettings, List<WicketClassCandidate<Page>> accessDeniedPageCandidates, Builder builder) {
Class<Page> candidate = null;
if (!accessDeniedPageCandidates.isEmpty()) {
if (accessDeniedPageCandidates.size() == 1) {
WicketClassCandidate<Page> accessDeniedPage = accessDeniedPageCandidates.get(0);
candidate = accessDeniedPage.getCandidate();
applicationSettings.setAccessDeniedPage(accessDeniedPage.getCandidate());
} else {
throwExceptionOnMultipleAnnotations(WicketAccessDeniedPage.class, accessDeniedPageCandidates);
}
}
builder.withDetail("accessDeniedPage", candidate);
}
private void configureExpiredPage(ApplicationSettings applicationSettings, List<WicketClassCandidate<Page>> expiredPageCandidates, Builder builder) {
Class<Page> candidate = null;
if (!expiredPageCandidates.isEmpty()) {
if (expiredPageCandidates.size() == 1) {
WicketClassCandidate<Page> expiredPageCandidate = expiredPageCandidates.get(0);
applicationSettings.setPageExpiredErrorPage(expiredPageCandidate.getCandidate());
candidate = expiredPageCandidate.getCandidate();
builder.withDetail("expiredPage", expiredPageCandidate.getCandidate().getName());
} else {
throwExceptionOnMultipleAnnotations(WicketExpiredPage.class, expiredPageCandidates);
}
}
builder.withDetail("expiredPage", candidate);
}
private void throwExceptionOnMultipleAnnotations(Class<?> pageClass, List<WicketClassCandidate<Page>> expiredPageCandidates) throws IllegalAccessError {
var message = new StringBuilder("Multiple annotation of %s found%n".formatted(pageClass.getName()));
for (WicketClassCandidate<Page> classCandidate : expiredPageCandidates) {
message.append("\t").append(classCandidate.getCandidate()).append("\n");
}
throw new IllegalAccessError(message.toString());
}
}
================================================
FILE: wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/configuration/extensions/core/settings/debug/DebugSettingsConfig.java
================================================
package com.giffing.wicket.spring.boot.starter.configuration.extensions.core.settings.debug;
import com.giffing.wicket.spring.boot.context.extensions.ApplicationInitExtension;
import com.giffing.wicket.spring.boot.context.extensions.WicketApplicationInitConfiguration;
import com.giffing.wicket.spring.boot.context.extensions.boot.actuator.WicketAutoConfig;
import com.giffing.wicket.spring.boot.context.extensions.boot.actuator.WicketEndpointRepository;
import lombok.RequiredArgsConstructor;
import org.apache.wicket.protocol.http.WebApplication;
import org.apache.wicket.settings.DebugSettings;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
/**
* Enables debug settings if the following condition matches.
* <p>
* 1. The property {@link DebugSettingsProperties#PROPERTY_PREFIX}.enabled has to be true (default = false)
*
* @author Marc Giffing
*/
@ApplicationInitExtension
@ConditionalOnProperty(prefix = DebugSettingsProperties.PROPERTY_PREFIX, value = "enabled", matchIfMissing = false)
@EnableConfigurationProperties({DebugSettingsProperties.class})
@RequiredArgsConstructor
public class DebugSettingsConfig implements WicketApplicationInitConfiguration {
private final DebugSettingsProperties properties;
private final WicketEndpointRepository wicketEndpointRepository;
@Override
public void init(WebApplication webApplication) {
if (properties.isEnabled()) {
DebugSettings debugSettings = webApplication.getDebugSettings();
debugSettings.setDevelopmentUtilitiesEnabled(properties.isDevelopmentUtilitiesEnabled());
debugSettings.setAjaxDebugModeEnabled(properties.isAjaxDebugModeEnabled());
debugSettings.setComponentUseCheck(properties.isComponentUseCheck());
debugSettings.setLinePreciseReportingOnAddComponentEnabled(properties.isLinePreciseReportingOnAddComponentEnabled());
debugSettings.setLinePreciseReportingOnNewComponentEnabled(properties.isLinePreciseReportingOnNewComponentEnabled());
debugSettings.setOutputMarkupContainerClassName(properties.isOutputMarkupContainerClassName());
debugSettings.setComponentPathAttributeName(properties.getComponentPathAttributeName());
}
wicketEndpointRepository.add(new WicketAutoConfig.Builder(this.getClass())
.withDetail("properties", properties)
.build());
}
}
================================================
FILE: wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/configuration/extensions/core/settings/debug/DebugSettingsProperties.java
================================================
package com.giffing.wicket.spring.boot.starter.configuration.extensions.core.settings.debug;
import lombok.Getter;
import lombok.Setter;
import org.springframework.boot.context.properties.ConfigurationProperties;
@ConfigurationProperties(DebugSettingsProperties.PROPERTY_PREFIX)
@Getter
@Setter
public class DebugSettingsProperties {
public static final String PROPERTY_PREFIX = "wicket.core.settings.debug";
/**
* Toggle debug settings
*/
private boolean enabled;
private boolean developmentUtilitiesEnabled = true;
private boolean ajaxDebugModeEnabled = true;
private boolean componentUseCheck = true;
private boolean outputMarkupContainerClassName = false;
private String componentPathAttributeName;
private boolean linePreciseReportingOnNewComponentEnabled;
private boolean linePreciseReportingOnAddComponentEnabled;
}
================================================
FILE: wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/configuration/extensions/core/settings/exceptions/ExceptionSettingsConfig.java
================================================
package com.giffing.wicket.spring.boot.starter.configuration.extensions.core.settings.exceptions;
import lombok.RequiredArgsConstructor;
import org.apache.wicket.protocol.http.WebApplication;
import org.apache.wicket.settings.ExceptionSettings;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import com.giffing.wicket.spring.boot.context.extensions.ApplicationInitExtension;
import com.giffing.wicket.spring.boot.context.extensions.WicketApplicationInitConfiguration;
import com.giffing.wicket.spring.boot.context.extensions.boot.actuator.WicketAutoConfig;
import com.giffing.wicket.spring.boot.context.extensions.boot.actuator.WicketEndpointRepository;
/**
* Configuration options for Wickets exception settings. I don't know if someone needs this
* settings and when they don't need my javadoc :-)
*
* @author Marc Giffing
*/
@ApplicationInitExtension
@ConditionalOnProperty(prefix = ExceptionSettingsProperties.PROPERTY_PREFIX, value = "enabled", matchIfMissing = true)
@EnableConfigurationProperties({ExceptionSettingsProperties.class})
@RequiredArgsConstructor
public class ExceptionSettingsConfig implements WicketApplicationInitConfiguration {
private final ExceptionSettingsProperties props;
private final WicketEndpointRepository wicketEndpointRepository;
@Override
public void init(WebApplication webApplication) {
var exceptionSettings = webApplication.getExceptionSettings();
exceptionSettings.setAjaxErrorHandlingStrategy(props.getErrorHandlingStrategyDuringAjaxRequests());
exceptionSettings.setThreadDumpStrategy(props.getThreadDumpStrategy());
wicketEndpointRepository.add(new WicketAutoConfig.Builder(this.getClass())
.withDetail("properties", props)
.build());
}
}
================================================
FILE: wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/configuration/extensions/core/settings/exceptions/ExceptionSettingsProperties.java
================================================
package com.giffing.wicket.spring.boot.starter.configuration.extensions.core.settings.exceptions;
import lombok.Getter;
import lombok.Setter;
import org.apache.wicket.settings.ExceptionSettings.AjaxErrorStrategy;
import org.apache.wicket.settings.ExceptionSettings.ThreadDumpStrategy;
import org.springframework.boot.context.properties.ConfigurationProperties;
@ConfigurationProperties(ExceptionSettingsProperties.PROPERTY_PREFIX)
@Getter
@Setter
public class ExceptionSettingsProperties {
public static final String PROPERTY_PREFIX = "wicket.core.settings.exceptions";
private ThreadDumpStrategy threadDumpStrategy = ThreadDumpStrategy.THREAD_HOLDING_LOCK;
private AjaxErrorStrategy errorHandlingStrategyDuringAjaxRequests = AjaxErrorStrategy.REDIRECT_TO_ERROR_PAGE;
}
================================================
FILE: wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/configuration/extensions/core/settings/general/GeneralSettingsProperties.java
================================================
package com.giffing.wicket.spring.boot.starter.configuration.extensions.core.settings.general;
import lombok.Getter;
import lombok.Setter;
import org.apache.wicket.RuntimeConfigurationType;
import org.springframework.boot.context.properties.ConfigurationProperties;
@ConfigurationProperties(prefix = "wicket.core.settings.general")
@Getter
@Setter
public class GeneralSettingsProperties {
/**
* Defines the configuration startup mode. It uses Wickets
* {@link RuntimeConfigurationType}
*/
private RuntimeConfigurationType configurationType = RuntimeConfigurationType.DEPLOYMENT;
}
================================================
FILE: wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/configuration/extensions/core/settings/markup/MarkupSettingsConfig.java
================================================
package com.giffing.wicket.spring.boot.starter.configuration.extensions.core.settings.markup;
import lombok.RequiredArgsConstructor;
import org.apache.wicket.protocol.http.WebApplication;
import org.apache.wicket.settings.MarkupSettings;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import com.giffing.wicket.spring.boot.context.extensions.ApplicationInitExtension;
import com.giffing.wicket.spring.boot.context.extensions.WicketApplicationInitConfiguration;
import com.giffing.wicket.spring.boot.context.extensions.boot.actuator.WicketAutoConfig;
import com.giffing.wicket.spring.boot.context.extensions.boot.actuator.WicketEndpointRepository;
/**
* Configuration for the markup settings.
*
* @author Marc Giffing
*/
@ApplicationInitExtension
@EnableConfigurationProperties({MarkupSettingsProperties.class})
@RequiredArgsConstructor
public class MarkupSettingsConfig implements WicketApplicationInitConfiguration {
private final MarkupSettingsProperties props;
private final WicketEndpointRepository wicketEndpointRepository;
@Override
public void init(WebApplication webApplication) {
var markupSettings = webApplication.getMarkupSettings();
if (props.getDefaultMarkupEncoding() != null) {
markupSettings.setDefaultMarkupEncoding(props.getDefaultMarkupEncoding());
}
markupSettings.setAutomaticLinking(props.isAutomaticLinking());
markupSettings.setCompressWhitespace(props.isCompressWhitespace());
markupSettings.setStripComments(props.isStripComments());
markupSettings.setStripWicketTags(props.isStripWicketTags());
markupSettings.setThrowExceptionOnMissingXmlDeclaration(props.isThrowExceptionOnMissingXmlDeclaration());
wicketEndpointRepository.add(new WicketAutoConfig.Builder(this.getClass())
.withDetail("properties", props)
.build());
}
}
================================================
FILE: wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/configuration/extensions/core/settings/markup/MarkupSettingsProperties.java
================================================
package com.giffing.wicket.spring.boot.starter.configuration.extensions.core.settings.markup;
import lombok.Getter;
import lombok.Setter;
import org.apache.wicket.markup.MarkupFactory;
import org.springframework.boot.context.properties.ConfigurationProperties;
@ConfigurationProperties(prefix = MarkupSettingsProperties.PROPERTY_PREFIX)
@Getter
@Setter
public class MarkupSettingsProperties {
public static final String PROPERTY_PREFIX = "wicket.core.settings.markup";
/**
* Application default for automatically resolving hrefs
*/
private boolean automaticLinking = false;
/**
* True if multiple tabs/spaces should be compressed to a single space
*/
private boolean compressWhitespace = false;
/**
* Default markup encoding. If null, the OS default will be used
*/
private String defaultMarkupEncoding;
/**
* Factory for creating markup parsers
*/
private MarkupFactory markupFactory;
/**
* if true than throw an exception if the xml declaration is missing from the markup file
*/
private boolean throwExceptionOnMissingXmlDeclaration = false;
/**
* Should HTML comments be stripped during rendering?
*/
private boolean stripComments = false;
/**
* If true, wicket tags ( <wicket: ..>) and wicket:id attributes we be removed from output
*/
private boolean stripWicketTags = true;
}
================================================
FILE: wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/configuration/extensions/core/settings/pagestore/StoreSettingsConfig.java
================================================
package com.giffing.wicket.spring.boot.starter.configuration.extensions.core.settings.pagestore;
import java.io.File;
import lombok.RequiredArgsConstructor;
import org.apache.wicket.protocol.http.WebApplication;
import org.apache.wicket.settings.StoreSettings;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import com.giffing.wicket.spring.boot.context.extensions.ApplicationInitExtension;
import com.giffing.wicket.spring.boot.context.extensions.WicketApplicationInitConfiguration;
import com.giffing.wicket.spring.boot.context.extensions.boot.actuator.WicketAutoConfig;
import com.giffing.wicket.spring.boot.context.extensions.boot.actuator.WicketEndpointRepository;
import com.giffing.wicket.spring.boot.context.extensions.types.TypeParser;
@ApplicationInitExtension
@ConditionalOnProperty(prefix = StoreSettingsProperties.PROPERTY_PREFIX, value = "enabled", matchIfMissing = true)
@EnableConfigurationProperties({StoreSettingsProperties.class})
@RequiredArgsConstructor
public class StoreSettingsConfig implements WicketApplicationInitConfiguration {
private final StoreSettingsProperties props;
private final WicketEndpointRepository wicketEndpointRepository;
@Override
public void init(WebApplication webApplication) {
var storeSettings = webApplication.getStoreSettings();
if (props.getAsynchronous() != null) {
storeSettings.setAsynchronous(props.getAsynchronous());
}
if (props.getAsynchronousQueueCapacity() != null) {
storeSettings.setAsynchronousQueueCapacity(props.getAsynchronousQueueCapacity());
}
if (props.getFileStoreFolder() != null) {
storeSettings.setFileStoreFolder(new File(props.getFileStoreFolder()));
}
storeSettings.setMaxSizePerSession(TypeParser.parse(props.getSessionSize(), props.getSessionUnit()));
wicketEndpointRepository.add(new WicketAutoConfig.Builder(this.getClass())
.withDetail("properties", props)
.build());
}
}
================================================
FILE: wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/configuration/extensions/core/settings/pagestore/StoreSettingsProperties.java
================================================
package com.giffing.wicket.spring.boot.starter.configuration.extensions.core.settings.pagestore;
import lombok.Getter;
import lombok.Setter;
import org.springframework.boot.context.properties.ConfigurationProperties;
import com.giffing.wicket.spring.boot.context.extensions.types.SessionUnit;
@ConfigurationProperties(StoreSettingsProperties.PROPERTY_PREFIX)
@Getter
@Setter
public class StoreSettingsProperties {
public static final String PROPERTY_PREFIX = "wicket.core.settings.pagestore";
/**
* Toggle debug settings
*/
private boolean enabled;
private Long sessionSize = 2L;
private SessionUnit sessionUnit = SessionUnit.MEGABYTES;
private Boolean asynchronous;
private Integer asynchronousQueueCapacity;
private String fileStoreFolder;
}
================================================
FILE: wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/configuration/extensions/core/settings/requestlogger/RequestLoggerSettingsConfig.java
================================================
package com.giffing.wicket.spring.boot.starter.configuration.extensions.core.settings.requestlogger;
import com.giffing.wicket.spring.boot.context.extensions.ApplicationInitExtension;
import com.giffing.wicket.spring.boot.context.extensions.WicketApplicationInitConfiguration;
import com.giffing.wicket.spring.boot.context.extensions.boot.actuator.WicketAutoConfig;
import com.giffing.wicket.spring.boot.context.extensions.boot.actuator.WicketEndpointRepository;
import lombok.RequiredArgsConstructor;
import org.apache.wicket.protocol.http.WebApplication;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
/**
* Configuration options for Wickets exception settings. I don't know if someone needs this
* settings and when they don't need my javadoc :-)
*
* @author Marc Giffing
*/
@ApplicationInitExtension
@ConditionalOnProperty(prefix = RequestLoggerSettingsProperties.PROPERTY_PREFIX, value = "enabled", matchIfMissing = false)
@EnableConfigurationProperties({RequestLoggerSettingsProperties.class})
@RequiredArgsConstructor
public class RequestLoggerSettingsConfig implements WicketApplicationInitConfiguration {
private final RequestLoggerSettingsProperties props;
private final WicketEndpointRepository wicketEndpointRepository;
@Override
public void init(WebApplication webApplication) {
var wicketsRequestLoggerSettings = webApplication.getRequestLoggerSettings();
wicketsRequestLoggerSettings.setRequestLoggerEnabled(props.isEnabled());
wicketsRequestLoggerSettings.setRecordSessionSize(props.isRecordSessionSize());
wicketsRequestLoggerSettings.setRequestsWindowSize(props.getRequestsWindowSize());
wicketEndpointRepository.add(new WicketAutoConfig.Builder(this.getClass())
.withDetail("properties", props)
.build());
}
}
================================================
FILE: wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/configuration/extensions/core/settings/requestlogger/RequestLoggerSettingsProperties.java
================================================
package com.giffing.wicket.spring.boot.starter.configuration.extensions.core.settings.requestlogger;
import lombok.Getter;
import lombok.Setter;
import org.springframework.boot.context.properties.ConfigurationProperties;
@ConfigurationProperties(RequestLoggerSettingsProperties.PROPERTY_PREFIX)
@Getter
@Setter
public class RequestLoggerSettingsProperties {
public static final String PROPERTY_PREFIX = "wicket.core.settings.requestlogger";
private boolean enabled = false;
private boolean recordSessionSize = true;
private int requestsWindowSize = 0;
}
================================================
FILE: wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/configuration/extensions/core/settings/requrestcycle/RequestCycleSettingsConfig.java
================================================
package com.giffing.wicket.spring.boot.starter.configuration.extensions.core.settings.requrestcycle;
import lombok.RequiredArgsConstructor;
import org.apache.wicket.protocol.http.WebApplication;
import org.apache.wicket.settings.RequestCycleSettings;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import com.giffing.wicket.spring.boot.context.extensions.ApplicationInitExtension;
import com.giffing.wicket.spring.boot.context.extensions.WicketApplicationInitConfiguration;
import com.giffing.wicket.spring.boot.context.extensions.boot.actuator.WicketAutoConfig;
import com.giffing.wicket.spring.boot.context.extensions.boot.actuator.WicketEndpointRepository;
import com.giffing.wicket.spring.boot.context.extensions.types.TypeParser;
@ApplicationInitExtension
@ConditionalOnProperty(prefix = RequestCycleSettingsProperties.PROPERTY_PREFIX, value = "enabled", matchIfMissing = true)
@EnableConfigurationProperties({RequestCycleSettingsProperties.class})
@RequiredArgsConstructor
public class RequestCycleSettingsConfig implements WicketApplicationInitConfiguration {
private final RequestCycleSettingsProperties props;
private final WicketEndpointRepository wicketEndpointRepository;
@Override
public void init(WebApplication webApplication) {
var requestCycleSettings = webApplication.getRequestCycleSettings();
requestCycleSettings.setRenderStrategy(props.getRenderStrategy());
requestCycleSettings.setBufferResponse(props.isBufferResponse());
requestCycleSettings.setExceptionRetryCount(props.getExceptionRetryCount());
requestCycleSettings.setGatherExtendedBrowserInfo(props.isGatherExtendedBrowserInfo());
requestCycleSettings.setResponseRequestEncoding(props.getResponseRequestEncoding());
requestCycleSettings.setTimeout(TypeParser.parse(props.getTimeoutSize(), props.getTimeoutUnit()));
wicketEndpointRepository.add(new WicketAutoConfig.Builder(this.getClass())
.withDetail("properties", props)
.build());
}
}
================================================
FILE: wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/configuration/extensions/core/settings/requrestcycle/RequestCycleSettingsProperties.java
================================================
package com.giffing.wicket.spring.boot.starter.configuration.extensions.core.settings.requrestcycle;
import lombok.Getter;
import lombok.Setter;
import org.apache.wicket.settings.RequestCycleSettings.RenderStrategy;
import org.springframework.boot.context.properties.ConfigurationProperties;
import com.giffing.wicket.spring.boot.context.extensions.types.DurationUnit;
@ConfigurationProperties(prefix = RequestCycleSettingsProperties.PROPERTY_PREFIX)
@Getter
@Setter
public class RequestCycleSettingsProperties {
public static final String PROPERTY_PREFIX = "wicket.core.settings.requestcycle";
private RenderStrategy renderStrategy = RenderStrategy.REDIRECT_TO_BUFFER;
private boolean bufferResponse = true;
private boolean gatherExtendedBrowserInfo = false;
private String responseRequestEncoding = "UTF-8";
private Long timeoutSize = 1L;
private DurationUnit timeoutUnit = DurationUnit.MINUTES;
private int exceptionRetryCount = 10;
}
================================================
FILE: wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/configuration/extensions/core/settings/resource/ResourceSettingsConfig.java
================================================
package com.giffing.wicket.spring.boot.starter.configuration.extensions.core.settings.resource;
import com.giffing.wicket.spring.boot.context.extensions.ApplicationInitExtension;
import com.giffing.wicket.spring.boot.context.extensions.WicketApplicationInitConfiguration;
import java.time.Duration;
import lombok.RequiredArgsConstructor;
import org.apache.wicket.protocol.http.WebApplication;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
@ApplicationInitExtension
@ConditionalOnProperty(prefix = ResourceSettingsProperties.PROPERTY_PREFIX, value = "enabled", matchIfMissing = false)
@EnableConfigurationProperties({ResourceSettingsProperties.class})
@RequiredArgsConstructor
public class ResourceSettingsConfig implements WicketApplicationInitConfiguration {
private final ResourceSettingsProperties properties;
@Override
public void init(WebApplication webApplication) {
webApplication.getResourceSettings().setUseMinifiedResources(properties.isUseMinifiedResources());
if (properties.getResourcePollFrequencySeconds() > 0) {
webApplication.getResourceSettings().setResourcePollFrequency(Duration.ofSeconds(properties.getResourcePollFrequencySeconds()));
}
}
}
================================================
FILE: wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/configuration/extensions/core/settings/resource/ResourceSettingsProperties.java
================================================
package com.giffing.wicket.spring.boot.starter.configuration.extensions.core.settings.resource;
import lombok.Getter;
import lombok.Setter;
import org.springframework.boot.context.properties.ConfigurationProperties;
@ConfigurationProperties(ResourceSettingsProperties.PROPERTY_PREFIX)
@Getter
@Setter
public class ResourceSettingsProperties {
public static final String PROPERTY_PREFIX = "wicket.core.settings.resource";
private boolean useMinifiedResources = true;
private int resourcePollFrequencySeconds;
}
================================================
FILE: wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/configuration/extensions/external/beanvalidation/BeanValidationConfig.java
================================================
package com.giffing.wicket.spring.boot.starter.configuration.extensions.external.beanvalidation;
import com.giffing.wicket.spring.boot.context.extensions.ApplicationInitExtension;
import com.giffing.wicket.spring.boot.context.extensions.WicketApplicationInitConfiguration;
import com.giffing.wicket.spring.boot.context.extensions.boot.actuator.WicketAutoConfig;
import com.giffing.wicket.spring.boot.context.extensions.boot.actuator.WicketEndpointRepository;
import lombok.RequiredArgsConstructor;
import org.apache.wicket.bean.validation.BeanValidationConfiguration;
import org.apache.wicket.protocol.http.WebApplication;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.stereotype.Component;
/**
* Enables the bean validation support if the following condition matches
* <p>
* 1. The {@link BeanValidationConfiguration} class is in the classpath. side
* note: Bean validation required an validation implementation like hibernate
* validator.
* <p>
* 2. The property wicket.beanvalidation.enabled has to be true (default = true)
*
* @author Marc Giffing
*/
@ApplicationInitExtension
@Component
@ConditionalOnProperty(prefix = BeanValidationProperties.PROPERTY_PREFIX, value = "enabled", matchIfMissing = true)
@ConditionalOnClass(value = org.apache.wicket.bean.validation.BeanValidationConfiguration.class)
@EnableConfigurationProperties({BeanValidationProperties.class})
@RequiredArgsConstructor
public class BeanValidationConfig implements WicketApplicationInitConfiguration {
private final BeanValidationProperties props;
private final WicketEndpointRepository wicketEndpointRepository;
@Override
public void init(WebApplication webApplication) {
new BeanValidationConfiguration().configure(webApplication);
wicketEndpointRepository.add(new WicketAutoConfig.Builder(this.getClass())
.withDetail("properties", props)
.build());
}
}
================================================
FILE: wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/configuration/extensions/external/beanvalidation/BeanValidationProperties.java
================================================
package com.giffing.wicket.spring.boot.starter.configuration.extensions.external.beanvalidation;
import lombok.Getter;
import lombok.Setter;
import org.springframework.boot.context.properties.ConfigurationProperties;
@ConfigurationProperties(prefix = BeanValidationProperties.PROPERTY_PREFIX)
@Getter
@Setter
public class BeanValidationProperties {
public static final String PROPERTY_PREFIX = "wicket.external.beanvalidation";
/**
* Enables or disables the bean validation
*/
private boolean enabled;
}
================================================
FILE: wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/configuration/extensions/external/development/devutils/diskstorebrowser/DiskStoreBrowserConfig.java
================================================
package com.giffing.wicket.spring.boot.starter.configuration.extensions.external.development.devutils.diskstorebrowser;
import lombok.RequiredArgsConstructor;
import org.apache.wicket.DefaultPageManagerProvider;
import org.apache.wicket.devutils.pagestore.PageStorePage;
import org.apache.wicket.markup.html.pages.BrowserInfoPage;
import org.apache.wicket.pageStore.DiskPageStore;
import org.apache.wicket.pageStore.IPageStore;
import org.apache.wicket.protocol.http.WebApplication;
import org.apache.wicket.settings.StoreSettings;
import org.apache.wicket.util.lang.Bytes;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import com.giffing.wicket.spring.boot.context.extensions.ApplicationInitExtension;
import com.giffing.wicket.spring.boot.context.extensions.WicketApplicationInitConfiguration;
import com.giffing.wicket.spring.boot.context.extensions.boot.actuator.WicketAutoConfig;
import com.giffing.wicket.spring.boot.context.extensions.boot.actuator.WicketEndpointRepository;
import java.io.File;
/**
* Mounts the {@link PageStorePage} if the following condition matches
*
* 1. The {@link PageStorePage} is in the classpath
*
* 2. The disk store browser page is enabled in the property (default=false)
*
* @author Marc Giffing
*
*/
@ApplicationInitExtension
@ConditionalOnProperty(prefix = DiskStoreBrowserProperties.PROPERTY_PREFIX, value = "enabled", matchIfMissing = false)
@ConditionalOnClass(value = PageStorePage.class)
@EnableConfigurationProperties({ DiskStoreBrowserProperties.class })
@RequiredArgsConstructor
public class DiskStoreBrowserConfig implements WicketApplicationInitConfiguration {
private final DiskStoreBrowserProperties properties;
private final WicketEndpointRepository wicketEndpointRepository;
@Override
public void init(WebApplication webApplication) {
webApplication.setPageManagerProvider(new DefaultPageManagerProvider(webApplication) {
@Override
protected IPageStore newPersistentStore() {
var storeSettings = application.getStoreSettings();
var fileStoreFolder = storeSettings.getFileStoreFolder();
var maxSizePerSession = storeSettings.getMaxSizePerSession();
return new DiskPageStore(webApplication.getName(), fileStoreFolder, maxSizePerSession);
}
});
webApplication.mountPage(properties.getMountPage(), BrowserInfoPage.class);
wicketEndpointRepository.add(new WicketAutoConfig.Builder(this.getClass())
.withDetail("properties", properties)
.build());
}
}
================================================
FILE: wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/configuration/extensions/external/development/devutils/diskstorebrowser/DiskStoreBrowserProperties.java
================================================
package com.giffing.wicket.spring.boot.starter.configuration.extensions.external.development.devutils.diskstorebrowser;
import lombok.Getter;
import lombok.Setter;
import org.apache.wicket.devutils.pagestore.PageStorePage;
import org.springframework.boot.context.properties.ConfigurationProperties;
@ConfigurationProperties(prefix = DiskStoreBrowserProperties.PROPERTY_PREFIX)
@Getter
@Setter
public class DiskStoreBrowserProperties {
public static final String PROPERTY_PREFIX = "wicket.external.development.devutils.diskstorebrowser";
/**
* If enabled the {@link PageStorePage} should be mounted test page.
* <p>
* It is required that the deployment configuration is set to DEVELOPMENT.
*/
private boolean enabled;
/**
* The default mount page for the disk store browser.
*/
private String mountPage = "devutils/diskstore/browser";
}
================================================
FILE: wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/configuration/extensions/external/development/devutils/inspector/InspectorConfig.java
================================================
package com.giffing.wicket.spring.boot.starter.configuration.extensions.external.development.devutils.inspector;
import lombok.RequiredArgsConstructor;
import org.apache.wicket.devutils.inspector.LiveSessionsPage;
import org.apache.wicket.protocol.http.WebApplication;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import com.giffing.wicket.spring.boot.context.extensions.ApplicationInitExtension;
import com.giffing.wicket.spring.boot.context.extensions.WicketApplicationInitConfiguration;
import com.giffing.wicket.spring.boot.context.extensions.boot.actuator.WicketAutoConfig;
import com.giffing.wicket.spring.boot.context.extensions.boot.actuator.WicketEndpointRepository;
/**
* Mounts pages from the devutils inspector package. Currently only the
* {@link LiveSessionsPage} is supported and is mounted if the following
* condition matches.
* <p>
* 1. The {@link LiveSessionsPage} is in the classpath.
* <p>
* 2. The property enableLiveSessionsPage is enabled
*
* @author Marc Giffing
*/
@ApplicationInitExtension
@ConditionalOnClass(value = {org.apache.wicket.devutils.inspector.LiveSessionsPage.class,})
@EnableConfigurationProperties({InspectorProperties.class})
@RequiredArgsConstructor
public class InspectorConfig implements WicketApplicationInitConfiguration {
private final InspectorProperties properties;
private final WicketEndpointRepository wicketEndpointRepository;
@Override
public void init(WebApplication webApplication) {
if (properties.isEnableLiveSessionsPage()) {
webApplication.mountPage(properties.getLiveSessionPageMount(), LiveSessionsPage.class);
}
wicketEndpointRepository.add(new WicketAutoConfig.Builder(this.getClass())
.withDetail("properties", properties)
.build());
}
}
================================================
FILE: wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/configuration/extensions/external/development/devutils/inspector/InspectorProperties.java
================================================
package com.giffing.wicket.spring.boot.starter.configuration.extensions.external.development.devutils.inspector;
import lombok.Getter;
import lombok.Setter;
import org.apache.wicket.devutils.inspector.LiveSessionsPage;
import org.springframework.boot.context.properties.ConfigurationProperties;
@ConfigurationProperties(prefix = InspectorProperties.PROPERTY_PREFIX)
@Getter
@Setter
public class InspectorProperties {
public static final String PROPERTY_PREFIX = "wicket.external.development.devutils.interceptor";
/**
* Enables or disabled the mounting of the {@link LiveSessionsPage}.
*/
private boolean enableLiveSessionsPage;
/**
* The relative address on which the {@link LiveSessionsPage} should be mounted
*/
private String liveSessionPageMount = "devutils/inspector/live-session-page";
}
================================================
FILE: wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/configuration/extensions/external/development/devutils/statelesschecker/StatelessCheckerConfig.java
================================================
package com.giffing.wicket.spring.boot.starter.configuration.extensions.external.development.devutils.statelesschecker;
import lombok.RequiredArgsConstructor;
import org.apache.wicket.devutils.stateless.StatelessChecker;
import org.apache.wicket.protocol.http.WebApplication;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import com.giffing.wicket.spring.boot.context.extensions.ApplicationInitExtension;
import com.giffing.wicket.spring.boot.context.extensions.WicketApplicationInitConfiguration;
import com.giffing.wicket.spring.boot.context.extensions.boot.actuator.WicketAutoConfig;
import com.giffing.wicket.spring.boot.context.extensions.boot.actuator.WicketEndpointRepository;
/**
* Enables the states checker from the Wicket devutils. Its only enabled if the
* following condition matches
* <p>
* 1. The {@link StatelessChecker} is present in the classpath
* <p>
* 2. the {@link StatelessCheckerProperties}.statelessCheckerEnabled is set to true
* (default=false)
*
* @author Marc Giffing
*/
@ApplicationInitExtension
@ConditionalOnProperty(prefix = StatelessCheckerProperties.PROPERTY_PREFIX, value = "enabled", matchIfMissing = false)
@ConditionalOnClass(value = org.apache.wicket.devutils.stateless.StatelessChecker.class)
@EnableConfigurationProperties({StatelessCheckerProperties.class})
@RequiredArgsConstructor
public class StatelessCheckerConfig implements WicketApplicationInitConfiguration {
private final StatelessCheckerProperties props;
private final WicketEndpointRepository wicketEndpointRepository;
@Override
public void init(WebApplication webApplication) {
webApplication.getComponentPostOnBeforeRenderListeners().add(new StatelessChecker());
wicketEndpointRepository.add(new WicketAutoConfig.Builder(this.getClass())
.withDetail("properties", props)
.build());
}
}
================================================
FILE: wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/configuration/extensions/external/development/devutils/statelesschecker/StatelessCheckerProperties.java
================================================
package com.giffing.wicket.spring.boot.starter.configuration.extensions.external.development.devutils.statelesschecker;
import lombok.Getter;
import lombok.Setter;
import org.springframework.boot.context.properties.ConfigurationProperties;
@ConfigurationProperties(prefix = StatelessCheckerProperties.PROPERTY_PREFIX)
@Getter
@Setter
public class StatelessCheckerProperties {
public static final String PROPERTY_PREFIX = "wicket.external.development.devutils.statelesschecker";
private boolean enabled = false;
}
================================================
FILE: wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/configuration/extensions/external/development/springboot/devtools/SpringDevToolsProperties.java
================================================
package com.giffing.wicket.spring.boot.starter.configuration.extensions.external.development.springboot.devtools;
import lombok.Getter;
import lombok.Setter;
import org.springframework.boot.context.properties.ConfigurationProperties;
@ConfigurationProperties(prefix = SpringDevToolsProperties.PROPERTY_PREFIX)
@Getter
@Setter
public class SpringDevToolsProperties {
public static final String PROPERTY_PREFIX = "spring.devtools.restart";
private boolean enabled = true;
}
================================================
FILE: wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/configuration/extensions/external/development/springboot/devtools/SpringDevToolsSerializer.java
================================================
package com.giffing.wicket.spring.boot.starter.configuration.extensions.external.development.springboot.devtools;
import org.apache.wicket.serialize.ISerializer;
import org.springframework.core.convert.converter.Converter;
import org.springframework.core.serializer.DefaultDeserializer;
import org.springframework.core.serializer.support.DeserializingConverter;
import org.springframework.core.serializer.support.SerializingConverter;
/**
* A custom serializer is needed to support Spring Boot Devtools. Spring Boot Devtools
* has some limitation with support of serialisation/deserialization support. So we have to
* provide a custom Wicket {@link ISerializer}.
*
* <p>
* <b>20.2.6 Known limitations</b> <br>
* Restart functionality does not work well with objects that are deserialized using a
* standard ObjectInputStream. If you need to deserialize data, you may need to use Spring’s
* ConfigurableObjectInputStream in combination with Thread.currentThread().getContextClassLoader().
* Unfortunately, several third-party libraries deserialize without considering the context classloader.
* If you find such a problem, you will need to request a fix with the original authors.
* </p>
*
* @author Marc Giffing
* @see <a href="https://github.com/spring-projects/spring-boot/issues/3805">Spring Boot Devtools Serializer Issue</a>
*/
public class SpringDevToolsSerializer implements ISerializer {
private final Converter<Object, byte[]> serializer = new SerializingConverter();
private final Converter<byte[], Object> deserializer;
public SpringDevToolsSerializer() {
this.deserializer = new DeserializingConverter(new DefaultDeserializer(Thread.currentThread().getContextClassLoader()));
}
@Override
public byte[] serialize(Object object) {
return serializer.convert(object);
}
@Override
public Object deserialize(byte[] data) {
return deserializer.convert(data);
}
}
================================================
FILE: wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/configuration/extensions/external/development/springboot/devtools/SpringDevtoolsSerializerConfig.java
================================================
package com.giffing.wicket.spring.boot.starter.configuration.extensions.external.development.springboot.devtools;
import com.giffing.wicket.spring.boot.context.extensions.ApplicationInitExtension;
import com.giffing.wicket.spring.boot.context.extensions.WicketApplicationInitConfiguration;
import com.giffing.wicket.spring.boot.context.extensions.boot.actuator.WicketAutoConfig;
import com.giffing.wicket.spring.boot.context.extensions.boot.actuator.WicketEndpointRepository;
import lombok.RequiredArgsConstructor;
import org.apache.wicket.protocol.http.WebApplication;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.boot.devtools.autoconfigure.LocalDevToolsAutoConfiguration;
import org.springframework.boot.devtools.restart.ConditionalOnInitializedRestarter;
/**
* The Wicket serializer does not working with Spring Boot Devtools so we have to provide a custom {@link SpringDevToolsSerializer}.
* It should be active by default if the following conditions matches.
* <p>
* 1. The {@link LocalDevToolsAutoConfiguration} class is in the classpath. This means that the Spring Boot Devtools is available in the classpath.
* <p>
* 2. The property "spring.devtools.restart.enabled" is set to true. (default is true). There is maybe a better option to check
* <p>
* 3. Restarter condition is active {@link ConditionalOnInitializedRestarter}.
*
* @author Marc Giffing
*/
@ApplicationInitExtension
@ConditionalOnProperty(prefix = SpringDevToolsProperties.PROPERTY_PREFIX, value = "enabled", matchIfMissing = true)
@ConditionalOnClass(LocalDevToolsAutoConfiguration.class)
@EnableConfigurationProperties({SpringDevToolsProperties.class})
@ConditionalOnInitializedRestarter
@RequiredArgsConstructor
public class SpringDevtoolsSerializerConfig implements WicketApplicationInitConfiguration {
private final SpringDevToolsProperties props;
private final WicketEndpointRepository wicketEndpointRepository;
@Override
public void init(WebApplication webApplication) {
webApplication.getFrameworkSettings().setSerializer(new SpringDevToolsSerializer());
wicketEndpointRepository.add(new WicketAutoConfig.Builder(this.getClass())
.withDetail("properties", props)
.build());
}
}
================================================
FILE: wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/configuration/extensions/external/development/springboot/devtools/WicketDevToolsPropertyDefaultsPostProcessor.java
================================================
package com.giffing.wicket.spring.boot.starter.configuration.extensions.external.development.springboot.devtools;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.devtools.restart.Restarter;
import org.springframework.boot.env.EnvironmentPostProcessor;
import org.springframework.core.Ordered;
import org.springframework.core.annotation.Order;
import org.springframework.core.env.ConfigurableEnvironment;
import org.springframework.core.env.Environment;
import org.springframework.core.env.MapPropertySource;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
@Order(Ordered.LOWEST_PRECEDENCE)
//TODO add feature request in the Spring Boot project for adding custom development properties
public class WicketDevToolsPropertyDefaultsPostProcessor implements EnvironmentPostProcessor {
private static final Map<String, Object> PROPERTIES;
static {
Map<String, Object> properties = new HashMap<>();
properties.put("wicket.core.settings.general.configuration-type", "development");
properties.put("wicket.core.settings.markup.strip-wicket-tags", "false");
properties.put("wicket.core.settings.debug.component-use-check", "true");
properties.put("wicket.core.settings.debug.development-utilities-enabled", "true");
properties.put("wicket.core.settings.debug.ajax-debug-mode-enabled", "true");
PROPERTIES = Collections.unmodifiableMap(properties);
}
@Override
public void postProcessEnvironment(ConfigurableEnvironment environment, SpringApplication application) {
if (Boolean.TRUE.equals(isWicketDevToolsEnabled(environment)
&& isLocalApplication(environment))
&& canAddProperties(environment)) {
var propertySource = new MapPropertySource("wicketrefresh", PROPERTIES);
environment.getPropertySources().addLast(propertySource);
}
}
private Boolean isWicketDevToolsEnabled(ConfigurableEnvironment environment) {
var devToolsEnabled = Boolean.TRUE;
var devToolsEnabledString = environment.getProperty("wicket." + SpringDevToolsProperties.PROPERTY_PREFIX + ".enabled");
if (devToolsEnabledString != null) {
devToolsEnabled = devToolsEnabledString.equalsIgnoreCase("true");
}
return devToolsEnabled;
}
private boolean isLocalApplication(ConfigurableEnvironment environment) {
return environment.getPropertySources().get("remoteUrl") == null;
}
private boolean canAddProperties(Environment environment) {
return isRestarterInitialized() || isRemoteRestartEnabled(environment);
}
private boolean isRestarterInitialized() {
try {
Restarter restarter = Restarter.getInstance();
return (restarter != null && restarter.getInitialUrls() != null);
} catch (NoClassDefFoundError | Exception ex) {
return false;
}
}
private boolean isRemoteRestartEnabled(Environment environment) {
return environment.containsProperty("spring.devtools.remote.secret");
}
}
================================================
FILE: wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/configuration/extensions/external/development/wicketsource/WicketSourceConfig.java
================================================
package com.giffing.wicket.spring.boot.starter.configuration.extensions.external.development.wicketsource;
import lombok.RequiredArgsConstructor;
import org.apache.wicket.protocol.http.WebApplication;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import com.giffing.wicket.spring.boot.context.extensions.ApplicationInitExtension;
import com.giffing.wicket.spring.boot.context.extensions.WicketApplicationInitConfiguration;
import com.giffing.wicket.spring.boot.context.extensions.boot.actuator.WicketAutoConfig;
import com.giffing.wicket.spring.boot.context.extensions.boot.actuator.WicketEndpointRepository;
import com.github.jennybrown8.wicketsource.WicketSource;
/**
* Enables wicket-source support if the following two condition matches:
* <p>
* 1. The WicketSource is in the classpath.
* <p>
* 2. The property wicket.wicketsource.enabled is true (default = true)
*
* @author Marc Giffing
*/
@ApplicationInitExtension
@ConditionalOnProperty(prefix = WicketSourceProperties.PROPERTY_PREFIX, value = "enabled", matchIfMissing = true)
@ConditionalOnClass(value = com.github.jennybrown8.wicketsource.WicketSource.class)
@EnableConfigurationProperties({WicketSourceProperties.class})
@RequiredArgsConstructor
public class WicketSourceConfig implements WicketApplicationInitConfiguration {
private final WicketSourceProperties props;
private final WicketEndpointRepository wicketEndpointRepository;
@Override
public void init(WebApplication webApplication) {
WicketSource.configure(webApplication);
wicketEndpointRepository.add(new WicketAutoConfig.Builder(this.getClass())
.withDetail("properties", props)
.build());
}
}
================================================
FILE: wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/configuration/extensions/external/development/wicketsource/WicketSourceProperties.java
================================================
package com.giffing.wicket.spring.boot.starter.configuration.extensions.external.development.wicketsource;
import lombok.Getter;
import lombok.Setter;
import org.springframework.boot.context.properties.ConfigurationProperties;
@ConfigurationProperties(prefix = WicketSourceProperties.PROPERTY_PREFIX)
@Getter
@Setter
public class WicketSourceProperties {
public static final String PROPERTY_PREFIX = "wicket.external.development.wicketsource";
private boolean enabled = false;
}
================================================
FILE: wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/configuration/extensions/external/spring/boot/actuator/WicketEndpoint.java
================================================
package com.giffing.wicket.spring.boot.starter.configuration.extensions.external.spring.boot.actuator;
import com.giffing.wicket.spring.boot.context.extensions.boot.actuator.WicketEndpointRepository;
import lombok.RequiredArgsConstructor;
import org.springframework.boot.actuate.endpoint.annotation.Endpoint;
import org.springframework.boot.actuate.endpoint.annotation.ReadOperation;
import org.springframework.boot.context.properties.ConfigurationProperties;
import java.util.HashMap;
import java.util.Map;
@ConfigurationProperties(prefix = "endpoints.wicket")
@Endpoint(id = "wicket")
@RequiredArgsConstructor
public class WicketEndpoint {
private final WicketEndpointRepository repository;
@ReadOperation
public Map<String, Object> wicketExtensions() {
Map<String, Object> result = new HashMap<>();
result.put("extensions", repository.getConfigs());
return result;
}
}
================================================
FILE: wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/configuration/extensions/external/spring/boot/actuator/WicketEndpointConfiguration.java
================================================
package com.giffing.wicket.spring.boot.starter.configuration.extensions.external.spring.boot.actuator;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import com.giffing.wicket.spring.boot.context.extensions.boot.actuator.WicketEndpointRepository;
@Configuration
public class WicketEndpointConfiguration {
@Bean
public WicketEndpoint wicketEndpoint() {
return new WicketEndpoint(wicketEndpointRepositoryDefault());
}
@Bean
@ConditionalOnMissingBean
public WicketEndpointRepository wicketEndpointRepositoryDefault() {
return new WicketEndpointRepositoryDefault();
}
}
================================================
FILE: wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/configuration/extensions/external/spring/boot/actuator/WicketEndpointRepositoryDefault.java
================================================
package com.giffing.wicket.spring.boot.starter.configuration.extensions.external.spring.boot.actuator;
import com.giffing.wicket.spring.boot.context.extensions.boot.actuator.WicketAutoConfig;
import com.giffing.wicket.spring.boot.context.extensions.boot.actuator.WicketEndpointRepository;
import lombok.Getter;
import java.util.ArrayList;
import java.util.List;
@Getter
public class WicketEndpointRepositoryDefault implements WicketEndpointRepository {
private final List<WicketAutoConfig> configs = new ArrayList<>();
public void add(WicketAutoConfig autoconfig) {
this.configs.add(autoconfig);
}
}
================================================
FILE: wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/configuration/extensions/external/spring/security/SecureWebSession.java
================================================
package com.giffing.wicket.spring.boot.starter.configuration.extensions.external.spring.security;
import java.io.Serializable;
import org.apache.wicket.authroles.authentication.AuthenticatedWebSession;
import org.apache.wicket.authroles.authorization.strategies.role.Roles;
import org.apache.wicket.injection.Injector;
import org.apache.wicket.protocol.http.WebSession;
import org.apache.wicket.request.Request;
import org.apache.wicket.spring.injection.annot.SpringBean;
import org.springframework.security.authentication.AuthenticationManager;
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.AuthenticationException;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.security.web.context.HttpSessionSecurityContextRepository;
/**
* Spring Security Implementation of Wickets {@link AuthenticatedWebSession}.
*
* @author Marc Giffing
*/
public class SecureWebSession extends AuthenticatedWebSession implements Serializable {
private static final String SPRING_SECURITY_CONTEXT_KEY = HttpSessionSecurityContextRepository.SPRING_SECURITY_CONTEXT_KEY;
@SpringBean(name = "authenticationManager")
private AuthenticationManager authenticationManager;
public SecureWebSession(Request request) {
super(request);
Injector.get().inject(this);
}
@Override
public boolean authenticate(String username, String password) {
try {
var auth = authenticationManager
.authenticate(new UsernamePasswordAuthenticationToken(username, password));
if (auth.isAuthenticated()) {
SecurityContextHolder.getContext().setAuthentication(auth);
WebSession httpSession = WebSession.get();
if (httpSession != null) {
httpSession.setAttribute(SPRING_SECURITY_CONTEXT_KEY, SecurityContextHolder.getContext());
}
return true;
}
return false;
} catch (AuthenticationException e) {
return false;
}
}
@Override
public Roles getRoles() {
Roles roles = new Roles();
if (isSignedIn()) {
Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
authentication.getAuthorities().forEach(authority -> roles.add(authority.getAuthority()));
}
return roles;
}
}
================================================
FILE: wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/configuration/extensions/external/spring/security/SpringSecurityConfig.java
================================================
package com.giffing.wicket.spring.boot.starter.configuration.extensions.external.spring.security;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import com.giffing.wicket.spring.boot.context.extensions.ApplicationInitExtension;
import com.giffing.wicket.spring.boot.context.security.AuthenticatedWebSessionConfig;
import com.giffing.wicket.spring.boot.starter.app.WicketBootSecuredWebApplication;
import com.giffing.wicket.spring.boot.starter.app.WicketBootWebApplication;
@ApplicationInitExtension
@ConditionalOnProperty(prefix = SpringSecurityProperties.PROPERTY_PREFIX, value = "enabled", matchIfMissing = true)
@ConditionalOnClass(value = {
org.apache.wicket.authroles.authentication.AbstractAuthenticatedWebSession.class,
org.springframework.security.core.Authentication.class,
org.springframework.security.web.SecurityFilterChain.class
})
@EnableConfigurationProperties({SpringSecurityProperties.class})
@ConditionalOnMissingBean(WicketBootWebApplication.class)
public class SpringSecurityConfig {
@Bean
public WicketBootSecuredWebApplication wicketBootWebApplication() {
return new WicketBootSecuredWebApplication();
}
@Bean
public AuthenticatedWebSessionConfig authenticatedWebSessionConfig() {
return () -> SecureWebSession.class;
}
}
================================================
FILE: wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/configuration/extensions/external/spring/security/SpringSecurityProperties.java
================================================
package com.giffing.wicket.spring.boot.starter.configuration.extensions.external.spring.security;
import org.springframework.boot.context.properties.ConfigurationProperties;
@ConfigurationProperties(prefix = SpringSecurityProperties.PROPERTY_PREFIX)
public class SpringSecurityProperties {
public static final String PROPERTY_PREFIX = "wicket.external.spring.security";
}
================================================
FILE: wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/configuration/extensions/external/webjars/WebjarsConfig.java
================================================
package com.giffing.wicket.spring.boot.starter.configuration.extensions.external.webjars;
import jdk.jfr.Registered;
import lombok.RequiredArgsConstructor;
import org.apache.wicket.protocol.http.WebApplication;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import com.giffing.wicket.spring.boot.context.condition.ConditionalOnWicket;
import com.giffing.wicket.spring.boot.context.extensions.ApplicationInitExtension;
import com.giffing.wicket.spring.boot.context.extensions.WicketApplicationInitConfiguration;
import com.giffing.wicket.spring.boot.context.extensions.boot.actuator.WicketAutoConfig;
import com.giffing.wicket.spring.boot.context.extensions.boot.actuator.WicketEndpointRepository;
import de.agilecoders.wicket.webjars.WicketWebjars;
import de.agilecoders.wicket.webjars.settings.WebjarsSettings;
/**
* Enables webjars support if the following two condition matches:
* <p>
* 1. The {@link WicketWebjars} is in the classpath.
* <p>
* 2. The property wicket.webjars.enabled is true (default = true)
*
* @author Marc Giffing
*/
@ApplicationInitExtension
@ConditionalOnProperty(prefix = WebjarsProperties.PROPERTY_PREFIX, value = "enabled", matchIfMissing = true)
@ConditionalOnClass(value = de.agilecoders.wicket.webjars.WicketWebjars.class)
@EnableConfigurationProperties({WebjarsProperties.class})
@ConditionalOnWicket(value = 10)
@RequiredArgsConstructor
public class WebjarsConfig implements WicketApplicationInitConfiguration {
private final WebjarsProperties props;
private final WicketEndpointRepository wicketEndpointRepository;
@Override
public void init(WebApplication webApplication) {
var settings = new WebjarsSettings();
WicketWebjars.install(webApplication, settings);
wicketEndpointRepository.add(new WicketAutoConfig.Builder(this.getClass())
.withDetail("properties", props)
.build());
}
}
================================================
FILE: wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/configuration/extensions/external/webjars/WebjarsProperties.java
================================================
package com.giffing.wicket.spring.boot.starter.configuration.extensions.external.webjars;
import lombok.Getter;
import lombok.Setter;
import org.springframework.boot.context.properties.ConfigurationProperties;
@ConfigurationProperties(prefix = WebjarsProperties.PROPERTY_PREFIX)
@Getter
@Setter
public class WebjarsProperties {
public static final String PROPERTY_PREFIX = "wicket.external.webjars";
/**
* Enables webjars support
*/
private boolean enabled = true;
}
================================================
FILE: wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/configuration/extensions/stuff/annotationscan/AnnotatedMountScannerConfig.java
================================================
package com.giffing.wicket.spring.boot.starter.configuration.extensions.stuff.annotationscan;
import java.util.ArrayList;
import java.util.List;
import lombok.RequiredArgsConstructor;
import org.apache.wicket.protocol.http.WebApplication;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.core.annotation.Order;
import org.wicketstuff.annotation.scan.AnnotatedMountScanner;
import com.giffing.wicket.spring.boot.context.extensions.ApplicationInitExtension;
import com.giffing.wicket.spring.boot.context.extensions.WicketApplicationInitConfiguration;
import com.giffing.wicket.spring.boot.context.extensions.boot.actuator.WicketAutoConfig;
import com.giffing.wicket.spring.boot.context.extensions.boot.actuator.WicketEndpointRepository;
import com.giffing.wicket.spring.boot.starter.app.classscanner.candidates.WicketClassCandidatesHolder;
/**
* Auto configuration for the {@link AnnotatedMountScanner}.
* <p>
* It uses the user defined {@link WebApplication} as the default package scan
* root directory.
* <p>
* Enables annotate mount scanner if the following two condition matches:
* <p>
* 1. The {@link AnnotatedMountScanner} is in the classpath.
* <p>
* 2. The property {@link AnnotatedMountScannerProperties#PROPERTY_PREFIX}
* .enabled is true (default = true)
*
* @author Marc Giffing
*/
@ApplicationInitExtension
@ConditionalOnProperty(prefix = AnnotatedMountScannerProperties.PROPERTY_PREFIX, value = "enabled", matchIfMissing = true)
@ConditionalOnClass(value = org.wicketstuff.annotation.scan.AnnotatedMountScanner.class)
@EnableConfigurationProperties({AnnotatedMountScannerProperties.class})
@Order(ApplicationInitExtension.DEFAULT_PRECEDENCE + 50)
@RequiredArgsConstructor
public class AnnotatedMountScannerConfig implements WicketApplicationInitConfiguration {
private final AnnotatedMountScannerProperties prop;
private final WicketClassCandidatesHolder candidates;
private final WicketEndpointRepository wicketEndpointRepository;
@Override
public void init(WebApplication webApplication) {
List<String> packagesToScan = new ArrayList<>();
var annotatedMountScanner = new AnnotatedMountScanner();
var packagename = webApplication.getClass().getPackage().getName();
if (prop.getPackagename() != null) {
packagename = prop.getPackagename();
}
packagesToScan.add(packagename);
annotatedMountScanner.scanPackage(packagename).mount(webApplication);
if (!candidates.getBasePackages().isEmpty()) {
packagesToScan.addAll(candidates.getBasePackages());
for (String basePackage : candidates.getBasePackages()) {
annotatedMountScanner.scanPackage(basePackage).mount(webApplication);
}
}
wicketEndpointRepository.add(new WicketAutoConfig.Builder(this.getClass())
.withDetail("properties", prop)
.withDetail("packagesToScan", packagesToScan)
.build());
}
}
================================================
FILE: wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/configuration/extensions/stuff/annotationscan/AnnotatedMountScannerProperties.java
================================================
package com.giffing.wicket.spring.boot.starter.configuration.extensions.stuff.annotationscan;
import lombok.Getter;
import lombok.Setter;
import org.springframework.boot.context.properties.ConfigurationProperties;
@ConfigurationProperties(prefix = AnnotatedMountScannerProperties.PROPERTY_PREFIX)
@Getter
@Setter
public class AnnotatedMountScannerProperties {
public static final String PROPERTY_PREFIX = "wicket.stuff.annotationscan";
/**
* @see AnnotatedMountScannerConfig
*/
private boolean enabled = true;
/**
* An alternative package name for scanning for mount path if the
* WicketApplication should not used as the root scan package
*/
private String packagename;
}
================================================
FILE: wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/configuration/extensions/stuff/datastore/cassandra/DataStoreCassandraConfig.java
================================================
package com.giffing.wicket.spring.boot.starter.configuration.extensions.stuff.datastore.cassandra;
import lombok.RequiredArgsConstructor;
import org.apache.wicket.DefaultPageManagerProvider;
import org.apache.wicket.pageStore.IPageStore;
import org.apache.wicket.protocol.http.WebApplication;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.AutoConfigureAfter;
import org.springframework.boot.autoconfigure.cassandra.CassandraAutoConfiguration;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.wicketstuff.datastores.cassandra.CassandraDataStore;
import org.wicketstuff.datastores.cassandra.CassandraSettings;
import org.wicketstuff.datastores.cassandra.ICassandraSettings;
import org.wicketstuff.datastores.common.SessionQuotaManagingDataStore;
import com.giffing.wicket.spring.boot.context.extensions.ApplicationInitExtension;
import com.giffing.wicket.spring.boot.context.extensions.WicketApplicationInitConfiguration;
import com.giffing.wicket.spring.boot.context.extensions.boot.actuator.WicketAutoConfig;
import com.giffing.wicket.spring.boot.context.extensions.boot.actuator.WicketEndpointRepository;
import com.giffing.wicket.spring.boot.context.extensions.types.TypeParser;
/**
* Data store auto configuration for the cassandra database
* <p>
* Enables cassandra data store if the following two condition matches:
* <p>
* 1. The "com.datastax.driver.core.Session" is in the classpath.
* <p>
* 2. The property {@link DataStoreCassandraProperties#PROPERTY_PREFIX}.enabled
* is true (default = true)
*
* @author Marc Giffing
*/
@ApplicationInitExtension
@ConditionalOnProperty(prefix = DataStoreCassandraProperties.PROPERTY_PREFIX, value = "enabled", matchIfMissing = true)
@ConditionalOnClass(name = "com.datastax.driver.core.Session", value = {CassandraDataStore.class})
@EnableConfigurationProperties({DataStoreCassandraProperti
gitextract_rhrs615o/
├── .github/
│ ├── dependabot.yml
│ └── workflows/
│ └── maven.yml
├── .gitignore
├── README.adoc
├── pom.xml
├── wicket-spring-boot-context/
│ ├── .gitignore
│ ├── README.md
│ ├── pom.xml
│ └── src/
│ └── main/
│ └── java/
│ └── com/
│ └── giffing/
│ └── wicket/
│ └── spring/
│ └── boot/
│ └── context/
│ ├── condition/
│ │ ├── ConditionalOnWicket.java
│ │ └── WicketSettingsCondition.java
│ ├── exceptions/
│ │ ├── WicketSpringBootException.java
│ │ └── extensions/
│ │ └── ExtensionMisconfigurationException.java
│ ├── extensions/
│ │ ├── ApplicationInitExtension.java
│ │ ├── WicketApplicationInitConfiguration.java
│ │ ├── boot/
│ │ │ └── actuator/
│ │ │ ├── WicketAutoConfig.java
│ │ │ └── WicketEndpointRepository.java
│ │ └── types/
│ │ ├── DurationUnit.java
│ │ ├── SessionUnit.java
│ │ └── TypeParser.java
│ ├── scan/
│ │ ├── WicketAccessDeniedPage.java
│ │ ├── WicketExpiredPage.java
│ │ ├── WicketHomePage.java
│ │ ├── WicketInternalErrorPage.java
│ │ └── WicketSignInPage.java
│ └── security/
│ └── AuthenticatedWebSessionConfig.java
├── wicket-spring-boot-starter/
│ ├── .gitignore
│ ├── pom.xml
│ └── src/
│ └── main/
│ ├── java/
│ │ └── com/
│ │ └── giffing/
│ │ └── wicket/
│ │ └── spring/
│ │ └── boot/
│ │ └── starter/
│ │ ├── WicketAutoConfiguration.java
│ │ ├── WicketBootWebApplicationAutoConfiguration.java
│ │ ├── app/
│ │ │ ├── WicketBootSecuredWebApplication.java
│ │ │ ├── WicketBootStandardWebApplication.java
│ │ │ ├── WicketBootWebApplication.java
│ │ │ ├── classscanner/
│ │ │ │ ├── ClassCandidateScanner.java
│ │ │ │ ├── ClassCandidateScannerConfiguration.java
│ │ │ │ └── candidates/
│ │ │ │ ├── WicketClassCandidate.java
│ │ │ │ └── WicketClassCandidatesHolder.java
│ │ │ └── verifier/
│ │ │ ├── WicketDependencyMismatchDetectedException.java
│ │ │ ├── WicketDependencyVersionChecker.java
│ │ │ ├── WicketDependencyVersionCheckerFailureAnalyzer.java
│ │ │ └── WicketDependencyVersionCheckerProperties.java
│ │ ├── configuration/
│ │ │ ├── CustomAnnotationBeanNameGenerator.java
│ │ │ └── extensions/
│ │ │ ├── WicketExtensionLocation.java
│ │ │ ├── core/
│ │ │ │ ├── csrf/
│ │ │ │ │ ├── CsrfAttacksPreventionConfig.java
│ │ │ │ │ └── CsrfAttacksPreventionProperties.java
│ │ │ │ ├── datastore/
│ │ │ │ │ ├── DataStoreHttpSessionConfig.java
│ │ │ │ │ └── DataStoreHttpSessionProperties.java
│ │ │ │ ├── requestmapper/
│ │ │ │ │ ├── CryptMapperConfig.java
│ │ │ │ │ └── CryptMapperProperties.java
│ │ │ │ ├── resources/
│ │ │ │ │ └── SpringBootMainClassResourceRegistration.java
│ │ │ │ ├── resourcesettings/
│ │ │ │ │ └── packageresourceguard/
│ │ │ │ │ ├── PackageResourceGuardConfig.java
│ │ │ │ │ └── PackageResourceGuardProperties.java
│ │ │ │ ├── serializer/
│ │ │ │ │ └── deflated/
│ │ │ │ │ ├── DeflatedJavaSerializerConfig.java
│ │ │ │ │ └── DeflatedJavaSerializerProperties.java
│ │ │ │ └── settings/
│ │ │ │ ├── application/
│ │ │ │ │ └── ApplicationSettingsConfig.java
│ │ │ │ ├── debug/
│ │ │ │ │ ├── DebugSettingsConfig.java
│ │ │ │ │ └── DebugSettingsProperties.java
│ │ │ │ ├── exceptions/
│ │ │ │ │ ├── ExceptionSettingsConfig.java
│ │ │ │ │ └── ExceptionSettingsProperties.java
│ │ │ │ ├── general/
│ │ │ │ │ └── GeneralSettingsProperties.java
│ │ │ │ ├── markup/
│ │ │ │ │ ├── MarkupSettingsConfig.java
│ │ │ │ │ └── MarkupSettingsProperties.java
│ │ │ │ ├── pagestore/
│ │ │ │ │ ├── StoreSettingsConfig.java
│ │ │ │ │ └── StoreSettingsProperties.java
│ │ │ │ ├── requestlogger/
│ │ │ │ │ ├── RequestLoggerSettingsConfig.java
│ │ │ │ │ └── RequestLoggerSettingsProperties.java
│ │ │ │ ├── requrestcycle/
│ │ │ │ │ ├── RequestCycleSettingsConfig.java
│ │ │ │ │ └── RequestCycleSettingsProperties.java
│ │ │ │ └── resource/
│ │ │ │ ├── ResourceSettingsConfig.java
│ │ │ │ └── ResourceSettingsProperties.java
│ │ │ ├── external/
│ │ │ │ ├── beanvalidation/
│ │ │ │ │ ├── BeanValidationConfig.java
│ │ │ │ │ └── BeanValidationProperties.java
│ │ │ │ ├── development/
│ │ │ │ │ ├── devutils/
│ │ │ │ │ │ ├── diskstorebrowser/
│ │ │ │ │ │ │ ├── DiskStoreBrowserConfig.java
│ │ │ │ │ │ │ └── DiskStoreBrowserProperties.java
│ │ │ │ │ │ ├── inspector/
│ │ │ │ │ │ │ ├── InspectorConfig.java
│ │ │ │ │ │ │ └── InspectorProperties.java
│ │ │ │ │ │ └── statelesschecker/
│ │ │ │ │ │ ├── StatelessCheckerConfig.java
│ │ │ │ │ │ └── StatelessCheckerProperties.java
│ │ │ │ │ ├── springboot/
│ │ │ │ │ │ └── devtools/
│ │ │ │ │ │ ├── SpringDevToolsProperties.java
│ │ │ │ │ │ ├── SpringDevToolsSerializer.java
│ │ │ │ │ │ ├── SpringDevtoolsSerializerConfig.java
│ │ │ │ │ │ └── WicketDevToolsPropertyDefaultsPostProcessor.java
│ │ │ │ │ └── wicketsource/
│ │ │ │ │ ├── WicketSourceConfig.java
│ │ │ │ │ └── WicketSourceProperties.java
│ │ │ │ ├── spring/
│ │ │ │ │ ├── boot/
│ │ │ │ │ │ └── actuator/
│ │ │ │ │ │ ├── WicketEndpoint.java
│ │ │ │ │ │ ├── WicketEndpointConfiguration.java
│ │ │ │ │ │ └── WicketEndpointRepositoryDefault.java
│ │ │ │ │ └── security/
│ │ │ │ │ ├── SecureWebSession.java
│ │ │ │ │ ├── SpringSecurityConfig.java
│ │ │ │ │ └── SpringSecurityProperties.java
│ │ │ │ └── webjars/
│ │ │ │ ├── WebjarsConfig.java
│ │ │ │ └── WebjarsProperties.java
│ │ │ └── stuff/
│ │ │ ├── annotationscan/
│ │ │ │ ├── AnnotatedMountScannerConfig.java
│ │ │ │ └── AnnotatedMountScannerProperties.java
│ │ │ ├── datastore/
│ │ │ │ ├── cassandra/
│ │ │ │ │ ├── DataStoreCassandraConfig.java
│ │ │ │ │ └── DataStoreCassandraProperties.java
│ │ │ │ ├── hazelcast/
│ │ │ │ │ ├── DataStoreHazelcastConfig.java
│ │ │ │ │ └── DataStoreHazelcastProperties.java
│ │ │ │ ├── memcached/
│ │ │ │ │ ├── DataStoreMemcachedConfig.java
│ │ │ │ │ └── DataStoreMemcachedProperties.java
│ │ │ │ └── redis/
│ │ │ │ ├── DataStoreRedisConfig.java
│ │ │ │ └── DataStoreRedisProperties.java
│ │ │ ├── htmlcompressor/
│ │ │ │ ├── HTMLCompressingConfig.java
│ │ │ │ └── HTMLCompressingProperties.java
│ │ │ ├── monitoring/
│ │ │ │ └── jamon/
│ │ │ │ ├── BootJamonAdminPage.java
│ │ │ │ ├── JamonConfig.java
│ │ │ │ ├── JamonCssResourceReference.java
│ │ │ │ ├── JamonProperties.java
│ │ │ │ └── css/
│ │ │ │ └── jamon.css
│ │ │ ├── restannotations/
│ │ │ │ ├── RestAnnotationsConfig.java
│ │ │ │ └── RestAnnotationsProperties.java
│ │ │ ├── serializer/
│ │ │ │ ├── fast2/
│ │ │ │ │ ├── WicketSerializerFast2Config.java
│ │ │ │ │ └── WicketSerializerFast2Properties.java
│ │ │ │ └── kryo2/
│ │ │ │ ├── WicketSerializerKryo2Config.java
│ │ │ │ └── WicketSerializerKryo2Properties.java
│ │ │ ├── shiro/
│ │ │ │ ├── ShiroSecurityConfig.java
│ │ │ │ └── ShiroSecurityProperties.java
│ │ │ └── springreference/
│ │ │ ├── SpringReferenceConfig.java
│ │ │ └── SpringReferenceProperties.java
│ │ └── web/
│ │ ├── WicketWebInitializer.java
│ │ ├── WicketWebInitializerProperties.java
│ │ ├── config/
│ │ │ ├── WicketWebInitializerAutoConfig.java
│ │ │ └── WicketWebInitializerConfig.java
│ │ └── servlet/
│ │ ├── standard/
│ │ │ └── StandardWicketWebInitializer.java
│ │ └── websocket/
│ │ ├── DummyWicketSessionResolver.java
│ │ ├── WebSocketMessageBroadcaster.java
│ │ ├── WebSocketMessageSenderDefault.java
│ │ ├── WebSocketWicketWebInitializer.java
│ │ ├── WicketServerEndpointConfigRegister.java
│ │ └── WicketSessionResolver.java
│ └── resources/
│ ├── META-INF/
│ │ ├── spring/
│ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports
│ │ ├── spring-devtools.properties
│ │ └── spring.factories
│ └── application-development.yml
└── wicket-spring-boot-starter-example/
├── .gitignore
├── pom.xml
└── src/
├── main/
│ ├── doc/
│ │ └── index.adoc
│ ├── java/
│ │ └── com/
│ │ └── giffing/
│ │ └── wicket/
│ │ └── spring/
│ │ └── boot/
│ │ └── example/
│ │ ├── WicketApplication.java
│ │ ├── WicketApplication.properties
│ │ ├── model/
│ │ │ └── Customer.java
│ │ ├── repository/
│ │ │ ├── DefaultFilter.java
│ │ │ ├── Domain.java
│ │ │ ├── Filter.java
│ │ │ ├── FilterService.java
│ │ │ ├── Sort.java
│ │ │ └── services/
│ │ │ ├── DefaultRepositoryService.java
│ │ │ └── customer/
│ │ │ ├── CustomerRepository.java
│ │ │ ├── CustomerRepositoryService.java
│ │ │ ├── CustomerRepositoryServiceImpl.java
│ │ │ ├── filter/
│ │ │ │ ├── CustomerFilter.java
│ │ │ │ └── CustomerSort.java
│ │ │ └── specs/
│ │ │ └── CustomerSpecs.java
│ │ └── web/
│ │ ├── SpringBootWebPackageIdentifier.java
│ │ ├── assets/
│ │ │ └── base/
│ │ │ ├── CustomStylesCssRessourceReference.java
│ │ │ └── custom.css
│ │ ├── general/
│ │ │ ├── action/
│ │ │ │ └── panel/
│ │ │ │ ├── ActionPanel.html
│ │ │ │ ├── ActionPanel.java
│ │ │ │ └── items/
│ │ │ │ ├── AbstractActionItemLink.html
│ │ │ │ ├── AbstractActionItemLink.java
│ │ │ │ ├── AbstrractActionItem.java
│ │ │ │ ├── links/
│ │ │ │ │ ├── ActionItemLink.html
│ │ │ │ │ └── ActionItemLink.java
│ │ │ │ └── yesno/
│ │ │ │ └── YesNoLink.java
│ │ │ └── notify/
│ │ │ ├── NotyJSReference.java
│ │ │ ├── NotyPackagedJSReference.java
│ │ │ ├── NotyThemeBootstrapJSReference.java
│ │ │ ├── jquery.noty.js
│ │ │ └── noty.theme.bootstrap.js
│ │ ├── html/
│ │ │ ├── autocomplete/
│ │ │ │ ├── AutoCompleteTextField.css
│ │ │ │ └── AutoCompleteTextField.java
│ │ │ ├── basic/
│ │ │ │ └── YesNoLabel.java
│ │ │ ├── border/
│ │ │ │ └── behavior/
│ │ │ │ ├── ValidationMsgBehavior.html
│ │ │ │ └── ValidationMsgBehavior.java
│ │ │ ├── form/
│ │ │ │ ├── ValidationForm.java
│ │ │ │ ├── ValidationFormVisitor.java
│ │ │ │ └── focus/
│ │ │ │ └── FocusBehaviour.java
│ │ │ ├── modal/
│ │ │ │ ├── YesNoModal.html
│ │ │ │ ├── YesNoModal.java
│ │ │ │ ├── YesNoPanel.html
│ │ │ │ └── YesNoPanel.java
│ │ │ ├── panel/
│ │ │ │ ├── FeedbackPanel.html
│ │ │ │ └── FeedbackPanel.java
│ │ │ └── repeater/
│ │ │ └── data/
│ │ │ └── table/
│ │ │ └── filter/
│ │ │ ├── AbstractCheckBoxFilter.html
│ │ │ ├── AbstractCheckBoxFilter.java
│ │ │ ├── AbstractTextFieldFilter.html
│ │ │ └── AbstractTextFieldFilter.java
│ │ ├── pages/
│ │ │ ├── BaseAuthenticatedPage.html
│ │ │ ├── BaseAuthenticatedPage.java
│ │ │ ├── BaseAuthenticatedPage.properties
│ │ │ ├── BasePage.html
│ │ │ ├── BasePage.java
│ │ │ ├── WicketBootstrapInitializer.java
│ │ │ ├── customers/
│ │ │ │ ├── CustomerListPage.html
│ │ │ │ ├── CustomerListPage.java
│ │ │ │ ├── create/
│ │ │ │ │ ├── CustomerCreatePage.html
│ │ │ │ │ └── CustomerCreatePage.java
│ │ │ │ ├── edit/
│ │ │ │ │ ├── CustomerEditPage.java
│ │ │ │ │ └── CustomerEditPage.properties
│ │ │ │ ├── events/
│ │ │ │ │ ├── CustomerChangedEvent.java
│ │ │ │ │ └── CustomerDeletedEvent.java
│ │ │ │ └── model/
│ │ │ │ ├── CustomerDataProvider.java
│ │ │ │ ├── UsernameSearchTextField.java
│ │ │ │ └── UsernameTextField.java
│ │ │ ├── errors/
│ │ │ │ ├── AccessDeniedPage.html
│ │ │ │ ├── AccessDeniedPage.java
│ │ │ │ ├── ExpiredPage.html
│ │ │ │ ├── ExpiredPage.java
│ │ │ │ ├── InternalErrorPage.html
│ │ │ │ └── InternalErrorPage.java
│ │ │ ├── footer/
│ │ │ │ ├── Footer.html
│ │ │ │ └── Footer.java
│ │ │ ├── login/
│ │ │ │ ├── LoginPage.html
│ │ │ │ └── LoginPage.java
│ │ │ └── websocket/
│ │ │ ├── ChatPage.css
│ │ │ ├── ChatPage.html
│ │ │ ├── ChatPage.java
│ │ │ ├── ChatPage.properties
│ │ │ ├── ChatParticipant.java
│ │ │ ├── ChatService.java
│ │ │ └── events/
│ │ │ ├── CustomerMessageEvent.java
│ │ │ ├── JoinChatEvent.java
│ │ │ └── LeftChatEvent.java
│ │ ├── security/
│ │ │ ├── SpringSecurityWicketSessionResolver.java
│ │ │ └── WicketWebSecurityAdapterConfig.java
│ │ └── wicket/
│ │ └── dataprovider/
│ │ └── DefaultDataProvider.java
│ └── resources/
│ ├── META-INF/
│ │ └── spring-devtools.properties
│ ├── application.yml
│ ├── db/
│ │ └── changelog/
│ │ ├── db.changelog-master.xml
│ │ ├── init.xml
│ │ ├── table_customer.xml
│ │ └── test-data.xml
│ └── logback.xml
└── test/
├── java/
│ ├── com/
│ │ └── giffing/
│ │ └── wicket/
│ │ └── spring/
│ │ └── boot/
│ │ └── example/
│ │ └── web/
│ │ ├── WicketBaseIntTest.java
│ │ ├── WicketBaseTest.java
│ │ ├── WicketMockServletContext.java
│ │ ├── pages/
│ │ │ └── customers/
│ │ │ ├── CustomerListIntTest.java
│ │ │ ├── CustomerListPageTest.java
│ │ │ ├── create/
│ │ │ │ ├── CustomerCreatePageIntTest.java
│ │ │ │ └── CustomerCreatePageTest.java
│ │ │ └── edit/
│ │ │ └── CustomerEditPageTest.java
│ │ └── security/
│ │ └── WicketWebSecurityAdapterTestConfig.java
│ └── test/
│ └── com/
│ └── giffing/
│ └── wicket/
│ └── spring/
│ └── boot/
│ └── example/
│ └── web/
│ └── WicketWebApplicationConfig.java
└── resources/
├── application.yml
└── db/
└── changelog/
└── db.changelog-master-test.xml
SYMBOL INDEX (505 symbols across 183 files)
FILE: wicket-spring-boot-context/src/main/java/com/giffing/wicket/spring/boot/context/condition/ConditionalOnWicket.java
type Range (line 32) | enum Range {
FILE: wicket-spring-boot-context/src/main/java/com/giffing/wicket/spring/boot/context/condition/WicketSettingsCondition.java
class WicketSettingsCondition (line 19) | public class WicketSettingsCondition extends SpringBootCondition {
method getMatchOutcome (line 21) | @Override
method getMatchOutcome (line 34) | protected ConditionOutcome getMatchOutcome(Range range, int runningVer...
method matches (line 40) | private boolean matches(Range range, int expectedVersion, int runningV...
method getMessage (line 48) | private String getMessage(boolean matches, Range range, int runningVer...
method retrieveWicketVersion (line 57) | private String retrieveWicketVersion() {
FILE: wicket-spring-boot-context/src/main/java/com/giffing/wicket/spring/boot/context/exceptions/WicketSpringBootException.java
class WicketSpringBootException (line 8) | public class WicketSpringBootException extends RuntimeException {
method WicketSpringBootException (line 10) | public WicketSpringBootException() {
method WicketSpringBootException (line 14) | public WicketSpringBootException(String message,
method WicketSpringBootException (line 21) | public WicketSpringBootException(String message, Throwable cause) {
method WicketSpringBootException (line 25) | public WicketSpringBootException(String message) {
method WicketSpringBootException (line 29) | public WicketSpringBootException(Throwable cause) {
FILE: wicket-spring-boot-context/src/main/java/com/giffing/wicket/spring/boot/context/exceptions/extensions/ExtensionMisconfigurationException.java
class ExtensionMisconfigurationException (line 13) | public class ExtensionMisconfigurationException extends WicketSpringBoot...
method ExtensionMisconfigurationException (line 15) | public ExtensionMisconfigurationException(String message) {
FILE: wicket-spring-boot-context/src/main/java/com/giffing/wicket/spring/boot/context/extensions/WicketApplicationInitConfiguration.java
type WicketApplicationInitConfiguration (line 18) | public interface WicketApplicationInitConfiguration {
method init (line 27) | void init(WebApplication webApplication);
FILE: wicket-spring-boot-context/src/main/java/com/giffing/wicket/spring/boot/context/extensions/boot/actuator/WicketAutoConfig.java
class WicketAutoConfig (line 11) | @Getter
method WicketAutoConfig (line 18) | private WicketAutoConfig(Builder builder) {
class Builder (line 24) | public static class Builder {
method Builder (line 30) | public Builder() {
method Builder (line 35) | public Builder(Class<?> configurationClass) {
method Builder (line 41) | public Builder(Class<?> configurationClass, Map<String, ?> details) {
method withDetail (line 48) | public Builder withDetail(String key, Object value) {
method build (line 54) | public WicketAutoConfig build() {
FILE: wicket-spring-boot-context/src/main/java/com/giffing/wicket/spring/boot/context/extensions/boot/actuator/WicketEndpointRepository.java
type WicketEndpointRepository (line 11) | public interface WicketEndpointRepository {
method add (line 13) | void add(WicketAutoConfig autoconfig);
method getConfigs (line 15) | List<WicketAutoConfig> getConfigs();
FILE: wicket-spring-boot-context/src/main/java/com/giffing/wicket/spring/boot/context/extensions/types/DurationUnit.java
type DurationUnit (line 3) | public enum DurationUnit {
FILE: wicket-spring-boot-context/src/main/java/com/giffing/wicket/spring/boot/context/extensions/types/SessionUnit.java
type SessionUnit (line 3) | public enum SessionUnit {
FILE: wicket-spring-boot-context/src/main/java/com/giffing/wicket/spring/boot/context/extensions/types/TypeParser.java
class TypeParser (line 10) | @NoArgsConstructor(access = AccessLevel.PRIVATE)
method parse (line 13) | public static Bytes parse(Long size, SessionUnit sessionUnit){
method parse (line 22) | public static Duration parse(Long time, DurationUnit durationUnit){
FILE: wicket-spring-boot-context/src/main/java/com/giffing/wicket/spring/boot/context/security/AuthenticatedWebSessionConfig.java
type AuthenticatedWebSessionConfig (line 15) | public interface AuthenticatedWebSessionConfig {
method getAuthenticatedWebSessionClass (line 17) | Class<? extends AbstractAuthenticatedWebSession> getAuthenticatedWebSe...
FILE: wicket-spring-boot-starter-example/src/main/java/com/giffing/wicket/spring/boot/example/WicketApplication.java
class WicketApplication (line 8) | @SpringBootApplication
method main (line 12) | public static void main(String[] args) {
FILE: wicket-spring-boot-starter-example/src/main/java/com/giffing/wicket/spring/boot/example/model/Customer.java
class Customer (line 13) | @Entity
FILE: wicket-spring-boot-starter-example/src/main/java/com/giffing/wicket/spring/boot/example/repository/DefaultFilter.java
class DefaultFilter (line 3) | public abstract class DefaultFilter implements Filter {
method sort (line 9) | @Override
method isAscending (line 14) | @Override
method setSort (line 19) | @Override
FILE: wicket-spring-boot-starter-example/src/main/java/com/giffing/wicket/spring/boot/example/repository/Domain.java
type Domain (line 3) | public interface Domain<ID> {
method getId (line 5) | ID getId();
FILE: wicket-spring-boot-starter-example/src/main/java/com/giffing/wicket/spring/boot/example/repository/Filter.java
type Filter (line 5) | public interface Filter extends Serializable {
method sort (line 7) | Sort sort();
method isAscending (line 9) | boolean isAscending();
method setSort (line 11) | void setSort(Sort sort, boolean ascending);
FILE: wicket-spring-boot-starter-example/src/main/java/com/giffing/wicket/spring/boot/example/repository/FilterService.java
type FilterService (line 5) | public interface FilterService<MODEL, ID, FILTER_MODEL extends Filter> {
method findById (line 7) | MODEL findById(ID id);
method findAll (line 9) | List<MODEL> findAll(Long page, Long count, FILTER_MODEL filter);
method count (line 11) | long count(FILTER_MODEL filter);
FILE: wicket-spring-boot-starter-example/src/main/java/com/giffing/wicket/spring/boot/example/repository/Sort.java
type Sort (line 3) | public interface Sort {
method getFieldName (line 5) | String getFieldName();
FILE: wicket-spring-boot-starter-example/src/main/java/com/giffing/wicket/spring/boot/example/repository/services/DefaultRepositoryService.java
class DefaultRepositoryService (line 8) | public abstract class DefaultRepositoryService<MODEL, ID, FILTER extends...
method getSort (line 10) | public Sort getSort(FILTER filter) {
FILE: wicket-spring-boot-starter-example/src/main/java/com/giffing/wicket/spring/boot/example/repository/services/customer/CustomerRepository.java
type CustomerRepository (line 7) | public interface CustomerRepository extends ListCrudRepository<Customer,...
method countByUsernameIgnoreCase (line 9) | int countByUsernameIgnoreCase(String username);
method findByUsernameIgnoreCase (line 11) | Customer findByUsernameIgnoreCase(String username);
FILE: wicket-spring-boot-starter-example/src/main/java/com/giffing/wicket/spring/boot/example/repository/services/customer/CustomerRepositoryService.java
type CustomerRepositoryService (line 9) | public interface CustomerRepositoryService extends FilterService<Custome...
method delete (line 11) | void delete(Long id);
method findUsernames (line 13) | List<String> findUsernames(int count, String usernamePart);
method save (line 15) | Customer save(Customer customer);
method findByUsername (line 17) | Customer findByUsername(String username);
method usernameExists (line 23) | boolean usernameExists(String username);
FILE: wicket-spring-boot-starter-example/src/main/java/com/giffing/wicket/spring/boot/example/repository/services/customer/CustomerRepositoryServiceImpl.java
class CustomerRepositoryServiceImpl (line 24) | @Repository
method CustomerRepositoryServiceImpl (line 32) | public CustomerRepositoryServiceImpl(CustomerRepository customerReposi...
method findAll (line 36) | @Override
method count (line 42) | @Override
method filter (line 47) | private Specification<Customer> filter(CustomerFilter filter) {
method isNotEmpty (line 86) | boolean isNotEmpty(String toCheck) {
method findById (line 95) | @Override
method delete (line 101) | @Override
method findUsernames (line 106) | @Override
method save (line 123) | @Override
method usernameExists (line 128) | @Override
method findByUsername (line 133) | @Override
FILE: wicket-spring-boot-starter-example/src/main/java/com/giffing/wicket/spring/boot/example/repository/services/customer/filter/CustomerFilter.java
class CustomerFilter (line 7) | @Getter
FILE: wicket-spring-boot-starter-example/src/main/java/com/giffing/wicket/spring/boot/example/repository/services/customer/filter/CustomerSort.java
type CustomerSort (line 5) | public enum CustomerSort implements Sort {
method CustomerSort (line 14) | CustomerSort(String sortName) {
method getFieldName (line 18) | @Override
FILE: wicket-spring-boot-starter-example/src/main/java/com/giffing/wicket/spring/boot/example/repository/services/customer/specs/CustomerSpecs.java
class CustomerSpecs (line 9) | @NoArgsConstructor(access = AccessLevel.PRIVATE)
method hasId (line 12) | public static Specification<Customer> hasId(final Long id) {
method hasUsername (line 16) | public static Specification<Customer> hasUsername(final String usernam...
method hasUsernameLike (line 20) | public static Specification<Customer> hasUsernameLike(final String use...
method hasFirstnameLike (line 24) | public static Specification<Customer> hasFirstnameLike(final String fi...
method hasLastnameLike (line 28) | public static Specification<Customer> hasLastnameLike(final String las...
method hasActive (line 32) | public static Specification<Customer> hasActive(final boolean active) {
FILE: wicket-spring-boot-starter-example/src/main/java/com/giffing/wicket/spring/boot/example/web/SpringBootWebPackageIdentifier.java
type SpringBootWebPackageIdentifier (line 3) | public interface SpringBootWebPackageIdentifier {
FILE: wicket-spring-boot-starter-example/src/main/java/com/giffing/wicket/spring/boot/example/web/assets/base/CustomStylesCssRessourceReference.java
class CustomStylesCssRessourceReference (line 5) | public class CustomStylesCssRessourceReference extends CssResourceRefere...
method CustomStylesCssRessourceReference (line 9) | public CustomStylesCssRessourceReference() {
FILE: wicket-spring-boot-starter-example/src/main/java/com/giffing/wicket/spring/boot/example/web/general/action/panel/ActionPanel.java
class ActionPanel (line 10) | public class ActionPanel extends Panel {
method ActionPanel (line 12) | public ActionPanel(String id, List<AbstrractActionItem> items) {
FILE: wicket-spring-boot-starter-example/src/main/java/com/giffing/wicket/spring/boot/example/web/general/action/panel/items/AbstractActionItemLink.java
class AbstractActionItemLink (line 8) | public abstract class AbstractActionItemLink<T> extends AbstrractActionI...
method AbstractActionItemLink (line 10) | protected AbstractActionItemLink(IconType iconType) {
method onClick (line 23) | public abstract void onClick(AjaxRequestTarget target);
FILE: wicket-spring-boot-starter-example/src/main/java/com/giffing/wicket/spring/boot/example/web/general/action/panel/items/AbstrractActionItem.java
class AbstrractActionItem (line 5) | public abstract class AbstrractActionItem extends Panel {
method AbstrractActionItem (line 7) | protected AbstrractActionItem() {
FILE: wicket-spring-boot-starter-example/src/main/java/com/giffing/wicket/spring/boot/example/web/general/action/panel/items/links/ActionItemLink.java
class ActionItemLink (line 8) | public class ActionItemLink extends AbstrractActionItem {
method ActionItemLink (line 10) | public ActionItemLink(IconType iconType, AbstractLink link) {
FILE: wicket-spring-boot-starter-example/src/main/java/com/giffing/wicket/spring/boot/example/web/general/action/panel/items/yesno/YesNoLink.java
class YesNoLink (line 10) | public abstract class YesNoLink<T> extends AbstractActionItemLink<T> {
method YesNoLink (line 12) | protected YesNoLink(IconType iconType) {
method onClick (line 16) | @Override
method yesClicked (line 31) | protected abstract void yesClicked(AjaxRequestTarget target);
FILE: wicket-spring-boot-starter-example/src/main/java/com/giffing/wicket/spring/boot/example/web/general/notify/NotyJSReference.java
class NotyJSReference (line 5) | public class NotyJSReference extends JQueryPluginResourceReference {
method NotyJSReference (line 9) | public NotyJSReference() {
FILE: wicket-spring-boot-starter-example/src/main/java/com/giffing/wicket/spring/boot/example/web/general/notify/NotyPackagedJSReference.java
class NotyPackagedJSReference (line 5) | public class NotyPackagedJSReference extends JQueryPluginResourceReferen...
method NotyPackagedJSReference (line 9) | public NotyPackagedJSReference() {
FILE: wicket-spring-boot-starter-example/src/main/java/com/giffing/wicket/spring/boot/example/web/general/notify/NotyThemeBootstrapJSReference.java
class NotyThemeBootstrapJSReference (line 5) | public class NotyThemeBootstrapJSReference extends JQueryPluginResourceR...
method NotyThemeBootstrapJSReference (line 9) | public NotyThemeBootstrapJSReference() {
FILE: wicket-spring-boot-starter-example/src/main/java/com/giffing/wicket/spring/boot/example/web/general/notify/jquery.noty.js
function F (line 13) | function F() {
FILE: wicket-spring-boot-starter-example/src/main/java/com/giffing/wicket/spring/boot/example/web/html/autocomplete/AutoCompleteTextField.java
class AutoCompleteTextField (line 9) | public abstract class AutoCompleteTextField
method AutoCompleteTextField (line 12) | protected AutoCompleteTextField(String id, AutoCompleteSettings settin...
method AutoCompleteTextField (line 16) | protected AutoCompleteTextField(String id, IModel<String> model, AutoC...
method renderHead (line 20) | @Override
FILE: wicket-spring-boot-starter-example/src/main/java/com/giffing/wicket/spring/boot/example/web/html/basic/YesNoLabel.java
class YesNoLabel (line 8) | public class YesNoLabel extends Label {
method YesNoLabel (line 10) | public YesNoLabel(String id, IModel<Boolean> model) {
method onComponentTagBody (line 14) | @Override
FILE: wicket-spring-boot-starter-example/src/main/java/com/giffing/wicket/spring/boot/example/web/html/border/behavior/ValidationMsgBehavior.java
class ValidationMsgBehavior (line 9) | public class ValidationMsgBehavior extends BorderBehavior {
method beforeRender (line 13) | @Override
method afterRender (line 20) | @Override
FILE: wicket-spring-boot-starter-example/src/main/java/com/giffing/wicket/spring/boot/example/web/html/form/ValidationForm.java
class ValidationForm (line 7) | public class ValidationForm<T> extends BootstrapForm<T> {
method ValidationForm (line 13) | public ValidationForm(String id, IModel<T> model) {
method onBeforeRender (line 17) | @Override
FILE: wicket-spring-boot-starter-example/src/main/java/com/giffing/wicket/spring/boot/example/web/html/form/ValidationFormVisitor.java
class ValidationFormVisitor (line 14) | public class ValidationFormVisitor<R> implements IVisitor<Component, R>,...
method component (line 20) | @Override
FILE: wicket-spring-boot-starter-example/src/main/java/com/giffing/wicket/spring/boot/example/web/html/form/focus/FocusBehaviour.java
class FocusBehaviour (line 8) | public class FocusBehaviour extends Behavior {
method renderHead (line 10) | @Override
FILE: wicket-spring-boot-starter-example/src/main/java/com/giffing/wicket/spring/boot/example/web/html/modal/YesNoModal.java
class YesNoModal (line 7) | public abstract class YesNoModal extends Modal<Panel> {
method YesNoModal (line 9) | protected YesNoModal(String id) {
method noClicked (line 27) | protected void noClicked(AjaxRequestTarget target) {
method yesClicked (line 31) | protected abstract void yesClicked(AjaxRequestTarget target);
FILE: wicket-spring-boot-starter-example/src/main/java/com/giffing/wicket/spring/boot/example/web/html/modal/YesNoPanel.java
class YesNoPanel (line 7) | public abstract class YesNoPanel extends Panel {
method YesNoPanel (line 10) | protected YesNoPanel(String id) {
method noClicked (line 29) | protected abstract void noClicked(AjaxRequestTarget target);
method yesClicked (line 31) | protected abstract void yesClicked(AjaxRequestTarget target);
FILE: wicket-spring-boot-starter-example/src/main/java/com/giffing/wicket/spring/boot/example/web/html/panel/FeedbackPanel.java
class FeedbackPanel (line 3) | public class FeedbackPanel extends org.apache.wicket.markup.html.panel.F...
method FeedbackPanel (line 5) | public FeedbackPanel(String string) {
FILE: wicket-spring-boot-starter-example/src/main/java/com/giffing/wicket/spring/boot/example/web/html/repeater/data/table/filter/AbstractCheckBoxFilter.java
class AbstractCheckBoxFilter (line 10) | public class AbstractCheckBoxFilter extends AbstractFilter {
method AbstractCheckBoxFilter (line 14) | public AbstractCheckBoxFilter(final String id, final IModel<Boolean> m...
method createTextFieldComponent (line 21) | public CheckBox createTextFieldComponent(String componentId, final IMo...
method getFilter (line 30) | public final CheckBox getFilter() {
FILE: wicket-spring-boot-starter-example/src/main/java/com/giffing/wicket/spring/boot/example/web/html/repeater/data/table/filter/AbstractTextFieldFilter.java
class AbstractTextFieldFilter (line 8) | public class AbstractTextFieldFilter<T> extends AbstractFilter {
method AbstractTextFieldFilter (line 12) | public AbstractTextFieldFilter(final String id, final IModel<T> model,...
method createTextFieldComponent (line 19) | public TextField<T> createTextFieldComponent(String componentId, final...
method getFilter (line 26) | public final TextField<T> getFilter() {
FILE: wicket-spring-boot-starter-example/src/main/java/com/giffing/wicket/spring/boot/example/web/pages/BaseAuthenticatedPage.java
class BaseAuthenticatedPage (line 24) | public abstract class BaseAuthenticatedPage extends BasePage {
method BaseAuthenticatedPage (line 26) | protected BaseAuthenticatedPage(final PageParameters parameters) {
method newNavbar (line 33) | protected Navbar newNavbar(String markupId) {
method configureTheme (line 79) | private void configureTheme(PageParameters pageParameters) {
method onConfigure (line 88) | @Override
method hasNavigation (line 94) | protected boolean hasNavigation() {
method newNavigation (line 98) | private Component newNavigation(String markupId) {
FILE: wicket-spring-boot-starter-example/src/main/java/com/giffing/wicket/spring/boot/example/web/pages/BasePage.java
class BasePage (line 26) | public class BasePage extends GenericWebPage<Void> {
method BasePage (line 30) | public BasePage(final PageParameters parameters) {
method renderHead (line 49) | @Override
method replaceDefaultModal (line 64) | public void replaceDefaultModal(MarkupContainer newModal, AjaxRequestT...
method queueFormComponent (line 72) | protected void queueFormComponent(FormComponent<?> formComponent) {
FILE: wicket-spring-boot-starter-example/src/main/java/com/giffing/wicket/spring/boot/example/web/pages/WicketBootstrapInitializer.java
class WicketBootstrapInitializer (line 14) | @ApplicationInitExtension
method init (line 16) | @Override
FILE: wicket-spring-boot-starter-example/src/main/java/com/giffing/wicket/spring/boot/example/web/pages/customers/CustomerListPage.java
class CustomerListPage (line 62) | @WicketHomePage
method CustomerListPage (line 79) | public CustomerListPage() {
method getWebSocketBehavior (line 106) | private WebSocketBehavior getWebSocketBehavior(FeedbackPanel feedbackP...
method cancelButton (line 124) | private Button cancelButton() {
method customerDataTable (line 139) | private void customerDataTable(CustomerDataProvider customerDataProvid...
method idColumn (line 161) | private PropertyColumn<Customer, CustomerSort> idColumn() {
method usernameColumn (line 166) | private FilteredPropertyColumn<Customer, CustomerSort> usernameColumn() {
method firstnameColumn (line 186) | private FilteredPropertyColumn<Customer, CustomerSort> firstnameColumn...
method lastnameColumn (line 206) | private FilteredPropertyColumn<Customer, CustomerSort> lastnameColumn() {
method activeColumn (line 226) | private FilteredPropertyColumn<Customer, CustomerSort> activeColumn() {
method actionColumn (line 244) | private AbstractColumn<Customer, CustomerSort> actionColumn() {
FILE: wicket-spring-boot-starter-example/src/main/java/com/giffing/wicket/spring/boot/example/web/pages/customers/create/CustomerCreatePage.java
class CustomerCreatePage (line 25) | @MountPath("customers/create")
method CustomerCreatePage (line 41) | public CustomerCreatePage(Integer pageId) {
method CustomerCreatePage (line 46) | public CustomerCreatePage() {
method usernameField (line 59) | private FormComponent<String> usernameField() {
method isCreatePage (line 69) | public boolean isCreatePage() {
method submitButton (line 73) | private Component submitButton() {
method cancelButton (line 89) | private Component cancelButton() {
FILE: wicket-spring-boot-starter-example/src/main/java/com/giffing/wicket/spring/boot/example/web/pages/customers/edit/CustomerEditPage.java
class CustomerEditPage (line 16) | @MountPath("customers/edit/${" + CustomerEditPage.CUSTOMER_ID_PARAM + "}")
method CustomerEditPage (line 26) | public CustomerEditPage(PageParameters params) {
method isCreatePage (line 49) | @Override
FILE: wicket-spring-boot-starter-example/src/main/java/com/giffing/wicket/spring/boot/example/web/pages/customers/events/CustomerChangedEvent.java
class CustomerChangedEvent (line 8) | @Getter
FILE: wicket-spring-boot-starter-example/src/main/java/com/giffing/wicket/spring/boot/example/web/pages/customers/events/CustomerDeletedEvent.java
class CustomerDeletedEvent (line 8) | @Getter
FILE: wicket-spring-boot-starter-example/src/main/java/com/giffing/wicket/spring/boot/example/web/pages/customers/model/CustomerDataProvider.java
class CustomerDataProvider (line 14) | @Getter
method CustomerDataProvider (line 23) | public CustomerDataProvider(IModel<CustomerFilter> customerFilterModel) {
method getFilter (line 28) | @Override
method setFilter (line 33) | @Override
FILE: wicket-spring-boot-starter-example/src/main/java/com/giffing/wicket/spring/boot/example/web/pages/customers/model/UsernameSearchTextField.java
class UsernameSearchTextField (line 15) | public class UsernameSearchTextField extends AutoCompleteTextField {
method UsernameSearchTextField (line 22) | public UsernameSearchTextField(String id) {
method UsernameSearchTextField (line 27) | public UsernameSearchTextField(String componentId, IModel<String> mode...
method initComponent (line 32) | private void initComponent() {
method getChoices (line 36) | @Override
method settings (line 45) | private static AutoCompleteSettings settings(){
FILE: wicket-spring-boot-starter-example/src/main/java/com/giffing/wicket/spring/boot/example/web/pages/customers/model/UsernameTextField.java
class UsernameTextField (line 13) | public class UsernameTextField extends TextField<String>{
method UsernameTextField (line 18) | public UsernameTextField(String id) {
class UsernameExistsValidator (line 26) | public class UsernameExistsValidator implements IValidator<String>{
method validate (line 28) | @Override
FILE: wicket-spring-boot-starter-example/src/main/java/com/giffing/wicket/spring/boot/example/web/pages/errors/AccessDeniedPage.java
class AccessDeniedPage (line 10) | @MountPath("problem")
method AccessDeniedPage (line 14) | public AccessDeniedPage(PageParameters parameters) {
method setHeaders (line 18) | @Override
method isErrorPage (line 23) | @Override
method isVersioned (line 28) | @Override
FILE: wicket-spring-boot-starter-example/src/main/java/com/giffing/wicket/spring/boot/example/web/pages/errors/ExpiredPage.java
class ExpiredPage (line 11) | @WicketExpiredPage
method ExpiredPage (line 14) | public ExpiredPage(PageParameters parameters) {
method setHeaders (line 18) | @Override
FILE: wicket-spring-boot-starter-example/src/main/java/com/giffing/wicket/spring/boot/example/web/pages/errors/InternalErrorPage.java
class InternalErrorPage (line 7) | @WicketInternalErrorPage
method InternalErrorPage (line 9) | public InternalErrorPage(PageParameters parameters) {
FILE: wicket-spring-boot-starter-example/src/main/java/com/giffing/wicket/spring/boot/example/web/pages/footer/Footer.java
class Footer (line 5) | public class Footer extends Panel {
method Footer (line 6) | public Footer(String markupId) {
FILE: wicket-spring-boot-starter-example/src/main/java/com/giffing/wicket/spring/boot/example/web/pages/login/LoginPage.java
class LoginPage (line 22) | @WicketSignInPage
method LoginPage (line 26) | public LoginPage(PageParameters parameters) {
class LoginForm (line 36) | private class LoginForm extends StatelessForm<LoginForm> {
method LoginForm (line 42) | public LoginForm(String id) {
method usernameField (line 51) | private RequiredTextField<String> usernameField() {
method onSubmit (line 58) | @Override
FILE: wicket-spring-boot-starter-example/src/main/java/com/giffing/wicket/spring/boot/example/web/pages/websocket/ChatPage.java
class ChatPage (line 41) | @MountPath("chat")
method ChatPage (line 59) | public ChatPage(PageParameters pageParameters) {
method addChatForm (line 66) | private void addChatForm() {
method addWebsocketBehaviour (line 114) | private void addWebsocketBehaviour() {
class ChatMessage (line 159) | @Getter
method renderHead (line 166) | @Override
FILE: wicket-spring-boot-starter-example/src/main/java/com/giffing/wicket/spring/boot/example/web/pages/websocket/ChatParticipant.java
class ChatParticipant (line 14) | @Data
FILE: wicket-spring-boot-starter-example/src/main/java/com/giffing/wicket/spring/boot/example/web/pages/websocket/ChatService.java
class ChatService (line 13) | @Component
method ChatService (line 21) | public ChatService(WebSocketMessageBroadcaster broadcaster) {
method getParticipants (line 25) | public Set<String> getParticipants() {
method join (line 32) | public void join(ChatParticipant chatParticipant) {
method leave (line 44) | public void leave(ChatParticipant chatParticipant) {
FILE: wicket-spring-boot-starter-example/src/main/java/com/giffing/wicket/spring/boot/example/web/pages/websocket/events/CustomerMessageEvent.java
class CustomerMessageEvent (line 10) | @Getter
FILE: wicket-spring-boot-starter-example/src/main/java/com/giffing/wicket/spring/boot/example/web/pages/websocket/events/JoinChatEvent.java
class JoinChatEvent (line 7) | @Getter
FILE: wicket-spring-boot-starter-example/src/main/java/com/giffing/wicket/spring/boot/example/web/pages/websocket/events/LeftChatEvent.java
class LeftChatEvent (line 7) | @Getter
FILE: wicket-spring-boot-starter-example/src/main/java/com/giffing/wicket/spring/boot/example/web/security/SpringSecurityWicketSessionResolver.java
class SpringSecurityWicketSessionResolver (line 13) | @RequiredArgsConstructor
method resolve (line 18) | @Override
FILE: wicket-spring-boot-starter-example/src/main/java/com/giffing/wicket/spring/boot/example/web/security/WicketWebSecurityAdapterConfig.java
class WicketWebSecurityAdapterConfig (line 30) | @Configuration
method authenticationManager (line 34) | @ConditionalOnMissingBean
method filterChain (line 40) | @ConditionalOnMissingBean
method passwordEncoder (line 53) | @Bean
method allowUrlEncodedSlashHttpFirewall (line 58) | @Bean
method userDetailsService (line 66) | @ConditionalOnMissingBean
FILE: wicket-spring-boot-starter-example/src/main/java/com/giffing/wicket/spring/boot/example/web/wicket/dataprovider/DefaultDataProvider.java
class DefaultDataProvider (line 19) | public abstract class DefaultDataProvider<MODEL extends Domain<ID>,
method getFilterService (line 27) | public abstract SERVICE getFilterService();
method getFilter (line 29) | public abstract FILTER_MODEL getFilter();
method setFilter (line 31) | public abstract void setFilter(FILTER_MODEL filterModel);
method iterator (line 35) | @Override
method size (line 47) | @Override
method model (line 53) | @Override
method getSortState (line 65) | @Override
method getFilterState (line 70) | @Override
method setFilterState (line 75) | @Override
FILE: wicket-spring-boot-starter-example/src/test/java/com/giffing/wicket/spring/boot/example/web/WicketBaseIntTest.java
class WicketBaseIntTest (line 25) | @SpringBootTest(classes = WicketApplication.class)
class TestConfig (line 36) | @Configuration
method webSocketMessageBroadcaster (line 38) | @Bean
method setUp (line 45) | @BeforeEach
method login (line 51) | private void login(String username, String password) {
method getTester (line 63) | public WicketTester getTester() {
method getWicketApplication (line 67) | public WebApplication getWicketApplication() {
method borderPath (line 71) | protected String borderPath(String componentName){
FILE: wicket-spring-boot-starter-example/src/test/java/com/giffing/wicket/spring/boot/example/web/WicketBaseTest.java
class WicketBaseTest (line 31) | @ExtendWith(SpringExtension.class)
method setUp (line 50) | @BeforeEach
class CustomAuthenticationManager (line 57) | public static class CustomAuthenticationManager implements Authenticat...
method authenticate (line 59) | @Override
method login (line 66) | private void login(String username, String password) {
method getTester (line 78) | public WicketTester getTester() {
method getWicketApplication (line 82) | public WebApplication getWicketApplication() {
method borderPath (line 86) | protected String borderPath(String componentName){
FILE: wicket-spring-boot-starter-example/src/test/java/com/giffing/wicket/spring/boot/example/web/WicketMockServletContext.java
class WicketMockServletContext (line 10) | public class WicketMockServletContext extends MockServletContext {
method WicketMockServletContext (line 12) | public WicketMockServletContext(Application application, String path) {
method getDefaultSessionTrackingModes (line 16) | @Override
method getEffectiveSessionTrackingModes (line 21) | @Override
FILE: wicket-spring-boot-starter-example/src/test/java/com/giffing/wicket/spring/boot/example/web/pages/customers/CustomerListIntTest.java
class CustomerListIntTest (line 17) | @Transactional
method assert_start_customer_list_page (line 21) | @Test
method assert_delete_customer_method_called_once (line 43) | @Test
method getTableCell (line 61) | private String getTableCell(int row, int cell) {
FILE: wicket-spring-boot-starter-example/src/test/java/com/giffing/wicket/spring/boot/example/web/pages/customers/CustomerListPageTest.java
class CustomerListPageTest (line 25) | public class CustomerListPageTest extends WicketBaseTest {
method setUp (line 32) | @Override
method assert_start_customer_list_page (line 45) | @Test
method assert_click_customer_edit_page (line 67) | @Test
method assert_click_customer_create_page (line 77) | @Test
method assert_delete_customer_method_called_once (line 86) | @Test
method getTableCell (line 100) | private String getTableCell(int row, int cell){
method createCustomers (line 104) | public static List<Customer> createCustomers(long count) {
method createCustomer (line 112) | public static Customer createCustomer(long i) {
FILE: wicket-spring-boot-starter-example/src/test/java/com/giffing/wicket/spring/boot/example/web/pages/customers/create/CustomerCreatePageIntTest.java
class CustomerCreatePageIntTest (line 18) | @Transactional
method assert_new_customer_saved (line 25) | @Test
method assert_error_when_create_existing_customer (line 52) | @Test
method borderPath (line 70) | protected String borderPath(String componentName) {
FILE: wicket-spring-boot-starter-example/src/test/java/com/giffing/wicket/spring/boot/example/web/pages/customers/create/CustomerCreatePageTest.java
class CustomerCreatePageTest (line 19) | public class CustomerCreatePageTest extends WicketBaseTest {
method setUp (line 24) | @Override
method assert_customer_save_called (line 30) | @Test
method assert_customer_not_saved_if_user_already_exist (line 59) | @Test
FILE: wicket-spring-boot-starter-example/src/test/java/com/giffing/wicket/spring/boot/example/web/pages/customers/edit/CustomerEditPageTest.java
class CustomerEditPageTest (line 23) | public class CustomerEditPageTest extends WicketBaseTest {
method setUp (line 30) | @Override
method assert_customer_not_exists (line 42) | @Test
method assert_customer_on_load_existing (line 58) | @Test
method assert_customer_saved (line 86) | @Test
FILE: wicket-spring-boot-starter-example/src/test/java/com/giffing/wicket/spring/boot/example/web/security/WicketWebSecurityAdapterTestConfig.java
class WicketWebSecurityAdapterTestConfig (line 9) | @Configuration
method configureGlobal (line 16) | @Autowired
FILE: wicket-spring-boot-starter-example/src/test/java/test/com/giffing/wicket/spring/boot/example/web/WicketWebApplicationConfig.java
class WicketWebApplicationConfig (line 22) | @SpringBootApplication(exclude = {
method init (line 31) | @Override
method getSignInPageClass (line 38) | @Override
method getHomePage (line 43) | @Override
method getWebSessionClass (line 48) | @Override
FILE: wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/WicketAutoConfiguration.java
class WicketAutoConfiguration (line 20) | @Configuration
FILE: wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/WicketBootWebApplicationAutoConfiguration.java
class WicketBootWebApplicationAutoConfiguration (line 20) | @Configuration
method wicketBootWebApplication (line 24) | @Bean
FILE: wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/app/WicketBootSecuredWebApplication.java
class WicketBootSecuredWebApplication (line 48) | @RequiredArgsConstructor
method init (line 74) | @Override
method getConfigurationType (line 93) | @Override
method getWebSessionClass (line 98) | @Override
method getSignInPageClass (line 103) | @SuppressWarnings("unchecked")
method getHomePage (line 121) | @SuppressWarnings("unchecked")
FILE: wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/app/WicketBootStandardWebApplication.java
class WicketBootStandardWebApplication (line 40) | @Lazy
method init (line 67) | @Override
method getConfigurationType (line 86) | @Override
method getHomePage (line 91) | @SuppressWarnings("unchecked")
FILE: wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/app/WicketBootWebApplication.java
type WicketBootWebApplication (line 17) | public interface WicketBootWebApplication {
FILE: wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/app/classscanner/ClassCandidateScanner.java
class ClassCandidateScanner (line 27) | @RequiredArgsConstructor
method postConstruct (line 36) | public void postConstruct() {
method getMappingBasePackages (line 86) | private static Collection<String> getMappingBasePackages(BeanFactory b...
FILE: wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/app/classscanner/ClassCandidateScannerConfiguration.java
class ClassCandidateScannerConfiguration (line 13) | @Configuration
method pageCandidates (line 23) | @Bean
FILE: wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/app/classscanner/candidates/WicketClassCandidate.java
class WicketClassCandidate (line 9) | public class WicketClassCandidate<T> {
method WicketClassCandidate (line 13) | public WicketClassCandidate(Class<T> candidate) {
method getCandidate (line 17) | public Class<T> getCandidate() {
FILE: wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/app/classscanner/candidates/WicketClassCandidatesHolder.java
class WicketClassCandidatesHolder (line 18) | @Getter
FILE: wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/app/verifier/WicketDependencyMismatchDetectedException.java
class WicketDependencyMismatchDetectedException (line 14) | @Getter
FILE: wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/app/verifier/WicketDependencyVersionChecker.java
class WicketDependencyVersionChecker (line 24) | @Configuration
method WicketDependencyVersionChecker (line 42) | @Autowired
method setResourceLoader (line 47) | @Override
method detectWicketDependencyVersionMismatch (line 52) | @PostConstruct
method findWicketCoreVersion (line 88) | private Optional<String> findWicketCoreVersion(List<MavenDependency> w...
method collectWicketMavenDependencies (line 97) | private List<MavenDependency> collectWicketMavenDependencies() {
method collectWicketMavenDependencies (line 108) | private List<MavenDependency> collectWicketMavenDependencies(Resource[...
class MavenDependency (line 126) | @RequiredArgsConstructor
method toString (line 132) | @Override
FILE: wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/app/verifier/WicketDependencyVersionCheckerFailureAnalyzer.java
class WicketDependencyVersionCheckerFailureAnalyzer (line 8) | public class WicketDependencyVersionCheckerFailureAnalyzer extends Abstr...
method analyze (line 10) | @Override
FILE: wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/app/verifier/WicketDependencyVersionCheckerProperties.java
class WicketDependencyVersionCheckerProperties (line 8) | @ConfigurationProperties(prefix = WicketDependencyVersionCheckerProperti...
FILE: wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/configuration/CustomAnnotationBeanNameGenerator.java
class CustomAnnotationBeanNameGenerator (line 15) | public class CustomAnnotationBeanNameGenerator extends AnnotationBeanNam...
method generateBeanName (line 17) | @Override
FILE: wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/configuration/extensions/WicketExtensionLocation.java
type WicketExtensionLocation (line 9) | public interface WicketExtensionLocation {
FILE: wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/configuration/extensions/core/csrf/CsrfAttacksPreventionConfig.java
class CsrfAttacksPreventionConfig (line 29) | @ApplicationInitExtension
method init (line 40) | @Override
FILE: wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/configuration/extensions/core/csrf/CsrfAttacksPreventionProperties.java
class CsrfAttacksPreventionProperties (line 11) | @ConfigurationProperties(prefix = CsrfAttacksPreventionProperties.PROPER...
FILE: wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/configuration/extensions/core/datastore/DataStoreHttpSessionConfig.java
class DataStoreHttpSessionConfig (line 15) | @ApplicationInitExtension
method init (line 25) | @Override
FILE: wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/configuration/extensions/core/datastore/DataStoreHttpSessionProperties.java
class DataStoreHttpSessionProperties (line 7) | @ConfigurationProperties(prefix = DataStoreHttpSessionProperties.PROPERT...
FILE: wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/configuration/extensions/core/requestmapper/CryptMapperConfig.java
class CryptMapperConfig (line 14) | @ApplicationInitExtension
method init (line 25) | @Override
FILE: wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/configuration/extensions/core/requestmapper/CryptMapperProperties.java
class CryptMapperProperties (line 5) | @ConfigurationProperties(CryptMapperProperties.PROPERTY_PREFIX)
FILE: wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/configuration/extensions/core/resources/SpringBootMainClassResourceRegistration.java
class SpringBootMainClassResourceRegistration (line 10) | @ApplicationInitExtension
method init (line 16) | @Override
FILE: wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/configuration/extensions/core/resourcesettings/packageresourceguard/PackageResourceGuardConfig.java
class PackageResourceGuardConfig (line 12) | @ApplicationInitExtension
method init (line 21) | @Override
FILE: wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/configuration/extensions/core/resourcesettings/packageresourceguard/PackageResourceGuardProperties.java
class PackageResourceGuardProperties (line 10) | @ConfigurationProperties(PackageResourceGuardProperties.PROPERTY_PREFIX)
FILE: wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/configuration/extensions/core/serializer/deflated/DeflatedJavaSerializerConfig.java
class DeflatedJavaSerializerConfig (line 26) | @ApplicationInitExtension
method init (line 36) | @Override
FILE: wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/configuration/extensions/core/serializer/deflated/DeflatedJavaSerializerProperties.java
class DeflatedJavaSerializerProperties (line 7) | @ConfigurationProperties(DeflatedJavaSerializerProperties.PROPERTY_PREFIX)
FILE: wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/configuration/extensions/core/settings/application/ApplicationSettingsConfig.java
class ApplicationSettingsConfig (line 21) | @ApplicationInitExtension
method init (line 29) | @Override
method configureInternalErrorPage (line 43) | private void configureInternalErrorPage(ApplicationSettings applicatio...
method configureAccessDeniedPage (line 59) | private void configureAccessDeniedPage(ApplicationSettings application...
method configureExpiredPage (line 73) | private void configureExpiredPage(ApplicationSettings applicationSetti...
method throwExceptionOnMultipleAnnotations (line 88) | private void throwExceptionOnMultipleAnnotations(Class<?> pageClass, L...
FILE: wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/configuration/extensions/core/settings/debug/DebugSettingsConfig.java
class DebugSettingsConfig (line 20) | @ApplicationInitExtension
method init (line 30) | @Override
FILE: wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/configuration/extensions/core/settings/debug/DebugSettingsProperties.java
class DebugSettingsProperties (line 7) | @ConfigurationProperties(DebugSettingsProperties.PROPERTY_PREFIX)
FILE: wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/configuration/extensions/core/settings/exceptions/ExceptionSettingsConfig.java
class ExceptionSettingsConfig (line 21) | @ApplicationInitExtension
method init (line 31) | @Override
FILE: wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/configuration/extensions/core/settings/exceptions/ExceptionSettingsProperties.java
class ExceptionSettingsProperties (line 9) | @ConfigurationProperties(ExceptionSettingsProperties.PROPERTY_PREFIX)
FILE: wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/configuration/extensions/core/settings/general/GeneralSettingsProperties.java
class GeneralSettingsProperties (line 8) | @ConfigurationProperties(prefix = "wicket.core.settings.general")
FILE: wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/configuration/extensions/core/settings/markup/MarkupSettingsConfig.java
class MarkupSettingsConfig (line 19) | @ApplicationInitExtension
method init (line 28) | @Override
FILE: wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/configuration/extensions/core/settings/markup/MarkupSettingsProperties.java
class MarkupSettingsProperties (line 8) | @ConfigurationProperties(prefix = MarkupSettingsProperties.PROPERTY_PREFIX)
FILE: wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/configuration/extensions/core/settings/pagestore/StoreSettingsConfig.java
class StoreSettingsConfig (line 18) | @ApplicationInitExtension
method init (line 28) | @Override
FILE: wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/configuration/extensions/core/settings/pagestore/StoreSettingsProperties.java
class StoreSettingsProperties (line 9) | @ConfigurationProperties(StoreSettingsProperties.PROPERTY_PREFIX)
FILE: wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/configuration/extensions/core/settings/requestlogger/RequestLoggerSettingsConfig.java
class RequestLoggerSettingsConfig (line 18) | @ApplicationInitExtension
method init (line 28) | @Override
FILE: wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/configuration/extensions/core/settings/requestlogger/RequestLoggerSettingsProperties.java
class RequestLoggerSettingsProperties (line 7) | @ConfigurationProperties(RequestLoggerSettingsProperties.PROPERTY_PREFIX)
FILE: wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/configuration/extensions/core/settings/requrestcycle/RequestCycleSettingsConfig.java
class RequestCycleSettingsConfig (line 16) | @ApplicationInitExtension
method init (line 26) | @Override
FILE: wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/configuration/extensions/core/settings/requrestcycle/RequestCycleSettingsProperties.java
class RequestCycleSettingsProperties (line 10) | @ConfigurationProperties(prefix = RequestCycleSettingsProperties.PROPERT...
FILE: wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/configuration/extensions/core/settings/resource/ResourceSettingsConfig.java
class ResourceSettingsConfig (line 14) | @ApplicationInitExtension
method init (line 22) | @Override
FILE: wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/configuration/extensions/core/settings/resource/ResourceSettingsProperties.java
class ResourceSettingsProperties (line 7) | @ConfigurationProperties(ResourceSettingsProperties.PROPERTY_PREFIX)
FILE: wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/configuration/extensions/external/beanvalidation/BeanValidationConfig.java
class BeanValidationConfig (line 26) | @ApplicationInitExtension
method init (line 38) | @Override
FILE: wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/configuration/extensions/external/beanvalidation/BeanValidationProperties.java
class BeanValidationProperties (line 7) | @ConfigurationProperties(prefix = BeanValidationProperties.PROPERTY_PREFIX)
FILE: wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/configuration/extensions/external/development/devutils/diskstorebrowser/DiskStoreBrowserConfig.java
class DiskStoreBrowserConfig (line 34) | @ApplicationInitExtension
method init (line 45) | @Override
FILE: wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/configuration/extensions/external/development/devutils/diskstorebrowser/DiskStoreBrowserProperties.java
class DiskStoreBrowserProperties (line 8) | @ConfigurationProperties(prefix = DiskStoreBrowserProperties.PROPERTY_PR...
FILE: wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/configuration/extensions/external/development/devutils/inspector/InspectorConfig.java
class InspectorConfig (line 26) | @ApplicationInitExtension
method init (line 36) | @Override
FILE: wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/configuration/extensions/external/development/devutils/inspector/InspectorProperties.java
class InspectorProperties (line 8) | @ConfigurationProperties(prefix = InspectorProperties.PROPERTY_PREFIX)
FILE: wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/configuration/extensions/external/development/devutils/statelesschecker/StatelessCheckerConfig.java
class StatelessCheckerConfig (line 27) | @ApplicationInitExtension
method init (line 38) | @Override
FILE: wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/configuration/extensions/external/development/devutils/statelesschecker/StatelessCheckerProperties.java
class StatelessCheckerProperties (line 7) | @ConfigurationProperties(prefix = StatelessCheckerProperties.PROPERTY_PR...
FILE: wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/configuration/extensions/external/development/springboot/devtools/SpringDevToolsProperties.java
class SpringDevToolsProperties (line 7) | @ConfigurationProperties(prefix = SpringDevToolsProperties.PROPERTY_PREFIX)
FILE: wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/configuration/extensions/external/development/springboot/devtools/SpringDevToolsSerializer.java
class SpringDevToolsSerializer (line 26) | public class SpringDevToolsSerializer implements ISerializer {
method SpringDevToolsSerializer (line 31) | public SpringDevToolsSerializer() {
method serialize (line 35) | @Override
method deserialize (line 40) | @Override
FILE: wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/configuration/extensions/external/development/springboot/devtools/SpringDevtoolsSerializerConfig.java
class SpringDevtoolsSerializerConfig (line 27) | @ApplicationInitExtension
method init (line 39) | @Override
FILE: wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/configuration/extensions/external/development/springboot/devtools/WicketDevToolsPropertyDefaultsPostProcessor.java
class WicketDevToolsPropertyDefaultsPostProcessor (line 16) | @Order(Ordered.LOWEST_PRECEDENCE)
method postProcessEnvironment (line 34) | @Override
method isWicketDevToolsEnabled (line 44) | private Boolean isWicketDevToolsEnabled(ConfigurableEnvironment enviro...
method isLocalApplication (line 53) | private boolean isLocalApplication(ConfigurableEnvironment environment) {
method canAddProperties (line 57) | private boolean canAddProperties(Environment environment) {
method isRestarterInitialized (line 61) | private boolean isRestarterInitialized() {
method isRemoteRestartEnabled (line 71) | private boolean isRemoteRestartEnabled(Environment environment) {
FILE: wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/configuration/extensions/external/development/wicketsource/WicketSourceConfig.java
class WicketSourceConfig (line 25) | @ApplicationInitExtension
method init (line 36) | @Override
FILE: wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/configuration/extensions/external/development/wicketsource/WicketSourceProperties.java
class WicketSourceProperties (line 7) | @ConfigurationProperties(prefix = WicketSourceProperties.PROPERTY_PREFIX)
FILE: wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/configuration/extensions/external/spring/boot/actuator/WicketEndpoint.java
class WicketEndpoint (line 13) | @ConfigurationProperties(prefix = "endpoints.wicket")
method wicketExtensions (line 20) | @ReadOperation
FILE: wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/configuration/extensions/external/spring/boot/actuator/WicketEndpointConfiguration.java
class WicketEndpointConfiguration (line 9) | @Configuration
method wicketEndpoint (line 12) | @Bean
method wicketEndpointRepositoryDefault (line 17) | @Bean
FILE: wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/configuration/extensions/external/spring/boot/actuator/WicketEndpointRepositoryDefault.java
class WicketEndpointRepositoryDefault (line 10) | @Getter
method add (line 15) | public void add(WicketAutoConfig autoconfig) {
FILE: wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/configuration/extensions/external/spring/security/SecureWebSession.java
class SecureWebSession (line 23) | public class SecureWebSession extends AuthenticatedWebSession implements...
method SecureWebSession (line 30) | public SecureWebSession(Request request) {
method authenticate (line 35) | @Override
method getRoles (line 54) | @Override
FILE: wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/configuration/extensions/external/spring/security/SpringSecurityConfig.java
class SpringSecurityConfig (line 14) | @ApplicationInitExtension
method wicketBootWebApplication (line 25) | @Bean
method authenticatedWebSessionConfig (line 30) | @Bean
FILE: wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/configuration/extensions/external/spring/security/SpringSecurityProperties.java
class SpringSecurityProperties (line 5) | @ConfigurationProperties(prefix = SpringSecurityProperties.PROPERTY_PREFIX)
FILE: wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/configuration/extensions/external/webjars/WebjarsConfig.java
class WebjarsConfig (line 29) | @ApplicationInitExtension
method init (line 41) | @Override
FILE: wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/configuration/extensions/external/webjars/WebjarsProperties.java
class WebjarsProperties (line 7) | @ConfigurationProperties(prefix = WebjarsProperties.PROPERTY_PREFIX)
FILE: wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/configuration/extensions/stuff/annotationscan/AnnotatedMountScannerConfig.java
class AnnotatedMountScannerConfig (line 36) | @ApplicationInitExtension
method init (line 50) | @Override
FILE: wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/configuration/extensions/stuff/annotationscan/AnnotatedMountScannerProperties.java
class AnnotatedMountScannerProperties (line 7) | @ConfigurationProperties(prefix = AnnotatedMountScannerProperties.PROPER...
FILE: wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/configuration/extensions/stuff/datastore/cassandra/DataStoreCassandraConfig.java
class DataStoreCassandraConfig (line 36) | @ApplicationInitExtension
method init (line 48) | @Override
FILE: wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/configuration/extensions/stuff/datastore/cassandra/DataStoreCassandraProperties.java
class DataStoreCassandraProperties (line 11) | @ConfigurationProperties(prefix = DataStoreCassandraProperties.PROPERTY_...
FILE: wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/configuration/extensions/stuff/datastore/hazelcast/DataStoreHazelcastConfig.java
class DataStoreHazelcastConfig (line 36) | @ApplicationInitExtension
method init (line 51) | @Override
FILE: wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/configuration/extensions/stuff/datastore/hazelcast/DataStoreHazelcastProperties.java
class DataStoreHazelcastProperties (line 8) | @ConfigurationProperties(prefix = DataStoreHazelcastProperties.PROPERTY_...
FILE: wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/configuration/extensions/stuff/datastore/memcached/DataStoreMemcachedConfig.java
class DataStoreMemcachedConfig (line 38) | @ApplicationInitExtension
method init (line 49) | @Override
FILE: wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/configuration/extensions/stuff/datastore/memcached/DataStoreMemcachedProperties.java
class DataStoreMemcachedProperties (line 9) | @ConfigurationProperties(prefix = DataStoreMemcachedProperties.PROPERTY_...
FILE: wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/configuration/extensions/stuff/datastore/redis/DataStoreRedisConfig.java
class DataStoreRedisConfig (line 38) | @ApplicationInitExtension
method init (line 50) | @Override
FILE: wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/configuration/extensions/stuff/datastore/redis/DataStoreRedisProperties.java
class DataStoreRedisProperties (line 10) | @ConfigurationProperties(prefix = DataStoreRedisProperties.PROPERTY_PREFIX)
FILE: wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/configuration/extensions/stuff/htmlcompressor/HTMLCompressingConfig.java
class HTMLCompressingConfig (line 30) | @ApplicationInitExtension
method init (line 42) | @Override
method setFeatureConfiguration (line 53) | private void setFeatureConfiguration(HtmlCompressor compressor) {
FILE: wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/configuration/extensions/stuff/htmlcompressor/HTMLCompressingProperties.java
class HTMLCompressingProperties (line 10) | @ConfigurationProperties(prefix = HTMLCompressingProperties.PROPERTY_PRE...
method HTMLCompressingProperties (line 35) | public HTMLCompressingProperties() {
FILE: wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/configuration/extensions/stuff/monitoring/jamon/BootJamonAdminPage.java
class BootJamonAdminPage (line 7) | public class BootJamonAdminPage extends JamonAdminPage {
method renderHead (line 9) | @Override
FILE: wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/configuration/extensions/stuff/monitoring/jamon/JamonConfig.java
class JamonConfig (line 12) | @ApplicationInitExtension
method init (line 21) | @Override
FILE: wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/configuration/extensions/stuff/monitoring/jamon/JamonCssResourceReference.java
class JamonCssResourceReference (line 6) | public class JamonCssResourceReference extends CssResourceReference {
method JamonCssResourceReference (line 16) | private JamonCssResourceReference() {
FILE: wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/configuration/extensions/stuff/monitoring/jamon/JamonProperties.java
class JamonProperties (line 7) | @ConfigurationProperties(prefix = JamonProperties.PROPERTY_PREFIX)
FILE: wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/configuration/extensions/stuff/restannotations/RestAnnotationsConfig.java
class RestAnnotationsConfig (line 13) | @ApplicationInitExtension
method init (line 24) | @Override
FILE: wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/configuration/extensions/stuff/restannotations/RestAnnotationsProperties.java
class RestAnnotationsProperties (line 7) | @ConfigurationProperties(prefix = RestAnnotationsProperties.PROPERTY_PRE...
FILE: wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/configuration/extensions/stuff/serializer/fast2/WicketSerializerFast2Config.java
class WicketSerializerFast2Config (line 19) | @ApplicationInitExtension
method init (line 31) | @Override
FILE: wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/configuration/extensions/stuff/serializer/fast2/WicketSerializerFast2Properties.java
class WicketSerializerFast2Properties (line 5) | @ConfigurationProperties(prefix = WicketSerializerFast2Properties.PROPER...
FILE: wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/configuration/extensions/stuff/serializer/kryo2/WicketSerializerKryo2Config.java
class WicketSerializerKryo2Config (line 18) | @ApplicationInitExtension
method init (line 30) | @Override
FILE: wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/configuration/extensions/stuff/serializer/kryo2/WicketSerializerKryo2Properties.java
class WicketSerializerKryo2Properties (line 5) | @ConfigurationProperties(prefix = WicketSerializerKryo2Properties.PROPER...
FILE: wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/configuration/extensions/stuff/shiro/ShiroSecurityConfig.java
class ShiroSecurityConfig (line 25) | @ApplicationInitExtension
method shiroFilterChainDefinition (line 37) | @Bean
method init (line 42) | @Override
FILE: wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/configuration/extensions/stuff/shiro/ShiroSecurityProperties.java
class ShiroSecurityProperties (line 7) | @ConfigurationProperties(prefix = ShiroSecurityProperties.PROPERTY_PREFIX)
FILE: wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/configuration/extensions/stuff/springreference/SpringReferenceConfig.java
class SpringReferenceConfig (line 14) | @ApplicationInitExtension
method init (line 25) | @Override
FILE: wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/configuration/extensions/stuff/springreference/SpringReferenceProperties.java
class SpringReferenceProperties (line 7) | @ConfigurationProperties(prefix = SpringReferenceProperties.PROPERTY_PRE...
FILE: wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/web/WicketWebInitializer.java
class WicketWebInitializer (line 23) | @Configuration
method wicketFilter (line 30) | @Bean
FILE: wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/web/WicketWebInitializerProperties.java
class WicketWebInitializerProperties (line 12) | @ConfigurationProperties(prefix = WicketWebInitializerProperties.PROPERT...
FILE: wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/web/config/WicketWebInitializerAutoConfig.java
class WicketWebInitializerAutoConfig (line 21) | @Configuration
class StandardWicketWebInitializerAutoConfiguration (line 31) | @Configuration
method wicketWebInitializerConfig (line 36) | @Bean
class WebSocketWicketWebInitializerAutoConfiguration (line 45) | @Configuration
method wicketWebInitializerConfig (line 53) | @Bean
method wicketServerEndpointConfigRegister (line 61) | @Bean
method dummyWicketSessionResolver (line 67) | @Bean
method webSocketEventHandler (line 73) | @Bean
FILE: wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/web/config/WicketWebInitializerConfig.java
type WicketWebInitializerConfig (line 15) | public interface WicketWebInitializerConfig {
method createWicketFilter (line 20) | WicketFilter createWicketFilter(WebApplication application);
FILE: wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/web/servlet/standard/StandardWicketWebInitializer.java
class StandardWicketWebInitializer (line 13) | public class StandardWicketWebInitializer implements WicketWebInitialize...
method createWicketFilter (line 15) | @Override
FILE: wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/web/servlet/websocket/DummyWicketSessionResolver.java
class DummyWicketSessionResolver (line 5) | public class DummyWicketSessionResolver implements WicketSessionResolver {
method resolve (line 7) | @Override
FILE: wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/web/servlet/websocket/WebSocketMessageBroadcaster.java
type WebSocketMessageBroadcaster (line 10) | public interface WebSocketMessageBroadcaster {
method sendToAll (line 19) | void sendToAll(IWebSocketPushMessage event);
method sendTo (line 28) | void sendTo(Object identifier, IWebSocketPushMessage event);
FILE: wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/web/servlet/websocket/WebSocketMessageSenderDefault.java
class WebSocketMessageSenderDefault (line 10) | public class WebSocketMessageSenderDefault implements WebSocketMessageBr...
method WebSocketMessageSenderDefault (line 18) | public WebSocketMessageSenderDefault(Application application, WicketSe...
method sendToAll (line 23) | @Override
method sendTo (line 34) | @Override
FILE: wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/web/servlet/websocket/WebSocketWicketWebInitializer.java
class WebSocketWicketWebInitializer (line 14) | public class WebSocketWicketWebInitializer implements WicketWebInitializ...
method createWicketFilter (line 16) | @Override
FILE: wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/web/servlet/websocket/WicketServerEndpointConfigRegister.java
class WicketServerEndpointConfigRegister (line 17) | public class WicketServerEndpointConfigRegister implements ServletContex...
method contextInitialized (line 21) | @Override
FILE: wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/web/servlet/websocket/WicketSessionResolver.java
type WicketSessionResolver (line 5) | public interface WicketSessionResolver {
method resolve (line 13) | List<String> resolve(Object identifier);
Condensed preview — 243 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (456K chars).
[
{
"path": ".github/dependabot.yml",
"chars": 527,
"preview": "# To get started with Dependabot version updates, you'll need to specify which\n# package ecosystems to update and where "
},
{
"path": ".github/workflows/maven.yml",
"chars": 1147,
"preview": "# This workflow will build a Java project with Maven, and cache/restore any dependencies to improve the workflow executi"
},
{
"path": ".gitignore",
"chars": 53,
"preview": "/target/\n/.settings/\n.classpath\n.project\n.idea/\n*.iml"
},
{
"path": "README.adoc",
"chars": 29776,
"preview": "= Wicket autoconfiguration with Spring Boot\n\nCurrent release version:\n\n* 4.1.x - http://wicket.apache.org/[Wicket 10.6] "
},
{
"path": "pom.xml",
"chars": 11611,
"preview": "<project xmlns=\"http://maven.apache.org/POM/4.0.0\"\n\txmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n\txsi:schemaLoc"
},
{
"path": "wicket-spring-boot-context/.gitignore",
"chars": 40,
"preview": "/target/\n/.settings/\n.classpath\n.project"
},
{
"path": "wicket-spring-boot-context/README.md",
"chars": 942,
"preview": "# wicket-spring-boot-context\n\nAdvanced Level, a typical spring-boot user does not need this module.\n\n###Description\n\nThi"
},
{
"path": "wicket-spring-boot-context/pom.xml",
"chars": 1445,
"preview": "<project xmlns=\"http://maven.apache.org/POM/4.0.0\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:schemaLocat"
},
{
"path": "wicket-spring-boot-context/src/main/java/com/giffing/wicket/spring/boot/context/condition/ConditionalOnWicket.java",
"chars": 1161,
"preview": "package com.giffing.wicket.spring.boot.context.condition;\n\nimport org.springframework.context.annotation.Conditional;\n\ni"
},
{
"path": "wicket-spring-boot-context/src/main/java/com/giffing/wicket/spring/boot/context/condition/WicketSettingsCondition.java",
"chars": 2879,
"preview": "package com.giffing.wicket.spring.boot.context.condition;\n\nimport com.giffing.wicket.spring.boot.context.condition.Condi"
},
{
"path": "wicket-spring-boot-context/src/main/java/com/giffing/wicket/spring/boot/context/exceptions/WicketSpringBootException.java",
"chars": 885,
"preview": "package com.giffing.wicket.spring.boot.context.exceptions;\n\n/**\n * General extension from which all exception should ext"
},
{
"path": "wicket-spring-boot-context/src/main/java/com/giffing/wicket/spring/boot/context/exceptions/extensions/ExtensionMisconfigurationException.java",
"chars": 564,
"preview": "package com.giffing.wicket.spring.boot.context.exceptions.extensions;\n\nimport com.giffing.wicket.spring.boot.context.exc"
},
{
"path": "wicket-spring-boot-context/src/main/java/com/giffing/wicket/spring/boot/context/extensions/ApplicationInitExtension.java",
"chars": 1094,
"preview": "package com.giffing.wicket.spring.boot.context.extensions;\n\nimport java.lang.annotation.Documented;\nimport java.lang.ann"
},
{
"path": "wicket-spring-boot-context/src/main/java/com/giffing/wicket/spring/boot/context/extensions/WicketApplicationInitConfiguration.java",
"chars": 1214,
"preview": "package com.giffing.wicket.spring.boot.context.extensions;\n\nimport org.apache.wicket.protocol.http.WebApplication;\n\n/**\n"
},
{
"path": "wicket-spring-boot-context/src/main/java/com/giffing/wicket/spring/boot/context/extensions/boot/actuator/WicketAutoConfig.java",
"chars": 1710,
"preview": "package com.giffing.wicket.spring.boot.context.extensions.boot.actuator;\r\n\r\nimport java.io.Serializable;\r\nimport java.ut"
},
{
"path": "wicket-spring-boot-context/src/main/java/com/giffing/wicket/spring/boot/context/extensions/boot/actuator/WicketEndpointRepository.java",
"chars": 434,
"preview": "package com.giffing.wicket.spring.boot.context.extensions.boot.actuator;\r\n\r\nimport java.util.List;\r\n\r\n/**\r\n * This repos"
},
{
"path": "wicket-spring-boot-context/src/main/java/com/giffing/wicket/spring/boot/context/extensions/types/DurationUnit.java",
"chars": 162,
"preview": "package com.giffing.wicket.spring.boot.context.extensions.types;\n\npublic enum DurationUnit {\n\n MILLISECONDS,\n SECO"
},
{
"path": "wicket-spring-boot-context/src/main/java/com/giffing/wicket/spring/boot/context/extensions/types/SessionUnit.java",
"chars": 149,
"preview": "package com.giffing.wicket.spring.boot.context.extensions.types;\n\npublic enum SessionUnit {\n BYTES,\n KILOBYTES,\n "
},
{
"path": "wicket-spring-boot-context/src/main/java/com/giffing/wicket/spring/boot/context/extensions/types/TypeParser.java",
"chars": 1078,
"preview": "package com.giffing.wicket.spring.boot.context.extensions.types;\n\nimport lombok.AccessLevel;\nimport lombok.NoArgsConstru"
},
{
"path": "wicket-spring-boot-context/src/main/java/com/giffing/wicket/spring/boot/context/scan/WicketAccessDeniedPage.java",
"chars": 653,
"preview": "package com.giffing.wicket.spring.boot.context.scan;\n\nimport java.lang.annotation.ElementType;\nimport java.lang.annotati"
},
{
"path": "wicket-spring-boot-context/src/main/java/com/giffing/wicket/spring/boot/context/scan/WicketExpiredPage.java",
"chars": 653,
"preview": "package com.giffing.wicket.spring.boot.context.scan;\n\nimport java.lang.annotation.ElementType;\nimport java.lang.annotati"
},
{
"path": "wicket-spring-boot-context/src/main/java/com/giffing/wicket/spring/boot/context/scan/WicketHomePage.java",
"chars": 663,
"preview": "package com.giffing.wicket.spring.boot.context.scan;\n\nimport java.lang.annotation.ElementType;\nimport java.lang.annotati"
},
{
"path": "wicket-spring-boot-context/src/main/java/com/giffing/wicket/spring/boot/context/scan/WicketInternalErrorPage.java",
"chars": 655,
"preview": "package com.giffing.wicket.spring.boot.context.scan;\n\nimport java.lang.annotation.ElementType;\nimport java.lang.annotati"
},
{
"path": "wicket-spring-boot-context/src/main/java/com/giffing/wicket/spring/boot/context/scan/WicketSignInPage.java",
"chars": 677,
"preview": "package com.giffing.wicket.spring.boot.context.scan;\n\nimport java.lang.annotation.ElementType;\nimport java.lang.annotati"
},
{
"path": "wicket-spring-boot-context/src/main/java/com/giffing/wicket/spring/boot/context/security/AuthenticatedWebSessionConfig.java",
"chars": 686,
"preview": "package com.giffing.wicket.spring.boot.context.security;\n\nimport org.apache.wicket.authroles.authentication.AbstractAuth"
},
{
"path": "wicket-spring-boot-starter/.gitignore",
"chars": 71,
"preview": "/target/\n/.settings/\n/.classpath\n.project\n/.apt_generated/\n.factorypath"
},
{
"path": "wicket-spring-boot-starter/pom.xml",
"chars": 5969,
"preview": "<project xmlns=\"http://maven.apache.org/POM/4.0.0\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:schemaLocat"
},
{
"path": "wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/WicketAutoConfiguration.java",
"chars": 1547,
"preview": "package com.giffing.wicket.spring.boot.starter;\n\nimport com.giffing.wicket.spring.boot.starter.app.classscanner.ClassCan"
},
{
"path": "wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/WicketBootWebApplicationAutoConfiguration.java",
"chars": 1160,
"preview": "package com.giffing.wicket.spring.boot.starter;\n\nimport com.giffing.wicket.spring.boot.starter.app.WicketBootSecuredWebA"
},
{
"path": "wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/app/WicketBootSecuredWebApplication.java",
"chars": 5648,
"preview": "package com.giffing.wicket.spring.boot.starter.app;\n\nimport java.util.ArrayList;\nimport java.util.List;\n\nimport lombok.G"
},
{
"path": "wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/app/WicketBootStandardWebApplication.java",
"chars": 4154,
"preview": "package com.giffing.wicket.spring.boot.starter.app;\n\nimport java.util.ArrayList;\nimport java.util.List;\n\nimport lombok.G"
},
{
"path": "wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/app/WicketBootWebApplication.java",
"chars": 569,
"preview": "package com.giffing.wicket.spring.boot.starter.app;\n\nimport org.apache.wicket.protocol.http.WebApplication;\n\nimport com."
},
{
"path": "wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/app/classscanner/ClassCandidateScanner.java",
"chars": 4826,
"preview": "package com.giffing.wicket.spring.boot.starter.app.classscanner;\r\n\r\nimport com.giffing.wicket.spring.boot.context.scan.*"
},
{
"path": "wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/app/classscanner/ClassCandidateScannerConfiguration.java",
"chars": 1198,
"preview": "package com.giffing.wicket.spring.boot.starter.app.classscanner;\n\nimport lombok.RequiredArgsConstructor;\nimport org.spri"
},
{
"path": "wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/app/classscanner/candidates/WicketClassCandidate.java",
"chars": 466,
"preview": "package com.giffing.wicket.spring.boot.starter.app.classscanner.candidates;\n\nimport java.lang.ref.WeakReference;\n\n/**\n *"
},
{
"path": "wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/app/classscanner/candidates/WicketClassCandidatesHolder.java",
"chars": 1055,
"preview": "package com.giffing.wicket.spring.boot.starter.app.classscanner.candidates;\r\n\r\nimport java.util.HashSet;\r\nimport java.ut"
},
{
"path": "wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/app/verifier/WicketDependencyMismatchDetectedException.java",
"chars": 631,
"preview": "package com.giffing.wicket.spring.boot.starter.app.verifier;\r\n\r\nimport com.giffing.wicket.spring.boot.starter.app.verifi"
},
{
"path": "wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/app/verifier/WicketDependencyVersionChecker.java",
"chars": 6391,
"preview": "package com.giffing.wicket.spring.boot.starter.app.verifier;\r\n\r\nimport java.io.IOException;\r\nimport java.util.ArrayList;"
},
{
"path": "wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/app/verifier/WicketDependencyVersionCheckerFailureAnalyzer.java",
"chars": 1605,
"preview": "package com.giffing.wicket.spring.boot.starter.app.verifier;\r\n\r\nimport org.springframework.boot.diagnostics.AbstractFail"
},
{
"path": "wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/app/verifier/WicketDependencyVersionCheckerProperties.java",
"chars": 560,
"preview": "package com.giffing.wicket.spring.boot.starter.app.verifier;\r\n\r\nimport lombok.Getter;\r\nimport lombok.Setter;\r\nimport org"
},
{
"path": "wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/configuration/CustomAnnotationBeanNameGenerator.java",
"chars": 841,
"preview": "package com.giffing.wicket.spring.boot.starter.configuration;\n\nimport org.springframework.beans.factory.config.BeanDefin"
},
{
"path": "wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/configuration/extensions/WicketExtensionLocation.java",
"chars": 262,
"preview": "package com.giffing.wicket.spring.boot.starter.configuration.extensions;\n\n/**\n * Marker interface to locate the Wicket E"
},
{
"path": "wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/configuration/extensions/core/csrf/CsrfAttacksPreventionConfig.java",
"chars": 3011,
"preview": "package com.giffing.wicket.spring.boot.starter.configuration.extensions.core.csrf;\r\n\r\nimport com.giffing.wicket.spring.b"
},
{
"path": "wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/configuration/extensions/core/csrf/CsrfAttacksPreventionProperties.java",
"chars": 1738,
"preview": "package com.giffing.wicket.spring.boot.starter.configuration.extensions.core.csrf;\n\nimport java.util.ArrayList;\nimport j"
},
{
"path": "wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/configuration/extensions/core/datastore/DataStoreHttpSessionConfig.java",
"chars": 1866,
"preview": "package com.giffing.wicket.spring.boot.starter.configuration.extensions.core.datastore;\n\nimport com.giffing.wicket.sprin"
},
{
"path": "wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/configuration/extensions/core/datastore/DataStoreHttpSessionProperties.java",
"chars": 591,
"preview": "package com.giffing.wicket.spring.boot.starter.configuration.extensions.core.datastore;\n\nimport lombok.Getter;\nimport lo"
},
{
"path": "wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/configuration/extensions/core/requestmapper/CryptMapperConfig.java",
"chars": 1610,
"preview": "package com.giffing.wicket.spring.boot.starter.configuration.extensions.core.requestmapper;\n\nimport com.giffing.wicket.s"
},
{
"path": "wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/configuration/extensions/core/requestmapper/CryptMapperProperties.java",
"chars": 364,
"preview": "package com.giffing.wicket.spring.boot.starter.configuration.extensions.core.requestmapper;\n\nimport org.springframework."
},
{
"path": "wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/configuration/extensions/core/resources/SpringBootMainClassResourceRegistration.java",
"chars": 1078,
"preview": "package com.giffing.wicket.spring.boot.starter.configuration.extensions.core.resources;\r\n\r\nimport com.giffing.wicket.spr"
},
{
"path": "wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/configuration/extensions/core/resourcesettings/packageresourceguard/PackageResourceGuardConfig.java",
"chars": 1597,
"preview": "package com.giffing.wicket.spring.boot.starter.configuration.extensions.core.resourcesettings.packageresourceguard;\n\nimp"
},
{
"path": "wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/configuration/extensions/core/resourcesettings/packageresourceguard/PackageResourceGuardProperties.java",
"chars": 581,
"preview": "package com.giffing.wicket.spring.boot.starter.configuration.extensions.core.resourcesettings.packageresourceguard;\n\nimp"
},
{
"path": "wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/configuration/extensions/core/serializer/deflated/DeflatedJavaSerializerConfig.java",
"chars": 2450,
"preview": "package com.giffing.wicket.spring.boot.starter.configuration.extensions.core.serializer.deflated;\n\nimport lombok.Require"
},
{
"path": "wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/configuration/extensions/core/serializer/deflated/DeflatedJavaSerializerProperties.java",
"chars": 516,
"preview": "package com.giffing.wicket.spring.boot.starter.configuration.extensions.core.serializer.deflated;\n\nimport lombok.Getter;"
},
{
"path": "wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/configuration/extensions/core/settings/application/ApplicationSettingsConfig.java",
"chars": 5059,
"preview": "package com.giffing.wicket.spring.boot.starter.configuration.extensions.core.settings.application;\n\nimport com.giffing.w"
},
{
"path": "wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/configuration/extensions/core/settings/debug/DebugSettingsConfig.java",
"chars": 2519,
"preview": "package com.giffing.wicket.spring.boot.starter.configuration.extensions.core.settings.debug;\n\nimport com.giffing.wicket."
},
{
"path": "wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/configuration/extensions/core/settings/debug/DebugSettingsProperties.java",
"chars": 884,
"preview": "package com.giffing.wicket.spring.boot.starter.configuration.extensions.core.settings.debug;\n\nimport lombok.Getter;\nimpo"
},
{
"path": "wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/configuration/extensions/core/settings/exceptions/ExceptionSettingsConfig.java",
"chars": 1958,
"preview": "package com.giffing.wicket.spring.boot.starter.configuration.extensions.core.settings.exceptions;\n\nimport lombok.Require"
},
{
"path": "wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/configuration/extensions/core/settings/exceptions/ExceptionSettingsProperties.java",
"chars": 781,
"preview": "package com.giffing.wicket.spring.boot.starter.configuration.extensions.core.settings.exceptions;\n\nimport lombok.Getter;"
},
{
"path": "wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/configuration/extensions/core/settings/general/GeneralSettingsProperties.java",
"chars": 608,
"preview": "package com.giffing.wicket.spring.boot.starter.configuration.extensions.core.settings.general;\n\nimport lombok.Getter;\nim"
},
{
"path": "wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/configuration/extensions/core/settings/markup/MarkupSettingsConfig.java",
"chars": 2001,
"preview": "package com.giffing.wicket.spring.boot.starter.configuration.extensions.core.settings.markup;\n\nimport lombok.RequiredArg"
},
{
"path": "wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/configuration/extensions/core/settings/markup/MarkupSettingsProperties.java",
"chars": 1423,
"preview": "package com.giffing.wicket.spring.boot.starter.configuration.extensions.core.settings.markup;\n\nimport lombok.Getter;\nimp"
},
{
"path": "wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/configuration/extensions/core/settings/pagestore/StoreSettingsConfig.java",
"chars": 2201,
"preview": "package com.giffing.wicket.spring.boot.starter.configuration.extensions.core.settings.pagestore;\n\nimport java.io.File;\n\n"
},
{
"path": "wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/configuration/extensions/core/settings/pagestore/StoreSettingsProperties.java",
"chars": 773,
"preview": "package com.giffing.wicket.spring.boot.starter.configuration.extensions.core.settings.pagestore;\n\nimport lombok.Getter;\n"
},
{
"path": "wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/configuration/extensions/core/settings/requestlogger/RequestLoggerSettingsConfig.java",
"chars": 1948,
"preview": "package com.giffing.wicket.spring.boot.starter.configuration.extensions.core.settings.requestlogger;\n\nimport com.giffing"
},
{
"path": "wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/configuration/extensions/core/settings/requestlogger/RequestLoggerSettingsProperties.java",
"chars": 577,
"preview": "package com.giffing.wicket.spring.boot.starter.configuration.extensions.core.settings.requestlogger;\n\nimport lombok.Gett"
},
{
"path": "wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/configuration/extensions/core/settings/requrestcycle/RequestCycleSettingsConfig.java",
"chars": 2219,
"preview": "package com.giffing.wicket.spring.boot.starter.configuration.extensions.core.settings.requrestcycle;\n\nimport lombok.Requ"
},
{
"path": "wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/configuration/extensions/core/settings/requrestcycle/RequestCycleSettingsProperties.java",
"chars": 982,
"preview": "package com.giffing.wicket.spring.boot.starter.configuration.extensions.core.settings.requrestcycle;\n\nimport lombok.Gett"
},
{
"path": "wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/configuration/extensions/core/settings/resource/ResourceSettingsConfig.java",
"chars": 1398,
"preview": "package com.giffing.wicket.spring.boot.starter.configuration.extensions.core.settings.resource;\n\nimport com.giffing.wick"
},
{
"path": "wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/configuration/extensions/core/settings/resource/ResourceSettingsProperties.java",
"chars": 518,
"preview": "package com.giffing.wicket.spring.boot.starter.configuration.extensions.core.settings.resource;\n\nimport lombok.Getter;\ni"
},
{
"path": "wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/configuration/extensions/external/beanvalidation/BeanValidationConfig.java",
"chars": 2135,
"preview": "package com.giffing.wicket.spring.boot.starter.configuration.extensions.external.beanvalidation;\n\nimport com.giffing.wic"
},
{
"path": "wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/configuration/extensions/external/beanvalidation/BeanValidationProperties.java",
"chars": 531,
"preview": "package com.giffing.wicket.spring.boot.starter.configuration.extensions.external.beanvalidation;\n\nimport lombok.Getter;\n"
},
{
"path": "wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/configuration/extensions/external/development/devutils/diskstorebrowser/DiskStoreBrowserConfig.java",
"chars": 2787,
"preview": "package com.giffing.wicket.spring.boot.starter.configuration.extensions.external.development.devutils.diskstorebrowser;\r"
},
{
"path": "wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/configuration/extensions/external/development/devutils/diskstorebrowser/DiskStoreBrowserProperties.java",
"chars": 892,
"preview": "package com.giffing.wicket.spring.boot.starter.configuration.extensions.external.development.devutils.diskstorebrowser;\n"
},
{
"path": "wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/configuration/extensions/external/development/devutils/inspector/InspectorConfig.java",
"chars": 1987,
"preview": "package com.giffing.wicket.spring.boot.starter.configuration.extensions.external.development.devutils.inspector;\n\nimport"
},
{
"path": "wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/configuration/extensions/external/development/devutils/inspector/InspectorProperties.java",
"chars": 841,
"preview": "package com.giffing.wicket.spring.boot.starter.configuration.extensions.external.development.devutils.inspector;\n\nimport"
},
{
"path": "wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/configuration/extensions/external/development/devutils/statelesschecker/StatelessCheckerConfig.java",
"chars": 2179,
"preview": "package com.giffing.wicket.spring.boot.starter.configuration.extensions.external.development.devutils.statelesschecker;\r"
},
{
"path": "wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/configuration/extensions/external/development/devutils/statelesschecker/StatelessCheckerProperties.java",
"chars": 521,
"preview": "package com.giffing.wicket.spring.boot.starter.configuration.extensions.external.development.devutils.statelesschecker;\n"
},
{
"path": "wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/configuration/extensions/external/development/springboot/devtools/SpringDevToolsProperties.java",
"chars": 501,
"preview": "package com.giffing.wicket.spring.boot.starter.configuration.extensions.external.development.springboot.devtools;\r\n\r\nimp"
},
{
"path": "wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/configuration/extensions/external/development/springboot/devtools/SpringDevToolsSerializer.java",
"chars": 1955,
"preview": "package com.giffing.wicket.spring.boot.starter.configuration.extensions.external.development.springboot.devtools;\n\nimpor"
},
{
"path": "wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/configuration/extensions/external/development/springboot/devtools/SpringDevtoolsSerializerConfig.java",
"chars": 2462,
"preview": "package com.giffing.wicket.spring.boot.starter.configuration.extensions.external.development.springboot.devtools;\n\nimpor"
},
{
"path": "wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/configuration/extensions/external/development/springboot/devtools/WicketDevToolsPropertyDefaultsPostProcessor.java",
"chars": 3217,
"preview": "package com.giffing.wicket.spring.boot.starter.configuration.extensions.external.development.springboot.devtools;\r\n\r\nimp"
},
{
"path": "wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/configuration/extensions/external/development/wicketsource/WicketSourceConfig.java",
"chars": 1959,
"preview": "package com.giffing.wicket.spring.boot.starter.configuration.extensions.external.development.wicketsource;\n\nimport lombo"
},
{
"path": "wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/configuration/extensions/external/development/wicketsource/WicketSourceProperties.java",
"chars": 487,
"preview": "package com.giffing.wicket.spring.boot.starter.configuration.extensions.external.development.wicketsource;\n\nimport lombo"
},
{
"path": "wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/configuration/extensions/external/spring/boot/actuator/WicketEndpoint.java",
"chars": 946,
"preview": "package com.giffing.wicket.spring.boot.starter.configuration.extensions.external.spring.boot.actuator;\r\n\r\nimport com.gif"
},
{
"path": "wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/configuration/extensions/external/spring/boot/actuator/WicketEndpointConfiguration.java",
"chars": 785,
"preview": "package com.giffing.wicket.spring.boot.starter.configuration.extensions.external.spring.boot.actuator;\r\n\r\nimport org.spr"
},
{
"path": "wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/configuration/extensions/external/spring/boot/actuator/WicketEndpointRepositoryDefault.java",
"chars": 645,
"preview": "package com.giffing.wicket.spring.boot.starter.configuration.extensions.external.spring.boot.actuator;\r\n\r\nimport com.gif"
},
{
"path": "wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/configuration/extensions/external/spring/security/SecureWebSession.java",
"chars": 2629,
"preview": "package com.giffing.wicket.spring.boot.starter.configuration.extensions.external.spring.security;\r\n\r\nimport java.io.Seri"
},
{
"path": "wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/configuration/extensions/external/spring/security/SpringSecurityConfig.java",
"chars": 1637,
"preview": "package com.giffing.wicket.spring.boot.starter.configuration.extensions.external.spring.security;\n\nimport org.springfram"
},
{
"path": "wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/configuration/extensions/external/spring/security/SpringSecurityProperties.java",
"chars": 380,
"preview": "package com.giffing.wicket.spring.boot.starter.configuration.extensions.external.spring.security;\n\nimport org.springfram"
},
{
"path": "wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/configuration/extensions/external/webjars/WebjarsConfig.java",
"chars": 2165,
"preview": "package com.giffing.wicket.spring.boot.starter.configuration.extensions.external.webjars;\n\nimport jdk.jfr.Registered;\nim"
},
{
"path": "wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/configuration/extensions/external/webjars/WebjarsProperties.java",
"chars": 494,
"preview": "package com.giffing.wicket.spring.boot.starter.configuration.extensions.external.webjars;\n\nimport lombok.Getter;\nimport "
},
{
"path": "wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/configuration/extensions/stuff/annotationscan/AnnotatedMountScannerConfig.java",
"chars": 3280,
"preview": "package com.giffing.wicket.spring.boot.starter.configuration.extensions.stuff.annotationscan;\n\nimport java.util.ArrayLis"
},
{
"path": "wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/configuration/extensions/stuff/annotationscan/AnnotatedMountScannerProperties.java",
"chars": 724,
"preview": "package com.giffing.wicket.spring.boot.starter.configuration.extensions.stuff.annotationscan;\n\nimport lombok.Getter;\nimp"
},
{
"path": "wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/configuration/extensions/stuff/datastore/cassandra/DataStoreCassandraConfig.java",
"chars": 3419,
"preview": "package com.giffing.wicket.spring.boot.starter.configuration.extensions.stuff.datastore.cassandra;\n\nimport lombok.Requir"
},
{
"path": "wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/configuration/extensions/stuff/datastore/cassandra/DataStoreCassandraProperties.java",
"chars": 992,
"preview": "package com.giffing.wicket.spring.boot.starter.configuration.extensions.stuff.datastore.cassandra;\n\nimport com.giffing.w"
},
{
"path": "wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/configuration/extensions/stuff/datastore/hazelcast/DataStoreHazelcastConfig.java",
"chars": 3159,
"preview": "package com.giffing.wicket.spring.boot.starter.configuration.extensions.stuff.datastore.hazelcast;\n\nimport lombok.Requir"
},
{
"path": "wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/configuration/extensions/stuff/datastore/hazelcast/DataStoreHazelcastProperties.java",
"chars": 670,
"preview": "package com.giffing.wicket.spring.boot.starter.configuration.extensions.stuff.datastore.hazelcast;\r\n\r\nimport com.giffing"
},
{
"path": "wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/configuration/extensions/stuff/datastore/memcached/DataStoreMemcachedConfig.java",
"chars": 3485,
"preview": "package com.giffing.wicket.spring.boot.starter.configuration.extensions.stuff.datastore.memcached;\n\nimport lombok.Requir"
},
{
"path": "wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/configuration/extensions/stuff/datastore/memcached/DataStoreMemcachedProperties.java",
"chars": 930,
"preview": "package com.giffing.wicket.spring.boot.starter.configuration.extensions.stuff.datastore.memcached;\n\nimport com.giffing.w"
},
{
"path": "wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/configuration/extensions/stuff/datastore/redis/DataStoreRedisConfig.java",
"chars": 3253,
"preview": "package com.giffing.wicket.spring.boot.starter.configuration.extensions.stuff.datastore.redis;\n\nimport lombok.RequiredAr"
},
{
"path": "wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/configuration/extensions/stuff/datastore/redis/DataStoreRedisProperties.java",
"chars": 896,
"preview": "package com.giffing.wicket.spring.boot.starter.configuration.extensions.stuff.datastore.redis;\n\nimport lombok.Getter;\nim"
},
{
"path": "wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/configuration/extensions/stuff/htmlcompressor/HTMLCompressingConfig.java",
"chars": 3085,
"preview": "package com.giffing.wicket.spring.boot.starter.configuration.extensions.stuff.htmlcompressor;\n\nimport com.giffing.wicket"
},
{
"path": "wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/configuration/extensions/stuff/htmlcompressor/HTMLCompressingProperties.java",
"chars": 2298,
"preview": "package com.giffing.wicket.spring.boot.starter.configuration.extensions.stuff.htmlcompressor;\n\nimport com.googlecode.htm"
},
{
"path": "wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/configuration/extensions/stuff/monitoring/jamon/BootJamonAdminPage.java",
"chars": 520,
"preview": "package com.giffing.wicket.spring.boot.starter.configuration.extensions.stuff.monitoring.jamon;\n\nimport org.apache.wicke"
},
{
"path": "wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/configuration/extensions/stuff/monitoring/jamon/JamonConfig.java",
"chars": 1382,
"preview": "package com.giffing.wicket.spring.boot.starter.configuration.extensions.stuff.monitoring.jamon;\n\nimport com.giffing.wick"
},
{
"path": "wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/configuration/extensions/stuff/monitoring/jamon/JamonCssResourceReference.java",
"chars": 548,
"preview": "package com.giffing.wicket.spring.boot.starter.configuration.extensions.stuff.monitoring.jamon;\n\nimport org.apache.wicke"
},
{
"path": "wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/configuration/extensions/stuff/monitoring/jamon/JamonProperties.java",
"chars": 525,
"preview": "package com.giffing.wicket.spring.boot.starter.configuration.extensions.stuff.monitoring.jamon;\n\nimport lombok.Getter;\ni"
},
{
"path": "wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/configuration/extensions/stuff/monitoring/jamon/css/jamon.css",
"chars": 789,
"preview": ".jamonTable {\n\tbackground-color: #03487f;\n\tborder-width: 2px;\n\tborder-style: solid;\n\tborder-color: white;\n\tfont-weight: "
},
{
"path": "wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/configuration/extensions/stuff/restannotations/RestAnnotationsConfig.java",
"chars": 1711,
"preview": "package com.giffing.wicket.spring.boot.starter.configuration.extensions.stuff.restannotations;\n\nimport com.giffing.wicke"
},
{
"path": "wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/configuration/extensions/stuff/restannotations/RestAnnotationsProperties.java",
"chars": 498,
"preview": "package com.giffing.wicket.spring.boot.starter.configuration.extensions.stuff.restannotations;\n\nimport lombok.Getter;\nim"
},
{
"path": "wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/configuration/extensions/stuff/serializer/fast2/WicketSerializerFast2Config.java",
"chars": 2583,
"preview": "package com.giffing.wicket.spring.boot.starter.configuration.extensions.stuff.serializer.fast2;\n\nimport com.giffing.wick"
},
{
"path": "wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/configuration/extensions/stuff/serializer/fast2/WicketSerializerFast2Properties.java",
"chars": 390,
"preview": "package com.giffing.wicket.spring.boot.starter.configuration.extensions.stuff.serializer.fast2;\n\nimport org.springframew"
},
{
"path": "wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/configuration/extensions/stuff/serializer/kryo2/WicketSerializerKryo2Config.java",
"chars": 2505,
"preview": "package com.giffing.wicket.spring.boot.starter.configuration.extensions.stuff.serializer.kryo2;\n\nimport com.giffing.wick"
},
{
"path": "wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/configuration/extensions/stuff/serializer/kryo2/WicketSerializerKryo2Properties.java",
"chars": 389,
"preview": "package com.giffing.wicket.spring.boot.starter.configuration.extensions.stuff.serializer.kryo2;\n\nimport org.springframew"
},
{
"path": "wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/configuration/extensions/stuff/shiro/ShiroSecurityConfig.java",
"chars": 3244,
"preview": "package com.giffing.wicket.spring.boot.starter.configuration.extensions.stuff.shiro;\r\n\r\nimport lombok.RequiredArgsConstr"
},
{
"path": "wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/configuration/extensions/stuff/shiro/ShiroSecurityProperties.java",
"chars": 475,
"preview": "package com.giffing.wicket.spring.boot.starter.configuration.extensions.stuff.shiro;\r\n\r\nimport lombok.Getter;\r\nimport lo"
},
{
"path": "wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/configuration/extensions/stuff/springreference/SpringReferenceConfig.java",
"chars": 1651,
"preview": "package com.giffing.wicket.spring.boot.starter.configuration.extensions.stuff.springreference;\n\nimport com.giffing.wicke"
},
{
"path": "wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/configuration/extensions/stuff/springreference/SpringReferenceProperties.java",
"chars": 473,
"preview": "package com.giffing.wicket.spring.boot.starter.configuration.extensions.stuff.springreference;\n\nimport lombok.Getter;\nim"
},
{
"path": "wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/web/WicketWebInitializer.java",
"chars": 2541,
"preview": "package com.giffing.wicket.spring.boot.starter.web;\n\nimport com.giffing.wicket.spring.boot.context.extensions.boot.actua"
},
{
"path": "wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/web/WicketWebInitializerProperties.java",
"chars": 845,
"preview": "package com.giffing.wicket.spring.boot.starter.web;\n\nimport jakarta.servlet.DispatcherType;\nimport lombok.Getter;\nimport"
},
{
"path": "wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/web/config/WicketWebInitializerAutoConfig.java",
"chars": 3238,
"preview": "package com.giffing.wicket.spring.boot.starter.web.config;\n\nimport com.giffing.wicket.spring.boot.starter.web.servlet.st"
},
{
"path": "wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/web/config/WicketWebInitializerConfig.java",
"chars": 749,
"preview": "package com.giffing.wicket.spring.boot.starter.web.config;\n\nimport com.giffing.wicket.spring.boot.starter.web.WicketWebI"
},
{
"path": "wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/web/servlet/standard/StandardWicketWebInitializer.java",
"chars": 694,
"preview": "package com.giffing.wicket.spring.boot.starter.web.servlet.standard;\n\nimport com.giffing.wicket.spring.boot.starter.web."
},
{
"path": "wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/web/servlet/websocket/DummyWicketSessionResolver.java",
"chars": 280,
"preview": "package com.giffing.wicket.spring.boot.starter.web.servlet.websocket;\r\n\r\nimport java.util.List;\r\n\r\npublic class DummyWic"
},
{
"path": "wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/web/servlet/websocket/WebSocketMessageBroadcaster.java",
"chars": 1010,
"preview": "package com.giffing.wicket.spring.boot.starter.web.servlet.websocket;\n\nimport org.apache.wicket.protocol.ws.api.message."
},
{
"path": "wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/web/servlet/websocket/WebSocketMessageSenderDefault.java",
"chars": 2010,
"preview": "package com.giffing.wicket.spring.boot.starter.web.servlet.websocket;\n\nimport org.apache.wicket.Application;\nimport org."
},
{
"path": "wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/web/servlet/websocket/WebSocketWicketWebInitializer.java",
"chars": 684,
"preview": "package com.giffing.wicket.spring.boot.starter.web.servlet.websocket;\n\nimport com.giffing.wicket.spring.boot.starter.web"
},
{
"path": "wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/web/servlet/websocket/WicketServerEndpointConfigRegister.java",
"chars": 1214,
"preview": "package com.giffing.wicket.spring.boot.starter.web.servlet.websocket;\n\nimport com.giffing.wicket.spring.boot.context.exc"
},
{
"path": "wicket-spring-boot-starter/src/main/java/com/giffing/wicket/spring/boot/starter/web/servlet/websocket/WicketSessionResolver.java",
"chars": 302,
"preview": "package com.giffing.wicket.spring.boot.starter.web.servlet.websocket;\r\n\r\nimport java.util.List;\r\n\r\npublic interface Wick"
},
{
"path": "wicket-spring-boot-starter/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports",
"chars": 63,
"preview": "com.giffing.wicket.spring.boot.starter.WicketAutoConfiguration\n"
},
{
"path": "wicket-spring-boot-starter/src/main/resources/META-INF/spring-devtools.properties",
"chars": 135,
"preview": "restart.include.wicket-annotation=/wicketstuff-annotation-[\\\\w-\\.]+\\.jar\r\nrestart.include.wicket-spring=/wicket-spring-["
},
{
"path": "wicket-spring-boot-starter/src/main/resources/META-INF/spring.factories",
"chars": 355,
"preview": "org.springframework.boot.env.EnvironmentPostProcessor=com.giffing.wicket.spring.boot.starter.configuration.extensions.ex"
},
{
"path": "wicket-spring-boot-starter/src/main/resources/application-development.yml",
"chars": 1284,
"preview": "spring:\n h2:\n console:\n enabled: true\n devtools:\n restart:\n additional-exclude: /**/*.js, /**/*.css, /"
},
{
"path": "wicket-spring-boot-starter-example/.gitignore",
"chars": 86,
"preview": "/target/\n/.settings/\n.classpath\n.project\n.springBeans\n/src/main/resources/public/docs/"
},
{
"path": "wicket-spring-boot-starter-example/pom.xml",
"chars": 14866,
"preview": "<project xmlns=\"http://maven.apache.org/POM/4.0.0\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n xsi:sc"
},
{
"path": "wicket-spring-boot-starter-example/src/main/doc/index.adoc",
"chars": 51,
"preview": "= Example Title\n\n== Sub Section 1\n\n== Sub Section 2"
},
{
"path": "wicket-spring-boot-starter-example/src/main/java/com/giffing/wicket/spring/boot/example/WicketApplication.java",
"chars": 660,
"preview": "package com.giffing.wicket.spring.boot.example;\n\nimport com.giffing.wicket.spring.boot.example.repository.services.Defau"
},
{
"path": "wicket-spring-boot-starter-example/src/main/java/com/giffing/wicket/spring/boot/example/WicketApplication.properties",
"chars": 17,
"preview": "login.label=Login"
},
{
"path": "wicket-spring-boot-starter-example/src/main/java/com/giffing/wicket/spring/boot/example/model/Customer.java",
"chars": 642,
"preview": "package com.giffing.wicket.spring.boot.example.model;\n\nimport com.giffing.wicket.spring.boot.example.repository.Domain;\n"
},
{
"path": "wicket-spring-boot-starter-example/src/main/java/com/giffing/wicket/spring/boot/example/repository/DefaultFilter.java",
"chars": 463,
"preview": "package com.giffing.wicket.spring.boot.example.repository;\n\npublic abstract class DefaultFilter implements Filter {\n\n "
},
{
"path": "wicket-spring-boot-starter-example/src/main/java/com/giffing/wicket/spring/boot/example/repository/Domain.java",
"chars": 110,
"preview": "package com.giffing.wicket.spring.boot.example.repository;\n\npublic interface Domain<ID> {\n\n ID getId();\n\n}\n"
},
{
"path": "wicket-spring-boot-starter-example/src/main/java/com/giffing/wicket/spring/boot/example/repository/Filter.java",
"chars": 235,
"preview": "package com.giffing.wicket.spring.boot.example.repository;\n\nimport java.io.Serializable;\n\npublic interface Filter extend"
},
{
"path": "wicket-spring-boot-starter-example/src/main/java/com/giffing/wicket/spring/boot/example/repository/FilterService.java",
"chars": 296,
"preview": "package com.giffing.wicket.spring.boot.example.repository;\n\nimport java.util.List;\n\npublic interface FilterService<MODEL"
},
{
"path": "wicket-spring-boot-starter-example/src/main/java/com/giffing/wicket/spring/boot/example/repository/Sort.java",
"chars": 114,
"preview": "package com.giffing.wicket.spring.boot.example.repository;\n\npublic interface Sort {\n\n String getFieldName();\n}\n"
},
{
"path": "wicket-spring-boot-starter-example/src/main/java/com/giffing/wicket/spring/boot/example/repository/services/DefaultRepositoryService.java",
"chars": 747,
"preview": "package com.giffing.wicket.spring.boot.example.repository.services;\n\nimport com.giffing.wicket.spring.boot.example.repos"
},
{
"path": "wicket-spring-boot-starter-example/src/main/java/com/giffing/wicket/spring/boot/example/repository/services/customer/CustomerRepository.java",
"chars": 507,
"preview": "package com.giffing.wicket.spring.boot.example.repository.services.customer;\n\nimport com.giffing.wicket.spring.boot.exam"
},
{
"path": "wicket-spring-boot-starter-example/src/main/java/com/giffing/wicket/spring/boot/example/repository/services/customer/CustomerRepositoryService.java",
"chars": 789,
"preview": "package com.giffing.wicket.spring.boot.example.repository.services.customer;\r\n\r\nimport com.giffing.wicket.spring.boot.ex"
},
{
"path": "wicket-spring-boot-starter-example/src/main/java/com/giffing/wicket/spring/boot/example/repository/services/customer/CustomerRepositoryServiceImpl.java",
"chars": 4612,
"preview": "package com.giffing.wicket.spring.boot.example.repository.services.customer;\n\n\nimport com.giffing.wicket.spring.boot.exa"
},
{
"path": "wicket-spring-boot-starter-example/src/main/java/com/giffing/wicket/spring/boot/example/repository/services/customer/filter/CustomerFilter.java",
"chars": 610,
"preview": "package com.giffing.wicket.spring.boot.example.repository.services.customer.filter;\n\nimport com.giffing.wicket.spring.bo"
},
{
"path": "wicket-spring-boot-starter-example/src/main/java/com/giffing/wicket/spring/boot/example/repository/services/customer/filter/CustomerSort.java",
"chars": 510,
"preview": "package com.giffing.wicket.spring.boot.example.repository.services.customer.filter;\n\nimport com.giffing.wicket.spring.bo"
},
{
"path": "wicket-spring-boot-starter-example/src/main/java/com/giffing/wicket/spring/boot/example/repository/services/customer/specs/CustomerSpecs.java",
"chars": 1632,
"preview": "package com.giffing.wicket.spring.boot.example.repository.services.customer.specs;\n\nimport com.giffing.wicket.spring.boo"
},
{
"path": "wicket-spring-boot-starter-example/src/main/java/com/giffing/wicket/spring/boot/example/web/SpringBootWebPackageIdentifier.java",
"chars": 106,
"preview": "package com.giffing.wicket.spring.boot.example.web;\n\npublic interface SpringBootWebPackageIdentifier {\n\n}\n"
},
{
"path": "wicket-spring-boot-starter-example/src/main/java/com/giffing/wicket/spring/boot/example/web/assets/base/CustomStylesCssRessourceReference.java",
"chars": 447,
"preview": "package com.giffing.wicket.spring.boot.example.web.assets.base;\n\nimport org.apache.wicket.request.resource.CssResourceRe"
},
{
"path": "wicket-spring-boot-starter-example/src/main/java/com/giffing/wicket/spring/boot/example/web/assets/base/custom.css",
"chars": 77,
"preview": ".navbar {\n --bs-navbar-padding-x: 1;\n}\n\n.items {\n padding-right: 5px;\n}"
},
{
"path": "wicket-spring-boot-starter-example/src/main/java/com/giffing/wicket/spring/boot/example/web/general/action/panel/ActionPanel.html",
"chars": 99,
"preview": "<wicket:panel><span wicket:id=\"items\" class=\"items\"><span wicket:id=\"item\" /></span></wicket:panel>"
},
{
"path": "wicket-spring-boot-starter-example/src/main/java/com/giffing/wicket/spring/boot/example/web/general/action/panel/ActionPanel.java",
"chars": 756,
"preview": "package com.giffing.wicket.spring.boot.example.web.general.action.panel;\n\nimport com.giffing.wicket.spring.boot.example."
},
{
"path": "wicket-spring-boot-starter-example/src/main/java/com/giffing/wicket/spring/boot/example/web/general/action/panel/items/AbstractActionItemLink.html",
"chars": 107,
"preview": "<wicket:panel>\n<a wicket:id=\"link\">\n\t<span aria-hidden=\"true\" wicket:id=\"icon\"></span>\n</a>\n</wicket:panel>"
},
{
"path": "wicket-spring-boot-starter-example/src/main/java/com/giffing/wicket/spring/boot/example/web/general/action/panel/items/AbstractActionItemLink.java",
"chars": 816,
"preview": "package com.giffing.wicket.spring.boot.example.web.general.action.panel.items;\n\nimport de.agilecoders.wicket.core.markup"
},
{
"path": "wicket-spring-boot-starter-example/src/main/java/com/giffing/wicket/spring/boot/example/web/general/action/panel/items/AbstrractActionItem.java",
"chars": 260,
"preview": "package com.giffing.wicket.spring.boot.example.web.general.action.panel.items;\n\nimport org.apache.wicket.markup.html.pan"
},
{
"path": "wicket-spring-boot-starter-example/src/main/java/com/giffing/wicket/spring/boot/example/web/general/action/panel/items/links/ActionItemLink.html",
"chars": 107,
"preview": "<wicket:panel>\n<a wicket:id=\"link\">\n\t<span aria-hidden=\"true\" wicket:id=\"icon\"></span>\n</a>\n</wicket:panel>"
},
{
"path": "wicket-spring-boot-starter-example/src/main/java/com/giffing/wicket/spring/boot/example/web/general/action/panel/items/links/ActionItemLink.java",
"chars": 580,
"preview": "package com.giffing.wicket.spring.boot.example.web.general.action.panel.items.links;\n\nimport com.giffing.wicket.spring.b"
},
{
"path": "wicket-spring-boot-starter-example/src/main/java/com/giffing/wicket/spring/boot/example/web/general/action/panel/items/yesno/YesNoLink.java",
"chars": 1282,
"preview": "package com.giffing.wicket.spring.boot.example.web.general.action.panel.items.yesno;\n\nimport com.giffing.wicket.spring.b"
},
{
"path": "wicket-spring-boot-starter-example/src/main/java/com/giffing/wicket/spring/boot/example/web/general/notify/NotyJSReference.java",
"chars": 386,
"preview": "package com.giffing.wicket.spring.boot.example.web.general.notify;\r\n\r\nimport org.apache.wicket.resource.JQueryPluginReso"
},
{
"path": "wicket-spring-boot-starter-example/src/main/java/com/giffing/wicket/spring/boot/example/web/general/notify/NotyPackagedJSReference.java",
"chars": 441,
"preview": "package com.giffing.wicket.spring.boot.example.web.general.notify;\r\n\r\nimport org.apache.wicket.resource.JQueryPluginReso"
},
{
"path": "wicket-spring-boot-starter-example/src/main/java/com/giffing/wicket/spring/boot/example/web/general/notify/NotyThemeBootstrapJSReference.java",
"chars": 467,
"preview": "package com.giffing.wicket.spring.boot.example.web.general.notify;\r\n\r\nimport org.apache.wicket.resource.JQueryPluginReso"
},
{
"path": "wicket-spring-boot-starter-example/src/main/java/com/giffing/wicket/spring/boot/example/web/general/notify/jquery.noty.js",
"chars": 20001,
"preview": "/*!\r\n @package noty - jQuery Notification Plugin\r\n @version version: 2.4.1\r\n @contributors https://github.com/needim/not"
},
{
"path": "wicket-spring-boot-starter-example/src/main/java/com/giffing/wicket/spring/boot/example/web/general/notify/noty.theme.bootstrap.js",
"chars": 1973,
"preview": "$.noty.themes.bootstrapTheme = {\r\n name : 'bootstrapTheme',\r\n modal : {\r\n css: {\r\n position : 'fixe"
},
{
"path": "wicket-spring-boot-starter-example/src/main/java/com/giffing/wicket/spring/boot/example/web/html/autocomplete/AutoCompleteTextField.css",
"chars": 290,
"preview": "div.wicket-aa {\n background-color:white;\n border:1px solid #2387C4;\n color:black;\n}\ndiv.wicket-aa ul {\n list-"
},
{
"path": "wicket-spring-boot-starter-example/src/main/java/com/giffing/wicket/spring/boot/example/web/html/autocomplete/AutoCompleteTextField.java",
"chars": 1058,
"preview": "package com.giffing.wicket.spring.boot.example.web.html.autocomplete;\n\nimport org.apache.wicket.extensions.ajax.markup.h"
},
{
"path": "wicket-spring-boot-starter-example/src/main/java/com/giffing/wicket/spring/boot/example/web/html/basic/YesNoLabel.java",
"chars": 672,
"preview": "package com.giffing.wicket.spring.boot.example.web.html.basic;\n\nimport org.apache.wicket.markup.ComponentTag;\nimport org"
},
{
"path": "wicket-spring-boot-starter-example/src/main/java/com/giffing/wicket/spring/boot/example/web/html/border/behavior/ValidationMsgBehavior.html",
"chars": 66,
"preview": "<wicket:border>\n\t<div>\n\t\t<wicket:body />\n\t</div>\n</wicket:border>\n"
},
{
"path": "wicket-spring-boot-starter-example/src/main/java/com/giffing/wicket/spring/boot/example/web/html/border/behavior/ValidationMsgBehavior.java",
"chars": 1185,
"preview": "package com.giffing.wicket.spring.boot.example.web.html.border.behavior;\n\n\nimport org.apache.wicket.Component;\nimport or"
},
{
"path": "wicket-spring-boot-starter-example/src/main/java/com/giffing/wicket/spring/boot/example/web/html/form/ValidationForm.java",
"chars": 615,
"preview": "package com.giffing.wicket.spring.boot.example.web.html.form;\n\nimport de.agilecoders.wicket.core.markup.html.bootstrap.f"
},
{
"path": "wicket-spring-boot-starter-example/src/main/java/com/giffing/wicket/spring/boot/example/web/html/form/ValidationFormVisitor.java",
"chars": 925,
"preview": "package com.giffing.wicket.spring.boot.example.web.html.form;\n\nimport com.giffing.wicket.spring.boot.example.web.html.bo"
},
{
"path": "wicket-spring-boot-starter-example/src/main/java/com/giffing/wicket/spring/boot/example/web/html/form/focus/FocusBehaviour.java",
"chars": 690,
"preview": "package com.giffing.wicket.spring.boot.example.web.html.form.focus;\n\nimport org.apache.wicket.Component;\nimport org.apac"
},
{
"path": "wicket-spring-boot-starter-example/src/main/java/com/giffing/wicket/spring/boot/example/web/html/modal/YesNoModal.html",
"chars": 190,
"preview": "<html xmlns:wicket=\"http://wicket.apache.org\">\n<head>\n <title>TextContentModal</title>\n</head>\n<body>\n<wicket:extend>"
},
{
"path": "wicket-spring-boot-starter-example/src/main/java/com/giffing/wicket/spring/boot/example/web/html/modal/YesNoModal.java",
"chars": 909,
"preview": "package com.giffing.wicket.spring.boot.example.web.html.modal;\n\nimport de.agilecoders.wicket.core.markup.html.bootstrap."
},
{
"path": "wicket-spring-boot-starter-example/src/main/java/com/giffing/wicket/spring/boot/example/web/html/modal/YesNoPanel.html",
"chars": 309,
"preview": "<html xmlns:wicket=\"http://wicket.apache.org\">\n<head>\n <title>TextContentModal</title>\n</head>\n<body>\n<wicket:pan"
},
{
"path": "wicket-spring-boot-starter-example/src/main/java/com/giffing/wicket/spring/boot/example/web/html/modal/YesNoPanel.java",
"chars": 859,
"preview": "package com.giffing.wicket.spring.boot.example.web.html.modal;\n\nimport org.apache.wicket.ajax.AjaxRequestTarget;\nimport "
},
{
"path": "wicket-spring-boot-starter-example/src/main/java/com/giffing/wicket/spring/boot/example/web/html/panel/FeedbackPanel.html",
"chars": 288,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n<html xmlns:wicket=\"http://wicket.apache.org\">\n<body>\n<wicket:panel>\n <div wick"
},
{
"path": "wicket-spring-boot-starter-example/src/main/java/com/giffing/wicket/spring/boot/example/web/html/panel/FeedbackPanel.java",
"chars": 226,
"preview": "package com.giffing.wicket.spring.boot.example.web.html.panel;\n\npublic class FeedbackPanel extends org.apache.wicket.mar"
},
{
"path": "wicket-spring-boot-starter-example/src/main/java/com/giffing/wicket/spring/boot/example/web/html/repeater/data/table/filter/AbstractCheckBoxFilter.html",
"chars": 112,
"preview": "<wicket:panel xmlns:wicket=\"http://wicket.apache.org\"><input type=\"checkbox\" wicket:id=\"filter\"/></wicket:panel>"
},
{
"path": "wicket-spring-boot-starter-example/src/main/java/com/giffing/wicket/spring/boot/example/web/html/repeater/data/table/filter/AbstractCheckBoxFilter.java",
"chars": 1262,
"preview": "package com.giffing.wicket.spring.boot.example.web.html.repeater.data.table.filter;\n\nimport org.apache.wicket.extensions"
},
{
"path": "wicket-spring-boot-starter-example/src/main/java/com/giffing/wicket/spring/boot/example/web/html/repeater/data/table/filter/AbstractTextFieldFilter.html",
"chars": 108,
"preview": "<wicket:panel xmlns:wicket=\"http://wicket.apache.org\"><input type=\"text\" wicket:id=\"filter\"/></wicket:panel>"
},
{
"path": "wicket-spring-boot-starter-example/src/main/java/com/giffing/wicket/spring/boot/example/web/html/repeater/data/table/filter/AbstractTextFieldFilter.java",
"chars": 1048,
"preview": "package com.giffing.wicket.spring.boot.example.web.html.repeater.data.table.filter;\n\nimport org.apache.wicket.extensions"
},
{
"path": "wicket-spring-boot-starter-example/src/main/java/com/giffing/wicket/spring/boot/example/web/pages/BaseAuthenticatedPage.html",
"chars": 376,
"preview": "<!DOCTYPE html>\n<html xmlns:wicket=\"http://wicket.apache.org\">\n<head>\n <meta charset=\"utf-8\" />\n <title>Spring Boo"
},
{
"path": "wicket-spring-boot-starter-example/src/main/java/com/giffing/wicket/spring/boot/example/web/pages/BaseAuthenticatedPage.java",
"chars": 4416,
"preview": "package com.giffing.wicket.spring.boot.example.web.pages;\n\nimport com.giffing.wicket.spring.boot.example.web.pages.custo"
},
{
"path": "wicket-spring-boot-starter-example/src/main/java/com/giffing/wicket/spring/boot/example/web/pages/BaseAuthenticatedPage.properties",
"chars": 507,
"preview": "id=Id\nusername=Username\nfirstname=Firstname\nlastname=Lastname\nactive=Active\npassword=Password\nusernameLike=Username\nfirs"
},
{
"path": "wicket-spring-boot-starter-example/src/main/java/com/giffing/wicket/spring/boot/example/web/pages/BasePage.html",
"chars": 691,
"preview": "<!DOCTYPE html>\n<html xmlns:wicket=\"http://wicket.apache.org\">\n <head>\n <meta charset=\"utf-8\">\n <title>"
},
{
"path": "wicket-spring-boot-starter-example/src/main/java/com/giffing/wicket/spring/boot/example/web/pages/BasePage.java",
"chars": 3653,
"preview": "package com.giffing.wicket.spring.boot.example.web.pages;\n\nimport com.giffing.wicket.spring.boot.example.web.assets.base"
},
{
"path": "wicket-spring-boot-starter-example/src/main/java/com/giffing/wicket/spring/boot/example/web/pages/WicketBootstrapInitializer.java",
"chars": 1673,
"preview": "package com.giffing.wicket.spring.boot.example.web.pages;\n\nimport com.giffing.wicket.spring.boot.context.extensions.Appl"
},
{
"path": "wicket-spring-boot-starter-example/src/main/java/com/giffing/wicket/spring/boot/example/web/pages/customers/CustomerListPage.html",
"chars": 1889,
"preview": "<html xmlns:wicket=\"http://wicket.apache.org\">\n<body>\n<wicket:extend>\n <header class=\"jumbotron subhead\" id=\"content\""
},
{
"path": "wicket-spring-boot-starter-example/src/main/java/com/giffing/wicket/spring/boot/example/web/pages/customers/CustomerListPage.java",
"chars": 12706,
"preview": "package com.giffing.wicket.spring.boot.example.web.pages.customers;\r\n\r\nimport java.util.ArrayList;\r\nimport java.util.Lis"
},
{
"path": "wicket-spring-boot-starter-example/src/main/java/com/giffing/wicket/spring/boot/example/web/pages/customers/create/CustomerCreatePage.html",
"chars": 1571,
"preview": "<html xmlns:wicket=\"http://wicket.apache.org\">\n<body>\n<wicket:extend>\n\n <header class=\"jumbotron subhead\" id=\"content"
},
{
"path": "wicket-spring-boot-starter-example/src/main/java/com/giffing/wicket/spring/boot/example/web/pages/customers/create/CustomerCreatePage.java",
"chars": 3853,
"preview": "package com.giffing.wicket.spring.boot.example.web.pages.customers.create;\n\nimport com.giffing.wicket.spring.boot.exampl"
},
{
"path": "wicket-spring-boot-starter-example/src/main/java/com/giffing/wicket/spring/boot/example/web/pages/customers/edit/CustomerEditPage.java",
"chars": 2318,
"preview": "package com.giffing.wicket.spring.boot.example.web.pages.customers.edit;\n\nimport com.giffing.wicket.spring.boot.example."
},
{
"path": "wicket-spring-boot-starter-example/src/main/java/com/giffing/wicket/spring/boot/example/web/pages/customers/edit/CustomerEditPage.properties",
"chars": 91,
"preview": "param.customer.id.missing=Missing customer id {0}\ncustomer.not-found=Customer not found {0}"
},
{
"path": "wicket-spring-boot-starter-example/src/main/java/com/giffing/wicket/spring/boot/example/web/pages/customers/events/CustomerChangedEvent.java",
"chars": 415,
"preview": "package com.giffing.wicket.spring.boot.example.web.pages.customers.events;\n\nimport com.giffing.wicket.spring.boot.exampl"
},
{
"path": "wicket-spring-boot-starter-example/src/main/java/com/giffing/wicket/spring/boot/example/web/pages/customers/events/CustomerDeletedEvent.java",
"chars": 415,
"preview": "package com.giffing.wicket.spring.boot.example.web.pages.customers.events;\n\nimport com.giffing.wicket.spring.boot.exampl"
},
{
"path": "wicket-spring-boot-starter-example/src/main/java/com/giffing/wicket/spring/boot/example/web/pages/customers/model/CustomerDataProvider.java",
"chars": 1412,
"preview": "package com.giffing.wicket.spring.boot.example.web.pages.customers.model;\n\nimport com.giffing.wicket.spring.boot.example"
}
]
// ... and 43 more files (download for full content)
About this extraction
This page contains the full source code of the MarcGiffing/wicket-spring-boot GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 243 files (389.0 KB), approximately 96.1k tokens, and a symbol index with 505 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.