Merge pull request #11 from nuzayats/update_xinha

Upgrade Xinha to the latest
diff --git a/app/pom.xml b/app/pom.xml
index 4739e4c..8bba67e 100644
--- a/app/pom.xml
+++ b/app/pom.xml
@@ -24,7 +24,7 @@
     <parent>
         <groupId>org.apache.roller</groupId>
         <artifactId>roller-project</artifactId>
-        <version>5.2.0</version>
+        <version>6.0.0-SNAPSHOT</version>
         <relativePath>../pom.xml</relativePath>
     </parent>
 
@@ -45,7 +45,7 @@
         <jsp-api.version>2.2</jsp-api.version>
         <jstl.version>1.2</jstl.version>
         <log4j.version>1.2.17</log4j.version>
-        <log4j2.version>2.8.2</log4j2.version>
+        <log4j2.version>2.10.0</log4j2.version>
         <lucene.version>4.10.4</lucene.version>
         <oauth-core.version>20100527</oauth-core.version>
         <maven-war.version>3.1.0</maven-war.version>
@@ -56,7 +56,7 @@
         <slf4j.version>1.7.25</slf4j.version>
         <spring.version>4.1.4.RELEASE</spring.version>
         <spring.security.version>3.2.5.RELEASE</spring.security.version>
-        <struts.version>2.5.12</struts.version>
+        <struts.version>2.5.17</struts.version>
         <velocity.version>1.7</velocity.version>
         <webjars.version>1.5</webjars.version>
         <ws-commons-util.version>1.0.2</ws-commons-util.version>
@@ -94,12 +94,6 @@
             <artifactId>mail</artifactId>
             <version>${java-mail.version}</version>
             <scope>provided</scope>
-            <exclusions>
-                <exclusion>
-                    <groupId>javax.activation</groupId>
-                    <artifactId>activation</artifactId>
-                </exclusion>
-            </exclusions>
         </dependency>
 
         <!-- Eclipselink JPA is the default JPA implementation used by
@@ -158,6 +152,18 @@
             <groupId>org.apache.velocity</groupId>
             <artifactId>velocity</artifactId>
             <version>${velocity.version}</version>
+            <exclusions>
+                <exclusion>
+                    <groupId>commons-collections</groupId>
+                    <artifactId>commons-collections</artifactId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+
+        <dependency>
+            <groupId>commons-collections</groupId>
+            <artifactId>commons-collections</artifactId>
+            <version>3.2.2</version>
         </dependency>
 
         <dependency>
diff --git a/app/src/main/java/org/apache/roller/weblogger/business/jpa/JPAWeblogEntryManagerImpl.java b/app/src/main/java/org/apache/roller/weblogger/business/jpa/JPAWeblogEntryManagerImpl.java
index 5035f93..7fe517d 100644
--- a/app/src/main/java/org/apache/roller/weblogger/business/jpa/JPAWeblogEntryManagerImpl.java
+++ b/app/src/main/java/org/apache/roller/weblogger/business/jpa/JPAWeblogEntryManagerImpl.java
@@ -288,7 +288,7 @@
         this.entryAnchorToIdMap.remove(entry.getWebsite().getHandle()+":"+entry.getAnchor());
     }
     
-    public List getNextPrevEntries(WeblogEntry current, String catName,
+    private List getNextPrevEntries(WeblogEntry current, String catName,
             String locale, int maxEntries, boolean next)
             throws WebloggerException {
 
@@ -462,13 +462,7 @@
             query.setParameter(i+1, params.get(i));
         }
         
-        if (wesc.getOffset() != 0) {
-            query.setFirstResult(wesc.getOffset());
-        }
-        if (wesc.getMaxResults() != -1) {
-            query.setMaxResults(wesc.getMaxResults());
-        }
-        
+        setFirstMax( query, wesc.getOffset(), wesc.getMaxResults() );
         return query.getResultList();
     }
     
@@ -666,12 +660,7 @@
         }
         
         TypedQuery<WeblogEntryComment> query = strategy.getDynamicQuery(queryString.toString(), WeblogEntryComment.class);
-        if (csc.getOffset() != 0) {
-            query.setFirstResult(csc.getOffset());
-        }
-        if (csc.getMaxResults() != -1) {
-            query.setMaxResults(csc.getMaxResults());
-        }
+        setFirstMax( query, csc.getOffset(), csc.getMaxResults());
         for (int i=0; i<params.size(); i++) {
             query.setParameter(i+1, params.get(i));
         }
