You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jspwiki.apache.org by ju...@apache.org on 2018/11/05 21:35:51 UTC
[jspwiki] 15/21: further refactors on ClassUtil
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 5e8f280423dfe97b7e480d1f87018b4336057216
Author: juanpablo <ju...@apache.org>
AuthorDate: Mon Nov 5 00:25:37 2018 +0100
further refactors on ClassUtil
* use ConcurrentHashMap to store c_classmappings, instead of a Hashtable
* use try with resources in jarEntriesUnder
* getMappedObject methods perform the cast to the wanted type allowing to remove the cast everywhere else in the code. Propagate this change.
---
.../src/main/java/org/apache/wiki/WikiEngine.java | 76 ++++++++--------------
.../org/apache/wiki/render/RenderingManager.java | 2 +-
.../main/java/org/apache/wiki/util/ClassUtil.java | 60 +++++------------
3 files changed, 46 insertions(+), 92 deletions(-)
diff --git a/jspwiki-main/src/main/java/org/apache/wiki/WikiEngine.java b/jspwiki-main/src/main/java/org/apache/wiki/WikiEngine.java
index d0aa34d..888da22 100644
--- a/jspwiki-main/src/main/java/org/apache/wiki/WikiEngine.java
+++ b/jspwiki-main/src/main/java/org/apache/wiki/WikiEngine.java
@@ -23,6 +23,7 @@ import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import java.net.URLEncoder;
+import java.nio.charset.StandardCharsets;
import java.security.Principal;
import java.util.ArrayList;
import java.util.Collection;
@@ -494,16 +495,14 @@ public class WikiEngine
//
// Create and find the default working directory.
//
- m_workDir = TextUtil.getStringProperty( props, PROP_WORKDIR, null );
+ m_workDir = TextUtil.getStringProperty( props, PROP_WORKDIR, null );
- if( m_workDir == null )
- {
+ if( m_workDir == null ) {
m_workDir = System.getProperty("java.io.tmpdir", ".");
m_workDir += File.separator+Release.APPNAME+"-"+m_appid;
}
- try
- {
+ try {
File f = new File( m_workDir );
f.mkdirs();
@@ -514,25 +513,16 @@ public class WikiEngine
if( !f.canRead() ) throw new WikiException("No permission to read work directory: "+m_workDir);
if( !f.canWrite() ) throw new WikiException("No permission to write to work directory: "+m_workDir);
if( !f.isDirectory() ) throw new WikiException("jspwiki.workDir does not point to a directory: "+m_workDir);
- }
- catch( SecurityException e )
- {
+ } catch( SecurityException e ) {
log.fatal( "Unable to find or create the working directory: "+m_workDir, e );
throw new IllegalArgumentException( "Unable to find or create the working dir: " + m_workDir, e );
}
log.info("JSPWiki working directory is '"+m_workDir+"'");
- m_saveUserInfo = TextUtil.getBooleanProperty( props,
- PROP_STOREUSERNAME,
- m_saveUserInfo );
-
- m_useUTF8 = "UTF-8".equals( TextUtil.getStringProperty( props, PROP_ENCODING, "ISO-8859-1" ) );
-
- m_beautifyTitle = TextUtil.getBooleanProperty( props,
- PROP_BEAUTIFYTITLE,
- m_beautifyTitle );
-
+ m_saveUserInfo = TextUtil.getBooleanProperty( props, PROP_STOREUSERNAME, m_saveUserInfo );
+ m_useUTF8 = StandardCharsets.UTF_8.name().equals( TextUtil.getStringProperty( props, PROP_ENCODING, StandardCharsets.ISO_8859_1.name() ) );
+ m_beautifyTitle = TextUtil.getBooleanProperty( props, PROP_BEAUTIFYTITLE, m_beautifyTitle );
m_templateDir = TextUtil.getStringProperty( props, PROP_TEMPLATEDIR, "default" );
m_frontPage = TextUtil.getStringProperty( props, PROP_FRONTPAGE, "Main" );
@@ -550,26 +540,22 @@ public class WikiEngine
try
{
Class< ? > urlclass = ClassUtil.findClass( "org.apache.wiki.url",
- TextUtil.getStringProperty( props, PROP_URLCONSTRUCTOR, "DefaultURLConstructor" ) );
+ TextUtil.getStringProperty( props, PROP_URLCONSTRUCTOR, "DefaultURLConstructor" ) );
m_urlConstructor = (URLConstructor) urlclass.newInstance();
m_urlConstructor.initialize( this, props );
- m_pageManager = (PageManager)ClassUtil.getMappedObject(PageManager.class.getName(), this, props );
- m_pluginManager = (PluginManager)ClassUtil.getMappedObject(PluginManager.class.getName(), this, props );
- m_differenceManager = (DifferenceManager)ClassUtil.getMappedObject(DifferenceManager.class.getName(), this, props );
- m_attachmentManager = (AttachmentManager)ClassUtil.getMappedObject(AttachmentManager.class.getName(), this, props );
- m_variableManager = (VariableManager)ClassUtil.getMappedObject(VariableManager.class.getName(), props );
- // m_filterManager = (FilterManager)ClassUtil.getMappedObject(FilterManager.class.getName(), this, props );
- m_renderingManager = (RenderingManager) ClassUtil.getMappedObject(RenderingManager.class.getName());
-
- m_searchManager = (SearchManager)ClassUtil.getMappedObject(SearchManager.class.getName(), this, props );
-
- m_authenticationManager = (AuthenticationManager) ClassUtil.getMappedObject(AuthenticationManager.class.getName());
- m_authorizationManager = (AuthorizationManager) ClassUtil.getMappedObject( AuthorizationManager.class.getName());
- m_userManager = (UserManager) ClassUtil.getMappedObject(UserManager.class.getName());
- m_groupManager = (GroupManager) ClassUtil.getMappedObject(GroupManager.class.getName());
-
- m_editorManager = (EditorManager)ClassUtil.getMappedObject(EditorManager.class.getName(), this );
+ m_pageManager = ClassUtil.getMappedObject( PageManager.class.getName(), this, props );
+ m_pluginManager = ClassUtil.getMappedObject( PluginManager.class.getName(), this, props );
+ m_differenceManager = ClassUtil.getMappedObject( DifferenceManager.class.getName(), this, props );
+ m_attachmentManager = ClassUtil.getMappedObject( AttachmentManager.class.getName(), this, props );
+ m_variableManager = ClassUtil.getMappedObject( VariableManager.class.getName(), props );
+ m_renderingManager = ClassUtil.getMappedObject( RenderingManager.class.getName() );
+ m_searchManager = ClassUtil.getMappedObject( SearchManager.class.getName(), this, props );
+ m_authenticationManager = ClassUtil.getMappedObject( AuthenticationManager.class.getName() );
+ m_authorizationManager = ClassUtil.getMappedObject( AuthorizationManager.class.getName() );
+ m_userManager = ClassUtil.getMappedObject( UserManager.class.getName() );
+ m_groupManager = ClassUtil.getMappedObject( GroupManager.class.getName() );
+ m_editorManager = ClassUtil.getMappedObject( EditorManager.class.getName(), this );
m_editorManager.initialize( props );
m_progressManager = new ProgressManager();
@@ -583,27 +569,21 @@ public class WikiEngine
m_aclManager = getAclManager();
// Start the Workflow manager
- m_workflowMgr = (WorkflowManager)ClassUtil.getMappedObject(WorkflowManager.class.getName());
+ m_workflowMgr = ClassUtil.getMappedObject(WorkflowManager.class.getName());
m_workflowMgr.initialize(this, props);
- m_internationalizationManager = (InternationalizationManager)
- ClassUtil.getMappedObject(InternationalizationManager.class.getName(),this);
-
- m_templateManager = (TemplateManager)
- ClassUtil.getMappedObject(TemplateManager.class.getName(), this, props );
+ m_internationalizationManager = ClassUtil.getMappedObject(InternationalizationManager.class.getName(),this);
+ m_templateManager = ClassUtil.getMappedObject(TemplateManager.class.getName(), this, props );
// Since we want to use a page filters initilize() method
// as a engine startup listener where we can initialize global event listeners,
// it must be called lastly, so that all object references in the engine
// are availabe to the initialize() method
- m_filterManager = (FilterManager)
- ClassUtil.getMappedObject(FilterManager.class.getName(), this, props );
+ m_filterManager = ClassUtil.getMappedObject(FilterManager.class.getName(), this, props );
- m_adminBeanManager = (AdminBeanManager)
- ClassUtil.getMappedObject(AdminBeanManager.class.getName(),this);
+ m_adminBeanManager = ClassUtil.getMappedObject(AdminBeanManager.class.getName(),this);
// RenderingManager depends on FilterManager events.
-
m_renderingManager.initialize( this, props );
//
@@ -718,7 +698,7 @@ public class WikiEngine
// Build a new manager with default key lists.
if( m_referenceManager == null )
{
- m_referenceManager = (ReferenceManager) ClassUtil.getMappedObject(ReferenceManager.class.getName(), this );
+ m_referenceManager = ClassUtil.getMappedObject(ReferenceManager.class.getName(), this );
m_referenceManager.initialize( pages );
}
@@ -2328,7 +2308,7 @@ public class WikiEngine
try
{
String s = m_properties.getProperty( PROP_ACL_MANAGER_IMPL, DefaultAclManager.class.getName() );
- m_aclManager = (AclManager)ClassUtil.getMappedObject(s); // TODO: I am not sure whether this is the right call
+ m_aclManager = ClassUtil.getMappedObject(s); // TODO: I am not sure whether this is the right call
m_aclManager.initialize( this, m_properties );
}
catch ( ReflectiveOperationException | IllegalArgumentException e )
diff --git a/jspwiki-main/src/main/java/org/apache/wiki/render/RenderingManager.java b/jspwiki-main/src/main/java/org/apache/wiki/render/RenderingManager.java
index ef55fa3..862d629 100644
--- a/jspwiki-main/src/main/java/org/apache/wiki/render/RenderingManager.java
+++ b/jspwiki-main/src/main/java/org/apache/wiki/render/RenderingManager.java
@@ -179,7 +179,7 @@ public class RenderingManager implements WikiEventListener, InternalModule
*/
public MarkupParser getParser( WikiContext context, String pagedata ) {
try {
- return ( MarkupParser )ClassUtil.getMappedObject( m_markupParserClass, context, new StringReader( pagedata ) );
+ return ClassUtil.getMappedObject( m_markupParserClass, context, new StringReader( pagedata ) );
} catch( ReflectiveOperationException | IllegalArgumentException e ) {
log.error( "unable to get an instance of " + m_markupParserClass + " (" + e.getMessage() + "), returning default markup parser.", e );
return new JSPWikiMarkupParser( context, new StringReader( pagedata ) );
diff --git a/jspwiki-main/src/main/java/org/apache/wiki/util/ClassUtil.java b/jspwiki-main/src/main/java/org/apache/wiki/util/ClassUtil.java
index 58a628a..9931192 100644
--- a/jspwiki-main/src/main/java/org/apache/wiki/util/ClassUtil.java
+++ b/jspwiki-main/src/main/java/org/apache/wiki/util/ClassUtil.java
@@ -27,10 +27,10 @@ import java.net.URL;
import java.net.URLClassLoader;
import java.util.ArrayList;
import java.util.Enumeration;
-import java.util.Hashtable;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
import java.util.jar.JarEntry;
import java.util.jar.JarFile;
@@ -38,7 +38,6 @@ import org.apache.commons.io.FileUtils;
import org.apache.commons.lang.StringUtils;
import org.apache.log4j.Logger;
import org.apache.wiki.api.engine.PluginManager;
-import org.apache.wiki.api.exceptions.WikiException;
import org.jdom2.Element;
/**
@@ -56,7 +55,7 @@ public final class ClassUtil {
*/
public static final String MAPPINGS = "ini/classmappings.xml";
- private static Map<String, String> c_classMappings = new Hashtable<>();
+ private static Map<String, String> c_classMappings = new ConcurrentHashMap<>();
private static boolean classLoaderSetup = false;
private static ClassLoader loader = null;
@@ -251,41 +250,19 @@ public final class ClassUtil {
* @param jurlcon given {@link JarURLConnection} to search in.
* @param rootPackage base package.
*/
- static void jarEntriesUnder( List< String > results, JarURLConnection jurlcon, String rootPackage )
- {
- JarFile jar = null;
- try
- {
- jar = jurlcon.getJarFile();
+ static void jarEntriesUnder( List< String > results, JarURLConnection jurlcon, String rootPackage ) {
+ try( JarFile jar = jurlcon.getJarFile() ) {
log.debug( "scanning [" + jar.getName() +"]" );
Enumeration< JarEntry > entries = jar.entries();
- while( entries.hasMoreElements() )
- {
+ while( entries.hasMoreElements() ) {
JarEntry entry = entries.nextElement();
- if( entry.getName().startsWith( rootPackage ) && !entry.isDirectory() )
- {
+ if( entry.getName().startsWith( rootPackage ) && !entry.isDirectory() ) {
results.add( entry.getName() );
}
}
- }
- catch( IOException ioe )
- {
+ } catch( IOException ioe ) {
log.error( ioe.getMessage(), ioe );
}
- finally
- {
- if (jar != null)
- {
- try
- {
- jar.close();
- }
- catch( IOException ioe )
- {
- log.error( ioe.getMessage(), ioe );
- }
- }
- }
}
/**
@@ -304,11 +281,12 @@ public final class ClassUtil {
* @throws ReflectiveOperationException If the class cannot be found or instantiated.
* @since 2.5.40
*/
- public static Object getMappedObject( String requestedClass )
+ @SuppressWarnings("unchecked")
+ public static < T > T getMappedObject( String requestedClass )
throws ReflectiveOperationException, IllegalArgumentException
{
Object[] initargs = {};
- return getMappedObject(requestedClass, initargs );
+ return ( T )getMappedObject(requestedClass, initargs );
}
/**
@@ -331,7 +309,8 @@ public final class ClassUtil {
* @throws ReflectiveOperationException If the class cannot be found or instantiated.
* @since 2.5.40
*/
- public static Object getMappedObject( String requestedClass, Object... initargs )
+ @SuppressWarnings( "unchecked" )
+ public static < T > T getMappedObject( String requestedClass, Object... initargs )
throws ReflectiveOperationException, IllegalArgumentException
{
Class<?> cl = getMappedClass( requestedClass );
@@ -354,19 +333,16 @@ public final class ClassUtil {
//
// Ha, found it! Instantiating and returning...
//
- return ctors[c].newInstance(initargs);
+ return ( T )ctors[c].newInstance(initargs);
}
}
}
}
//
- // No arguments, so we can just call a default constructor and
- // ignore the arguments.
+ // No arguments, so we can just call a default constructor and ignore the arguments.
//
- Object o = cl.newInstance();
-
- return o;
+ return ( T )cl.newInstance();
}
/**
@@ -375,11 +351,9 @@ public final class ClassUtil {
*
* @param requestedClass
* @return A Class object which you can then instantiate.
- * @throws WikiException
+ * @throws ClassNotFoundException
*/
- private static Class< ? > getMappedClass( String requestedClass )
- throws ClassNotFoundException
- {
+ private static Class< ? > getMappedClass( String requestedClass ) throws ClassNotFoundException {
String mappedClass = c_classMappings.get( requestedClass );
if( mappedClass == null )