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 686c57aa209237799e739303009e6916ef45e399 Author: juanpablo <[email protected]> AuthorDate: Sun Jan 5 01:48:31 2020 +0100 JSPWIKI-120: move getRecentChanges from WikiEngine to PageManager --- .../src/main/java/org/apache/wiki/WikiEngine.java | 27 ---- .../org/apache/wiki/pages/DefaultPageManager.java | 21 +++ .../java/org/apache/wiki/pages/PageManager.java | 9 ++ .../apache/wiki/plugin/RecentChangesPlugin.java | 2 +- .../java/org/apache/wiki/rss/RSSGenerator.java | 39 ++---- .../org/apache/wiki/xmlrpc/AbstractRPCHandler.java | 66 ++++----- .../java/org/apache/wiki/xmlrpc/RPCHandler.java | 18 ++- .../org/apache/wiki/xmlrpc/RPCHandlerUTF8.java | 149 +++++++-------------- 8 files changed, 129 insertions(+), 202 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 56b5e33..8e60b4c 100644 --- a/jspwiki-main/src/main/java/org/apache/wiki/WikiEngine.java +++ b/jspwiki-main/src/main/java/org/apache/wiki/WikiEngine.java @@ -43,7 +43,6 @@ import org.apache.wiki.event.WikiEventManager; import org.apache.wiki.event.WikiPageEvent; import org.apache.wiki.i18n.InternationalizationManager; import org.apache.wiki.pages.PageManager; -import org.apache.wiki.pages.PageTimeComparator; import org.apache.wiki.parser.MarkupParser; import org.apache.wiki.parser.WikiDocument; import org.apache.wiki.providers.WikiPageProvider; @@ -92,9 +91,7 @@ import java.util.List; import java.util.Locale; import java.util.Map; import java.util.Properties; -import java.util.Set; import java.util.TimeZone; -import java.util.TreeSet; import java.util.concurrent.ConcurrentHashMap; @@ -1489,30 +1486,6 @@ public class WikiEngine { } /** - * Returns a Collection of WikiPages, sorted in time - * order of last change (i.e. first object is the most - * recently changed). This method also includes attachments. - * - * @return Set of WikiPage objects. - */ - public Set< WikiPage > getRecentChanges() { - try { - final Collection< WikiPage > pages = m_pageManager.getAllPages(); - final Collection< Attachment > atts = m_attachmentManager.getAllAttachments(); - - final TreeSet< WikiPage > sortedPages = new TreeSet<>( new PageTimeComparator() ); - - sortedPages.addAll( pages ); - sortedPages.addAll( atts ); - - return sortedPages; - } catch( final ProviderException e ) { - log.error( "Unable to fetch all pages: ",e); - return null; - } - } - - /** * Returns a Collection of WikiPages containing the version history of a page. * * @param page Name of the page to look for diff --git a/jspwiki-main/src/main/java/org/apache/wiki/pages/DefaultPageManager.java b/jspwiki-main/src/main/java/org/apache/wiki/pages/DefaultPageManager.java index 3d5248e..123ce71 100644 --- a/jspwiki-main/src/main/java/org/apache/wiki/pages/DefaultPageManager.java +++ b/jspwiki-main/src/main/java/org/apache/wiki/pages/DefaultPageManager.java @@ -50,12 +50,15 @@ import java.security.Permission; import java.security.Principal; import java.util.ArrayList; import java.util.Collection; +import java.util.Collections; import java.util.Date; import java.util.Enumeration; import java.util.Iterator; import java.util.List; import java.util.NoSuchElementException; import java.util.Properties; +import java.util.Set; +import java.util.TreeSet; import java.util.concurrent.ConcurrentHashMap; @@ -397,6 +400,24 @@ public class DefaultPageManager extends ModuleManager implements PageManager { /** * {@inheritDoc} + * @see org.apache.wiki.pages.PageManager#getRecentChanges() + */ + @Override + public Set< WikiPage > getRecentChanges() { + try { + final TreeSet< WikiPage > sortedPages = new TreeSet<>( new PageTimeComparator() ); + sortedPages.addAll( getAllPages() ); + sortedPages.addAll( m_engine.getAttachmentManager().getAllAttachments() ); + + return sortedPages; + } catch( final ProviderException e ) { + LOG.error( "Unable to fetch all pages: ", e ); + return Collections.emptySet(); + } + } + + /** + * {@inheritDoc} * @see org.apache.wiki.pages.PageManager#pageExists(java.lang.String) */ @Override diff --git a/jspwiki-main/src/main/java/org/apache/wiki/pages/PageManager.java b/jspwiki-main/src/main/java/org/apache/wiki/pages/PageManager.java index 6ff9dcd..1780a5d 100644 --- a/jspwiki-main/src/main/java/org/apache/wiki/pages/PageManager.java +++ b/jspwiki-main/src/main/java/org/apache/wiki/pages/PageManager.java @@ -27,6 +27,7 @@ import org.apache.wiki.providers.WikiPageProvider; import java.util.Collection; import java.util.List; +import java.util.Set; public interface PageManager extends WikiEventListener { @@ -214,6 +215,14 @@ public interface PageManager extends WikiEventListener { int getTotalPageCount(); /** + * Returns a Collection of WikiPages, sorted in time order of last change (i.e. first object is the most recently changed). + * This method also includes attachments. + * + * @return Set of WikiPage objects. + */ + Set< WikiPage > getRecentChanges(); + + /** * Returns true, if the page exists (any version). * * @param pageName Name of the page. diff --git a/jspwiki-main/src/main/java/org/apache/wiki/plugin/RecentChangesPlugin.java b/jspwiki-main/src/main/java/org/apache/wiki/plugin/RecentChangesPlugin.java index 2d3637f..16c1d41 100644 --- a/jspwiki-main/src/main/java/org/apache/wiki/plugin/RecentChangesPlugin.java +++ b/jspwiki-main/src/main/java/org/apache/wiki/plugin/RecentChangesPlugin.java @@ -100,7 +100,7 @@ public class RecentChangesPlugin extends AbstractReferralPlugin implements WikiP log.debug("Calculating recent changes from "+sincedate.getTime()); // FIXME: Should really have a since date on the getRecentChanges method. - Collection< WikiPage > changes = engine.getRecentChanges(); + Collection< WikiPage > changes = engine.getPageManager().getRecentChanges(); super.initialize( context, params ); changes = filterWikiPageCollection( changes ); diff --git a/jspwiki-main/src/main/java/org/apache/wiki/rss/RSSGenerator.java b/jspwiki-main/src/main/java/org/apache/wiki/rss/RSSGenerator.java index 174f0b6..53e5fe2 100644 --- a/jspwiki-main/src/main/java/org/apache/wiki/rss/RSSGenerator.java +++ b/jspwiki-main/src/main/java/org/apache/wiki/rss/RSSGenerator.java @@ -328,52 +328,37 @@ public class RSSGenerator { * @param feed A Feed to generate the feed to. * @return feed.getString(). */ - protected String generateFullWikiRSS( WikiContext wikiContext, Feed feed ) - { + protected String generateFullWikiRSS( final WikiContext wikiContext, final Feed feed ) { feed.setChannelTitle( m_engine.getApplicationName() ); feed.setFeedURL( m_engine.getBaseURL() ); feed.setChannelLanguage( m_channelLanguage ); feed.setChannelDescription( m_channelDescription ); - Set< WikiPage > changed = m_engine.getRecentChanges(); + final Set< WikiPage > changed = m_engine.getPageManager().getRecentChanges(); - WikiSession session = WikiSession.guestSession( m_engine ); + final WikiSession session = WikiSession.guestSession( m_engine ); int items = 0; - for( Iterator< WikiPage > i = changed.iterator(); i.hasNext() && items < 15; items++ ) - { + for( final Iterator< WikiPage > i = changed.iterator(); i.hasNext() && items < 15; items++ ) { WikiPage page = i.next(); // // Check if the anonymous user has view access to this page. // - if( !m_engine.getAuthorizationManager().checkPermission(session, new PagePermission(page,PagePermission.VIEW_ACTION) ) ) - { + if( !m_engine.getAuthorizationManager().checkPermission(session, new PagePermission(page,PagePermission.VIEW_ACTION) ) ) { // No permission, skip to the next one. continue; } - Entry e = new Entry(); - - e.setPage( page ); - - String url; - - if( page instanceof Attachment ) - { - url = m_engine.getURL( WikiContext.ATTACH, - page.getName(), - null, - true ); - } - else - { - url = m_engine.getURL( WikiContext.VIEW, - page.getName(), - null, - true ); + final String url; + if( page instanceof Attachment ) { + url = m_engine.getURL( WikiContext.ATTACH, page.getName(),null, true ); + } else { + url = m_engine.getURL( WikiContext.VIEW, page.getName(), null, true ); } + final Entry e = new Entry(); + e.setPage( page ); e.setURL( url ); e.setTitle( page.getName() ); e.setContent( getEntryDescription(page) ); diff --git a/jspwiki-main/src/main/java/org/apache/wiki/xmlrpc/AbstractRPCHandler.java b/jspwiki-main/src/main/java/org/apache/wiki/xmlrpc/AbstractRPCHandler.java index 5b21b80..3b1406b 100644 --- a/jspwiki-main/src/main/java/org/apache/wiki/xmlrpc/AbstractRPCHandler.java +++ b/jspwiki-main/src/main/java/org/apache/wiki/xmlrpc/AbstractRPCHandler.java @@ -18,17 +18,20 @@ */ package org.apache.wiki.xmlrpc; -import java.security.Permission; -import java.util.*; - -import org.apache.xmlrpc.AuthenticationFailed; - import org.apache.wiki.WikiContext; import org.apache.wiki.WikiEngine; import org.apache.wiki.WikiPage; import org.apache.wiki.auth.AuthorizationManager; import org.apache.wiki.auth.permissions.PagePermission; import org.apache.wiki.auth.permissions.WikiPermission; +import org.apache.xmlrpc.AuthenticationFailed; + +import java.security.Permission; +import java.util.Calendar; +import java.util.Date; +import java.util.Hashtable; +import java.util.Set; +import java.util.Vector; /** * Provides definitions for RPC handler routines. @@ -36,61 +39,47 @@ import org.apache.wiki.auth.permissions.WikiPermission; * @since 1.6.13 */ -public abstract class AbstractRPCHandler - implements WikiRPCHandler -{ +public abstract class AbstractRPCHandler implements WikiRPCHandler { + /** Error code: no such page. */ public static final int ERR_NOPAGE = 1; public static final int ERR_NOPERMISSION = 2; - /** - * Link to a local wiki page. - */ + /** Link to a local wiki page. */ public static final String LINK_LOCAL = "local"; - /** - * Link to an external resource. - */ + /** Link to an external resource. */ public static final String LINK_EXTERNAL = "external"; - /** - * This is an inlined image. - */ + /** This is an inlined image. */ public static final String LINK_INLINE = "inline"; protected WikiEngine m_engine; protected WikiContext m_context; - - /** - * This is the currently implemented JSPWiki XML-RPC code revision. - */ + /** This is the currently implemented JSPWiki XML-RPC code revision. */ public static final int RPC_VERSION = 1; - public void initialize( WikiContext context ) - { + public void initialize( final WikiContext context ) { m_context = context; m_engine = context.getEngine(); } protected abstract Hashtable encodeWikiPage( WikiPage p ); - public Vector getRecentChanges( Date since ) - { + public Vector getRecentChanges( final Date since ) { checkPermission( PagePermission.VIEW ); - Collection< WikiPage > pages = m_engine.getRecentChanges(); - Vector< Hashtable< ?, ? > > result = new Vector<Hashtable< ?, ? > >(); + final Set< WikiPage > pages = m_engine.getPageManager().getRecentChanges(); + final Vector< Hashtable< ?, ? > > result = new Vector<>(); // Transform UTC into local time. - Calendar cal = Calendar.getInstance(); + final Calendar cal = Calendar.getInstance(); cal.setTime( since ); cal.add( Calendar.MILLISECOND, cal.get( Calendar.ZONE_OFFSET ) + (cal.getTimeZone().inDaylightTime( since ) ? cal.get( Calendar.DST_OFFSET ) : 0 ) ); - for( WikiPage page : pages ) - { - if( page.getLastModified().after( cal.getTime() ) ) - { + for( WikiPage page : pages ) { + if( page.getLastModified().after( cal.getTime() ) ) { result.add( encodeWikiPage( page ) ); } } @@ -104,12 +93,12 @@ public abstract class AbstractRPCHandler * * @param perm the Permission to check */ - protected void checkPermission( Permission perm ) - { - AuthorizationManager mgr = m_engine.getAuthorizationManager(); + protected void checkPermission( final Permission perm ) { + final AuthorizationManager mgr = m_engine.getAuthorizationManager(); - if( mgr.checkPermission( m_context.getWikiSession(), perm ) ) + if( mgr.checkPermission( m_context.getWikiSession(), perm ) ) { return; + } throw new AuthenticationFailed( "You have no access to this resource, o master" ); } @@ -117,10 +106,9 @@ public abstract class AbstractRPCHandler /** * Returns the current supported JSPWiki XML-RPC API. */ - public int getRPCVersionSupported() - { + public int getRPCVersionSupported() { checkPermission( WikiPermission.LOGIN ); - return RPC_VERSION; } + } diff --git a/jspwiki-main/src/main/java/org/apache/wiki/xmlrpc/RPCHandler.java b/jspwiki-main/src/main/java/org/apache/wiki/xmlrpc/RPCHandler.java index 3cb0a83..3ab3355 100644 --- a/jspwiki-main/src/main/java/org/apache/wiki/xmlrpc/RPCHandler.java +++ b/jspwiki-main/src/main/java/org/apache/wiki/xmlrpc/RPCHandler.java @@ -35,6 +35,7 @@ import java.util.Collection; import java.util.Date; import java.util.Hashtable; import java.util.Iterator; +import java.util.Set; import java.util.Vector; /** @@ -91,7 +92,7 @@ public class RPCHandler public Vector getAllPages() { checkPermission( PagePermission.VIEW ); - Collection< WikiPage > pages = m_engine.getRecentChanges(); + Collection< WikiPage > pages = m_engine.getPageManager().getRecentChanges(); Vector<String> result = new Vector<>(); for( WikiPage p : pages ) @@ -142,13 +143,12 @@ public class RPCHandler } @Override - public Vector getRecentChanges( Date since ) - { + public Vector getRecentChanges( Date since ) { checkPermission( PagePermission.VIEW ); - Collection< WikiPage > pages = m_engine.getRecentChanges(); - Vector<Hashtable<String, Object>> result = new Vector<>(); + final Set< WikiPage > pages = m_engine.getPageManager().getRecentChanges(); + final Vector< Hashtable< String, Object > > result = new Vector<>(); - Calendar cal = Calendar.getInstance(); + final Calendar cal = Calendar.getInstance(); cal.setTime( since ); // @@ -159,10 +159,8 @@ public class RPCHandler (cal.getTimeZone().inDaylightTime(since) ? cal.get( Calendar.DST_OFFSET ) : 0 ) ) ); since = cal.getTime(); - for( WikiPage page : pages ) - { - if( page.getLastModified().after( since ) && !(page instanceof Attachment) ) - { + for( final WikiPage page : pages ) { + if( page.getLastModified().after( since ) && !(page instanceof Attachment) ) { result.add( encodeWikiPage( page ) ); } } diff --git a/jspwiki-main/src/main/java/org/apache/wiki/xmlrpc/RPCHandlerUTF8.java b/jspwiki-main/src/main/java/org/apache/wiki/xmlrpc/RPCHandlerUTF8.java index 9444453..0390aff 100644 --- a/jspwiki-main/src/main/java/org/apache/wiki/xmlrpc/RPCHandlerUTF8.java +++ b/jspwiki-main/src/main/java/org/apache/wiki/xmlrpc/RPCHandlerUTF8.java @@ -28,10 +28,9 @@ import org.apache.wiki.auth.permissions.PermissionFactory; import org.apache.xmlrpc.XmlRpcException; import java.util.Calendar; -import java.util.Collection; import java.util.Date; import java.util.Hashtable; -import java.util.Iterator; +import java.util.Set; import java.util.Vector; /** @@ -41,27 +40,21 @@ import java.util.Vector; * @since 1.6.13 */ -public class RPCHandlerUTF8 - extends AbstractRPCHandler -{ - public String getApplicationName() - { - checkPermission( PagePermission.VIEW ); +public class RPCHandlerUTF8 extends AbstractRPCHandler { + public String getApplicationName() { + checkPermission( PagePermission.VIEW ); return m_engine.getApplicationName(); } - public Vector getAllPages() - { + public Vector< String > getAllPages() { checkPermission( PagePermission.VIEW ); - Collection< WikiPage > pages = m_engine.getRecentChanges(); - Vector<String> result = new Vector<String>(); + final Set< WikiPage > pages = m_engine.getPageManager().getRecentChanges(); + final Vector< String > result = new Vector<>(); - for( WikiPage p : pages ) - { - if( !(p instanceof Attachment) ) - { + for( final WikiPage p : pages ) { + if( !( p instanceof Attachment ) ) { result.add( p.getName() ); } } @@ -72,22 +65,17 @@ public class RPCHandlerUTF8 /** * Encodes a single wiki page info into a Hashtable. */ - protected Hashtable<String, Object> encodeWikiPage( WikiPage page ) - { - Hashtable<String, Object> ht = new Hashtable<String, Object>(); - + protected Hashtable<String, Object> encodeWikiPage( final WikiPage page ) { + final Hashtable<String, Object> ht = new Hashtable<>(); ht.put( "name", page.getName() ); - Date d = page.getLastModified(); + final Date d = page.getLastModified(); // - // Here we reset the DST and TIMEZONE offsets of the - // calendar. Unfortunately, I haven't thought of a better - // way to ensure that we're getting the proper date - // from the XML-RPC thingy, except to manually adjust the date. + // Here we reset the DST and TIMEZONE offsets of the calendar. Unfortunately, I haven't thought of a better + // way to ensure that we're getting the proper date from the XML-RPC thingy, except to manually adjust the date. // - - Calendar cal = Calendar.getInstance(); + final Calendar cal = Calendar.getInstance(); cal.setTime( d ); cal.add( Calendar.MILLISECOND, - (cal.get( Calendar.ZONE_OFFSET ) + @@ -96,22 +84,20 @@ public class RPCHandlerUTF8 ht.put( "lastModified", cal.getTime() ); ht.put( "version", page.getVersion() ); - if( page.getAuthor() != null ) - { + if( page.getAuthor() != null ) { ht.put( "author", page.getAuthor() ); } return ht; } - public Vector getRecentChanges( Date since ) - { + public Vector< Hashtable< String, Object > > getRecentChanges( Date since ) { checkPermission( PagePermission.VIEW ); - Collection< WikiPage > pages = m_engine.getRecentChanges(); - Vector<Hashtable<String, Object>> result = new Vector<>(); + final Set< WikiPage > pages = m_engine.getPageManager().getRecentChanges(); + final Vector< Hashtable< String, Object > > result = new Vector<>(); - Calendar cal = Calendar.getInstance(); + final Calendar cal = Calendar.getInstance(); cal.setTime( since ); // @@ -122,10 +108,8 @@ public class RPCHandlerUTF8 (cal.getTimeZone().inDaylightTime(since) ? cal.get( Calendar.DST_OFFSET ) : 0 ) ) ); since = cal.getTime(); - for( WikiPage page : pages ) - { - if( page.getLastModified().after( since ) && !(page instanceof Attachment) ) - { + for( final WikiPage page : pages ) { + if( page.getLastModified().after( since ) && !( page instanceof Attachment ) ) { result.add( encodeWikiPage( page ) ); } } @@ -141,31 +125,22 @@ public class RPCHandlerUTF8 * @return Real page name, as Java string. * @throws XmlRpcException, if there is something wrong with the page. */ - private String parsePageCheckCondition( String pagename ) - throws XmlRpcException - { - if( !m_engine.pageExists(pagename) ) - { + private String parsePageCheckCondition( final String pagename ) throws XmlRpcException { + if( !m_engine.pageExists(pagename) ) { throw new XmlRpcException( ERR_NOPAGE, "No such page '"+pagename+"' found, o master." ); } - WikiPage p = m_engine.getPageManager().getPage( pagename ); + final WikiPage p = m_engine.getPageManager().getPage( pagename ); checkPermission( PermissionFactory.getPagePermission( p, PagePermission.VIEW_ACTION ) ); return pagename; } - public Hashtable getPageInfo( String pagename ) - throws XmlRpcException - { - pagename = parsePageCheckCondition( pagename ); - - return encodeWikiPage( m_engine.getPageManager().getPage(pagename) ); + public Hashtable<String, Object> getPageInfo( final String pagename ) throws XmlRpcException { + return encodeWikiPage( m_engine.getPageManager().getPage( parsePageCheckCondition( pagename ) ) ); } - public Hashtable getPageInfoVersion( String pagename, int version ) - throws XmlRpcException - { + public Hashtable<String, Object> getPageInfoVersion( String pagename, final int version ) throws XmlRpcException { pagename = parsePageCheckCondition( pagename ); return encodeWikiPage( m_engine.getPageManager().getPage( pagename, version ) ); @@ -183,56 +158,41 @@ public class RPCHandlerUTF8 return m_engine.getHTML( parsePageCheckCondition( pagename ) ); } - public String getPageHTMLVersion( String pagename, int version ) - throws XmlRpcException - { - pagename = parsePageCheckCondition( pagename ); - - return m_engine.getHTML( pagename, version ); + public String getPageHTMLVersion( final String pagename, final int version ) throws XmlRpcException { + return m_engine.getHTML( parsePageCheckCondition( pagename ), version ); } - public Vector listLinks( String pagename ) - throws XmlRpcException - { + public Vector< Hashtable< String, String > > listLinks( String pagename ) throws XmlRpcException { pagename = parsePageCheckCondition( pagename ); - WikiPage page = m_engine.getPageManager().getPage( pagename ); - String pagedata = m_engine.getPageManager().getPureText( page ); + final WikiPage page = m_engine.getPageManager().getPage( pagename ); + final String pagedata = m_engine.getPageManager().getPureText( page ); - LinkCollector localCollector = new LinkCollector(); - LinkCollector extCollector = new LinkCollector(); - LinkCollector attCollector = new LinkCollector(); + final LinkCollector localCollector = new LinkCollector(); + final LinkCollector extCollector = new LinkCollector(); + final LinkCollector attCollector = new LinkCollector(); - WikiContext context = new WikiContext( m_engine, page ); + final WikiContext context = new WikiContext( m_engine, page ); context.setVariable( WikiEngine.PROP_REFSTYLE, "absolute" ); - m_engine.textToHTML( context, - pagedata, - localCollector, - extCollector, - attCollector ); + m_engine.textToHTML( context, pagedata, localCollector, extCollector, attCollector ); - Vector<Hashtable<String, String>> result = new Vector<>(); + final Vector< Hashtable< String, String > > result = new Vector<>(); // FIXME: Contains far too much common with RPCHandler. Refactor! // // Add local links. // - for( Iterator< String > i = localCollector.getLinks().iterator(); i.hasNext(); ) - { - String link = i.next(); - Hashtable< String, String > ht = new Hashtable< String, String >(); + for( final String link : localCollector.getLinks() ) { + final Hashtable<String, String> ht = new Hashtable<>(); ht.put( "page", link ); ht.put( "type", LINK_LOCAL ); - if( m_engine.pageExists(link) ) - { - ht.put( "href", context.getViewURL(link) ); - } - else - { - ht.put( "href", context.getURL(WikiContext.EDIT,link) ); + if( m_engine.pageExists( link ) ) { + ht.put( "href", context.getViewURL( link ) ); + } else { + ht.put( "href", context.getURL( WikiContext.EDIT, link ) ); } result.add( ht ); @@ -241,33 +201,26 @@ public class RPCHandlerUTF8 // // Add links to inline attachments // - for( String link : attCollector.getLinks() ) - { - Hashtable<String, String> ht = new Hashtable<String, String>(); - + for( final String link : attCollector.getLinks() ) { + final Hashtable<String, String> ht = new Hashtable<>(); ht.put( "page", link ); ht.put( "type", LINK_LOCAL ); ht.put( "href", context.getURL(WikiContext.ATTACH,link) ); - result.add( ht ); } // - // External links don't need to be changed into XML-RPC strings, - // simply because URLs are by definition ASCII. + // External links don't need to be changed into XML-RPC strings, simply because URLs are by definition ASCII. // - - for( String link : extCollector.getLinks() ) - { - Hashtable<String, String> ht = new Hashtable<String, String>(); - + for( final String link : extCollector.getLinks() ) { + final Hashtable<String, String> ht = new Hashtable<>(); ht.put( "page", link ); ht.put( "type", LINK_EXTERNAL ); ht.put( "href", link ); - result.add( ht ); } return result; } + }