@@ -758,7 +747,7 @@
      * @inheritDoc
      */
     public Map<Date, List<WeblogEntry>> getWeblogEntryObjectMap(WeblogEntrySearchCriteria wesc) throws WebloggerException {
-        TreeMap<Date, List<WeblogEntry>> map = new TreeMap<Date, List<WeblogEntry>>(Collections.reverseOrder());
+        TreeMap<Date, List<WeblogEntry>> map = new TreeMap<>(Collections.reverseOrder());
 
         List<WeblogEntry> entries = getWeblogEntries(wesc);
 
@@ -769,11 +758,7 @@
 
         for (WeblogEntry entry : entries) {
             Date sDate = DateUtil.getNoonOfDay(entry.getPubTime(), cal);
-            List<WeblogEntry> dayEntries = map.get(sDate);
-            if (dayEntries == null) {
-                dayEntries = new ArrayList<WeblogEntry>();
-                map.put(sDate, dayEntries);
-            }
+            List<WeblogEntry> dayEntries = map.computeIfAbsent(sDate, k -> new ArrayList<>());
             dayEntries.add(entry);
         }
         return map;
@@ -843,12 +828,7 @@
                 query.setParameter(1, end);
             }
         }
-        if (offset != 0) {
-            query.setFirstResult(offset);
-        }
-        if (length != -1) {
-            query.setMaxResults(length);
-        }
+        setFirstMax( query, offset, length);
         queryResults = query.getResultList();
         List<StatCount> results = new ArrayList<StatCount>();
         if (queryResults != null) {
@@ -951,12 +931,7 @@
                         "WeblogEntryTagAggregate.getPopularTagsByWebsiteNull", TagStat.class);
             }
         }
-        if (offset != 0) {
-            query.setFirstResult(offset);
-        }
-        if (limit != -1) {
-            query.setMaxResults(limit);
-        }
+        setFirstMax( query, offset, limit);
         queryResults = query.getResultList();
         
         double min = Integer.MAX_VALUE;
@@ -1029,12 +1004,7 @@
         for (int i=0; i<params.size(); i++) {
             query.setParameter(i+1, params.get(i));
         }
-        if (offset != 0) {
-            query.setFirstResult(offset);
-        }
-        if (limit != -1) {
-            query.setMaxResults(limit);
-        }
+        setFirstMax( query, offset, limit);
         queryResults = query.getResultList();
         
         List<TagStat> results = new ArrayList<TagStat>();
@@ -1214,26 +1184,36 @@
     throws WebloggerException {
         
         // figure out start date
-        Calendar cal = Calendar.getInstance();
-        cal.setTime(new Date());
-        cal.add(Calendar.DATE, -1 * sinceDays);
-        Date startDate = cal.getTime();
+        Date startDate = getStartDateNow(sinceDays);
 
-        TypedQuery<WeblogHitCount> query = strategy.getNamedQuery(
+        TypedQuery<WeblogHitCount> query;
+        query = strategy.getNamedQuery(
                 "WeblogHitCount.getByWeblogEnabledTrueAndActiveTrue&DailyHitsGreaterThenZero&WeblogLastModifiedGreaterOrderByDailyHitsDesc",
                 WeblogHitCount.class);
         query.setParameter(1, startDate);
-        
+        setFirstMax( query, offset, length );
+        return query.getResultList();
+    }
+
+
+    private static void setFirstMax( Query query, int offset, int length )  {
         if (offset != 0) {
             query.setFirstResult(offset);
         }
         if (length != -1) {
             query.setMaxResults(length);
-        }        
-        return query.getResultList();
+        }
     }
-    
-    
+
+
+    public static Date getStartDateNow(int sinceDays) {
+        Calendar cal = Calendar.getInstance();
+        cal.setTime(new Date());
+        cal.add(Calendar.DATE, -1 * sinceDays);
+        return cal.getTime();
+    }
+
+
     /**
      * @inheritDoc
      */
