This is an automated email from the ASF dual-hosted git repository. juanpablo pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/jspwiki.git
commit 9980e7a4eef9552c69f3229cb1f1b0f37e791da2 Author: juanpablo <[email protected]> AuthorDate: Tue Mar 31 19:12:36 2020 +0200 Move WikiSPIServletContextListener to new jspwiki-bootstrap module this module will be responsible for the wiki's initial procedures: * locating + and instantiating the Wiki SPI implementation to be used * log configuration preparing the migration to log4j2, log4j loads only if present on classpath (which, right now, is always) --- .../api/spi/WikiSPIServletContextListener.java | 20 ----- .../test/java/org/apache/wiki/api/ReleaseTest.java | 0 jspwiki-bootstrap/pom.xml | 92 ++++++++++++++++++++++ .../bootstrap/WikiSPIServletContextListener.java | 75 ++++++++++++++++++ .../java/org/apache/wiki/bootstrap/package.html | 42 ++++++++++ .../WikiSPIServletContextListenerTest.java | 65 +++++++++++++++ .../apache/wiki/bootstrap/spi/AclsSPITestImpl.java | 20 +++++ .../wiki/bootstrap/spi/ContentsSPITestImpl.java | 21 +++++ .../wiki/bootstrap/spi/ContextSPITestImpl.java | 34 ++++++++ .../wiki/bootstrap/spi/EngineSPITestImpl.java | 16 ++++ .../wiki/bootstrap/spi/SessionSPITestImpl.java | 26 ++++++ .../services/org.apache.wiki.api.spi.AclsSPI | 1 + .../services/org.apache.wiki.api.spi.ContentsSPI | 1 + .../services/org.apache.wiki.api.spi.ContextSPI | 1 + .../services/org.apache.wiki.api.spi.EngineSPI | 1 + .../services/org.apache.wiki.api.spi.SessionSPI | 1 + .../src/test/resources/ini/jspwiki.properties | 5 ++ 17 files changed, 401 insertions(+), 20 deletions(-) diff --git a/jspwiki-api/src/main/java/org/apache/wiki/api/spi/WikiSPIServletContextListener.java b/jspwiki-api/src/main/java/org/apache/wiki/api/spi/WikiSPIServletContextListener.java deleted file mode 100644 index 233aac9..0000000 --- a/jspwiki-api/src/main/java/org/apache/wiki/api/spi/WikiSPIServletContextListener.java +++ /dev/null @@ -1,20 +0,0 @@ -package org.apache.wiki.api.spi; - -import javax.servlet.ServletContextEvent; -import javax.servlet.ServletContextListener; - - -public class WikiSPIServletContextListener implements ServletContextListener { - - /** {@inheritDoc} */ - @Override - public void contextInitialized( final ServletContextEvent sce ) { - Wiki.init( sce.getServletContext() ); - } - - /** {@inheritDoc} */ - @Override - public void contextDestroyed( final ServletContextEvent sce ) { - } - -} diff --git a/jspwiki-main/src/test/java/org/apache/wiki/api/ReleaseTest.java b/jspwiki-api/src/test/java/org/apache/wiki/api/ReleaseTest.java similarity index 100% rename from jspwiki-main/src/test/java/org/apache/wiki/api/ReleaseTest.java rename to jspwiki-api/src/test/java/org/apache/wiki/api/ReleaseTest.java diff --git a/jspwiki-bootstrap/pom.xml b/jspwiki-bootstrap/pom.xml new file mode 100644 index 0000000..480a7f2 --- /dev/null +++ b/jspwiki-bootstrap/pom.xml @@ -0,0 +1,92 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Licensed to the Apache Software Foundation (ASF) under one + or more contributor license agreements. See the NOTICE file + distributed with this work for additional information + regarding copyright ownership. The ASF licenses this file + to you under the Apache License, Version 2.0 (the + "License"); you may not use this file except in compliance + with the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, + software distributed under the License is distributed on an + "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + KIND, either express or implied. See the License for the + specific language governing permissions and limitations + under the License. +--> +<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/maven-v4_0_0.xsd"> + + <parent> + <groupId>org.apache.jspwiki</groupId> + <artifactId>jspwiki-builder</artifactId> + <version>2.11.0.M7-SNAPSHOT</version> + </parent> + + <modelVersion>4.0.0</modelVersion> + <artifactId>jspwiki-bootstrap</artifactId> + <name>Apache JSPWiki bootstrapping procedures</name> + + <dependencies> + <dependency> + <groupId>${project.groupId}</groupId> + <artifactId>jspwiki-api</artifactId> + <version>${project.version}</version> + </dependency> + + <dependency> + <groupId>${project.groupId}</groupId> + <artifactId>jspwiki-util</artifactId> + <version>${project.version}</version> + </dependency> + + <dependency> + <groupId>javax.servlet</groupId> + <artifactId>javax.servlet-api</artifactId> + <scope>provided</scope> + </dependency> + + <dependency> + <groupId>javax.servlet.jsp</groupId> + <artifactId>javax.servlet.jsp-api</artifactId> + <scope>provided</scope> + </dependency> + + <dependency> + <groupId>log4j</groupId> + <artifactId>log4j</artifactId> + </dependency> + + <dependency> + <groupId>org.junit.jupiter</groupId> + <artifactId>junit-jupiter-api</artifactId> + <scope>test</scope> + </dependency> + + <dependency> + <groupId>org.junit.jupiter</groupId> + <artifactId>junit-jupiter-params</artifactId> + <scope>test</scope> + </dependency> + + <dependency> + <groupId>org.junit.jupiter</groupId> + <artifactId>junit-jupiter-engine</artifactId> + <scope>test</scope> + </dependency> + + <dependency> + <groupId>org.mockito</groupId> + <artifactId>mockito-core</artifactId> + <scope>test</scope> + </dependency> + + <dependency> + <groupId>org.mockito</groupId> + <artifactId>mockito-junit-jupiter</artifactId> + <scope>test</scope> + </dependency> + </dependencies> +</project> diff --git a/jspwiki-bootstrap/src/main/java/org/apache/wiki/bootstrap/WikiSPIServletContextListener.java b/jspwiki-bootstrap/src/main/java/org/apache/wiki/bootstrap/WikiSPIServletContextListener.java new file mode 100644 index 0000000..172c140 --- /dev/null +++ b/jspwiki-bootstrap/src/main/java/org/apache/wiki/bootstrap/WikiSPIServletContextListener.java @@ -0,0 +1,75 @@ +/* + Licensed to the Apache Software Foundation (ASF) under one + or more contributor license agreements. See the NOTICE file + distributed with this work for additional information + regarding copyright ownership. The ASF licenses this file + to you under the Apache License, Version 2.0 (the + "License"); you may not use this file except in compliance + with the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, + software distributed under the License is distributed on an + "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + KIND, either express or implied. See the License for the + specific language governing permissions and limitations + under the License. + */ +package org.apache.wiki.bootstrap; + +import org.apache.log4j.PropertyConfigurator; +import org.apache.wiki.api.spi.Wiki; +import org.apache.wiki.util.ClassUtil; +import org.apache.wiki.util.TextUtil; + +import javax.servlet.ServletContextEvent; +import javax.servlet.ServletContextListener; +import java.util.Properties; + + +public class WikiSPIServletContextListener implements ServletContextListener { + + /** {@inheritDoc} */ + @Override + public void contextInitialized( final ServletContextEvent sce ) { + final Properties properties = initWikiSPIs( sce ); + initWikiLoggingFramework( properties ); + } + + /** + * Locate and init JSPWiki SPIs' implementations + * + * @param sce associated servlet context. + * @return JSPWiki configuration properties. + */ + Properties initWikiSPIs( final ServletContextEvent sce ) { + return Wiki.init( sce.getServletContext() ); + } + + /** + * Initialize the logging framework(s). By default we try to load the log config statements from jspwiki.properties, + * unless the property jspwiki.use.external.logconfig=true, in that case we let the logging framework figure out the + * logging configuration. + * + * <p>For Log4J, we only try to initialize it if its present on classpath</p> + * + * @param properties JSPWiki configuration properties. + * @return {@code true} if configuration was read from jspwiki.properties, {@code false} otherwise. + */ + boolean initWikiLoggingFramework( final Properties properties ) { + final String useExternalLogConfig = TextUtil.getStringProperty( properties,"jspwiki.use.external.logconfig","false" ); + if( useExternalLogConfig.equals( "false" ) ) { + if( ClassUtil.exists( "org.apache.log4j.Logger" ) ) { + PropertyConfigurator.configure( properties ); + } + } + return useExternalLogConfig.equals( "false" ); + } + + /** {@inheritDoc} */ + @Override + public void contextDestroyed( final ServletContextEvent sce ) { + } + +} diff --git a/jspwiki-bootstrap/src/main/java/org/apache/wiki/bootstrap/package.html b/jspwiki-bootstrap/src/main/java/org/apache/wiki/bootstrap/package.html new file mode 100644 index 0000000..29d351d --- /dev/null +++ b/jspwiki-bootstrap/src/main/java/org/apache/wiki/bootstrap/package.html @@ -0,0 +1,42 @@ +<!-- + Licensed to the Apache Software Foundation (ASF) under one + or more contributor license agreements. See the NOTICE file + distributed with this work for additional information + regarding copyright ownership. The ASF licenses this file + to you under the Apache License, Version 2.0 (the + "License"); you may not use this file except in compliance + with the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, + software distributed under the License is distributed on an + "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + KIND, either express or implied. See the License for the + specific language governing permissions and limitations + under the License. +--> + +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> +<html lang="en"> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> +<title>JSPWiki's Bootstrapping facilities</title> +</head> +<body> +JSPWiki's Bootstrapping procedures package. + +This package holds all the classes needed to bootstrap JSPWiki, prior to Engine creation: +<ul> + <li>JSPWiki's SPIs implementation location</li> + <li>Log configuration</li> +</ul> + +All of these tasks are done through a dedicated Servlet Context Listener. + +<h3>Package Specification</h3> + +<h3>Related Documentation</h3> + +</body> +</html> \ No newline at end of file diff --git a/jspwiki-bootstrap/src/test/java/org/apache/wiki/bootstrap/WikiSPIServletContextListenerTest.java b/jspwiki-bootstrap/src/test/java/org/apache/wiki/bootstrap/WikiSPIServletContextListenerTest.java new file mode 100644 index 0000000..7193f46 --- /dev/null +++ b/jspwiki-bootstrap/src/test/java/org/apache/wiki/bootstrap/WikiSPIServletContextListenerTest.java @@ -0,0 +1,65 @@ +/* + Licensed to the Apache Software Foundation (ASF) under one + or more contributor license agreements. See the NOTICE file + distributed with this work for additional information + regarding copyright ownership. The ASF licenses this file + to you under the Apache License, Version 2.0 (the + "License"); you may not use this file except in compliance + with the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, + software distributed under the License is distributed on an + "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + KIND, either express or implied. See the License for the + specific language governing permissions and limitations + under the License. + */ +package org.apache.wiki.bootstrap; + +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.Mock; +import org.mockito.junit.jupiter.MockitoExtension; + +import javax.servlet.ServletContext; +import javax.servlet.ServletContextEvent; +import java.util.Properties; + + +@ExtendWith( MockitoExtension.class ) +public class WikiSPIServletContextListenerTest { + + @Mock + ServletContext sc; + + @Test + public void testWikiInit() { + final ServletContextEvent sce = new ServletContextEvent( sc ); + final WikiSPIServletContextListener listener = new WikiSPIServletContextListener(); + final Properties properties = listener.initWikiSPIs( sce ); + + Assertions.assertEquals( 5, properties.size() ); + } + + @Test + public void testLoggingFrameworkInit() { + final WikiSPIServletContextListener listener = new WikiSPIServletContextListener(); + final Properties properties = new Properties(); + + Assertions.assertTrue( listener.initWikiLoggingFramework( properties ) ); + properties.setProperty( "jspwiki.use.external.logconfig", "true" ); + Assertions.assertFalse( listener.initWikiLoggingFramework( properties ) ); + } + + @Test + public void testServletContextListenerLifeCycle() { + final ServletContextEvent sce = new ServletContextEvent( sc ); + final WikiSPIServletContextListener listener = new WikiSPIServletContextListener(); + Assertions.assertDoesNotThrow( () -> listener.contextInitialized( sce ) ); + Assertions.assertDoesNotThrow( () -> listener.contextDestroyed( sce ) ); + } + +} diff --git a/jspwiki-bootstrap/src/test/java/org/apache/wiki/bootstrap/spi/AclsSPITestImpl.java b/jspwiki-bootstrap/src/test/java/org/apache/wiki/bootstrap/spi/AclsSPITestImpl.java new file mode 100644 index 0000000..f9c9766 --- /dev/null +++ b/jspwiki-bootstrap/src/test/java/org/apache/wiki/bootstrap/spi/AclsSPITestImpl.java @@ -0,0 +1,20 @@ +package org.apache.wiki.bootstrap.spi; + +import org.apache.wiki.api.core.Acl; +import org.apache.wiki.api.core.AclEntry; +import org.apache.wiki.api.spi.AclsSPI; + + +public class AclsSPITestImpl implements AclsSPI { + + @Override + public Acl acl() { + return null; + } + + @Override + public AclEntry entry() { + return null; + } + +} diff --git a/jspwiki-bootstrap/src/test/java/org/apache/wiki/bootstrap/spi/ContentsSPITestImpl.java b/jspwiki-bootstrap/src/test/java/org/apache/wiki/bootstrap/spi/ContentsSPITestImpl.java new file mode 100644 index 0000000..4f14dfa --- /dev/null +++ b/jspwiki-bootstrap/src/test/java/org/apache/wiki/bootstrap/spi/ContentsSPITestImpl.java @@ -0,0 +1,21 @@ +package org.apache.wiki.bootstrap.spi; + +import org.apache.wiki.api.core.Attachment; +import org.apache.wiki.api.core.Engine; +import org.apache.wiki.api.core.Page; +import org.apache.wiki.api.spi.ContentsSPI; + + +public class ContentsSPITestImpl implements ContentsSPI { + + @Override + public Attachment attachment( final Engine engine, final String parentPage, final String fileName ) { + return null; + } + + @Override + public Page page( final Engine engine, final String name ) { + return null; + } + +} diff --git a/jspwiki-bootstrap/src/test/java/org/apache/wiki/bootstrap/spi/ContextSPITestImpl.java b/jspwiki-bootstrap/src/test/java/org/apache/wiki/bootstrap/spi/ContextSPITestImpl.java new file mode 100644 index 0000000..3b4caa9 --- /dev/null +++ b/jspwiki-bootstrap/src/test/java/org/apache/wiki/bootstrap/spi/ContextSPITestImpl.java @@ -0,0 +1,34 @@ +package org.apache.wiki.bootstrap.spi; + +import org.apache.wiki.api.core.Command; +import org.apache.wiki.api.core.Context; +import org.apache.wiki.api.core.Engine; +import org.apache.wiki.api.core.Page; +import org.apache.wiki.api.spi.ContextSPI; + +import javax.servlet.http.HttpServletRequest; + + +public class ContextSPITestImpl implements ContextSPI { + + @Override + public Context create( final Engine engine, final Page page ) { + return null; + } + + @Override + public Context create( final Engine engine, final HttpServletRequest request, final Command command ) { + return null; + } + + @Override + public Context create( final Engine engine, final HttpServletRequest request, final Page page ) { + return null; + } + + @Override + public Context create( final Engine engine, final HttpServletRequest request, final String requestContext ) { + return null; + } + +} diff --git a/jspwiki-bootstrap/src/test/java/org/apache/wiki/bootstrap/spi/EngineSPITestImpl.java b/jspwiki-bootstrap/src/test/java/org/apache/wiki/bootstrap/spi/EngineSPITestImpl.java new file mode 100644 index 0000000..6c45c71 --- /dev/null +++ b/jspwiki-bootstrap/src/test/java/org/apache/wiki/bootstrap/spi/EngineSPITestImpl.java @@ -0,0 +1,16 @@ +package org.apache.wiki.bootstrap.spi; + +import org.apache.wiki.api.core.Engine; +import org.apache.wiki.api.spi.EngineSPI; + +import javax.servlet.ServletContext; +import java.util.Properties; + + +public class EngineSPITestImpl implements EngineSPI { + + @Override + public Engine find( final ServletContext context, final Properties props ) { + return null; + } +} diff --git a/jspwiki-bootstrap/src/test/java/org/apache/wiki/bootstrap/spi/SessionSPITestImpl.java b/jspwiki-bootstrap/src/test/java/org/apache/wiki/bootstrap/spi/SessionSPITestImpl.java new file mode 100644 index 0000000..48848cd --- /dev/null +++ b/jspwiki-bootstrap/src/test/java/org/apache/wiki/bootstrap/spi/SessionSPITestImpl.java @@ -0,0 +1,26 @@ +package org.apache.wiki.bootstrap.spi; + +import org.apache.wiki.api.core.Engine; +import org.apache.wiki.api.core.Session; +import org.apache.wiki.api.spi.SessionSPI; + +import javax.servlet.http.HttpServletRequest; + + +public class SessionSPITestImpl implements SessionSPI { + + @Override + public void remove( final Engine engine, final HttpServletRequest request ) { + + } + + @Override + public Session find( final Engine engine, final HttpServletRequest request ) { + return null; + } + + @Override + public Session guest( final Engine engine ) { + return null; + } +} diff --git a/jspwiki-bootstrap/src/test/resources/META-INF/services/org.apache.wiki.api.spi.AclsSPI b/jspwiki-bootstrap/src/test/resources/META-INF/services/org.apache.wiki.api.spi.AclsSPI new file mode 100644 index 0000000..a93fecc --- /dev/null +++ b/jspwiki-bootstrap/src/test/resources/META-INF/services/org.apache.wiki.api.spi.AclsSPI @@ -0,0 +1 @@ +org.apache.wiki.bootstrap.spi.AclsSPITestImpl \ No newline at end of file diff --git a/jspwiki-bootstrap/src/test/resources/META-INF/services/org.apache.wiki.api.spi.ContentsSPI b/jspwiki-bootstrap/src/test/resources/META-INF/services/org.apache.wiki.api.spi.ContentsSPI new file mode 100644 index 0000000..6a070b3 --- /dev/null +++ b/jspwiki-bootstrap/src/test/resources/META-INF/services/org.apache.wiki.api.spi.ContentsSPI @@ -0,0 +1 @@ +org.apache.wiki.bootstrap.spi.ContentsSPITestImpl \ No newline at end of file diff --git a/jspwiki-bootstrap/src/test/resources/META-INF/services/org.apache.wiki.api.spi.ContextSPI b/jspwiki-bootstrap/src/test/resources/META-INF/services/org.apache.wiki.api.spi.ContextSPI new file mode 100644 index 0000000..79f6b80 --- /dev/null +++ b/jspwiki-bootstrap/src/test/resources/META-INF/services/org.apache.wiki.api.spi.ContextSPI @@ -0,0 +1 @@ +org.apache.wiki.bootstrap.spi.ContextSPITestImpl \ No newline at end of file diff --git a/jspwiki-bootstrap/src/test/resources/META-INF/services/org.apache.wiki.api.spi.EngineSPI b/jspwiki-bootstrap/src/test/resources/META-INF/services/org.apache.wiki.api.spi.EngineSPI new file mode 100644 index 0000000..dfb923c --- /dev/null +++ b/jspwiki-bootstrap/src/test/resources/META-INF/services/org.apache.wiki.api.spi.EngineSPI @@ -0,0 +1 @@ +org.apache.wiki.bootstrap.spi.EngineSPITestImpl \ No newline at end of file diff --git a/jspwiki-bootstrap/src/test/resources/META-INF/services/org.apache.wiki.api.spi.SessionSPI b/jspwiki-bootstrap/src/test/resources/META-INF/services/org.apache.wiki.api.spi.SessionSPI new file mode 100644 index 0000000..060877d --- /dev/null +++ b/jspwiki-bootstrap/src/test/resources/META-INF/services/org.apache.wiki.api.spi.SessionSPI @@ -0,0 +1 @@ +org.apache.wiki.bootstrap.spi.SessionSPITestImpl \ No newline at end of file diff --git a/jspwiki-bootstrap/src/test/resources/ini/jspwiki.properties b/jspwiki-bootstrap/src/test/resources/ini/jspwiki.properties new file mode 100644 index 0000000..ee5bae0 --- /dev/null +++ b/jspwiki-bootstrap/src/test/resources/ini/jspwiki.properties @@ -0,0 +1,5 @@ +jspwiki.provider.impl.acls=org.apache.wiki.bootstrap.spi.AclsSPITestImpl +jspwiki.provider.impl.contents=org.apache.wiki.bootstrap.spi.ContentsSPITestImpl +jspwiki.provider.impl.context=org.apache.wiki.bootstrap.spi.ContextSPITestImpl +jspwiki.provider.impl.engine=org.apache.wiki.bootstrap.spi.EngineSPITestImpl +jspwiki.provider.impl.session=org.apache.wiki.bootstrap.spi.SessionSPITestImpl \ No newline at end of file
