You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hop.apache.org by ha...@apache.org on 2020/11/07 12:37:51 UTC

[incubator-hop] branch master updated: SonarQube issues fix (#362)

This is an automated email from the ASF dual-hosted git repository.

hansva pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-hop.git


The following commit(s) were added to refs/heads/master by this push:
     new d34fc38  SonarQube issues fix (#362)
d34fc38 is described below

commit d34fc380983840eff68b514784d6e47af7b426eb
Author: Mahendran Mookkiah <ma...@gmail.com>
AuthorDate: Sat Nov 7 07:37:45 2020 -0500

    SonarQube issues fix (#362)
    
    Sonar issues in excelinput, replacestring, sort transformation fixed.
---
 .../transforms/excelinput/WorkbookFactory.java     |  4 ++
 .../excelinput/staxpoi/StaxPoiSheet.java           | 27 +++++-----
 .../excelinput/staxpoi/StaxPoiWorkbook.java        | 17 ++----
 .../transforms/excelinput/staxpoi/StaxUtil.java    | 14 +++++
 .../excelinput/staxpoi/StaxPoiSheetTest.java       |  1 -
 .../transforms/replacestring/ReplaceString.java    | 28 ++++------
 .../replacestring/ReplaceStringDialog.java         |  2 +
 .../replacestring/ReplaceStringMeta.java           | 62 +++++++++++-----------
 .../replacestring/ReplaceStringTest.java           |  1 -
 .../hop/pipeline/transforms/sort/SortRows.java     | 31 +++++------
 .../hop/pipeline/transforms/sort/SortRowsData.java | 10 ++--
 .../hop/pipeline/transforms/sort/SortRowsMeta.java |  4 +-
 12 files changed, 100 insertions(+), 101 deletions(-)

diff --git a/plugins/transforms/excelinput/src/main/java/org/apache/hop/pipeline/transforms/excelinput/WorkbookFactory.java b/plugins/transforms/excelinput/src/main/java/org/apache/hop/pipeline/transforms/excelinput/WorkbookFactory.java
index e7baf79..278ba2a 100644
--- a/plugins/transforms/excelinput/src/main/java/org/apache/hop/pipeline/transforms/excelinput/WorkbookFactory.java
+++ b/plugins/transforms/excelinput/src/main/java/org/apache/hop/pipeline/transforms/excelinput/WorkbookFactory.java
@@ -32,6 +32,10 @@ import org.apache.hop.pipeline.transforms.excelinput.staxpoi.StaxPoiWorkbook;
 import java.io.InputStream;
 
 public class WorkbookFactory {
+  
+  private WorkbookFactory() {
+    throw new IllegalStateException("Utility class");
+  }
 
   public static IKWorkbook getWorkbook( SpreadSheetType type, String filename, String encoding ) throws HopException {
     switch ( type ) {
diff --git a/plugins/transforms/excelinput/src/main/java/org/apache/hop/pipeline/transforms/excelinput/staxpoi/StaxPoiSheet.java b/plugins/transforms/excelinput/src/main/java/org/apache/hop/pipeline/transforms/excelinput/staxpoi/StaxPoiSheet.java
index 30f7aea..c686a4b 100644
--- a/plugins/transforms/excelinput/src/main/java/org/apache/hop/pipeline/transforms/excelinput/staxpoi/StaxPoiSheet.java
+++ b/plugins/transforms/excelinput/src/main/java/org/apache/hop/pipeline/transforms/excelinput/staxpoi/StaxPoiSheet.java
@@ -26,7 +26,15 @@
 
 package org.apache.hop.pipeline.transforms.excelinput.staxpoi;
 
-import com.google.common.annotations.VisibleForTesting;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.TimeZone;
+import javax.xml.stream.XMLInputFactory;
+import javax.xml.stream.XMLStreamConstants;
+import javax.xml.stream.XMLStreamException;
+import javax.xml.stream.XMLStreamReader;
 import org.apache.commons.lang.StringUtils;
 import org.apache.hop.core.spreadsheet.IKCell;
 import org.apache.hop.core.spreadsheet.IKSheet;
@@ -38,16 +46,7 @@ import org.apache.poi.xssf.model.SharedStringsTable;
 import org.apache.poi.xssf.model.StylesTable;
 import org.apache.poi.xssf.usermodel.XSSFRichTextString;
 import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTXf;
-
-import javax.xml.stream.XMLInputFactory;
-import javax.xml.stream.XMLStreamConstants;
-import javax.xml.stream.XMLStreamException;
-import javax.xml.stream.XMLStreamReader;
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.TimeZone;
+import com.google.common.annotations.VisibleForTesting;
 
 /**
  * Streaming reader for XLSX sheets.<br>
@@ -88,7 +87,8 @@ public class StaxPoiSheet implements IKSheet {
     sst = reader.getSharedStringsTable();
     styles = reader.getStylesTable();
     sheetStream = reader.getSheet( sheetID );
-    XMLInputFactory factory = XMLInputFactory.newInstance();
+    XMLInputFactory factory = StaxUtil.safeXMLInputFactory();
+    
     sheetReader = factory.createXMLStreamReader( sheetStream );
     headerRow = new ArrayList<>();
     while ( sheetReader.hasNext() ) {
@@ -378,7 +378,8 @@ public class StaxPoiSheet implements IKSheet {
     sheetReader.close();
     sheetStream.close();
     sheetStream = xssfReader.getSheet( sheetId );
-    XMLInputFactory factory = XMLInputFactory.newInstance();
+    XMLInputFactory factory = StaxUtil.safeXMLInputFactory();
+    
     sheetReader = factory.createXMLStreamReader( sheetStream );
   }
 
diff --git a/plugins/transforms/excelinput/src/main/java/org/apache/hop/pipeline/transforms/excelinput/staxpoi/StaxPoiWorkbook.java b/plugins/transforms/excelinput/src/main/java/org/apache/hop/pipeline/transforms/excelinput/staxpoi/StaxPoiWorkbook.java
index 2af1321..73205be 100644
--- a/plugins/transforms/excelinput/src/main/java/org/apache/hop/pipeline/transforms/excelinput/staxpoi/StaxPoiWorkbook.java
+++ b/plugins/transforms/excelinput/src/main/java/org/apache/hop/pipeline/transforms/excelinput/staxpoi/StaxPoiWorkbook.java
@@ -67,7 +67,7 @@ public class StaxPoiWorkbook implements IKWorkbook {
   private OPCPackage opcpkg;
 
   protected StaxPoiWorkbook() {
-    openSheetsMap = new HashMap<String, StaxPoiSheet>();
+    openSheetsMap = new HashMap<>();
     this.log = HopLogStore.getLogChannelFactory().create( this );
   }
 
@@ -91,14 +91,14 @@ public class StaxPoiWorkbook implements IKWorkbook {
     }
   }
 
-  private void openFile( OPCPackage pkg, String encoding ) throws HopException {
+  private void openFile( OPCPackage pkg, String encoding ) throws HopException, IOException, XMLStreamException {
     InputStream workbookData = null;
     XMLStreamReader workbookReader = null;
     try {
       reader = new XSSFReader( pkg );
-      sheetNameIDMap = new LinkedHashMap<String, String>();
+      sheetNameIDMap = new LinkedHashMap<>();
       workbookData = reader.getWorkbookData();
-      XMLInputFactory factory = XMLInputFactory.newInstance();
+      XMLInputFactory factory = StaxUtil.safeXMLInputFactory();
       workbookReader = factory.createXMLStreamReader( workbookData );
       while ( workbookReader.hasNext() ) {
         if ( workbookReader.next() == XMLStreamConstants.START_ELEMENT
@@ -117,18 +117,10 @@ public class StaxPoiWorkbook implements IKWorkbook {
       throw new HopException( e );
     } finally {
       if ( workbookReader != null ) {
-        try {
           workbookReader.close();
-        } catch ( XMLStreamException e ) {
-          throw new HopException( e );
-        }
       }
       if ( workbookData != null ) {
-        try {
           workbookData.close();
-        } catch ( IOException e ) {
-          throw new HopException( e );
-        }
       }
     }
   }
@@ -143,6 +135,7 @@ public class StaxPoiWorkbook implements IKWorkbook {
       return null;
     }
     StaxPoiSheet sheet = openSheetsMap.get( sheetID );
+
     if ( sheet == null ) {
       try {
         sheet = new StaxPoiSheet( reader, sheetName, sheetID );
diff --git a/plugins/transforms/excelinput/src/main/java/org/apache/hop/pipeline/transforms/excelinput/staxpoi/StaxUtil.java b/plugins/transforms/excelinput/src/main/java/org/apache/hop/pipeline/transforms/excelinput/staxpoi/StaxUtil.java
index b301391..9ce162b 100644
--- a/plugins/transforms/excelinput/src/main/java/org/apache/hop/pipeline/transforms/excelinput/staxpoi/StaxUtil.java
+++ b/plugins/transforms/excelinput/src/main/java/org/apache/hop/pipeline/transforms/excelinput/staxpoi/StaxUtil.java
@@ -22,6 +22,8 @@
 
 package org.apache.hop.pipeline.transforms.excelinput.staxpoi;
 
+import javax.xml.XMLConstants;
+import javax.xml.stream.XMLInputFactory;
 import org.apache.poi.ss.SpreadsheetVersion;
 
 public class StaxUtil {
@@ -29,6 +31,10 @@ public class StaxUtil {
   public static final int MAX_ROWS = DEFAULT_SPREADSHEET_VERSION.getMaxRows();
   public static final int MAX_COLUMNS = DEFAULT_SPREADSHEET_VERSION.getMaxColumns();
 
+  private StaxUtil() {
+    throw new IllegalStateException("Utility class");
+  }
+  
   public static int extractRowNumber( String position ) {
     int startIndex = 0;
     while ( !Character.isDigit( position.charAt( startIndex ) ) && startIndex < position.length() ) {
@@ -63,5 +69,13 @@ public class StaxUtil {
 
     return col;
   }
+  
+  public static final XMLInputFactory safeXMLInputFactory() {
+    XMLInputFactory factory = XMLInputFactory.newInstance();
+    // To prevent from XXE attacks
+    factory.setProperty(XMLConstants.ACCESS_EXTERNAL_DTD, "");
+    factory.setProperty(XMLConstants.ACCESS_EXTERNAL_SCHEMA, "");
+    return factory;
+  }
 
 }
diff --git a/plugins/transforms/excelinput/src/test/java/org/apache/hop/pipeline/transforms/excelinput/staxpoi/StaxPoiSheetTest.java b/plugins/transforms/excelinput/src/test/java/org/apache/hop/pipeline/transforms/excelinput/staxpoi/StaxPoiSheetTest.java
index 1719741..0c362b6 100644
--- a/plugins/transforms/excelinput/src/test/java/org/apache/hop/pipeline/transforms/excelinput/staxpoi/StaxPoiSheetTest.java
+++ b/plugins/transforms/excelinput/src/test/java/org/apache/hop/pipeline/transforms/excelinput/staxpoi/StaxPoiSheetTest.java
@@ -30,7 +30,6 @@ import org.apache.poi.xssf.eventusermodel.XSSFReader;
 import org.apache.poi.xssf.model.SharedStringsTable;
 import org.apache.poi.xssf.model.StylesTable;
 import org.junit.Test;
-import org.mockito.invocation.InvocationOnMock;
 import org.mockito.stubbing.Answer;
 import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTRst;
 import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTXf;
diff --git a/plugins/transforms/replacestring/src/main/java/org/apache/hop/pipeline/transforms/replacestring/ReplaceString.java b/plugins/transforms/replacestring/src/main/java/org/apache/hop/pipeline/transforms/replacestring/ReplaceString.java
index 9084bba..81626a9 100644
--- a/plugins/transforms/replacestring/src/main/java/org/apache/hop/pipeline/transforms/replacestring/ReplaceString.java
+++ b/plugins/transforms/replacestring/src/main/java/org/apache/hop/pipeline/transforms/replacestring/ReplaceString.java
@@ -23,27 +23,24 @@
 
 package org.apache.hop.pipeline.transforms.replacestring;
 
-import com.google.common.annotations.VisibleForTesting;
+import java.util.HashSet;
+import java.util.Set;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
 import org.apache.hop.core.exception.HopException;
 import org.apache.hop.core.exception.HopTransformException;
-import org.apache.hop.core.row.RowDataUtil;
 import org.apache.hop.core.row.IRowMeta;
 import org.apache.hop.core.row.IValueMeta;
+import org.apache.hop.core.row.RowDataUtil;
 import org.apache.hop.core.util.StringUtil;
 import org.apache.hop.core.util.Utils;
 import org.apache.hop.i18n.BaseMessages;
 import org.apache.hop.pipeline.Pipeline;
 import org.apache.hop.pipeline.PipelineMeta;
 import org.apache.hop.pipeline.transform.BaseTransform;
-import org.apache.hop.pipeline.transform.ITransformData;
 import org.apache.hop.pipeline.transform.ITransform;
 import org.apache.hop.pipeline.transform.TransformMeta;
-import org.apache.hop.pipeline.transform.ITransform;
-
-import java.util.HashSet;
-import java.util.Set;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
+import com.google.common.annotations.VisibleForTesting;
 
 /**
  * Search and replace in string.
@@ -125,7 +122,7 @@ public class ReplaceString extends BaseTransform<ReplaceStringMeta, ReplaceStrin
 
     Object[] rowData = RowDataUtil.resizeArray( row, data.outputRowMeta.size() );
     int index = 0;
-    Set<Integer> numFieldsAlreadyBeenTransformed = new HashSet<Integer>();
+    Set<Integer> numFieldsAlreadyBeenTransformed = new HashSet<>();
     for ( int i = 0; i < data.numFields; i++ ) {
 
       IRowMeta currentRowMeta =
@@ -214,10 +211,8 @@ public class ReplaceString extends BaseTransform<ReplaceStringMeta, ReplaceStrin
       Object[] output = getOneRow( getInputRowMeta(), r );
       putRow( data.outputRowMeta, output );
 
-      if ( checkFeedback( getLinesRead() ) ) {
-        if ( log.isDetailed() ) {
+      if ( checkFeedback( getLinesRead() ) &&  log.isDetailed() ) {
           logDetailed( BaseMessages.getString( PKG, "ReplaceString.Log.LineNumber" ) + getLinesRead() );
-        }
       }
     } catch ( HopException e ) {
       boolean sendToErrorRow = false;
@@ -242,12 +237,7 @@ public class ReplaceString extends BaseTransform<ReplaceStringMeta, ReplaceStrin
   }
 
   public boolean init() {
-
-    if ( super.init() ) {
-
-      return true;
-    }
-    return false;
+    return super.init() ;
   }
 
   public void dispose() {
diff --git a/plugins/transforms/replacestring/src/main/java/org/apache/hop/pipeline/transforms/replacestring/ReplaceStringDialog.java b/plugins/transforms/replacestring/src/main/java/org/apache/hop/pipeline/transforms/replacestring/ReplaceStringDialog.java
index 95032d0..634109f 100644
--- a/plugins/transforms/replacestring/src/main/java/org/apache/hop/pipeline/transforms/replacestring/ReplaceStringDialog.java
+++ b/plugins/transforms/replacestring/src/main/java/org/apache/hop/pipeline/transforms/replacestring/ReplaceStringDialog.java
@@ -224,6 +224,7 @@ public class ReplaceStringDialog extends BaseTransformDialog implements ITransfo
 
 
     lsDef = new SelectionAdapter() {
+      @Override
       public void widgetDefaultSelected( SelectionEvent e ) {
         ok();
       }
@@ -233,6 +234,7 @@ public class ReplaceStringDialog extends BaseTransformDialog implements ITransfo
 
     // Detect X or ALT-F4 or something that kills this window...
     shell.addShellListener( new ShellAdapter() {
+      @Override
       public void shellClosed( ShellEvent e ) {
         cancel();
       }
diff --git a/plugins/transforms/replacestring/src/main/java/org/apache/hop/pipeline/transforms/replacestring/ReplaceStringMeta.java b/plugins/transforms/replacestring/src/main/java/org/apache/hop/pipeline/transforms/replacestring/ReplaceStringMeta.java
index 0bd3864..c41b10e 100644
--- a/plugins/transforms/replacestring/src/main/java/org/apache/hop/pipeline/transforms/replacestring/ReplaceStringMeta.java
+++ b/plugins/transforms/replacestring/src/main/java/org/apache/hop/pipeline/transforms/replacestring/ReplaceStringMeta.java
@@ -23,6 +23,8 @@
 
 package org.apache.hop.pipeline.transforms.replacestring;
 
+import static org.apache.hop.core.ICheckResult.*;
+
 import org.apache.commons.lang.StringUtils;
 import org.apache.hop.core.CheckResult;
 import org.apache.hop.core.ICheckResult;
@@ -96,14 +98,14 @@ public class ReplaceStringMeta extends BaseTransformMeta implements ITransformMe
   @Injection( name = "IS_UNICODE", group = "FIELDS" )
   private int[] isUnicode;
 
-  public static final String[] caseSensitiveCode = { "no", "yes" };
+  protected static final String[] caseSensitiveCode = { "no", "yes" };
 
-  public static final String[] isUnicodeCode = { "no", "yes" };
+  protected static final String[] isUnicodeCode = { "no", "yes" };
 
-  public static final String[] caseSensitiveDesc = new String[] {
+  protected static final String[] caseSensitiveDesc = new String[] {
     BaseMessages.getString( PKG, "System.Combo.No" ), BaseMessages.getString( PKG, "System.Combo.Yes" ) };
 
-  public static final String[] isUnicodeDesc = new String[] {
+  protected static final String[] isUnicodeDesc = new String[] {
     BaseMessages.getString( PKG, "System.Combo.No" ), BaseMessages.getString( PKG, "System.Combo.Yes" ) };
 
   public static final int CASE_SENSITIVE_NO = 0;
@@ -114,19 +116,19 @@ public class ReplaceStringMeta extends BaseTransformMeta implements ITransformMe
 
   public static final int IS_UNICODE_YES = 1;
 
-  public static final String[] wholeWordDesc = new String[] {
+  protected static final String[] wholeWordDesc = new String[] {
     BaseMessages.getString( PKG, "System.Combo.No" ), BaseMessages.getString( PKG, "System.Combo.Yes" ) };
 
-  public static final String[] wholeWordCode = { "no", "yes" };
+  protected static final String[] wholeWordCode = { "no", "yes" };
 
   public static final int WHOLE_WORD_NO = 0;
 
   public static final int WHOLE_WORD_YES = 1;
 
-  public static final String[] useRegExDesc = new String[] {
+  protected static final String[] useRegExDesc = new String[] {
     BaseMessages.getString( PKG, "System.Combo.No" ), BaseMessages.getString( PKG, "System.Combo.Yes" ) };
 
-  public static final String[] useRegExCode = { "no", "yes" };
+  protected static final String[] useRegExCode = { "no", "yes" };
 
   public static final int USE_REGEX_NO = 0;
 
@@ -397,13 +399,14 @@ public class ReplaceStringMeta extends BaseTransformMeta implements ITransformMe
                      IHopMetadataProvider metadataProvider ) {
 
     CheckResult cr;
-    String errorMessage = "";
+    StringBuilder errorMessage = new StringBuilder();
     boolean first = true;
     boolean errorFound = false;
 
     if ( prev == null ) {
-      errorMessage += BaseMessages.getString( PKG, "ReplaceStringMeta.CheckResult.NoInputReceived" ) + Const.CR;
-      cr = new CheckResult( CheckResult.TYPE_RESULT_ERROR, errorMessage, transforminfo );
+      errorMessage.append(BaseMessages.getString( PKG, "ReplaceStringMeta.CheckResult.NoInputReceived" ))
+      .append(Const.CR);
+      cr = new CheckResult( TYPE_RESULT_ERROR, errorMessage.toString(), transforminfo );
       remarks.add( cr );
     } else {
 
@@ -414,18 +417,19 @@ public class ReplaceStringMeta extends BaseTransformMeta implements ITransformMe
         if ( v == null ) {
           if ( first ) {
             first = false;
-            errorMessage +=
-              BaseMessages.getString( PKG, "ReplaceStringMeta.CheckResult.MissingInStreamFields" ) + Const.CR;
+            errorMessage.append(
+              BaseMessages.getString( PKG, "ReplaceStringMeta.CheckResult.MissingInStreamFields" ))
+            .append(Const.CR);
           }
           errorFound = true;
-          errorMessage += "\t\t" + field + Const.CR;
+          errorMessage.append("\t\t").append(field).append(Const.CR);
         }
       }
       if ( errorFound ) {
-        cr = new CheckResult( CheckResult.TYPE_RESULT_ERROR, errorMessage, transforminfo );
+        cr = new CheckResult( TYPE_RESULT_ERROR, errorMessage.toString(), transforminfo );
       } else {
         cr =
-          new CheckResult( CheckResult.TYPE_RESULT_OK, BaseMessages.getString(
+          new CheckResult( TYPE_RESULT_OK, BaseMessages.getString(
             PKG, "ReplaceStringMeta.CheckResult.FoundInStreamFields" ), transforminfo );
       }
       remarks.add( cr );
@@ -437,24 +441,21 @@ public class ReplaceStringMeta extends BaseTransformMeta implements ITransformMe
         String field = fieldInStream[ i ];
 
         IValueMeta v = prev.searchValueMeta( field );
-        if ( v != null ) {
-          if ( v.getType() != IValueMeta.TYPE_STRING ) {
+        if ( v != null && v.getType() != IValueMeta.TYPE_STRING ) {
             if ( first ) {
               first = false;
-              errorMessage +=
-                BaseMessages.getString( PKG, "ReplaceStringMeta.CheckResult.OperationOnNonStringFields" )
-                  + Const.CR;
+              errorMessage.append(BaseMessages.getString( PKG, "ReplaceStringMeta.CheckResult.OperationOnNonStringFields" ))
+                .append(Const.CR);
             }
             errorFound = true;
-            errorMessage += "\t\t" + field + Const.CR;
-          }
+            errorMessage.append("\t\t").append(field).append(Const.CR);
         }
       }
       if ( errorFound ) {
-        cr = new CheckResult( CheckResult.TYPE_RESULT_ERROR, errorMessage, transforminfo );
+        cr = new CheckResult( TYPE_RESULT_ERROR, errorMessage.toString(), transforminfo );
       } else {
         cr =
-          new CheckResult( CheckResult.TYPE_RESULT_OK, BaseMessages.getString(
+          new CheckResult( TYPE_RESULT_OK, BaseMessages.getString(
             PKG, "ReplaceStringMeta.CheckResult.AllOperationsOnStringFields" ), transforminfo );
       }
       remarks.add( cr );
@@ -464,9 +465,10 @@ public class ReplaceStringMeta extends BaseTransformMeta implements ITransformMe
           if ( Utils.isEmpty( fieldInStream[ idx ] ) ) {
             cr =
               new CheckResult(
-                CheckResult.TYPE_RESULT_ERROR, BaseMessages.getString(
-                PKG, "ReplaceStringMeta.CheckResult.InStreamFieldMissing", new Integer( idx + 1 )
-                  .toString() ), transforminfo );
+                TYPE_RESULT_ERROR, BaseMessages.getString(
+                PKG, "ReplaceStringMeta.CheckResult.InStreamFieldMissing", 
+                Integer.toString( idx + 1 )),
+                transforminfo );
             remarks.add( cr );
 
           }
@@ -477,9 +479,9 @@ public class ReplaceStringMeta extends BaseTransformMeta implements ITransformMe
       for ( int idx = 0; idx < fieldInStream.length; idx++ ) {
         for ( int jdx = 0; jdx < fieldInStream.length; jdx++ ) {
           if ( fieldInStream[ idx ].equals( fieldInStream[ jdx ] ) && idx != jdx && idx < jdx ) {
-            errorMessage =
+            String errMessage = 
               BaseMessages.getString( PKG, "ReplaceStringMeta.CheckResult.FieldInputError", fieldInStream[ idx ] );
-            cr = new CheckResult( CheckResult.TYPE_RESULT_ERROR, errorMessage, transforminfo );
+            cr = new CheckResult( TYPE_RESULT_ERROR, errMessage, transforminfo );
             remarks.add( cr );
           }
         }
diff --git a/plugins/transforms/replacestring/src/test/java/org/apache/hop/pipeline/transforms/replacestring/ReplaceStringTest.java b/plugins/transforms/replacestring/src/test/java/org/apache/hop/pipeline/transforms/replacestring/ReplaceStringTest.java
index bdc40f8..d9e4785 100644
--- a/plugins/transforms/replacestring/src/test/java/org/apache/hop/pipeline/transforms/replacestring/ReplaceStringTest.java
+++ b/plugins/transforms/replacestring/src/test/java/org/apache/hop/pipeline/transforms/replacestring/ReplaceStringTest.java
@@ -39,7 +39,6 @@ import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
 import static org.junit.Assert.assertArrayEquals;
-import static org.junit.Assert.assertTrue;
 import static org.mockito.Matchers.any;
 import static org.mockito.Matchers.anyObject;
 import static org.mockito.Matchers.anyString;
diff --git a/plugins/transforms/sort/src/main/java/org/apache/hop/pipeline/transforms/sort/SortRows.java b/plugins/transforms/sort/src/main/java/org/apache/hop/pipeline/transforms/sort/SortRows.java
index 0e20637..6dc3374 100644
--- a/plugins/transforms/sort/src/main/java/org/apache/hop/pipeline/transforms/sort/SortRows.java
+++ b/plugins/transforms/sort/src/main/java/org/apache/hop/pipeline/transforms/sort/SortRows.java
@@ -23,6 +23,7 @@
 
 package org.apache.hop.pipeline.transforms.sort;
 
+import org.apache.commons.collections.CollectionUtils;
 import org.apache.commons.vfs2.FileObject;
 import org.apache.commons.vfs2.FileSystemException;
 import org.apache.hop.core.Const;
@@ -138,7 +139,7 @@ public class SortRows extends BaseTransform<SortRowsMeta, SortRowsData> implemen
       }
 
       // Just write the data, nothing else
-      List<Integer> duplicates = new ArrayList<Integer>();
+      List<Integer> duplicates = new ArrayList<>();
       Object[] previousRow = null;
       if ( meta.isOnlyPassingUniqueRows() ) {
         int index = 0;
@@ -165,19 +166,16 @@ public class SortRows extends BaseTransform<SortRowsMeta, SortRowsData> implemen
       int duplicatesIndex = 0;
       for ( p = 0; p < data.buffer.size(); p++ ) {
         boolean skip = false;
-        if ( duplicatesIndex < duplicates.size() ) {
-          if ( p == duplicates.get( duplicatesIndex ) ) {
+        if ( duplicatesIndex < duplicates.size() && p == duplicates.get( duplicatesIndex ) ) {
             skip = true;
             duplicatesIndex++;
-          }
         }
         if ( !skip ) {
           data.outputRowMeta.writeData( dos, data.buffer.get( p ) );
         }
       }
 
-      if ( data.sortSize < 0 ) {
-        if ( data.buffer.size() > data.minSortSize ) {
+      if ( data.sortSize < 0 && data.buffer.size() > data.minSortSize ) {
           data.minSortSize = data.buffer.size(); // if we did it once, we can do
           // it again.
 
@@ -186,7 +184,6 @@ public class SortRows extends BaseTransform<SortRowsMeta, SortRowsData> implemen
           // As such, we're going to lower the min sort size a bit
           //
           data.minSortSize = (int) Math.round( data.minSortSize * 0.90 );
-        }
       }
 
       // Clear the list
@@ -203,10 +200,8 @@ public class SortRows extends BaseTransform<SortRowsMeta, SortRowsData> implemen
       //
       data.freeMemoryPct = Const.getPercentageFreeMemory();
       data.freeCounter = 0;
-      if ( data.sortSize <= 0 ) {
-        if ( log.isDetailed() ) {
+      if ( data.sortSize <= 0 && log.isDetailed() ) {
           logDetailed( BaseMessages.getString( PKG, "SortRows.Detailed.AvailableMemory", data.freeMemoryPct ) );
-        }
       }
 
     } catch ( Exception e ) {
@@ -229,7 +224,7 @@ public class SortRows extends BaseTransform<SortRowsMeta, SortRowsData> implemen
     Object[] retval;
 
     // Open all files at once and read one row from each file...
-    if ( data.files.size() > 0 && ( data.dis.size() == 0 || data.fis.size() == 0 ) ) {
+    if ( CollectionUtils.isNotEmpty(data.files) && ( data.dis.isEmpty() || data.fis.isEmpty() ) ) {
       if ( log.isBasic() ) {
         logBasic( BaseMessages.getString( PKG, "SortRows.Basic.OpeningTempFiles", data.files.size() ) );
       }
@@ -273,7 +268,7 @@ public class SortRows extends BaseTransform<SortRowsMeta, SortRowsData> implemen
       }
     }
 
-    if ( data.files.size() == 0 ) {
+    if ( data.files.isEmpty() ) {
       // read from in-memory processing
 
       if ( data.getBufferIndex < data.buffer.size() ) {
@@ -285,7 +280,7 @@ public class SortRows extends BaseTransform<SortRowsMeta, SortRowsData> implemen
     } else {
       // read from disk processing
 
-      if ( data.rowbuffer.size() == 0 ) {
+      if ( data.rowbuffer.isEmpty() ) {
         retval = null;
       } else {
         // We now have "filenr" rows waiting: which one is the smallest?
@@ -399,7 +394,7 @@ public class SortRows extends BaseTransform<SortRowsMeta, SortRowsData> implemen
 
       String[] fieldNames = meta.getFieldName();
       data.fieldnrs = new int[ fieldNames.length ];
-      List<Integer> toConvert = new ArrayList<Integer>();
+      List<Integer> toConvert = new ArrayList<>();
 
       // Metadata
       data.outputRowMeta = inputRowMeta.clone();
@@ -574,13 +569,13 @@ public class SortRows extends BaseTransform<SortRowsMeta, SortRowsData> implemen
     data.rowbuffer.clear();
 
     // close any open DataInputStream objects
-    if ( ( data.dis != null ) && ( data.dis.size() > 0 ) ) {
+    if ( CollectionUtils.isNotEmpty(data.dis) ) {
       for ( DataInputStream dis : data.dis ) {
         BaseTransform.closeQuietly( dis );
       }
     }
     // close any open InputStream objects
-    if ( ( data.fis != null ) && ( data.fis.size() > 0 ) ) {
+    if ( CollectionUtils.isNotEmpty(data.fis) ) {
       for ( InputStream is : data.fis ) {
         BaseTransform.closeQuietly( is );
       }
@@ -601,8 +596,8 @@ public class SortRows extends BaseTransform<SortRowsMeta, SortRowsData> implemen
   /**
    * Sort the entire vector, if it is not empty.
    */
-  void quickSort( List<Object[]> elements ) throws HopException {
-    if ( elements.size() > 0 ) {
+  void quickSort( List<Object[]> elements ) {
+    if (  CollectionUtils.isNotEmpty(elements) ) {
       Collections.sort( elements, data.rowComparator );
 
       long nrConversions = 0L;
diff --git a/plugins/transforms/sort/src/main/java/org/apache/hop/pipeline/transforms/sort/SortRowsData.java b/plugins/transforms/sort/src/main/java/org/apache/hop/pipeline/transforms/sort/SortRowsData.java
index c92966f..3133399 100644
--- a/plugins/transforms/sort/src/main/java/org/apache/hop/pipeline/transforms/sort/SortRowsData.java
+++ b/plugins/transforms/sort/src/main/java/org/apache/hop/pipeline/transforms/sort/SortRowsData.java
@@ -79,11 +79,11 @@ public class SortRowsData extends BaseTransformData implements ITransformData {
   public SortRowsData() {
     super();
 
-    files = new ArrayList<FileObject>();
-    fis = new ArrayList<InputStream>();
-    gzis = new ArrayList<GZIPInputStream>();
-    dis = new ArrayList<DataInputStream>();
-    bufferSizes = new ArrayList<Integer>();
+    files = new ArrayList<>();
+    fis = new ArrayList<>();
+    gzis = new ArrayList<>();
+    dis = new ArrayList<>();
+    bufferSizes = new ArrayList<>();
 
     previous = null; // Heroic
   }
diff --git a/plugins/transforms/sort/src/main/java/org/apache/hop/pipeline/transforms/sort/SortRowsMeta.java b/plugins/transforms/sort/src/main/java/org/apache/hop/pipeline/transforms/sort/SortRowsMeta.java
index c732c05..c7a5cba 100644
--- a/plugins/transforms/sort/src/main/java/org/apache/hop/pipeline/transforms/sort/SortRowsMeta.java
+++ b/plugins/transforms/sort/src/main/java/org/apache/hop/pipeline/transforms/sort/SortRowsMeta.java
@@ -604,7 +604,7 @@ public class SortRowsMeta extends BaseTransformMeta implements ITransformMeta<So
   public List<String> getGroupFields() {
     if ( this.groupFields == null ) {
       for ( int i = 0; i < preSortedField.length; i++ ) {
-        if ( preSortedField[ i ] == true ) {
+        if ( preSortedField[ i ] ) {
           if ( groupFields == null ) {
             groupFields = new ArrayList<>();
           }
@@ -616,7 +616,7 @@ public class SortRowsMeta extends BaseTransformMeta implements ITransformMeta<So
   }
 
   public boolean isGroupSortEnabled() {
-    return ( this.getGroupFields() != null ) ? true : false;
+    return this.getGroupFields() != null ;
   }
 
   /**