diff --git a/app/src/main/java/org/apache/roller/weblogger/business/search/IndexManagerImpl.java b/app/src/main/java/org/apache/roller/weblogger/business/search/IndexManagerImpl.java
index 77bd8e6..7b5ac68 100644
--- a/app/src/main/java/org/apache/roller/weblogger/business/search/IndexManagerImpl.java
+++ b/app/src/main/java/org/apache/roller/weblogger/business/search/IndexManagerImpl.java
@@ -90,7 +90,7 @@
 
     /**
      * Creates a new lucene index manager. This should only be created once.
-     * Creating the index manager more than once will definately result in
+     * Creating the index manager more than once will definitely result in
      * errors. The preferred way of getting an index is through the
      * RollerContext.
      * 
diff --git a/app/src/main/java/org/apache/roller/weblogger/ui/rendering/model/SiteModel.java b/app/src/main/java/org/apache/roller/weblogger/ui/rendering/model/SiteModel.java
index ada1b24..e3fd7b3 100644
--- a/app/src/main/java/org/apache/roller/weblogger/ui/rendering/model/SiteModel.java
+++ b/app/src/main/java/org/apache/roller/weblogger/ui/rendering/model/SiteModel.java
@@ -33,6 +33,7 @@
 import org.apache.roller.weblogger.business.WebloggerFactory;
 import org.apache.roller.weblogger.business.UserManager;
 import org.apache.roller.weblogger.business.WeblogEntryManager;
+import org.apache.roller.weblogger.business.jpa.JPAWeblogEntryManagerImpl;
 import org.apache.roller.weblogger.pojos.TagStat;
 import org.apache.roller.weblogger.pojos.WeblogHitCount;
 import org.apache.roller.weblogger.pojos.StatCount;
@@ -389,10 +390,7 @@
      */
     public List<WeblogWrapper> getNewWeblogs(int sinceDays, int length) {
         List<WeblogWrapper> results = new ArrayList<WeblogWrapper>();
-        Calendar cal = Calendar.getInstance();
-        cal.setTime(new Date());
-        cal.add(Calendar.DATE, -1 * sinceDays);
-        Date startDate = cal.getTime();
+        Date startDate = JPAWeblogEntryManagerImpl.getStartDateNow(sinceDays);
         try {            
             List<Weblog> weblogs = WebloggerFactory.getWeblogger().getWeblogManager().getWeblogs(
                 Boolean.TRUE, Boolean.TRUE, startDate, null, 0, length);
@@ -466,10 +464,7 @@
      */
     public List getMostCommentedWeblogs(int sinceDays , int length) {
         List results = new ArrayList();
-        Calendar cal = Calendar.getInstance();
-        cal.setTime(new Date());
-        cal.add(Calendar.DATE, -1 * sinceDays);
-        Date startDate = cal.getTime();
+        Date startDate = JPAWeblogEntryManagerImpl.getStartDateNow(sinceDays);
         try {            
             results = WebloggerFactory.getWeblogger().getWeblogManager().getMostCommentedWeblogs(
                     startDate, new Date(), 0, length);
@@ -490,10 +485,7 @@
     public List getMostCommentedWeblogEntries(
             List cats, int sinceDays, int length) {
         List results = new ArrayList();
-        Calendar cal = Calendar.getInstance();
-        cal.setTime(new Date());
-        cal.add(Calendar.DATE, -1 * sinceDays);
-        Date startDate = cal.getTime();
+        Date startDate = JPAWeblogEntryManagerImpl.getStartDateNow(sinceDays);
         try {            
             Weblogger roller = WebloggerFactory.getWeblogger();
             WeblogEntryManager wmgr = roller.getWeblogEntryManager();
diff --git a/app/src/main/java/org/apache/roller/weblogger/ui/struts2/core/Install.java b/app/src/main/java/org/apache/roller/weblogger/ui/struts2/core/Install.java
index e67cc85..12de267 100644
--- a/app/src/main/java/org/apache/roller/weblogger/ui/struts2/core/Install.java
+++ b/app/src/main/java/org/apache/roller/weblogger/ui/struts2/core/Install.java
@@ -38,7 +38,7 @@
 /**
  * Walk user through install process.
  */
-// TODO: make this work @AllowedMethods({"execute","create","update","bootstrap"})
+// TODO: make this work @AllowedMethods({"execute","create","upgrade","bootstrap"})
 public class Install extends UIAction {
 
     private static Log log = LogFactory.getLog(Install.class);
diff --git a/app/src/main/resources/struts.xml b/app/src/main/resources/struts.xml
index 3c9a4c6..eb6f8ba 100644
--- a/app/src/main/resources/struts.xml
+++ b/app/src/main/resources/struts.xml
@@ -154,7 +154,7 @@
         <global-allowed-methods>
             execute,
             create,
-            update,
+            upgrade,
             bootstrap
         </global-allowed-methods>
 
diff --git a/app/src/test/java/org/apache/roller/planet/business/SingleThreadedFeedUpdaterTest.java b/app/src/test/java/org/apache/roller/planet/business/SingleThreadedFeedUpdaterTest.java
index 4015845..ad89f3e 100644
--- a/app/src/test/java/org/apache/roller/planet/business/SingleThreadedFeedUpdaterTest.java
+++ b/app/src/test/java/org/apache/roller/planet/business/SingleThreadedFeedUpdaterTest.java
@@ -37,7 +37,7 @@
     
     private Subscription testSub = null;
     
-    private String feed_url = "http://rollerweblogger.org/roller/feed/entries/atom";
+    private String feed_url = "https://rollerweblogger.org/roller/feed/entries/atom";
     
     
     protected void setUp() throws Exception {
diff --git a/app/src/test/resources/jetty.xml b/app/src/test/resources/jetty.xml
index 0209086..995ea1d 100644
--- a/app/src/test/resources/jetty.xml
+++ b/app/src/test/resources/jetty.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0"?>
 <!DOCTYPE Configure PUBLIC "-//Mort Bay Consulting//DTD Configure//EN" "http://www.eclipse.org/jetty/configure.dtd">
-<Configure id='Server' class="org.eclipse.jetty.webapp.WebAppContext">
+<Configure id="Server" class="org.eclipse.jetty.server.Server">
 
     <!-- Dummy values used only when testing with Jetty via mvn jetty:run -->
 
diff --git a/assembly-release/pom.xml b/assembly-release/pom.xml
index 77dac0d..8cc413a 100644
--- a/assembly-release/pom.xml
+++ b/assembly-release/pom.xml
@@ -22,7 +22,7 @@
     <parent>
         <groupId>org.apache.roller</groupId>
         <artifactId>roller-project</artifactId>
-        <version>5.2.0</version>
+        <version>6.0.0-SNAPSHOT</version>
         <relativePath>../pom.xml</relativePath>
     </parent>
 
diff --git a/assembly-release/sign-release.sh b/assembly-release/sign-release.sh
index 77fdd59..a36e210 100755
--- a/assembly-release/sign-release.sh
+++ b/assembly-release/sign-release.sh
@@ -1,7 +1,7 @@
 #!/usr/bin/env bash
 
 export rcstring=""
-export vstring="5.2.0"
+export vstring="6.0.0"
 
 # for rc releases we rename the release files
 if [ rcstring != "" ]; then
diff --git a/it-selenium/pom.xml b/it-selenium/pom.xml
index 2854584..b155983 100644
--- a/it-selenium/pom.xml
+++ b/it-selenium/pom.xml
@@ -24,7 +24,7 @@
     <parent>
         <groupId>org.apache.roller</groupId>
         <artifactId>roller-project</artifactId>
-        <version>5.2.0</version>
+        <version>6.0.0-SNAPSHOT</version>
         <relativePath>../pom.xml</relativePath>
     </parent>
 
diff --git a/it-selenium/src/test/resources/roller-jettyrun.properties b/it-selenium/src/test/resources/roller-jettyrun.properties
index 643e0c5..e3fdd52 100644
--- a/it-selenium/src/test/resources/roller-jettyrun.properties
+++ b/it-selenium/src/test/resources/roller-jettyrun.properties
@@ -23,7 +23,7 @@
 passwds.encryption.enabled=false
 
 # use src copy of themes for read-only access
-themes.dir=target/roller-selenium-tests-5.2.0/themes
+themes.dir=target/roller-selenium-tests-6.0.0-SNAPSHOT/themes
 
 # put work in work dir
 search.index.dir          =target/work/search-index
diff --git a/pom.xml b/pom.xml
index 408d530..6af923f 100644
--- a/pom.xml
+++ b/pom.xml
@@ -22,7 +22,7 @@
     <modelVersion>4.0.0</modelVersion>
     <groupId>org.apache.roller</groupId>
     <artifactId>roller-project</artifactId>
-    <version>5.2.0</version>
+    <version>6.0.0-SNAPSHOT</version>
     <packaging>pom</packaging>
 
     <prerequisites>
@@ -47,7 +47,7 @@
         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
         <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
         <derby.version>10.11.1.1</derby.version>
-        <roller.version>5.2.0</roller.version>
+        <roller.version>6.0.0-SNAPSHOT</roller.version>
     </properties>
 
     <modules>
@@ -63,8 +63,8 @@
                     <artifactId>maven-compiler-plugin</artifactId>
                     <version>3.1</version>
                     <configuration>
-                        <source>1.7</source>
-                        <target>1.7</target>
+                        <source>1.8</source>
+                        <target>1.8</target>
                         <fork>true</fork>
                         <encoding>${project.build.sourceEncoding}</encoding>
                     </configuration>
@@ -80,7 +80,7 @@
                 <plugin>
                     <groupId>org.eclipse.jetty</groupId>
                     <artifactId>jetty-maven-plugin</artifactId>
-                    <version>9.2.6.v20141205</version>
+                    <version>9.4.11.v20180605</version>
                 </plugin>
                 <plugin>
                     <groupId>com.btmatthews.maven.plugins.inmemdb</groupId>