improves resource management by using try-with-resources pattern more consequently (#94)

fixes several compiler warnings
cures several deprecation notices
applies generics where useful (and obvious)
removes redundant casts
improves code formatting
diff --git a/caseditor-corpus-server-plugin/src/main/java/org/apache/opennlp/corpus_server/caseditor/SearchCorpusServerJob.java b/caseditor-corpus-server-plugin/src/main/java/org/apache/opennlp/corpus_server/caseditor/SearchCorpusServerJob.java
index 51dfb37..8dda9aa 100644
--- a/caseditor-corpus-server-plugin/src/main/java/org/apache/opennlp/corpus_server/caseditor/SearchCorpusServerJob.java
+++ b/caseditor-corpus-server-plugin/src/main/java/org/apache/opennlp/corpus_server/caseditor/SearchCorpusServerJob.java
@@ -70,7 +70,7 @@
       return new Status(IStatus.WARNING, CorpusServerPlugin.PLUGIN_ID, "Failed to connect to server!");
     }
     
-    if (response.getClientResponseStatus().getStatusCode() != 200) {
+    if (response.getStatusInfo().getStatusCode() != 200) {
       return new Status(IStatus.WARNING, CorpusServerPlugin.PLUGIN_ID, "Failed to retrieve results from server!");
     }
     
diff --git a/corpus-server/corpus-server-connector/src/main/java/org/apache/opennlp/corpus_server/connector/CSQueueCollectionReader.java b/corpus-server/corpus-server-connector/src/main/java/org/apache/opennlp/corpus_server/connector/CSQueueCollectionReader.java
index fcded8c..ab6ef0c 100644
--- a/corpus-server/corpus-server-connector/src/main/java/org/apache/opennlp/corpus_server/connector/CSQueueCollectionReader.java
+++ b/corpus-server/corpus-server-connector/src/main/java/org/apache/opennlp/corpus_server/connector/CSQueueCollectionReader.java
@@ -167,21 +167,16 @@
         .header("Content-Type", MediaType.TEXT_XML)
         .get(ClientResponse.class);
     
-    InputStream casIn = casResponse.getEntityInputStream();
-    
-    try {
+
+    try (InputStream casIn = casResponse.getEntityInputStream()) {
       UimaUtil.deserializeXmiCAS(cas, casIn);
     }
     catch (IOException e) {
       if (logger.isLoggable(Level.SEVERE)) {
         logger.log(Level.SEVERE, "Failed to load CAS: " +  casId + " code: " + casResponse.getStatus());
       }
-      
       throw e;
     }
-    finally {
-      casIn.close();
-    }
     
     if (idType != null && idFeature != null) {
       FeatureStructure idFS = cas.createFS(idType);
diff --git a/corpus-server/corpus-server-impl/src/main/java/org/apache/opennlp/corpus_server/impl/DerbyCorporaStore.java b/corpus-server/corpus-server-impl/src/main/java/org/apache/opennlp/corpus_server/impl/DerbyCorporaStore.java
index 88ed6f9..45d8f6e 100644
--- a/corpus-server/corpus-server-impl/src/main/java/org/apache/opennlp/corpus_server/impl/DerbyCorporaStore.java
+++ b/corpus-server/corpus-server-impl/src/main/java/org/apache/opennlp/corpus_server/impl/DerbyCorporaStore.java
@@ -71,9 +71,10 @@
 
   private void readTable(Set<String> set, DatabaseMetaData md, String searchCriteria, String schema)
           throws SQLException {
-    ResultSet rs = md.getTables(null, schema, null, new String[]{ searchCriteria });
-    while (rs.next()) {
-      set.add(rs.getString("TABLE_NAME").toLowerCase());
+    try (ResultSet rs = md.getTables(null, schema, null, new String[]{ searchCriteria })) {
+      while (rs.next()) {
+        set.add(rs.getString("TABLE_NAME").toLowerCase());
+      }
     }
   }
 
@@ -117,29 +118,26 @@
       }
 
     } catch (SQLException e) {
-      
       if (LOGGER.isLoggable(Level.SEVERE)) {
         LOGGER.log(Level.SEVERE, "Failed to create corpus: " + corpusName, e);
       }
-      
       throw new IOException(e);
     }
     
     LOGGER.info("Created new corpus: " + corpusName);
-    
-    
+
     for (CorporaChangeListener listener : getListeners()) {
       // TODO: Maybe optimize this, or just pass the corpus id
       listener.addedCorpus(getCorpus(corpusName));
     }
   }
 
+  @Override
   public Set<String> getCorpusIds() throws IOException {
     
     Set<String> corpusIds = new HashSet<>();
     
-    try {
-      Connection conn = dataSource.getConnection();
+    try (Connection conn = dataSource.getConnection()) {
       DatabaseMetaData dbmd = conn.getMetaData();
 
       String[] types = { "TABLE" };
@@ -150,14 +148,10 @@
         corpusIds.add(tableName.toLowerCase());
       }
 
-      conn.close();
-
     } catch (SQLException e) {
-
       if (LOGGER.isLoggable(Level.SEVERE)) {
         LOGGER.log(Level.SEVERE, "Failed to retrieve corpus ids!", e);
       }
-
       throw new IOException(e);
     }
     
@@ -167,14 +161,12 @@
   @Override
   public void dropCorpus(String corpusName) throws IOException {
 
-    try {
-      Connection conn = dataSource.getConnection();
+    try (Connection conn = dataSource.getConnection()) {
       Statement s = conn.createStatement();
       s.execute("drop table " + corpusName);
       s.close();
 
       conn.commit();
-      conn.close();
     } catch (SQLException e) {
       if (LOGGER.isLoggable(Level.SEVERE)) {
         LOGGER.log(Level.SEVERE, "Failed to create corpus: " + corpusName, e);
@@ -199,9 +191,8 @@
     
     DerbyCorpusStore corpusStore = null;
     
-    try {
-      DatabaseMetaData metadata;
-      metadata = dataSource.getConnection().getMetaData();
+    try (Connection conn = dataSource.getConnection()) {
+      DatabaseMetaData metadata = conn.getMetaData();
       String[] names = { "TABLE" };
       ResultSet tableNames = metadata.getTables(null, null, null, names);
 
@@ -214,7 +205,6 @@
         }
       }
     } catch (SQLException e) {
-      
       if (LOGGER.isLoggable(Level.SEVERE)) {
         LOGGER.log(Level.SEVERE, "Failed to check if corpus exists!", e);
       }
diff --git a/corpus-server/corpus-server-impl/src/main/java/org/apache/opennlp/corpus_server/impl/DerbyCorpusStore.java b/corpus-server/corpus-server-impl/src/main/java/org/apache/opennlp/corpus_server/impl/DerbyCorpusStore.java
index 5e48821..d287075 100644
--- a/corpus-server/corpus-server-impl/src/main/java/org/apache/opennlp/corpus_server/impl/DerbyCorpusStore.java
+++ b/corpus-server/corpus-server-impl/src/main/java/org/apache/opennlp/corpus_server/impl/DerbyCorpusStore.java
@@ -56,30 +56,22 @@
     
     byte[] casBytes  = null;
     
-    try {
-      Connection conn = dataSource.getConnection();
-      
-      PreparedStatement ps = conn.prepareStatement("select * from " + 
-          corpusName + " where name=?");
+    try (Connection conn = dataSource.getConnection();
+         PreparedStatement ps = conn.prepareStatement("select * from " + corpusName + " where name=?")) {
+
       ps.setString(1, casId);
       
       ResultSet casResult = ps.executeQuery();
-      
       if (casResult.next()) {
         casBytes = casResult.getBytes(2);
       }
       
       casResult.close();
-      ps.close();
-      conn.close();
-      
+
     } catch (SQLException e) {
-      
       if (LOGGER.isLoggable(Level.SEVERE)) {
-        LOGGER.log(Level.SEVERE, "Failed to retrieve CAS: " + 
-            casId, e);
+        LOGGER.log(Level.SEVERE, "Failed to retrieve CAS: " + casId, e);
       }
-      
       throw new IOException(e);
     }
     
@@ -89,30 +81,20 @@
   @Override
   public void addCAS(String casID, byte[] content) throws IOException {
     
-    try {
-      Connection conn = dataSource.getConnection();
-      PreparedStatement ps = conn.prepareStatement("insert into " + 
-          corpusName + " values (?, ?)");
-      
+    try (Connection conn = dataSource.getConnection();
+         PreparedStatement ps = conn.prepareStatement("insert into " + corpusName + " values (?, ?)")) {
       ps.setString(1, casID);
       
       Blob b = conn.createBlob();
       b.setBytes(1, content);
       ps.setBlob(2, b);
-      
       ps.executeUpdate();
-      
+
       conn.commit();
-      
-      ps.close();
-      conn.close();
     } catch (SQLException e) {
-      
       if (LOGGER.isLoggable(Level.SEVERE)) {
-        LOGGER.log(Level.SEVERE, "Failed to add CAS: " + 
-            casID, e);
+        LOGGER.log(Level.SEVERE, "Failed to add CAS: " + casID, e);
       }
-      
       throw new IOException(e);
     }
     
@@ -123,30 +105,21 @@
 
   @Override
   public void updateCAS(String casID, byte[] content) throws IOException {
-    try {
-      Connection conn = dataSource.getConnection();
-      PreparedStatement ps = conn.prepareStatement("update " + 
-          corpusName + " set cas = ? where name = ?");
-      
+    try (Connection conn = dataSource.getConnection();
+         PreparedStatement ps = conn.prepareStatement("update " + corpusName + " set cas = ? where name = ?")) {
+
       ps.setString(2, casID);
       
       Blob b = conn.createBlob();
       b.setBytes(1, content);
       ps.setBlob(1, b);
-      
       ps.executeUpdate();
       
       conn.commit();
-      
-      ps.close();
-      conn.close();
     } catch (SQLException e) {
-      
       if (LOGGER.isLoggable(Level.SEVERE)) {
-        LOGGER.log(Level.SEVERE, "Failed to add CAS: " + 
-            casID, e);
+        LOGGER.log(Level.SEVERE, "Failed to add CAS: " + casID, e);
       }
-      
       throw new IOException(e);
     }
     
@@ -158,26 +131,16 @@
   @Override
   public void removeCAS(String casID) throws IOException {
     
-    try {
-      Connection conn = dataSource.getConnection();
-      PreparedStatement ps = conn.prepareStatement("delete from " + 
-          corpusName + " where name = ?");
-      
+    try (Connection conn = dataSource.getConnection();
+         PreparedStatement ps = conn.prepareStatement("delete from " + corpusName + " where name = ?")) {
       ps.setString(1, casID);
-      
       ps.executeUpdate();
       
       conn.commit();
-      
-      ps.close();
-      conn.close();
     } catch (SQLException e) {
-      
       if (LOGGER.isLoggable(Level.SEVERE)) {
-        LOGGER.log(Level.SEVERE, "Failed to remove CAS: " + 
-            casID, e);
+        LOGGER.log(Level.SEVERE, "Failed to remove CAS: " + casID, e);
       }
-      
       throw new IOException(e);
     }
     
@@ -188,61 +151,44 @@
   
   @Override
   public void replaceTypeSystem(byte[] newTypeSystem) throws IOException {
-    try {
-      Connection conn = dataSource.getConnection();
+    try (Connection conn = dataSource.getConnection();
+         PreparedStatement typeSystemPS = conn.prepareStatement("update " +
+                 corpusName + " set cas = ? where name = ?")) {
       // Replace the type system
-      PreparedStatement typeSystemPS = conn.prepareStatement("update " + 
-          corpusName + " set cas = ? where name = ?");
-
       typeSystemPS.setString(2, "_typesystem");
 
       Blob typeSystemBlob = conn.createBlob();
       typeSystemBlob.setBytes(1, newTypeSystem);
       typeSystemPS.setBlob(1, typeSystemBlob);
-
       typeSystemPS.executeUpdate();
       
       conn.commit();
-      
-      typeSystemPS.close();
-      conn.close();
     } catch (SQLException e) {
-      
       if (LOGGER.isLoggable(Level.SEVERE)) {
         LOGGER.log(Level.SEVERE, "Failed to replace the Type System!", e);
       }
-      
       throw new IOException(e);
     }
   }
   
   @Override
   public byte[] getTypeSystem() throws IOException {
-    
     byte[] tsBytes;
     
-    try {
-      Connection conn = dataSource.getConnection();
-      Statement s = conn.createStatement();
-      ResultSet tsResult = s.executeQuery("select * FROM " + corpusName + 
-          " WHERE name='_typesystem'");
-      
+    try (Connection conn = dataSource.getConnection();
+         ResultSet tsResult = conn.createStatement().executeQuery(
+                 "select * FROM " + corpusName + " WHERE name='_typesystem'")) {
+
       if (tsResult.next()) {
         tsBytes = tsResult.getBytes(2);
-      }
-      else {
+      } else {
         throw new IOException("Failed to retrieve type system!");
       }
       
-      tsResult.close();
-      s.close();
-      conn.close();
     } catch (SQLException e) {
-      
       if (LOGGER.isLoggable(Level.SEVERE)) {
         LOGGER.log(Level.SEVERE, "Failed to retrieve type system", e);
       }
-      
       throw new IOException(e);
     }
     
@@ -253,25 +199,18 @@
   public byte[] getIndexMapping() throws IOException {
     byte[] indexMappingBytes = null;
     
-    try {
-      Connection conn = dataSource.getConnection();
-      Statement s = conn.createStatement();
-      ResultSet indexMappingResult = s.executeQuery("select * FROM " + corpusName + 
-          " WHERE name='_indexMapping'");
-      
+    try (Connection conn = dataSource.getConnection();
+         ResultSet indexMappingResult = conn.createStatement().executeQuery(
+                 "select * FROM " + corpusName + " WHERE name='_indexMapping'")) {
+
       if (indexMappingResult.next()) {
         indexMappingBytes = indexMappingResult.getBytes(2);
       }
       
-      indexMappingResult.close();
-      s.close();
-      conn.close();
     } catch (SQLException e) {
-      
       if (LOGGER.isLoggable(Level.SEVERE)) {
         LOGGER.log(Level.SEVERE, "Failed to retrieve type system", e);
       }
-      
       throw new IOException(e);
     }
     
diff --git a/corpus-server/corpus-server-impl/src/main/java/org/apache/opennlp/corpus_server/impl/LuceneSearchService.java b/corpus-server/corpus-server-impl/src/main/java/org/apache/opennlp/corpus_server/impl/LuceneSearchService.java
index d216ac4..8d207c1 100644
--- a/corpus-server/corpus-server-impl/src/main/java/org/apache/opennlp/corpus_server/impl/LuceneSearchService.java
+++ b/corpus-server/corpus-server-impl/src/main/java/org/apache/opennlp/corpus_server/impl/LuceneSearchService.java
@@ -233,24 +233,19 @@
     String corpusId = store.getCorpusId();
     
     AnalysisEngine indexer = corpusIndexerMap.get(corpusId);
-    
-    InputStream indexTsIn = LuceneSearchService.class.getResourceAsStream(
-        "/org/apache/opennlp/corpus_server/impl/TypeSystem.xml");
-    
+
     TypeSystemDescription indexTypeDesc;
-    try {
+    try (InputStream indexTsIn = LuceneSearchService.class.getResourceAsStream(
+        "/org/apache/opennlp/corpus_server/impl/TypeSystem.xml")) {
       indexTypeDesc = UimaUtil.createTypeSystemDescription(indexTsIn);
     }
-    finally {
-      indexTsIn.close();
-    }
-    
+
     List<MetaDataObject> specs = new ArrayList<>();
     specs.add(indexTypeDesc);
     TypeSystemDescription tsDescription = UimaUtil.createTypeSystemDescription(
           new ByteArrayInputStream(store.getTypeSystem()));
     specs.add(tsDescription);
-    
+
     // Note: This might be a performance problem
     CAS cas;
     try {
diff --git a/corpus-server/corpus-server-tools/src/main/java/org/apache/opennlp/corpus_server/tools/CorpusBackup.java b/corpus-server/corpus-server-tools/src/main/java/org/apache/opennlp/corpus_server/tools/CorpusBackup.java
index d07a548..66b7a65 100644
--- a/corpus-server/corpus-server-tools/src/main/java/org/apache/opennlp/corpus_server/tools/CorpusBackup.java
+++ b/corpus-server/corpus-server-tools/src/main/java/org/apache/opennlp/corpus_server/tools/CorpusBackup.java
@@ -79,11 +79,9 @@
     File backupFile = new File(args[2]);
 
     // create zip file
-    OutputStream backupOut;
-        
-    try {
-      backupOut = new FileOutputStream(backupFile);
-      ZipOutputStream zipPackageOut = new ZipOutputStream(backupOut);
+
+    try (OutputStream backupOut = new FileOutputStream(backupFile);
+         ZipOutputStream zipPackageOut = new ZipOutputStream(backupOut)){
     
       WebResource corpusWebResource = c.resource(args[0] + "/corpora/" + corpusId);
       
@@ -96,10 +94,9 @@
           .get(ClientResponse.class);
       
       zipPackageOut.putNextEntry(new ZipEntry("TypeSystem.xml"));
-      InputStream tsIn = tsResponse.getEntityInputStream();
-      
-      copyStream(tsIn, zipPackageOut);
-      tsIn.close();
+      try (InputStream tsIn = tsResponse.getEntityInputStream()) {
+        copyStream(tsIn, zipPackageOut);
+      }
       zipPackageOut.closeEntry();
       
       // consume task queue
@@ -139,8 +136,6 @@
         
         System.out.println(casId);
       }
-      
-      zipPackageOut.close();
     }
     catch (IOException e) {
       e.printStackTrace();
diff --git a/corpus-server/corpus-server-tools/src/main/java/org/apache/opennlp/corpus_server/tools/FileUtil.java b/corpus-server/corpus-server-tools/src/main/java/org/apache/opennlp/corpus_server/tools/FileUtil.java
index cff9781..8f8a4f4 100644
--- a/corpus-server/corpus-server-tools/src/main/java/org/apache/opennlp/corpus_server/tools/FileUtil.java
+++ b/corpus-server/corpus-server-tools/src/main/java/org/apache/opennlp/corpus_server/tools/FileUtil.java
@@ -27,23 +27,15 @@
 
   static byte[] fileToBytes(File file) throws IOException {
 
-    ByteArrayOutputStream fileBytes = new ByteArrayOutputStream(
-        (int) file.length());
-
-    InputStream fileIn = new FileInputStream(file);
-
-    try {
+    try (ByteArrayOutputStream fileBytes = new ByteArrayOutputStream((int) file.length());
+         InputStream fileIn = new FileInputStream(file)) {
       byte[] buffer = new byte[1024];
       int length;
       while ((length = fileIn.read(buffer)) > 0) {
         fileBytes.write(buffer, 0, length);
       }
+      return fileBytes.toByteArray();
     }
-    finally {
-      fileIn.close();
-    }
-    
-    return fileBytes.toByteArray();
   }
 
 }
diff --git a/mahout-addon/src/main/java/opennlp/addons/mahout/AbstractOnlineLearnerTrainer.java b/mahout-addon/src/main/java/opennlp/addons/mahout/AbstractOnlineLearnerTrainer.java
index 320415a..0929b84 100644
--- a/mahout-addon/src/main/java/opennlp/addons/mahout/AbstractOnlineLearnerTrainer.java
+++ b/mahout-addon/src/main/java/opennlp/addons/mahout/AbstractOnlineLearnerTrainer.java
@@ -22,13 +22,13 @@
 import java.util.HashMap;
 import java.util.Map;
 
-import opennlp.tools.ml.AbstractEventTrainer;
-import opennlp.tools.ml.model.DataIndexer;
-
-import opennlp.tools.util.TrainingParameters;
 import org.apache.mahout.math.RandomAccessSparseVector;
 import org.apache.mahout.math.Vector;
 
+import opennlp.tools.ml.AbstractEventTrainer;
+import opennlp.tools.ml.model.DataIndexer;
+import opennlp.tools.util.TrainingParameters;
+
 abstract class AbstractOnlineLearnerTrainer extends AbstractEventTrainer {
 
   protected int iterations;
diff --git a/modelbuilder-addon/src/main/java/opennlp/addons/modelbuilder/KnownEntityProvider.java b/modelbuilder-addon/src/main/java/opennlp/addons/modelbuilder/KnownEntityProvider.java
index a905f02..1362d1b 100644
--- a/modelbuilder-addon/src/main/java/opennlp/addons/modelbuilder/KnownEntityProvider.java
+++ b/modelbuilder-addon/src/main/java/opennlp/addons/modelbuilder/KnownEntityProvider.java
@@ -15,12 +15,14 @@
  */
 package opennlp.addons.modelbuilder;
 
+import opennlp.addons.modelbuilder.impls.BaseModelBuilderParams;
+
 import java.util.Set;
 
 /**
  * Supplies a list of known entities (a list of names or locations)
  */
-public interface KnownEntityProvider extends ModelParameter {
+public interface KnownEntityProvider extends ModelParameter<BaseModelBuilderParams> {
 
   /**
    * Returns a list of known non-ambiguous entities.
diff --git a/modelbuilder-addon/src/main/java/opennlp/addons/modelbuilder/ModelGenerationValidator.java b/modelbuilder-addon/src/main/java/opennlp/addons/modelbuilder/ModelGenerationValidator.java
index 047e8a3..6ef8a9e 100644
--- a/modelbuilder-addon/src/main/java/opennlp/addons/modelbuilder/ModelGenerationValidator.java
+++ b/modelbuilder-addon/src/main/java/opennlp/addons/modelbuilder/ModelGenerationValidator.java
@@ -15,12 +15,14 @@
  */
 package opennlp.addons.modelbuilder;
 
+import opennlp.addons.modelbuilder.impls.BaseModelBuilderParams;
+
 import java.util.Collection;
 
 /**
  * Validates results from the iterative namefinding
  */
-public interface ModelGenerationValidator extends ModelParameter {
+public interface ModelGenerationValidator extends ModelParameter<BaseModelBuilderParams> {
 
   Boolean validSentence(String sentence);
 
diff --git a/modelbuilder-addon/src/main/java/opennlp/addons/modelbuilder/ModelParameter.java b/modelbuilder-addon/src/main/java/opennlp/addons/modelbuilder/ModelParameter.java
index 1285323..2a946d8 100644
--- a/modelbuilder-addon/src/main/java/opennlp/addons/modelbuilder/ModelParameter.java
+++ b/modelbuilder-addon/src/main/java/opennlp/addons/modelbuilder/ModelParameter.java
@@ -17,7 +17,7 @@
 
 import opennlp.addons.modelbuilder.impls.BaseModelBuilderParams;
 
-public interface ModelParameter<T extends  BaseModelBuilderParams>{
+public interface ModelParameter<T extends  BaseModelBuilderParams> {
    
   void setParameters(T params);
 
diff --git a/modelbuilder-addon/src/main/java/opennlp/addons/modelbuilder/Modelable.java b/modelbuilder-addon/src/main/java/opennlp/addons/modelbuilder/Modelable.java
index 2f78254..37cb54f 100644
--- a/modelbuilder-addon/src/main/java/opennlp/addons/modelbuilder/Modelable.java
+++ b/modelbuilder-addon/src/main/java/opennlp/addons/modelbuilder/Modelable.java
@@ -17,9 +17,10 @@
 
 import java.util.Set;
 
+import opennlp.addons.modelbuilder.impls.BaseModelBuilderParams;
 import opennlp.tools.namefind.TokenNameFinderModel;
 
-public interface Modelable extends ModelParameter {
+public interface Modelable extends ModelParameter<BaseModelBuilderParams> {
 
   String annotate(String sentence, String namedEntity, String entityType);
 
diff --git a/modelbuilder-addon/src/main/java/opennlp/addons/modelbuilder/impls/FileKnownEntityProvider.java b/modelbuilder-addon/src/main/java/opennlp/addons/modelbuilder/impls/FileKnownEntityProvider.java
index 69fce62..c897532 100644
--- a/modelbuilder-addon/src/main/java/opennlp/addons/modelbuilder/impls/FileKnownEntityProvider.java
+++ b/modelbuilder-addon/src/main/java/opennlp/addons/modelbuilder/impls/FileKnownEntityProvider.java
@@ -18,7 +18,6 @@
 import java.io.BufferedReader;
 import java.io.FileInputStream;
 import java.io.IOException;
-import java.io.InputStream;
 import java.io.InputStreamReader;
 import java.nio.charset.StandardCharsets;
 import java.util.HashSet;
@@ -36,21 +35,12 @@
   @Override
   public Set<String> getKnownEntities() {
     if (knownEntities.isEmpty()) {
-      try {
-        InputStream fis;
-        BufferedReader br;
+      try (BufferedReader br = new BufferedReader(new InputStreamReader(
+              new FileInputStream(params.getKnownEntitiesFile()), StandardCharsets.UTF_8))) {
         String line;
-
-        fis = new FileInputStream(params.getKnownEntitiesFile());
-        br = new BufferedReader(new InputStreamReader(fis, StandardCharsets.UTF_8));
         while ((line = br.readLine()) != null) {
           knownEntities.add(line);
         }
-
-        // Done with the file
-        br.close();
-        br = null;
-        fis = null;
       } catch (IOException ex) {
         Logger.getLogger(FileKnownEntityProvider.class.getName()).log(Level.SEVERE, null, ex);
       }
diff --git a/modelbuilder-addon/src/main/java/opennlp/addons/modelbuilder/impls/FileModelValidatorImpl.java b/modelbuilder-addon/src/main/java/opennlp/addons/modelbuilder/impls/FileModelValidatorImpl.java
index e005615..8c0703b 100644
--- a/modelbuilder-addon/src/main/java/opennlp/addons/modelbuilder/impls/FileModelValidatorImpl.java
+++ b/modelbuilder-addon/src/main/java/opennlp/addons/modelbuilder/impls/FileModelValidatorImpl.java
@@ -18,7 +18,6 @@
 import java.io.BufferedReader;
 import java.io.FileInputStream;
 import java.io.IOException;
-import java.io.InputStream;
 import java.io.InputStreamReader;
 import java.nio.charset.StandardCharsets;
 import java.util.Collection;
@@ -30,7 +29,7 @@
 import opennlp.addons.modelbuilder.ModelGenerationValidator;
 
 /**
- *Validates NER results input before inclusion into the model
+ * Validates NER results input before inclusion into the model.
  */
 public class FileModelValidatorImpl implements ModelGenerationValidator {
 
@@ -72,19 +71,12 @@
       return badentities;
     }
     if (!badentities.isEmpty()) {
-      try {
-        InputStream fis;
-        BufferedReader br;
+      try (BufferedReader br = new BufferedReader(new InputStreamReader(
+              new FileInputStream(params.getKnownEntityBlacklist()), StandardCharsets.UTF_8))) {
         String line;
-
-        fis = new FileInputStream(params.getKnownEntityBlacklist());
-        br = new BufferedReader(new InputStreamReader(fis, StandardCharsets.UTF_8));
         while ((line = br.readLine()) != null) {
           badentities.add(line);
         }
-        br.close();
-        br = null;
-        fis = null;
       } catch (IOException ex) {
         Logger.getLogger(FileKnownEntityProvider.class.getName()).log(Level.SEVERE, null, ex);
       }
diff --git a/modelbuilder-addon/src/main/java/opennlp/addons/modelbuilder/impls/FileSentenceProvider.java b/modelbuilder-addon/src/main/java/opennlp/addons/modelbuilder/impls/FileSentenceProvider.java
index 481f421..ec0393f 100644
--- a/modelbuilder-addon/src/main/java/opennlp/addons/modelbuilder/impls/FileSentenceProvider.java
+++ b/modelbuilder-addon/src/main/java/opennlp/addons/modelbuilder/impls/FileSentenceProvider.java
@@ -18,7 +18,6 @@
 import java.io.BufferedReader;
 import java.io.FileInputStream;
 import java.io.IOException;
-import java.io.InputStream;
 import java.io.InputStreamReader;
 import java.nio.charset.StandardCharsets;
 import java.util.HashSet;
@@ -39,23 +38,12 @@
   @Override
   public Set<String> getSentences() {
      if (sentences.isEmpty()) {
-      try {
-        InputStream fis;
-        BufferedReader br;
+      try (BufferedReader br = new BufferedReader(new InputStreamReader(
+              new FileInputStream(params.getSentenceFile()), StandardCharsets.UTF_8))) {
         String line;
-
-        fis = new FileInputStream(params.getSentenceFile());
-        br = new BufferedReader(new InputStreamReader(fis, StandardCharsets.UTF_8));
-        int i=0;
         while ((line = br.readLine()) != null) {
-         
           sentences.add(line);
         }
-
-        // Done with the file
-        br.close();
-        br = null;
-        fis = null;
       } catch (IOException ex) {
         Logger.getLogger(FileKnownEntityProvider.class.getName()).log(Level.SEVERE, null, ex);
       }
diff --git a/opennlp-coref/src/main/java/opennlp/tools/coref/resolver/DefaultNonReferentialResolver.java b/opennlp-coref/src/main/java/opennlp/tools/coref/resolver/DefaultNonReferentialResolver.java
index 1e37977..6e23c3d 100644
--- a/opennlp-coref/src/main/java/opennlp/tools/coref/resolver/DefaultNonReferentialResolver.java
+++ b/opennlp-coref/src/main/java/opennlp/tools/coref/resolver/DefaultNonReferentialResolver.java
@@ -127,11 +127,11 @@
     if (ResolverMode.TRAIN == mode) {
       System.err.println(this + " referential");
       if (debugOn) {
-        FileWriter writer = new FileWriter(modelName + ".events");
-        for (Event e : events) {
-          writer.write(e.toString() + "\n");
+        try (FileWriter writer = new FileWriter(modelName + ".events")) {
+          for (Event e : events) {
+            writer.write(e.toString() + "\n");
+          }
         }
-        writer.close();
       }
       TrainingParameters params = TrainingParameters.defaultParams();
       params.put(TrainingParameters.ITERATIONS_PARAM, 100);
diff --git a/opennlp-coref/src/main/java/opennlp/tools/coref/resolver/MaxentResolver.java b/opennlp-coref/src/main/java/opennlp/tools/coref/resolver/MaxentResolver.java
index f0ead35..858765d 100644
--- a/opennlp-coref/src/main/java/opennlp/tools/coref/resolver/MaxentResolver.java
+++ b/opennlp-coref/src/main/java/opennlp/tools/coref/resolver/MaxentResolver.java
@@ -340,11 +340,11 @@
     if (ResolverMode.TRAIN == mode) {
       if (DEBUG) {
         System.err.println(this + " referential");
-        FileWriter writer = new FileWriter(modelName + ".events");
-        for (Event e : events) {
-          writer.write(e.toString() + "\n");
+        try (FileWriter writer = new FileWriter(modelName + ".events")) {
+          for (Event e : events) {
+            writer.write(e.toString() + "\n");
+          }
         }
-        writer.close();
       }
       TrainingParameters params = TrainingParameters.defaultParams();
       params.put(TrainingParameters.ITERATIONS_PARAM, 100);
diff --git a/opennlp-coref/src/main/java/opennlp/tools/coref/sim/GenderModel.java b/opennlp-coref/src/main/java/opennlp/tools/coref/sim/GenderModel.java
index c1ffb6e..39f3a61 100644
--- a/opennlp-coref/src/main/java/opennlp/tools/coref/sim/GenderModel.java
+++ b/opennlp-coref/src/main/java/opennlp/tools/coref/sim/GenderModel.java
@@ -251,11 +251,11 @@
   @Override
   public void trainModel() throws IOException {
     if (debugOn) {
-      FileWriter writer = new FileWriter(modelName + ".events");
-      for (Event e : events) {
-        writer.write(e.toString() + "\n");
+      try (FileWriter writer = new FileWriter(modelName + ".events")) {
+        for (Event e : events) {
+          writer.write(e.toString() + "\n");
+        }
       }
-      writer.close();
     }
     GISTrainer trainer = new GISTrainer();
     trainer.init(TrainingParameters.defaultParams(), null);
diff --git a/opennlp-coref/src/main/java/opennlp/tools/coref/sim/SimilarityModel.java b/opennlp-coref/src/main/java/opennlp/tools/coref/sim/SimilarityModel.java
index 8ba4887..ce5ae5d 100644
--- a/opennlp-coref/src/main/java/opennlp/tools/coref/sim/SimilarityModel.java
+++ b/opennlp-coref/src/main/java/opennlp/tools/coref/sim/SimilarityModel.java
@@ -356,11 +356,11 @@
   @Override
   public void trainModel() throws IOException {
     if (debugOn) {
-      FileWriter writer = new FileWriter(modelName + ".events");
-      for (Event e : events) {
-        writer.write(e.toString() + "\n");
+      try (FileWriter writer = new FileWriter(modelName + ".events")) {
+        for (Event e : events) {
+          writer.write(e.toString() + "\n");
+        }
       }
-      writer.close();
     }
     TrainingParameters params = TrainingParameters.defaultParams();
     params.put(TrainingParameters.ITERATIONS_PARAM, 100);
diff --git a/opennlp-similarity/src/main/java/opennlp/tools/apps/relevanceVocabs/PhraseProcessor.java b/opennlp-similarity/src/main/java/opennlp/tools/apps/relevanceVocabs/PhraseProcessor.java
index 9a05642..df48cce 100644
--- a/opennlp-similarity/src/main/java/opennlp/tools/apps/relevanceVocabs/PhraseProcessor.java
+++ b/opennlp-similarity/src/main/java/opennlp/tools/apps/relevanceVocabs/PhraseProcessor.java
@@ -34,7 +34,7 @@
 	public static boolean allChildNodesArePOSTags(Parse p) {
 		Parse[] subParses = p.getChildren();
 		for (Parse subPars : subParses)
-			if (!((Parse) subPars).isPosTag())
+			if (!subPars.isPosTag())
 				return false;
 		return true;
 	}
@@ -49,7 +49,7 @@
 			if (subpars.getType().equals("NP") && allChildNodesArePOSTags(subpars)) {
 				Span _span = subpars.getSpan();
 				nounphrases.add(p.getText().substring(_span.getStart(), _span.getEnd()));
-			} else if (!((Parse) subpars).isPosTag())
+			} else if (!subpars.isPosTag())
 				nounphrases.addAll(getNounPhrases(subpars));
 		}
 
@@ -66,7 +66,7 @@
 			if (subpars.getType().startsWith("VB") && allChildNodesArePOSTags(subpars)) {
 				Span _span = subpars.getSpan();
 				verbPhrases.add(p.getText().substring(_span.getStart(), _span.getEnd()));
-			} else if (!((Parse) subpars).isPosTag())
+			} else if (!subpars.isPosTag())
 				verbPhrases.addAll(getNounPhrases(subpars));
 		}
 
@@ -89,9 +89,7 @@
 		if (groupedChunks.size()<1)
 			return null;
 
-		List<ParseTreeChunk> vPhrases = groupedChunks.get(1);
-
-		return vPhrases;
+		return groupedChunks.get(1);
 	}
 
 	public List<List<ParseTreeChunk>> getPhrasesOfAllTypes(String sentence) {
@@ -112,102 +110,102 @@
 		return groupedChunks;
 	}
 
-// forms phrases from text which are candidate expressions for events lookup
-public List<String> extractNounPhraseProductNameCandidate(String sentence) {
+	// forms phrases from text which are candidate expressions for events lookup
+	public List<String> extractNounPhraseProductNameCandidate(String sentence) {
 
-	List<String> queryArrayStr = new ArrayList<>();
+		List<String> queryArrayStr = new ArrayList<>();
 
-	if (sentence.split(" ").length ==1) { // this is a word, return empty
-		//queryArrayStr.add( sentence);
-		return queryArrayStr;
-	}
-	String quoted1 = StringUtils.substringBetween(sentence, "\"", "\"");
-	String quoted2 = StringUtils.substringBetween(sentence, "\'", "\'");
-	List<List<ParseTreeChunk>> groupedChunks = nlProc.formGroupedPhrasesFromChunksForPara(sentence);
-	if (groupedChunks.size()<1)
-		return queryArrayStr;
-
-	List<ParseTreeChunk> nPhrases = groupedChunks.get(0);
-
-	for (ParseTreeChunk ch : nPhrases) {
-		String query = "";
-		int size = ch.getLemmas().size();
-		boolean phraseBeingFormed = false;
-		for (int i = 0; i < size; i++) {
-			if ((ch.getPOSs().get(i).startsWith("N") || ch.getPOSs().get(i)
-					.startsWith("J") || ch.getPOSs().get(i).startsWith("CD") ) )
-			//		&& StringUtils.isAlpha(ch.getLemmas().get(i)))
-			{
-				query += ch.getLemmas().get(i) + " ";
-				phraseBeingFormed = true;
-			} else
-				if ((ch.getPOSs().get(i).startsWith("PR") || ch.getPOSs().get(i).startsWith("IN") || ch.getPOSs().get(i).startsWith("TO")  )
-						&& phraseBeingFormed )
-					break;
-				else if (ch.getPOSs().get(i).startsWith("DT") || ch.getPOSs().get(i).startsWith("CC"))
-				continue;
+		if (sentence.split(" ").length ==1) { // this is a word, return empty
+			//queryArrayStr.add( sentence);
+			return queryArrayStr;
 		}
-		query = query.trim();
-		int len = query.split(" ").length;
-		if (len > 5 || len < 2) // too long or too short
-			continue;
+		String quoted1 = StringUtils.substringBetween(sentence, "\"", "\"");
+		String quoted2 = StringUtils.substringBetween(sentence, "\'", "\'");
+		List<List<ParseTreeChunk>> groupedChunks = nlProc.formGroupedPhrasesFromChunksForPara(sentence);
+		if (groupedChunks.size()<1)
+			return queryArrayStr;
 
-		/*
-		if (len < 4 && len>1) { // every word should start with capital
-			String[] qs = query.split(" ");
-			boolean bAccept = true;
-			for (String w : qs) {
-				if (w.toLowerCase().equals(w)) // idf only two words then
-												// has to be person name,
-												// title or geolocation
-					bAccept = false;
-			}
-			if (!bAccept)
-				continue;
-		}
-		*/
-		 // individual word, possibly a frequent word
-		// if len==1 do nothing
+		List<ParseTreeChunk> nPhrases = groupedChunks.get(0);
 
-		query = query.trim();
-		queryArrayStr.add(query);
-
-		}
-		/*
-		if (queryArrayStr.size() < 1) { // release constraints on NP down to 2
-										// keywords
-			for (ParseTreeChunk ch : nPhrases) {
-				String query = "";
-				int size = ch.getLemmas().size();
-
-				for (int i = 0; i < size; i++) {
-					if (ch.getPOSs().get(i).startsWith("N")
-							|| ch.getPOSs().get(i).startsWith("J")) {
-						query += ch.getLemmas().get(i) + " ";
-					}
-				}
-				query = query.trim();
-				int len = query.split(" ").length;
-				if (len < 2)
+		for (ParseTreeChunk ch : nPhrases) {
+			String query = "";
+			int size = ch.getLemmas().size();
+			boolean phraseBeingFormed = false;
+			for (int i = 0; i < size; i++) {
+				if ((ch.getPOSs().get(i).startsWith("N") || ch.getPOSs().get(i)
+						.startsWith("J") || ch.getPOSs().get(i).startsWith("CD") ) )
+				//		&& StringUtils.isAlpha(ch.getLemmas().get(i)))
+				{
+					query += ch.getLemmas().get(i) + " ";
+					phraseBeingFormed = true;
+				} else
+					if ((ch.getPOSs().get(i).startsWith("PR") || ch.getPOSs().get(i).startsWith("IN") || ch.getPOSs().get(i).startsWith("TO")  )
+							&& phraseBeingFormed )
+						break;
+					else if (ch.getPOSs().get(i).startsWith("DT") || ch.getPOSs().get(i).startsWith("CC"))
 					continue;
-
-				query = TextProcessor.fastTokenize(query.toLowerCase(), false)
-						.toString().replace('[', ' ').replace(']', ' ').trim();
-				if (query.length() > 6)
-					queryArrayStr.add(query);
 			}
-		}
-		//queryArrayStr = Utils
-		//		.removeDuplicatesFromQueries(queryArrayStr);
-		if (quoted1 != null
-				&& ((quoted1.length() > 5 && !stopList.isCommonWord(quoted1)) || quoted1
-						.length() > 10))
-			queryArrayStr.add(quoted1);
-		if (quoted2 != null
-				&& ((quoted2.length() > 5 && !stopList.isCommonWord(quoted2)) || quoted2
-						.length() > 10))
-			queryArrayStr.add(quoted2);
-		*/
+			query = query.trim();
+			int len = query.split(" ").length;
+			if (len > 5 || len < 2) // too long or too short
+				continue;
+
+			/*
+			if (len < 4 && len>1) { // every word should start with capital
+				String[] qs = query.split(" ");
+				boolean bAccept = true;
+				for (String w : qs) {
+					if (w.toLowerCase().equals(w)) // idf only two words then
+													// has to be person name,
+													// title or geolocation
+						bAccept = false;
+				}
+				if (!bAccept)
+					continue;
+			}
+			*/
+			 // individual word, possibly a frequent word
+			// if len==1 do nothing
+
+			query = query.trim();
+			queryArrayStr.add(query);
+
+			}
+			/*
+			if (queryArrayStr.size() < 1) { // release constraints on NP down to 2
+											// keywords
+				for (ParseTreeChunk ch : nPhrases) {
+					String query = "";
+					int size = ch.getLemmas().size();
+
+					for (int i = 0; i < size; i++) {
+						if (ch.getPOSs().get(i).startsWith("N")
+								|| ch.getPOSs().get(i).startsWith("J")) {
+							query += ch.getLemmas().get(i) + " ";
+						}
+					}
+					query = query.trim();
+					int len = query.split(" ").length;
+					if (len < 2)
+						continue;
+
+					query = TextProcessor.fastTokenize(query.toLowerCase(), false)
+							.toString().replace('[', ' ').replace(']', ' ').trim();
+					if (query.length() > 6)
+						queryArrayStr.add(query);
+				}
+			}
+			//queryArrayStr = Utils
+			//		.removeDuplicatesFromQueries(queryArrayStr);
+			if (quoted1 != null
+					&& ((quoted1.length() > 5 && !stopList.isCommonWord(quoted1)) || quoted1
+							.length() > 10))
+				queryArrayStr.add(quoted1);
+			if (quoted2 != null
+					&& ((quoted2.length() > 5 && !stopList.isCommonWord(quoted2)) || quoted2
+							.length() > 10))
+				queryArrayStr.add(quoted2);
+			*/
 		return queryArrayStr;
 	}
 
diff --git a/opennlp-similarity/src/main/java/opennlp/tools/apps/relevanceVocabs/SynonymListFilter.java b/opennlp-similarity/src/main/java/opennlp/tools/apps/relevanceVocabs/SynonymListFilter.java
index e40f384..d5fba63 100644
--- a/opennlp-similarity/src/main/java/opennlp/tools/apps/relevanceVocabs/SynonymListFilter.java
+++ b/opennlp-similarity/src/main/java/opennlp/tools/apps/relevanceVocabs/SynonymListFilter.java
@@ -48,22 +48,15 @@
 		List<String> items = new ArrayList<>();
 
 		StringBuilder contents = new StringBuilder();		    
-		try {
+		try (BufferedReader input =  new BufferedReader(new FileReader(aFile))) {
+			String line; //not declared within while loop
+			while (( line = input.readLine()) != null){
+				int endOfWord = line.indexOf(';');
+				if (endOfWord>2)
+					line = line.substring(1, endOfWord -1 );
 
-			BufferedReader input =  new BufferedReader(new FileReader(aFile));
-			try {
-				String line; //not declared within while loop
-				while (( line = input.readLine()) != null){
-					int endOfWord = line.indexOf(';');
-					if (endOfWord>2)
-						line = line.substring(1, endOfWord -1 );
+				items.add(line);
 
-					items.add(line);
-
-				}
-			}
-			finally {
-				input.close();
 			}
 		}
 		catch (IOException ex){
diff --git a/opennlp-similarity/src/main/java/opennlp/tools/apps/review_builder/FBOpenGraphSearchManager.java b/opennlp-similarity/src/main/java/opennlp/tools/apps/review_builder/FBOpenGraphSearchManager.java
index 4a9b14e..f2a130a 100644
--- a/opennlp-similarity/src/main/java/opennlp/tools/apps/review_builder/FBOpenGraphSearchManager.java
+++ b/opennlp-similarity/src/main/java/opennlp/tools/apps/review_builder/FBOpenGraphSearchManager.java
@@ -39,14 +39,11 @@
 	protected final PageFetcher pageFetcher = new PageFetcher();
 	protected static final int NUM_TRIES = 5;
 	protected static final long WAIT_BTW_TRIES=1000; //milliseconds between re-tries
-	
-		
+
 	public FBOpenGraphSearchManager(){
 		profiles = ProfileReaderWriter.readProfiles("C:\\nc\\features\\analytics\\dealanalyzer\\sweetjack-localcoupon-may12012tooct302012.csv");
-		
 	}
-	
-		
+
 	public void setFacebookClient(FacebookClient c){
 		this.mFBClient=c;
 	}
@@ -126,9 +123,9 @@
         	String likes = StringUtils.substringBetween(content, "stats fwb\">", "<" );
         	if (likes==null)
         		continue;
-        	Integer nLikes =0;
+        	int nLikes =0;
         	try {
-        	nLikes = Integer.parseInt(likes);
+        		nLikes = Integer.parseInt(likes);
         	} catch (Exception e){
         		
         	}
@@ -137,21 +134,15 @@
         	}
         	
         }
-        
-        
         return null;
 	}
-	
-
-    // 
     
-    public static void main(String[] args){
-    	FBOpenGraphSearchManager man = new FBOpenGraphSearchManager ();
-    	man.setFacebookClient(new DefaultFacebookClient());
-       	
-    	
-    	long res = man.getFBPageLikes("chain saw");
-    	System.out.println(res);
-    	    	
-    }
+	public static void main(String[] args){
+		FBOpenGraphSearchManager man = new FBOpenGraphSearchManager ();
+		man.setFacebookClient(new DefaultFacebookClient());
+
+		long res = man.getFBPageLikes("chain saw");
+		System.out.println(res);
+
+	}
 }
diff --git a/opennlp-similarity/src/main/java/opennlp/tools/doc_classifier/ClassifierTrainingSetIndexer.java b/opennlp-similarity/src/main/java/opennlp/tools/doc_classifier/ClassifierTrainingSetIndexer.java
index 7fcd9ce..e430177 100644
--- a/opennlp-similarity/src/main/java/opennlp/tools/doc_classifier/ClassifierTrainingSetIndexer.java
+++ b/opennlp-similarity/src/main/java/opennlp/tools/doc_classifier/ClassifierTrainingSetIndexer.java
@@ -148,30 +148,18 @@
           ee.printStackTrace();
         }
       } else { // for xml files
-        try {
+        try (FileReader fr = new FileReader(f)) {
           Document doc = new Document();
 
-          String name = new String(f.getPath());
+          String name = f.getPath();
           String[] nparts = name.split("/");
           int len = nparts.length;
           name = nparts[len - 2];
 
-          FileReader fr = new FileReader(f);
           doc.add(new TextField("text", fr));
-
-          doc.add(new StringField("path", f.getPath(),
-                  Field.Store.YES));
+          doc.add(new StringField("path", f.getPath(), Field.Store.YES));
           doc.add(new StringField("class", name, Field.Store.YES));
-          try {
-
-            indexWriter.addDocument(doc);
-
-          } catch (Exception e) {
-            e.printStackTrace();
-            System.out.println("Could not add: " + f);
-          } finally {
-            fr.close();
-          }
+          indexWriter.addDocument(doc);
         } catch (Exception ee) {
           ee.printStackTrace();
         }
diff --git a/opennlp-similarity/src/main/java/opennlp/tools/jsmlearning/ProfileReaderWriter.java b/opennlp-similarity/src/main/java/opennlp/tools/jsmlearning/ProfileReaderWriter.java
index ddf99af..c509552 100644
--- a/opennlp-similarity/src/main/java/opennlp/tools/jsmlearning/ProfileReaderWriter.java
+++ b/opennlp-similarity/src/main/java/opennlp/tools/jsmlearning/ProfileReaderWriter.java
@@ -58,35 +58,18 @@
 	}
 
 	public static void writeReport( List<String[]> allLines, String reportName){
-		CSVWriter writer = null;
-		try {	
-			writer = new CSVWriter(new PrintWriter(reportName));			
-		} catch (FileNotFoundException e) {
-			e.printStackTrace();
-		}		
-		writer.writeAll(allLines);
-
-		try {
+		try (CSVWriter writer = new CSVWriter(new PrintWriter(reportName))) {
+			writer.writeAll(allLines);
 			writer.flush();
-			writer.close();
 		} catch (IOException e) {
 			e.printStackTrace();
 		}
 	}
 
 	public static void writeReport( List<String[]> allLines, String reportName, char delimiter){
-		CSVWriter writer = null;
-		try {	
-			writer = new CSVWriter(new PrintWriter(reportName), delimiter, delimiter, delimiter);			
-		} catch (FileNotFoundException e) {
-			e.printStackTrace();
-		}	
-
-		writer.writeAll(allLines);
-
-		try {
+		try (CSVWriter writer = new CSVWriter(new PrintWriter(reportName), delimiter, delimiter, delimiter)) {
+			writer.writeAll(allLines);
 			writer.flush();
-			writer.close();
 		} catch (IOException e) {
 			e.printStackTrace();
 		}
@@ -101,18 +84,9 @@
 			System.out.println("Creating file "+reportName);
 		}
 		
-		CSVWriter writer = null;
-		try {	
-			writer = new CSVWriter(new PrintWriter(reportName), delimiter, delimiter, delimiter);			
-		} catch (FileNotFoundException e) {
-			e.printStackTrace();
-		}	
-
-		writer.writeAll(allLines);
-
-		try {
+		try (CSVWriter writer = new CSVWriter(new PrintWriter(reportName), delimiter, delimiter, delimiter)) {
+			writer.writeAll(allLines);
 			writer.flush();
-			writer.close();
 		} catch (IOException e) {
 			e.printStackTrace();
 		}
@@ -126,18 +100,9 @@
 			System.out.println("Creating file "+reportName);
 		}
 		
-		CSVWriter writer = null;
-		try {	
-			writer = new CSVWriter(new PrintWriter(reportName));			
-		} catch (FileNotFoundException e) {
-			e.printStackTrace();
-		}	
-
-		writer.writeAll(allLines);
-
-		try {
+		try (CSVWriter writer = new CSVWriter(new PrintWriter(reportName))) {
+			writer.writeAll(allLines);
 			writer.flush();
-			writer.close();
 		} catch (IOException e) {
 			e.printStackTrace();
 		}
@@ -151,8 +116,6 @@
 		List<String[]> allLines = new ArrayList<>();
 		allLines.add(new String[] {"aa " , "  bb", "ccc" });
 		ProfileReaderWriter.writeReport( allLines, "reportName.txt", ' ');
-
 	}
 
-
 }
\ No newline at end of file
diff --git a/opennlp-similarity/src/main/java/opennlp/tools/parse_thicket/pattern_structure/PatternStructureWriter.java b/opennlp-similarity/src/main/java/opennlp/tools/parse_thicket/pattern_structure/PatternStructureWriter.java
index 548c740..28cdf77 100755
--- a/opennlp-similarity/src/main/java/opennlp/tools/parse_thicket/pattern_structure/PatternStructureWriter.java
+++ b/opennlp-similarity/src/main/java/opennlp/tools/parse_thicket/pattern_structure/PatternStructureWriter.java
@@ -28,28 +28,18 @@
 	public void WriteStatsToTxt(String filename, PhrasePatternStructure ps){
 			
 		String formatStr = "[%5.2f; %5.2f]  %s   %s%n";
-		Writer writer = null;
-
-		try {
-		    writer = new BufferedWriter(new OutputStreamWriter(
-		          new FileOutputStream(filename), StandardCharsets.UTF_8));
+		try (Writer writer = new BufferedWriter(new OutputStreamWriter(
+						new FileOutputStream(filename), StandardCharsets.UTF_8))) {
 		    writer.write("PatternStructure size: " + ps.conceptList.size()+ " with " + ps.objectCount + "objects\n");
 		    
 		    for (PhraseConcept c : ps.conceptList){
 		    	writer.write(String.format(formatStr,c.intLogStabilityBottom, c.intLogStabilityUp, c.extent, c.intent));
 		    }
-		    writer.close();
-		    
+
 		} catch (IOException ex) {
 			System.err.println(ex.getMessage());
-		} finally {
-		   try {writer.close();} catch (Exception ex) {}
 		}
 	}
 	
-
-		public static void main(String[] args) {
-			
-		}
 }
 			
\ No newline at end of file
diff --git a/opennlp-similarity/src/main/java/opennlp/tools/similarity/apps/solr/IterativeSearchRequestHandler.java b/opennlp-similarity/src/main/java/opennlp/tools/similarity/apps/solr/IterativeSearchRequestHandler.java
index b1ece30..6391d25 100644
--- a/opennlp-similarity/src/main/java/opennlp/tools/similarity/apps/solr/IterativeSearchRequestHandler.java
+++ b/opennlp-similarity/src/main/java/opennlp/tools/similarity/apps/solr/IterativeSearchRequestHandler.java
@@ -174,10 +174,10 @@
 				float syntMatchScore =  Double.valueOf(parseTreeChunkListScorer.getParseTreeChunkListScore(matchResult.getMatchResult())).floatValue();
 				bestMatchesDocIds.add(docId);
 				bestMatchesScore.add(syntMatchScore);
-				syntMatchScoreArr[i] = (float)syntMatchScore; //*iter.score();
+				syntMatchScoreArr[i] = syntMatchScore; //*iter.score();
 				System.out.println(" Matched query = '"+requestExpression + "' with answer = '"+answerText +"' | doc_id = '"+docId);
 				System.out.println(" Match result = '"+matchResult.getMatchResult() + "' with score = '"+syntMatchScore +"';" );
-				docIdsScores.add(new Pair(docId, syntMatchScore));
+				docIdsScores.add(new Pair<>(docId, syntMatchScore));
 			}
 
 		} catch (CorruptIndexException e1) {
diff --git a/opennlp-similarity/src/main/java/opennlp/tools/similarity/apps/solr/WordDocBuilder.java b/opennlp-similarity/src/main/java/opennlp/tools/similarity/apps/solr/WordDocBuilder.java
index d781f9e..461dcd0 100644
--- a/opennlp-similarity/src/main/java/opennlp/tools/similarity/apps/solr/WordDocBuilder.java
+++ b/opennlp-similarity/src/main/java/opennlp/tools/similarity/apps/solr/WordDocBuilder.java
@@ -182,31 +182,28 @@
      * @throws FileNotFoundException
      * @throws IOException
      */
-    protected static byte[] convertImageToByteArray(File file)
-            throws FileNotFoundException, IOException {
-        InputStream is = new FileInputStream(file );
-        long length = file.length();
-        // You cannot create an array using a long, it needs to be an int.
-        if (length > Integer.MAX_VALUE) {
-            System.out.println("File too large!!");
-        }
-        byte[] bytes = new byte[(int)length];
-        int offset = 0;
-        int numRead;
-        while (offset < bytes.length && (numRead=is.read(bytes, offset, bytes.length-offset)) >= 0) {
-            offset += numRead;
-        }
-        // Ensure all the bytes have been read
-        if (offset < bytes.length) {
-            System.out.println("Could not completely read file "
-                        +file.getName());
-        }
-        is.close();
-        return bytes;
+    protected static byte[] convertImageToByteArray(File file) throws FileNotFoundException, IOException {
+        try (InputStream is = new FileInputStream(file)) {
+					long length = file.length();
+					// You cannot create an array using a long, it needs to be an int.
+					if (length > Integer.MAX_VALUE) {
+							System.out.println("File too large!!");
+					}
+					byte[] bytes = new byte[(int)length];
+					int offset = 0;
+					int numRead;
+					while (offset < bytes.length && (numRead=is.read(bytes, offset, bytes.length-offset)) >= 0) {
+							offset += numRead;
+					}
+					// Ensure all the bytes have been read
+					if (offset < bytes.length) {
+							System.out.println("Could not completely read file "
+													+file.getName());
+					}
+					return bytes;
+				}
     }
-    
-    
-    
+
     public static void saveImageFromTheWeb(String imageUrl, String destinationFile) {
 			File f = new File(destinationFile);
 			if (!f.exists()) {
diff --git a/opennlp-similarity/src/main/java/opennlp/tools/similarity/apps/taxo_builder/TaxonomySerializer.java b/opennlp-similarity/src/main/java/opennlp/tools/similarity/apps/taxo_builder/TaxonomySerializer.java
index 445b62c..22f63c9 100644
--- a/opennlp-similarity/src/main/java/opennlp/tools/similarity/apps/taxo_builder/TaxonomySerializer.java
+++ b/opennlp-similarity/src/main/java/opennlp/tools/similarity/apps/taxo_builder/TaxonomySerializer.java
@@ -23,7 +23,6 @@
 import java.io.ObjectOutputStream;
 import java.io.Serializable;
 import java.util.ArrayList;
-import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
@@ -38,92 +37,60 @@
 public class TaxonomySerializer implements Serializable {
 
   private static final long serialVersionUID = 7431412616514648388L;
-  private Map<String, List<List<String>>> lemma_ExtendedAssocWords = new HashMap<>();
-  private Map<List<String>, List<List<String>>> assocWords_ExtendedAssocWords = new HashMap<>();
+  private final Map<String, List<List<String>>> lemma_ExtendedAssocWords;
+  private final Map<List<String>, List<List<String>>> assocWords_ExtendedAssocWords;
 
-  public TaxonomySerializer(
-      Map<String, List<List<String>>> lemma_ExtendedAssocWords,
+  public TaxonomySerializer(Map<String, List<List<String>>> lemma_ExtendedAssocWords,
       Map<List<String>, List<List<String>>> assocWords_ExtendedAssocWords) {
 
     this.lemma_ExtendedAssocWords = lemma_ExtendedAssocWords;
     this.assocWords_ExtendedAssocWords = assocWords_ExtendedAssocWords;
   }
 
-  public TaxonomySerializer() {
-  }
-
-  public Map<List<String>, List<List<String>>> getAssocWords_ExtendedAssocWords() {
-    return assocWords_ExtendedAssocWords;
-  }
-
   public Map<String, List<List<String>>> getLemma_ExtendedAssocWords() {
     return lemma_ExtendedAssocWords;
   }
 
-  public void setLemma_ExtendedAssocWords(
-      Map<String, List<List<String>>> lemma_ExtendedAssocWords) {
-    this.lemma_ExtendedAssocWords = lemma_ExtendedAssocWords;
-  }
-
-  public void setAssocWords_ExtendedAssocWords(
-      Map<List<String>, List<List<String>>> assocWords_ExtendedAssocWords) {
-    this.assocWords_ExtendedAssocWords = assocWords_ExtendedAssocWords;
-  }
-
   public void writeTaxonomy(String filename) {
-    FileOutputStream fos;
-    ObjectOutputStream out;
-    try {
-      fos = new FileOutputStream(filename);
-      out = new ObjectOutputStream(fos);
+    try (ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream(filename))) {
       out.writeObject(this);
-      out.close();
     } catch (IOException ex) {
       ex.printStackTrace();
     }
 
-     String csvFilename = filename+".csv";
-     List<String[]> taxo_list = new ArrayList<>();
-     List<String> entries = new ArrayList<>(lemma_ExtendedAssocWords.keySet());
-     for(String e: entries){
-    	 List<String> lines = new ArrayList<>();
-    	 lines.add(e);
-    	 for(List<String> ls: lemma_ExtendedAssocWords.get(e)){
-    		 lines.add(ls.toString());
-    	 }
-    	 taxo_list.add((String[])lines.toArray(new String[0]));
+    String csvFilename = filename+".csv";
+    List<String[]> taxo_list = new ArrayList<>();
+    List<String> entries = new ArrayList<>(lemma_ExtendedAssocWords.keySet());
+    for(String e: entries){
+     List<String> lines = new ArrayList<>();
+     lines.add(e);
+     for(List<String> ls: lemma_ExtendedAssocWords.get(e)){
+       lines.add(ls.toString());
      }
-     ProfileReaderWriter.writeReport(taxo_list, csvFilename);
-     
-     String csvFilenameListEntries = filename+"_ListEntries.csv";
-     taxo_list = new ArrayList<>();
-     List<List<String>> entriesList = new ArrayList<>(assocWords_ExtendedAssocWords.keySet());
-     for(List<String> e: entriesList){
-       List<String> lines = new ArrayList<>(e);
-    	 for(List<String> ls: assocWords_ExtendedAssocWords.get(e)){
-    		 lines.add(ls.toString());
-    	 }
-    	 taxo_list.add((String[])lines.toArray(new String[0]));
+     taxo_list.add(lines.toArray(new String[0]));
+    }
+    ProfileReaderWriter.writeReport(taxo_list, csvFilename);
+
+    String csvFilenameListEntries = filename+"_ListEntries.csv";
+    taxo_list = new ArrayList<>();
+    List<List<String>> entriesList = new ArrayList<>(assocWords_ExtendedAssocWords.keySet());
+    for(List<String> e: entriesList){
+     List<String> lines = new ArrayList<>(e);
+     for(List<String> ls: assocWords_ExtendedAssocWords.get(e)){
+       lines.add(ls.toString());
      }
-     ProfileReaderWriter.writeReport(taxo_list, csvFilenameListEntries);
+     taxo_list.add(lines.toArray(new String[0]));
+    }
+    ProfileReaderWriter.writeReport(taxo_list, csvFilenameListEntries);
   }
 
   public static TaxonomySerializer readTaxonomy(String filename) {
     TaxonomySerializer data = null;
-    FileInputStream fis;
-    ObjectInputStream in;
-    try {
-      fis = new FileInputStream(filename);
-      in = new ObjectInputStream(fis);
+    try (ObjectInputStream in = new ObjectInputStream(new FileInputStream(filename))) {
       data = (TaxonomySerializer) in.readObject();
-      in.close();
     } catch (IOException | ClassNotFoundException ex) {
       ex.printStackTrace();
     }
-
-    // System.out.print(data.lemma_ExtendedAssocWords);
-
     return data;
-
   }
 }
diff --git a/opennlp-similarity/src/main/java/opennlp/tools/textsimilarity/chunker2matcher/ParserCacheSerializer.java b/opennlp-similarity/src/main/java/opennlp/tools/textsimilarity/chunker2matcher/ParserCacheSerializer.java
index f1b4ea2..b7e4611 100644
--- a/opennlp-similarity/src/main/java/opennlp/tools/textsimilarity/chunker2matcher/ParserCacheSerializer.java
+++ b/opennlp-similarity/src/main/java/opennlp/tools/textsimilarity/chunker2matcher/ParserCacheSerializer.java
@@ -72,8 +72,8 @@
 
       Map<String, String[][]> sentence_parseObject = (Map<String, String[][]>) objectToSerialize;
       List<String> keys = new ArrayList<>(sentence_parseObject.keySet());
-      try (CSVWriter writer = new CSVWriter(
-              new FileWriter(RESOURCE_DIR + PARSE_CACHE_FILE_NAME_CSV, false))) {
+      try (CSVWriter writer = new CSVWriter(new FileWriter(
+              RESOURCE_DIR + PARSE_CACHE_FILE_NAME_CSV, false))) {
         for (String k : keys) {
           String[][] triplet = sentence_parseObject.get(k);
           writer.writeNext(new String[] { k });
diff --git a/opennlp-similarity/src/main/java/opennlp/tools/textsimilarity/chunker2matcher/ParserChunker2MatcherProcessor.java b/opennlp-similarity/src/main/java/opennlp/tools/textsimilarity/chunker2matcher/ParserChunker2MatcherProcessor.java
index e2bb275..3dc6b30 100644
--- a/opennlp-similarity/src/main/java/opennlp/tools/textsimilarity/chunker2matcher/ParserChunker2MatcherProcessor.java
+++ b/opennlp-similarity/src/main/java/opennlp/tools/textsimilarity/chunker2matcher/ParserChunker2MatcherProcessor.java
@@ -581,25 +581,12 @@
   }
 
   protected void initializeSentenceDetector() {
-    InputStream is = null;
-    try {
-      is = new FileInputStream(MODEL_DIR + "/en-sent.bin"
-
-      );
+    try (InputStream is = new FileInputStream(MODEL_DIR + "/en-sent.bin")) {
       SentenceModel model = new SentenceModel(is);
       sentenceDetector = new SentenceDetectorME(model);
     } catch (IOException e) {
       e.printStackTrace();
-    } finally {
-      if (is != null) {
-        try {
-          is.close();
-        } catch (IOException e) {
-           // we swallow exception to support the cached run
-        	e.printStackTrace();
-        }
-      }
-    }
+    } 
   }
 
   protected void initializeTokenizer() {
diff --git a/opennlp-wsd/src/main/java/opennlp/tools/cmdline/disambiguator/DisambiguatorEvaluatorTool.java b/opennlp-wsd/src/main/java/opennlp/tools/cmdline/disambiguator/DisambiguatorEvaluatorTool.java
index 5b6451e..453db86 100644
--- a/opennlp-wsd/src/main/java/opennlp/tools/cmdline/disambiguator/DisambiguatorEvaluatorTool.java
+++ b/opennlp-wsd/src/main/java/opennlp/tools/cmdline/disambiguator/DisambiguatorEvaluatorTool.java
@@ -19,7 +19,6 @@
 
 import java.io.File;
 import java.io.IOException;
-import java.nio.charset.Charset;
 
 import opennlp.tools.cmdline.ArgumentParser;
 import opennlp.tools.cmdline.CLI;
@@ -62,35 +61,22 @@
     File testData = params.getData();
     CmdLineUtil.checkInputFile("Test data", testData);
 
-    Charset encoding = params.getEncoding();
-
     WSDisambiguator disambiguator = DisambiguatorTool.makeTool(params);
-
     WSDEvaluator evaluator = new WSDEvaluator(disambiguator);
 
     System.out.print("Evaluating ... ");
 
-    ObjectStream<WSDSample> sampleStream = DisambiguatorTool.openSampleData(
-        "Test", testData, encoding);
-
-    try {
-      evaluator.evaluate(sampleStream);
-    } catch (IOException e) {
-      System.err.println("failed");
-      System.err.println("Reading test data error " + e.getMessage());
-      throw new TerminateToolException(-1);
-    } finally {
-      try {
-        sampleStream.close();
+    try (ObjectStream<WSDSample> sampleStream = DisambiguatorTool.openSampleData(
+            "Test", testData, params.getEncoding())) {
+        evaluator.evaluate(sampleStream);
       } catch (IOException e) {
-        // sorry that this can fail
-      }
+        System.err.println("failed");
+        System.err.println("Reading test data error " + e.getMessage());
+        throw new TerminateToolException(-1);
     }
 
     System.out.println("done");
-
     System.out.println();
-
     System.out.println("Accuracy: " + evaluator.getAccuracy());
   }
 }
\ No newline at end of file
diff --git a/opennlp-wsd/src/main/java/opennlp/tools/disambiguator/WSDEvaluator.java b/opennlp-wsd/src/main/java/opennlp/tools/disambiguator/WSDEvaluator.java
index 13d1e67..eeab5c1 100644
--- a/opennlp-wsd/src/main/java/opennlp/tools/disambiguator/WSDEvaluator.java
+++ b/opennlp-wsd/src/main/java/opennlp/tools/disambiguator/WSDEvaluator.java
@@ -22,8 +22,7 @@
 
 /**
  * The {@link WSDEvaluator} measures the performance of the given
- * {@link WSDisambiguator} with the provided reference
- * {@link WordToDisambiguate}.
+ * {@link WSDisambiguator} with the provided reference {@code WordToDisambiguate}.
  *
  * @see Evaluator
  * @see WSDisambiguator
diff --git a/opennlp-wsd/src/main/java/opennlp/tools/disambiguator/WSDModel.java b/opennlp-wsd/src/main/java/opennlp/tools/disambiguator/WSDModel.java
index 90afbbf..dbb0a71 100644
--- a/opennlp-wsd/src/main/java/opennlp/tools/disambiguator/WSDModel.java
+++ b/opennlp-wsd/src/main/java/opennlp/tools/disambiguator/WSDModel.java
@@ -38,6 +38,8 @@
 // TODO unify both supervised models
 public class WSDModel extends BaseModel {
 
+  private static final long serialVersionUID = 8597537955427934846L;
+  
   private static final String COMPONENT_NAME = "WSD";
   private static final String WSD_MODEL_ENTRY_NAME = "WSD.model";
 
diff --git a/opennlp-wsd/src/main/java/opennlp/tools/disambiguator/WSDSample.java b/opennlp-wsd/src/main/java/opennlp/tools/disambiguator/WSDSample.java
index cb9365e..66d613e 100644
--- a/opennlp-wsd/src/main/java/opennlp/tools/disambiguator/WSDSample.java
+++ b/opennlp-wsd/src/main/java/opennlp/tools/disambiguator/WSDSample.java
@@ -19,6 +19,7 @@
 
 import java.util.Arrays;
 import java.util.List;
+import java.util.Objects;
 
 import net.sf.extjwnl.JWNLException;
 import net.sf.extjwnl.data.POS;
@@ -188,6 +189,14 @@
     }
   }
 
+  @Override
+  public int hashCode() {
+    int result = Objects.hash(targetPosition);
+    result = 31 * result + Arrays.hashCode(sentence);
+    result = 31 * result + Arrays.hashCode(tags);
+    return result;
+  }
+
   // Return the synsets (thus the senses) of the current target word
   public List<Synset> getSynsets() {
     try {
diff --git a/summarizer/src/main/java/opennlp/summarization/Sentence.java b/summarizer/src/main/java/opennlp/summarization/Sentence.java
index 312e6d4..fad8cf1 100755
--- a/summarizer/src/main/java/opennlp/summarization/Sentence.java
+++ b/summarizer/src/main/java/opennlp/summarization/Sentence.java
@@ -21,6 +21,7 @@
 import java.util.List;
 import java.util.ArrayList;
 import java.util.Locale;
+import java.util.Objects;
 
 import opennlp.summarization.preprocess.PorterStemmer;
 import opennlp.summarization.preprocess.StopWords;
@@ -28,7 +29,8 @@
 /**
  * A representation of a sentence geared toward pagerank and summarization.
  */
-public class Sentence {	
+public class Sentence {
+
 	//sentId is always position of sentence in doc.
 	private int sentId;
 	private String stringVal;
@@ -132,12 +134,18 @@
 		return wordCnt==0? this.getStringVal().split(" ").length: wordCnt;
 	}
 
-	//Should add an article id to the sentence class. For now returns true if the ids are the same.
+	// Should add an article id to the sentence class. For now returns true if the ids are the same.
 	@Override
-	public boolean equals(Object o){
-		if(! (o instanceof Sentence)) return false;
-		Sentence s = (Sentence)o;
-		return s.sentId == this.sentId;
+	public boolean equals(Object o) {
+		if (this == o) return true;
+		if (o == null || getClass() != o.getClass()) return false;
+		Sentence sentence = (Sentence) o;
+		return sentId == sentence.sentId;
+	}
+
+	@Override
+	public int hashCode() {
+		return Objects.hash(sentId);
 	}
 
 	private static final String SPACE = " ";
diff --git a/summarizer/src/main/java/opennlp/summarization/lexicalchaining/LexicalChain.java b/summarizer/src/main/java/opennlp/summarization/lexicalchaining/LexicalChain.java
index f6f3595..86e5ba8 100644
--- a/summarizer/src/main/java/opennlp/summarization/lexicalchaining/LexicalChain.java
+++ b/summarizer/src/main/java/opennlp/summarization/lexicalchaining/LexicalChain.java
@@ -19,6 +19,7 @@
 
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Objects;
 
 import opennlp.summarization.Sentence;
 
@@ -73,11 +74,19 @@
   @Override
   public int compareTo(LexicalChain o) {
     double diff = (score() - o.score());
-    return diff ==0? 0: diff > 0 ?1:-1;
+    return diff == 0 ? 0: diff > 0 ? 1:-1;
   }
 
   @Override
-  public boolean equals(Object o){
-    return super.equals(o);
+  public boolean equals(Object o) {
+    if (this == o) return true;
+    if (o == null || getClass() != o.getClass()) return false;
+    LexicalChain that = (LexicalChain) o;
+    return start == that.start && last == that.last && score == that.score && occurrences == that.occurrences;
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(start, last, score, occurrences);
   }
 }
diff --git a/wikinews-importer/src/main/java/org/apache/opennlp/wikinews_importer/AnnotatingMarkupParser.java b/wikinews-importer/src/main/java/org/apache/opennlp/wikinews_importer/AnnotatingMarkupParser.java
index cb39418..90f1721 100644
--- a/wikinews-importer/src/main/java/org/apache/opennlp/wikinews_importer/AnnotatingMarkupParser.java
+++ b/wikinews-importer/src/main/java/org/apache/opennlp/wikinews_importer/AnnotatingMarkupParser.java
@@ -122,10 +122,8 @@
                     if (node instanceof WPATag) {
                         // extract wikilink annotations
                         WPATag tag = (WPATag) node;
-                        String wikilinkLabel = (String) tag.getAttributes().get(
-                                WIKILINK_TITLE_ATTR_KEY);
-                        String wikilinkTarget = (String) tag.getAttributes().get(
-                                WIKILINK_TARGET_ATTR_KEY);
+                        String wikilinkLabel = tag.getAttributes().get(WIKILINK_TITLE_ATTR_KEY);
+                        String wikilinkTarget = tag.getAttributes().get(WIKILINK_TARGET_ATTR_KEY);
                         if (wikilinkLabel != null) {
                             int colonIdx = -1; // wikilinkLabel.indexOf(':');
                             if (colonIdx == -1) {