Hi, (this would look like an extremely long e-mail, but is not, there's only lots of methods lists O:-))
I was looking at JSPWIKI-120 ("Separate rendering engine from core"), and went over to WikiEngine to look at which methods could make more sense on other classes, and I came up with the following Move from WikiEngine to PageManager: * void deletePage( final String pageName ) * void deleteVersion( final WikiPage page ) * String getCurrentProvider() * String getCurrentProviderInfo() * WikiPage getPage( String pagereq ) * WikiPage getPage( String pagereq, int version ) * int getPageCount() (already there as getTotalPageCount(), so it can get deleted) * String getPureText( String page, int version ) * String getPureText( WikiPage page ) * Set< WikiPage > getRecentChanges() * String getText( String page ) * String getText( String page, int version ) * String getText( WikiContext context, WikiPage page ) * List< ? extends WikiPage > getVersionHistory( String page ) * boolean pageExists( String page ) * boolean pageExists( String page, int version ) * boolean pageExists( WikiPage page ) * void saveText( WikiContext context, String text ) Move from WikiEngine to PageRenamer: * String renamePage( WikiContext context, String renameFrom, String renameTo, boolean changeReferrers ) Move from WikiEngine to ReferenceManager: * Collection< String > scanWikiLinks( WikiPage page, String pagedata ) * void updateReferences( WikiPage page ) Move from WikiEngine to RenderingManager: * String beautifyTitle( String title ) * String beautifyTitleNoBreak( String title ) * String decodeName( final String pagerequest ) * String encodeName( String pagename ) * String getHTML( String page ) * String getHTML( String pagename, int version ) * String getHTML( WikiContext context, WikiPage page ) * String textToHTML( WikiContext context, String pagedata, StringTransmutator localLinkHook, StringTransmutator extLinkHook ) * String textToHTML( WikiContext context, String pagedata, StringTransmutator localLinkHook, StringTransmutator extLinkHook, StringTransmutator attLinkHook ) * String textToHTML( WikiContext context, String pagedata, StringTransmutator localLinkHook, StringTransmutator extLinkHook, StringTransmutator attLinkHook, boolean parseAccessRules, boolean justParse ) Move from WikiEngine to HttpUtil: * String safeGetQueryString( final HttpServletRequest request ) Move from WikiEngine to DifferenceManager: * String getDiff( WikiContext context, int version1, int version2 ) Move from WikiEngine to VariableManager: * String getVariable( WikiContext context, String name ) Extract new WikiEngineProperties enum with WikiEngine's public static final String PROP_* and public static final String DEFAULT_ constants WikiEngine would retain all the remaining methods. The following public API / Interface could be extracted from there, which would focus mainly on static stuff: Configuration * Collection< String > getAllInlinedImagePatterns() * Collection< String > getAllInterWikiLinks() * String getApplicationName() * String getBaseURL() * Charset getContentEncoding() * String getFrontPage() * String getGlobalRSSURL() * String getRequiredProperty( Properties props, String key ) throws NoRequiredPropertyException (maybe throw another kind of exception and move it back to TextUtils, where it initially was?) * String getRootPath() * ServletContext getServletContext() * Date getStartTime() * String getTemplateDir() * Properties getWikiProperties() * String getWorkDir() DI methods [1] * all XYZ getXYZManager methods Context creation * WikiContext createContext( final HttpServletRequest request, final String requestContext ) WikiEngine attributes * Object getAttribute( String key ) * Object removeAttribute( String key ) * void setAttribute( String key, Object value ) URL creation [2] * CommandResolver getCommandResolver() * getURL( final String context, String pageName, final String params, final boolean absolute ) * String getInterWikiURL( String wikiName ) * String getViewURL( String pageName ) * String getRedirectURL( final WikiContext context ) (seems unused?) * String getFinalPageName( String page ) * String getSpecialPageReference( String original ) (unused?) Event Listeners / WatchDog related operations: * void addWikiEventListener( WikiEventListener listener ) * void removeWikiEventListener( WikiEventListener listener ) * WatchDog getCurrentWatchDog() [1]: Instead of exposing each getWhateverManager(), I was more thinking of having one getManager( Class managerClass ) method at the public API level, whereas the concrete class would retain all the getXYZManager, in order to not make an even more breaking change [2]: perhaps these should be moved into WikiContext ? This would be one major change I'd like to do before 2.11.0. The other one would be related to JSPWIKI-795 ("Update logging subsystem in JSPWiki"). In this other case, the APIs themselves wouldn't change much but nearly all classes/JSPs would be affected by the change. I was thinking on moving from Log4J to Log4J2: right now, functionality-wise is ahead of SLF4J, seems to have more movement and, as SLF4J, allows to plug different log implementations. Once both items are done, I'd be done with breaking changes from 2.10, hence I'd be +1 on a 2.11.0 release. thoughts? thx + best regards, juan pablo