You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@zeppelin.apache.org by pd...@apache.org on 2020/11/13 09:05:33 UTC

[zeppelin] branch branch-0.9 updated: [ZEPPELIN-5130] Improve code style

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

pdallig pushed a commit to branch branch-0.9
in repository https://gitbox.apache.org/repos/asf/zeppelin.git


The following commit(s) were added to refs/heads/branch-0.9 by this push:
     new a1be69d  [ZEPPELIN-5130] Improve code style
a1be69d is described below

commit a1be69d8e3cbfa1b0c858a433c02f6ae7465a0e8
Author: Philipp Dallig <ph...@gmail.com>
AuthorDate: Wed Nov 11 10:05:50 2020 +0100

    [ZEPPELIN-5130] Improve code style
    
    ### What is this PR for?
    This PR improves the code, but should not change functionality.
     - Improve `LOGGER` usage
     - Remove unused imports
     - Remove deprecated function calls e.g. FileUtils.read/write without a charset
     - closing of DirectoryStream with try-with-resource
     - Correct use of 'AssertEquals()', first value is the expected value
    
    ### What type of PR is it?
     - Maintenance
    
    ### What is the Jira issue?
    * https://issues.apache.org/jira/browse/ZEPPELIN-5130
    
    ### How should this be tested?
    * Travis-CI: https://travis-ci.com/github/Reamer/zeppelin/builds/200313561
    
    ### Questions:
    * Does the licenses files need update? No
    * Is there breaking changes for older versions? No
    * Does this needs documentation? No
    
    Author: Philipp Dallig <ph...@gmail.com>
    
    Closes #3969 from Reamer/style_changes and squashes the following commits:
    
    273364de7 [Philipp Dallig] code changes
    
    (cherry picked from commit 561a467c1357f77bc11071e17b7c1c235e7770fa)
    Signed-off-by: Philipp Dallig <ph...@gmail.com>
---
 .../zeppelin/conf/ZeppelinConfiguration.java       |   4 +-
 .../main/java/org/apache/zeppelin/dep/Booter.java  |   4 -
 .../org/apache/zeppelin/display/AngularObject.java |  11 +-
 zeppelin-server/pom.xml                            |   4 -
 .../org/apache/zeppelin/server/ZeppelinServer.java |   6 +-
 .../apache/zeppelin/rest/ZeppelinServerTest.java   |  23 --
 .../zeppelin/helium/HeliumApplicationFactory.java  |   1 -
 .../zeppelin/helium/HeliumBundleFactory.java       |  51 +++--
 .../zeppelin/helium/HeliumLocalRegistry.java       |  11 +-
 .../org/apache/zeppelin/helium/HeliumRegistry.java |   1 -
 .../zeppelin/helium/HeliumRegistrySerializer.java  |   5 +-
 .../zeppelin/interpreter/InterpreterFactory.java   |   3 -
 .../interpreter/InterpreterInfoSaving.java         |   5 +-
 .../zeppelin/interpreter/InterpreterSetting.java   |   4 +-
 .../interpreter/InterpreterSettingManager.java     |  40 ++--
 .../interpreter/ManagedInterpreterGroup.java       |  16 +-
 .../interpreter/RemoteInterpreterEventServer.java  |  24 +-
 .../interpreter/SessionConfInterpreter.java        |   2 +-
 .../zeppelin/interpreter/YarnAppMonitor.java       |   7 +-
 .../interpreter/install/InstallInterpreter.java    |   3 +-
 .../launcher/SparkInterpreterLauncher.java         |  47 ++--
 .../launcher/StandardInterpreterLauncher.java      |   4 +-
 .../interpreter/recovery/StopInterpreter.java      |   6 +-
 .../interpreter/remote/AppendOutputRunner.java     |  22 +-
 .../remote/RemoteAngularObjectRegistry.java        |   6 +-
 .../interpreter/remote/RemoteInterpreter.java      |  15 +-
 .../remote/RemoteInterpreterManagedProcess.java    |   5 +-
 .../remote/RemoteInterpreterProcess.java           |   8 +-
 .../remote/RemoteInterpreterRunningProcess.java    |   1 -
 .../apache/zeppelin/notebook/ApplicationState.java |   7 +-
 .../zeppelin/notebook/AuthorizationService.java    |   8 +-
 .../zeppelin/notebook/FileSystemStorage.java       |  14 +-
 .../java/org/apache/zeppelin/notebook/Note.java    |  27 ++-
 .../org/apache/zeppelin/notebook/NoteAuth.java     |   2 +-
 .../org/apache/zeppelin/notebook/NoteManager.java  |  18 +-
 .../org/apache/zeppelin/notebook/Notebook.java     |  23 +-
 .../org/apache/zeppelin/notebook/Paragraph.java    |   4 +-
 .../zeppelin/notebook/ParagraphTextParser.java     |   2 +-
 .../zeppelin/notebook/repo/NotebookRepoSync.java   |  67 +++---
 .../repo/NotebookRepoWithVersionControl.java       |  12 +-
 .../zeppelin/notebook/repo/OldNotebookRepo.java    |   1 -
 .../zeppelin/notebook/repo/OldVFSNotebookRepo.java |  18 +-
 .../zeppelin/notebook/repo/VFSNotebookRepo.java    |  16 +-
 .../repo/zeppelinhub/websocket/ZeppelinClient.java |   2 +-
 .../zeppelinhub/websocket/ZeppelinhubClient.java   |  65 +++---
 .../websocket/listener/ZeppelinWebsocket.java      |  12 +-
 .../websocket/listener/ZeppelinhubWebsocket.java   |  14 +-
 .../websocket/protocol/ZeppelinhubMessage.java     |  15 +-
 .../websocket/scheduler/ZeppelinHeartbeat.java     |   8 +-
 .../websocket/scheduler/ZeppelinHubHeartbeat.java  |   4 +-
 .../websocket/session/ZeppelinhubSession.java      |   6 +-
 .../websocket/utils/ZeppelinhubUtils.java          |  34 +--
 .../zeppelin/notebook/scheduler/CronJob.java       |   7 +-
 .../notebook/scheduler/QuartzSchedulerService.java |   8 +-
 .../org/apache/zeppelin/plugin/PluginManager.java  |  26 +--
 .../org/apache/zeppelin/search/LuceneSearch.java   |  60 ++---
 .../org/apache/zeppelin/storage/ConfigStorage.java |   3 +-
 .../java/org/apache/zeppelin/user/Credentials.java |   4 +-
 .../zeppelin/user/CredentialsInfoSaving.java       |   6 +-
 .../java/org/apache/zeppelin/util/FileUtils.java   |   9 +-
 .../org/apache/zeppelin/util/ReflectionUtils.java  |  25 +-
 .../helium/HeliumApplicationFactoryTest.java       |   3 +-
 .../interpreter/InterpreterSettingManagerTest.java |   1 -
 .../interpreter/ManagedInterpreterGroupTest.java   |   4 -
 .../install/InstallInterpreterTest.java            |   3 +-
 .../interpreter/integration/DownloadUtils.java     |   5 +-
 .../lifecycle/TimeoutLifecycleManagerTest.java     |   3 +-
 .../interpreter/remote/AppendOutputRunnerTest.java |   4 +-
 .../interpreter/remote/RemoteInterpreterTest.java  |   2 +-
 .../org/apache/zeppelin/notebook/NotebookTest.java | 255 ++++++++++-----------
 .../apache/zeppelin/notebook/ParagraphTest.java    |  16 +-
 .../resource/DistributedResourcePoolTest.java      |   5 +-
 .../zeppelin/scheduler/RemoteSchedulerTest.java    |   8 +-
 .../zeppelin/storage/LocalConfigStorageTest.java   |   5 +-
 74 files changed, 545 insertions(+), 635 deletions(-)

diff --git a/zeppelin-interpreter/src/main/java/org/apache/zeppelin/conf/ZeppelinConfiguration.java b/zeppelin-interpreter/src/main/java/org/apache/zeppelin/conf/ZeppelinConfiguration.java
index ee842e1..826e252 100644
--- a/zeppelin-interpreter/src/main/java/org/apache/zeppelin/conf/ZeppelinConfiguration.java
+++ b/zeppelin-interpreter/src/main/java/org/apache/zeppelin/conf/ZeppelinConfiguration.java
@@ -679,8 +679,8 @@ public class ZeppelinConfiguration extends XMLConfiguration {
   public String getConfigFSDir(boolean absolute) {
     String fsConfigDir = getString(ConfVars.ZEPPELIN_CONFIG_FS_DIR);
     if (StringUtils.isBlank(fsConfigDir)) {
-      LOG.warn(ConfVars.ZEPPELIN_CONFIG_FS_DIR.varName + " is not specified, fall back to local " +
-          "conf directory " + ConfVars.ZEPPELIN_CONF_DIR.varName);
+      LOG.warn("{} is not specified, fall back to local conf directory {}",
+        ConfVars.ZEPPELIN_CONFIG_FS_DIR.varName,  ConfVars.ZEPPELIN_CONF_DIR.varName);
       if (absolute) {
         return getConfDir();
       } else {
diff --git a/zeppelin-interpreter/src/main/java/org/apache/zeppelin/dep/Booter.java b/zeppelin-interpreter/src/main/java/org/apache/zeppelin/dep/Booter.java
index 0dfdf16..bf5e1da 100644
--- a/zeppelin-interpreter/src/main/java/org/apache/zeppelin/dep/Booter.java
+++ b/zeppelin-interpreter/src/main/java/org/apache/zeppelin/dep/Booter.java
@@ -23,16 +23,12 @@ import org.apache.maven.repository.internal.MavenRepositorySystemUtils;
 import org.eclipse.aether.DefaultRepositorySystemSession;
 import org.eclipse.aether.RepositorySystem;
 import org.eclipse.aether.RepositorySystemSession;
-import org.eclipse.aether.repository.Authentication;
 import org.eclipse.aether.repository.LocalRepository;
 import org.eclipse.aether.repository.Proxy;
 import org.eclipse.aether.repository.RemoteRepository;
-import org.eclipse.aether.util.repository.AuthenticationBuilder;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import java.net.MalformedURLException;
-import java.net.URL;
 import java.nio.file.Paths;
 
 /**
diff --git a/zeppelin-interpreter/src/main/java/org/apache/zeppelin/display/AngularObject.java b/zeppelin-interpreter/src/main/java/org/apache/zeppelin/display/AngularObject.java
index f3238f4..2d01a31 100644
--- a/zeppelin-interpreter/src/main/java/org/apache/zeppelin/display/AngularObject.java
+++ b/zeppelin-interpreter/src/main/java/org/apache/zeppelin/display/AngularObject.java
@@ -41,11 +41,11 @@ public class AngularObject<T> implements JsonSerializable {
 
   private String name;
   private T object;
-  
+
   private transient AngularObjectListener listener;
   private transient List<AngularObjectWatcher> watchers = new LinkedList<>();
-  
-  private String noteId;   // noteId belonging to. null for global scope 
+
+  private String noteId;   // noteId belonging to. null for global scope
   private String paragraphId; // paragraphId belongs to. null for notebook scope
 
   /**
@@ -177,7 +177,7 @@ public class AngularObject<T> implements JsonSerializable {
     if (emit) {
       emit();
     }
-    LOGGER.debug("Update angular object: " + name + " with value: " + o);
+    LOGGER.debug("Update angular object: {} with value: {}", name, o);
     final Logger logger = LoggerFactory.getLogger(AngularObject.class);
     List<AngularObjectWatcher> ws = new LinkedList<>();
     synchronized (watchers) {
@@ -257,11 +257,12 @@ public class AngularObject<T> implements JsonSerializable {
     return sb.toString();
   }
 
+  @Override
   public String toJson() {
     return GSON.toJson(this);
   }
 
-  public static AngularObject fromJson(String json) {
+  public static AngularObject<?> fromJson(String json) {
     return GSON.fromJson(json, AngularObject.class);
   }
 }
diff --git a/zeppelin-server/pom.xml b/zeppelin-server/pom.xml
index d6affe0..78e3719 100644
--- a/zeppelin-server/pom.xml
+++ b/zeppelin-server/pom.xml
@@ -45,8 +45,6 @@
     <!--test library versions-->
     <selenium.java.version>2.48.2</selenium.java.version>
     <xml.apis.version>1.4.01</xml.apis.version>
-    <powermock.version>1.6.6</powermock.version>
-
   </properties>
 
   <dependencies>
@@ -353,7 +351,6 @@
       <dependency>
         <groupId>org.powermock</groupId>
         <artifactId>powermock-module-junit4</artifactId>
-        <version>${powermock.version}</version>
         <scope>test</scope>
         <exclusions>
           <exclusion>
@@ -365,7 +362,6 @@
       <dependency>
         <groupId>org.powermock</groupId>
         <artifactId>powermock-api-mockito</artifactId>
-        <version>${powermock.version}</version>
         <scope>test</scope>
         <exclusions>
           <exclusion>
diff --git a/zeppelin-server/src/main/java/org/apache/zeppelin/server/ZeppelinServer.java b/zeppelin-server/src/main/java/org/apache/zeppelin/server/ZeppelinServer.java
index 446c4d6..ce05735 100644
--- a/zeppelin-server/src/main/java/org/apache/zeppelin/server/ZeppelinServer.java
+++ b/zeppelin-server/src/main/java/org/apache/zeppelin/server/ZeppelinServer.java
@@ -579,7 +579,7 @@ public class ZeppelinServer extends ResourceConfig {
     return new DefaultServlet() {
 
         private static final long serialVersionUID = 1L;
-        
+
         @Override
         public Resource getResource(String pathInContext) {
 
@@ -591,9 +591,9 @@ public class ZeppelinServer extends ResourceConfig {
             // create the altered 'index.html' resource and cache it via webapp attributes
             if (webApp.getAttribute(HTML_ADDON_IDENTIFIER) == null) {
                 webApp.setAttribute(
-                    HTML_ADDON_IDENTIFIER, 
+                    HTML_ADDON_IDENTIFIER,
                     new HtmlAddonResource(
-                        super.getResource(pathInContext), 
+                        super.getResource(pathInContext),
                         conf.getHtmlBodyAddon(),
                         conf.getHtmlHeadAddon()));
             }
diff --git a/zeppelin-server/src/test/java/org/apache/zeppelin/rest/ZeppelinServerTest.java b/zeppelin-server/src/test/java/org/apache/zeppelin/rest/ZeppelinServerTest.java
deleted file mode 100644
index 76a0758..0000000
--- a/zeppelin-server/src/test/java/org/apache/zeppelin/rest/ZeppelinServerTest.java
+++ /dev/null
@@ -1,23 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.zeppelin.rest;
-
-public class ZeppelinServerTest extends AbstractTestRestApi {
-
-
-}
diff --git a/zeppelin-zengine/src/main/java/org/apache/zeppelin/helium/HeliumApplicationFactory.java b/zeppelin-zengine/src/main/java/org/apache/zeppelin/helium/HeliumApplicationFactory.java
index 7106f45..c558c37 100644
--- a/zeppelin-zengine/src/main/java/org/apache/zeppelin/helium/HeliumApplicationFactory.java
+++ b/zeppelin-zengine/src/main/java/org/apache/zeppelin/helium/HeliumApplicationFactory.java
@@ -28,7 +28,6 @@ import org.apache.zeppelin.interpreter.ManagedInterpreterGroup;
 import org.apache.zeppelin.interpreter.remote.RemoteAngularObjectRegistry;
 import org.apache.zeppelin.interpreter.remote.RemoteInterpreterProcess;
 import org.apache.zeppelin.interpreter.thrift.RemoteApplicationResult;
-import org.apache.zeppelin.interpreter.thrift.RemoteInterpreterService;
 import org.apache.zeppelin.notebook.ApplicationState;
 import org.apache.zeppelin.notebook.Note;
 import org.apache.zeppelin.notebook.NoteEventListener;
diff --git a/zeppelin-zengine/src/main/java/org/apache/zeppelin/helium/HeliumBundleFactory.java b/zeppelin-zengine/src/main/java/org/apache/zeppelin/helium/HeliumBundleFactory.java
index 4009c37..9dff079 100644
--- a/zeppelin-zengine/src/main/java/org/apache/zeppelin/helium/HeliumBundleFactory.java
+++ b/zeppelin-zengine/src/main/java/org/apache/zeppelin/helium/HeliumBundleFactory.java
@@ -25,7 +25,6 @@ import com.github.eirslett.maven.plugins.frontend.lib.ProxyConfig;
 import com.github.eirslett.maven.plugins.frontend.lib.TaskRunnerException;
 import com.github.eirslett.maven.plugins.frontend.lib.YarnInstaller;
 import com.github.eirslett.maven.plugins.frontend.lib.YarnRunner;
-import com.google.common.base.Charsets;
 import com.google.common.io.Resources;
 import com.google.gson.Gson;
 import com.google.gson.reflect.TypeToken;
@@ -42,6 +41,7 @@ import java.io.IOException;
 import java.io.OutputStream;
 import java.io.StringReader;
 import java.net.URI;
+import java.nio.charset.StandardCharsets;
 import java.util.ArrayList;
 import java.util.Enumeration;
 import java.util.HashMap;
@@ -69,7 +69,7 @@ import org.slf4j.LoggerFactory;
  * Load helium visualization & spell
  */
 public class HeliumBundleFactory {
-  private Logger logger = LoggerFactory.getLogger(HeliumBundleFactory.class);
+  private static final Logger LOGGER = LoggerFactory.getLogger(HeliumBundleFactory.class);
   private static final String NODE_VERSION = "v6.9.1";
   private static final String NPM_VERSION = "3.10.8";
   private static final String YARN_VERSION = "v0.21.3";
@@ -165,7 +165,7 @@ public class HeliumBundleFactory {
       configureLogger();
       nodeAndNpmInstalled = true;
     } catch (InstallationException e) {
-      logger.error(e.getMessage(), e);
+      LOGGER.error(e.getMessage(), e);
     }
   }
 
@@ -184,7 +184,7 @@ public class HeliumBundleFactory {
       else if (!isSecure && StringUtils.isNotBlank(httpProxy))
         proxies.add(generateProxy("insecure", new URI(httpProxy)));
     } catch (Exception ex) {
-      logger.error(ex.getMessage(), ex);
+      LOGGER.error(ex.getMessage(), ex);
     }
     return new ProxyConfig(proxies);
   }
@@ -195,7 +195,8 @@ public class HeliumBundleFactory {
     String host = uri.getHost();
     int port = uri.getPort() <= 0 ? 80 : uri.getPort();
 
-    String username = null, password = null;
+    String username = null;
+    String password = null;
     if (uri.getUserInfo() != null) {
       String[] authority = uri.getUserInfo().split(":");
       if (authority.length == 2) {
@@ -294,7 +295,7 @@ public class HeliumBundleFactory {
       File extracted = new File(heliumBundleDirectory, "package");
       FileUtils.deleteDirectory(extracted);
       List<String> entries = unTgz(tgz, heliumBundleDirectory);
-      for (String entry: entries) logger.debug("Extracted " + entry);
+      for (String entry: entries) LOGGER.debug("Extracted " + entry);
       tgz.delete();
       FileUtils.copyDirectory(extracted, bundleDir);
       FileUtils.deleteDirectory(extracted);
@@ -331,10 +332,10 @@ public class HeliumBundleFactory {
     templatePackageJson = templatePackageJson.replaceFirst("PACKAGE_NAME", pkg.getName());
     templatePackageJson = templatePackageJson.replaceFirst("MAIN_FILE", mainFileName);
     templatePackageJson = templatePackageJson.replaceFirst("DEPENDENCIES", dependencies.toString());
-    FileUtils.write(new File(bundleDir, PACKAGE_JSON), templatePackageJson);
+    FileUtils.write(new File(bundleDir, PACKAGE_JSON), templatePackageJson, StandardCharsets.UTF_8);
 
     // 2. setup webpack.config
-    FileUtils.write(new File(bundleDir, "webpack.config.js"), templateWebpackConfig);
+    FileUtils.write(new File(bundleDir, "webpack.config.js"), templateWebpackConfig, StandardCharsets.UTF_8);
 
     return mainFileName;
   }
@@ -366,7 +367,7 @@ public class HeliumBundleFactory {
     File srcDir = getHeliumPackageSourceDirectory(pkg.getName());
     FileUtils.forceMkdir(srcDir);
     FileUtils.write(new File(srcDir, HELIUM_BUNDLES_SRC),
-            loadJsImport.append(loadJsRegister).toString());
+            loadJsImport.append(loadJsRegister).toString(), StandardCharsets.UTF_8);
   }
 
   private synchronized void installNodeModules(FrontendPluginFactory fpf) throws IOException {
@@ -376,9 +377,9 @@ public class HeliumBundleFactory {
               String.format("install --fetch-retries=%d --fetch-retry-factor=%d " +
                               "--fetch-retry-mintimeout=%d",
                       FETCH_RETRY_COUNT, FETCH_RETRY_FACTOR_COUNT, FETCH_RETRY_MIN_TIMEOUT);
-      logger.info("Installing required node modules");
+      LOGGER.info("Installing required node modules");
       yarnCommand(fpf, commandForNpmInstall);
-      logger.info("Installed required node modules");
+      LOGGER.info("Installed required node modules");
     } catch (TaskRunnerException e) {
       throw new IOException(e);
     }
@@ -388,9 +389,9 @@ public class HeliumBundleFactory {
                                                File bundleDir) throws IOException {
     try {
       out.reset();
-      logger.info("Bundling helium packages");
+      LOGGER.info("Bundling helium packages");
       yarnCommand(fpf, "run bundle");
-      logger.info("Bundled helium packages");
+      LOGGER.info("Bundled helium packages");
     } catch (TaskRunnerException e) {
       throw new IOException(new String(out.toByteArray()));
     }
@@ -420,7 +421,7 @@ public class HeliumBundleFactory {
 
     String[] moduleNameVersion = getNpmModuleNameAndVersion(pkg);
     if (moduleNameVersion == null) {
-      logger.warn("Can't get module name and version of package " + pkg.getName());
+      LOGGER.warn("Can't get module name and version of package {}", pkg.getName());
       return null;
     }
 
@@ -449,9 +450,9 @@ public class HeliumBundleFactory {
 
     // resources: webpack.js, package.json
     String templateWebpackConfig = Resources.toString(
-        Resources.getResource("helium/webpack.config.js"), Charsets.UTF_8);
+        Resources.getResource("helium/webpack.config.js"), StandardCharsets.UTF_8);
     String templatePackageJson = Resources.toString(
-        Resources.getResource("helium/" + PACKAGE_JSON), Charsets.UTF_8);
+        Resources.getResource("helium/" + PACKAGE_JSON), StandardCharsets.UTF_8);
 
     // 2. download helium package using `npm pack`
     String mainFileName = null;
@@ -480,7 +481,7 @@ public class HeliumBundleFactory {
   private synchronized void buildAllPackages(List<HeliumPackage> pkgs, boolean rebuild)
       throws IOException {
 
-    if (pkgs == null || pkgs.size() == 0) {
+    if (pkgs == null || pkgs.isEmpty()) {
       return;
     }
 
@@ -491,7 +492,7 @@ public class HeliumBundleFactory {
       try {
         buildPackage(pkg, rebuild, recopyLocalModules);
       } catch (IOException e) {
-        logger.error("Failed to build helium package: " + pkg.getArtifact(), e);
+        LOGGER.error("Failed to build helium package: {}", pkg.getArtifact(), e);
       }
     }
   }
@@ -578,7 +579,7 @@ public class HeliumBundleFactory {
 
     boolean webpackRunDetected = false;
     boolean resultJsonDetected = false;
-    StringBuffer sb = new StringBuffer();
+    StringBuilder sb = new StringBuilder();
     try {
       String next, line = reader.readLine();
       for (boolean last = (line == null); !last; line = next) {
@@ -609,7 +610,7 @@ public class HeliumBundleFactory {
       }
       return WebpackResult.fromJson(sb.toString());
     } catch (IOException e) {
-      logger.error(e.getMessage(), e);
+      LOGGER.error(e.getMessage(), e);
       return new WebpackResult();
     }
   }
@@ -628,14 +629,14 @@ public class HeliumBundleFactory {
       }
       try {
         NpmPackage npmPackage = NpmPackage.fromJson(
-            FileUtils.readFileToString(packageJson));
+            FileUtils.readFileToString(packageJson, StandardCharsets.UTF_8));
 
         String[] nameVersion = new String[2];
         nameVersion[0] = npmPackage.name;
         nameVersion[1] = npmPackage.version;
         return nameVersion;
       } catch (IOException e) {
-        logger.error(e.getMessage(), e);
+        LOGGER.error(e.getMessage(), e);
         return null;
       }
     } else {
@@ -667,7 +668,7 @@ public class HeliumBundleFactory {
   }
 
   private void npmCommand(String args) throws TaskRunnerException {
-    npmCommand(args, new HashMap<String, String>());
+    npmCommand(args, new HashMap<>());
   }
 
   private void npmCommand(String args, Map<String, String> env) throws TaskRunnerException {
@@ -677,11 +678,11 @@ public class HeliumBundleFactory {
   }
 
   private void npmCommand(FrontendPluginFactory fpf, String args) throws TaskRunnerException {
-    npmCommand(args, new HashMap<String, String>());
+    npmCommand(args, new HashMap<>());
   }
 
   private void yarnCommand(FrontendPluginFactory fpf, String args) throws TaskRunnerException {
-    yarnCommand(fpf, args, new HashMap<String, String>());
+    yarnCommand(fpf, args, new HashMap<>());
   }
 
   private void yarnCommand(FrontendPluginFactory fpf,
diff --git a/zeppelin-zengine/src/main/java/org/apache/zeppelin/helium/HeliumLocalRegistry.java b/zeppelin-zengine/src/main/java/org/apache/zeppelin/helium/HeliumLocalRegistry.java
index 7328dca..31db3e4 100644
--- a/zeppelin-zengine/src/main/java/org/apache/zeppelin/helium/HeliumLocalRegistry.java
+++ b/zeppelin-zengine/src/main/java/org/apache/zeppelin/helium/HeliumLocalRegistry.java
@@ -25,6 +25,7 @@ import org.slf4j.LoggerFactory;
 import java.io.File;
 import java.io.IOException;
 import java.io.StringReader;
+import java.nio.charset.StandardCharsets;
 import java.util.LinkedList;
 import java.util.List;
 
@@ -32,14 +33,12 @@ import java.util.List;
  * Simple Helium registry on local filesystem
  */
 public class HeliumLocalRegistry extends HeliumRegistry {
-  private Logger logger = LoggerFactory.getLogger(HeliumLocalRegistry.class);
+  private static final Logger LOGGER = LoggerFactory.getLogger(HeliumLocalRegistry.class);
 
-  private final Gson gson;
+  private static final Gson gson = new Gson();
 
   public HeliumLocalRegistry(String name, String uri) {
     super(name, uri);
-    gson = new Gson();
-
   }
 
   @Override
@@ -67,12 +66,12 @@ public class HeliumLocalRegistry extends HeliumRegistry {
 
   private HeliumPackage readPackageInfo(File f) {
     try {
-      JsonReader reader = new JsonReader(new StringReader(FileUtils.readFileToString(f)));
+      JsonReader reader = new JsonReader(new StringReader(FileUtils.readFileToString(f, StandardCharsets.UTF_8)));
       reader.setLenient(true);
 
       return gson.fromJson(reader, HeliumPackage.class);
     } catch (IOException e) {
-      logger.error(e.getMessage(), e);
+      LOGGER.error(e.getMessage(), e);
       return null;
     }
   }
diff --git a/zeppelin-zengine/src/main/java/org/apache/zeppelin/helium/HeliumRegistry.java b/zeppelin-zengine/src/main/java/org/apache/zeppelin/helium/HeliumRegistry.java
index 125ad92..13b4325 100644
--- a/zeppelin-zengine/src/main/java/org/apache/zeppelin/helium/HeliumRegistry.java
+++ b/zeppelin-zengine/src/main/java/org/apache/zeppelin/helium/HeliumRegistry.java
@@ -17,7 +17,6 @@
 package org.apache.zeppelin.helium;
 
 import java.io.IOException;
-import java.net.URI;
 import java.util.List;
 
 /**
diff --git a/zeppelin-zengine/src/main/java/org/apache/zeppelin/helium/HeliumRegistrySerializer.java b/zeppelin-zengine/src/main/java/org/apache/zeppelin/helium/HeliumRegistrySerializer.java
index 3abcb9f..91c747f 100644
--- a/zeppelin-zengine/src/main/java/org/apache/zeppelin/helium/HeliumRegistrySerializer.java
+++ b/zeppelin-zengine/src/main/java/org/apache/zeppelin/helium/HeliumRegistrySerializer.java
@@ -23,8 +23,6 @@ import org.slf4j.LoggerFactory;
 import java.lang.reflect.Constructor;
 import java.lang.reflect.InvocationTargetException;
 import java.lang.reflect.Type;
-import java.net.URI;
-import java.net.URISyntaxException;
 
 /**
  * HeliumRegistrySerializer (and deserializer) for gson
@@ -48,8 +46,7 @@ public class HeliumRegistrySerializer
       Class<HeliumRegistry> cls =
           (Class<HeliumRegistry>) getClass().getClassLoader().loadClass(className);
       Constructor<HeliumRegistry> constructor = cls.getConstructor(String.class, String.class);
-      HeliumRegistry registry = constructor.newInstance(name, uri);
-      return registry;
+      return constructor.newInstance(name, uri);
     } catch (ClassNotFoundException | NoSuchMethodException | IllegalAccessException |
         InstantiationException | InvocationTargetException e) {
       logger.error(e.getMessage(), e);
diff --git a/zeppelin-zengine/src/main/java/org/apache/zeppelin/interpreter/InterpreterFactory.java b/zeppelin-zengine/src/main/java/org/apache/zeppelin/interpreter/InterpreterFactory.java
index d5b8f81..155465f 100644
--- a/zeppelin-zengine/src/main/java/org/apache/zeppelin/interpreter/InterpreterFactory.java
+++ b/zeppelin-zengine/src/main/java/org/apache/zeppelin/interpreter/InterpreterFactory.java
@@ -19,8 +19,6 @@ package org.apache.zeppelin.interpreter;
 
 import javax.inject.Inject;
 import org.apache.commons.lang3.StringUtils;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
 /**
  * //TODO(zjffdu) considering to move to InterpreterSettingManager
@@ -29,7 +27,6 @@ import org.slf4j.LoggerFactory;
  *
  */
 public class InterpreterFactory implements InterpreterFactoryInterface {
-  private static final Logger LOGGER = LoggerFactory.getLogger(InterpreterFactory.class);
 
   private final InterpreterSettingManager interpreterSettingManager;
 
diff --git a/zeppelin-zengine/src/main/java/org/apache/zeppelin/interpreter/InterpreterInfoSaving.java b/zeppelin-zengine/src/main/java/org/apache/zeppelin/interpreter/InterpreterInfoSaving.java
index 80051d0..4ecb9c7 100644
--- a/zeppelin-zengine/src/main/java/org/apache/zeppelin/interpreter/InterpreterInfoSaving.java
+++ b/zeppelin-zengine/src/main/java/org/apache/zeppelin/interpreter/InterpreterInfoSaving.java
@@ -66,8 +66,7 @@ public class InterpreterInfoSaving implements JsonSerializable {
     LOGGER.info("Load interpreter setting from file: {}", file);
     InterpreterInfoSaving infoSaving = null;
     try (BufferedReader json = Files.newBufferedReader(file, StandardCharsets.UTF_8)) {
-      JsonParser jsonParser = new JsonParser();
-      JsonObject jsonObject = jsonParser.parse(json).getAsJsonObject();
+      JsonObject jsonObject = JsonParser.parseReader(json).getAsJsonObject();
       infoSaving = InterpreterInfoSaving.fromJson(jsonObject.toString());
 
       if (infoSaving != null && infoSaving.interpreterSettings != null) {
@@ -106,6 +105,7 @@ public class InterpreterInfoSaving implements JsonSerializable {
   }
 
   static class InterfaceAdapter<T> implements JsonSerializer<T>, JsonDeserializer<T> {
+    @Override
     public JsonElement serialize(T object, Type interfaceType, JsonSerializationContext context) {
       final JsonObject wrapper = new JsonObject();
       wrapper.addProperty("type", object.getClass().getName());
@@ -113,6 +113,7 @@ public class InterpreterInfoSaving implements JsonSerializable {
       return wrapper;
     }
 
+    @Override
     public T deserialize(JsonElement elem,
                          Type interfaceType,
                          JsonDeserializationContext context) throws JsonParseException {
diff --git a/zeppelin-zengine/src/main/java/org/apache/zeppelin/interpreter/InterpreterSetting.java b/zeppelin-zengine/src/main/java/org/apache/zeppelin/interpreter/InterpreterSetting.java
index 487cf4d..2b5cb9a 100644
--- a/zeppelin-zengine/src/main/java/org/apache/zeppelin/interpreter/InterpreterSetting.java
+++ b/zeppelin-zengine/src/main/java/org/apache/zeppelin/interpreter/InterpreterSetting.java
@@ -480,7 +480,7 @@ public class InterpreterSetting {
       interpreterGroupReadLock.lock();
       return interpreterGroups.get(groupId);
     } finally {
-      interpreterGroupReadLock.unlock();;
+      interpreterGroupReadLock.unlock();
     }
   }
 
@@ -731,7 +731,7 @@ public class InterpreterSetting {
   }
 
   public void setStatus(Status status) {
-    LOGGER.info("Set interpreter {} status to{}", name, status.name());
+    LOGGER.info("Set interpreter {} status to {}", name, status);
     this.status = status;
   }
 
diff --git a/zeppelin-zengine/src/main/java/org/apache/zeppelin/interpreter/InterpreterSettingManager.java b/zeppelin-zengine/src/main/java/org/apache/zeppelin/interpreter/InterpreterSettingManager.java
index da6cc18..985cb47 100644
--- a/zeppelin-zengine/src/main/java/org/apache/zeppelin/interpreter/InterpreterSettingManager.java
+++ b/zeppelin-zengine/src/main/java/org/apache/zeppelin/interpreter/InterpreterSettingManager.java
@@ -81,6 +81,7 @@ import java.lang.reflect.Type;
 import java.net.MalformedURLException;
 import java.net.URL;
 import java.net.URLClassLoader;
+import java.nio.file.DirectoryStream;
 import java.nio.file.Files;
 import java.nio.file.Path;
 import java.nio.file.Paths;
@@ -187,7 +188,7 @@ public class InterpreterSettingManager implements NoteEventListener, ClusterEven
             new Class[] {ZeppelinConfiguration.class, InterpreterSettingManager.class},
             new Object[] {conf, this});
 
-    LOGGER.info("Using RecoveryStorage: " + this.recoveryStorage.getClass().getName());
+    LOGGER.info("Using RecoveryStorage: {}", this.recoveryStorage.getClass().getName());
 
     this.configStorage = configStorage;
     init();
@@ -379,24 +380,24 @@ public class InterpreterSettingManager implements NoteEventListener, ClusterEven
     String interpreterJson = conf.getInterpreterJson();
     ClassLoader cl = Thread.currentThread().getContextClassLoader();
     if (Files.exists(interpreterDirPath)) {
-      for (Path interpreterDir : Files
-          .newDirectoryStream(interpreterDirPath,
-                  entry -> Files.exists(entry)
-                          && Files.isDirectory(entry)
-                          && shouldRegister(entry.toFile().getName()))) {
-
-        String interpreterDirString = interpreterDir.toString();
-        /**
-         * Register interpreter by the following ordering
-         * 1. Register it from path {ZEPPELIN_HOME}/interpreter/{interpreter_name}/
-         *    interpreter-setting.json
-         * 2. Register it from interpreter-setting.json in classpath
-         *    {ZEPPELIN_HOME}/interpreter/{interpreter_name}
-         */
-        if (!registerInterpreterFromPath(interpreterDirString, interpreterJson, override)) {
-          if (!registerInterpreterFromResource(cl, interpreterDirString, interpreterJson,
-              override)) {
-            LOGGER.warn("No interpreter-setting.json found in " + interpreterDirString);
+      try (DirectoryStream<Path> directoryPaths = Files
+        .newDirectoryStream(interpreterDirPath,
+          entry -> Files.exists(entry)
+                  && Files.isDirectory(entry)
+                  && shouldRegister(entry.toFile().getName()))) {
+        for (Path interpreterDir : directoryPaths) {
+
+          String interpreterDirString = interpreterDir.toString();
+          /**
+           * Register interpreter by the following ordering
+           * 1. Register it from path {ZEPPELIN_HOME}/interpreter/{interpreter_name}/
+           *    interpreter-setting.json
+           * 2. Register it from interpreter-setting.json in classpath
+           *    {ZEPPELIN_HOME}/interpreter/{interpreter_name}
+           */
+          if (!registerInterpreterFromPath(interpreterDirString, interpreterJson, override) &&
+            !registerInterpreterFromResource(cl, interpreterDirString, interpreterJson, override)) {
+            LOGGER.warn("No interpreter-setting.json found in {}", interpreterDirString);
           }
         }
       }
@@ -1163,7 +1164,6 @@ public class InterpreterSettingManager implements NoteEventListener, ClusterEven
     }
 
     try {
-      Gson gson = new Gson();
       ClusterMessage message = ClusterMessage.deserializeMessage(msg);
       String jsonIntpSetting = message.get("intpSetting");
       InterpreterSetting intpSetting = InterpreterSetting.fromJson(jsonIntpSetting);
diff --git a/zeppelin-zengine/src/main/java/org/apache/zeppelin/interpreter/ManagedInterpreterGroup.java b/zeppelin-zengine/src/main/java/org/apache/zeppelin/interpreter/ManagedInterpreterGroup.java
index 1a9ea80..3e6e23d 100644
--- a/zeppelin-zengine/src/main/java/org/apache/zeppelin/interpreter/ManagedInterpreterGroup.java
+++ b/zeppelin-zengine/src/main/java/org/apache/zeppelin/interpreter/ManagedInterpreterGroup.java
@@ -62,7 +62,7 @@ public class ManagedInterpreterGroup extends InterpreterGroup {
       throws IOException {
     synchronized (interpreterProcessCreationLock) {
       if (remoteInterpreterProcess == null) {
-        LOGGER.info("Create InterpreterProcess for InterpreterGroup: " + getId());
+        LOGGER.info("Create InterpreterProcess for InterpreterGroup: {}", getId());
         remoteInterpreterProcess = interpreterSetting.createInterpreterProcess(id, userName,
                 properties);
         remoteInterpreterProcess.start(userName);
@@ -86,8 +86,9 @@ public class ManagedInterpreterGroup extends InterpreterGroup {
   /**
    * Close all interpreter instances in this group
    */
+  @Override
   public void close() {
-    LOGGER.info("Close InterpreterGroup: " + id);
+    LOGGER.info("Close InterpreterGroup: {}", id);
     for (String sessionId : sessions.keySet()) {
       close(sessionId);
     }
@@ -98,8 +99,7 @@ public class ManagedInterpreterGroup extends InterpreterGroup {
    * @param sessionId
    */
   public synchronized void close(String sessionId) {
-    LOGGER.info("Close Session: " + sessionId + " for interpreter setting: " +
-            interpreterSetting.getName());
+    LOGGER.info("Close Session: {} for interpreter setting: {}", sessionId, interpreterSetting.getName());
     close(sessions.remove(sessionId));
     //TODO(zjffdu) whether close InterpreterGroup if there's no session left in Zeppelin Server
     if (sessions.isEmpty() && interpreterSetting != null) {
@@ -151,18 +151,18 @@ public class ManagedInterpreterGroup extends InterpreterGroup {
         if (!job.isTerminated()) {
           job.abort();
           job.setStatus(Job.Status.ABORT);
-          LOGGER.info("Job " + job.getJobName() + " aborted ");
+          LOGGER.info("Job {} aborted ", job.getJobName());
         }
       }
     } else {
-      LOGGER.info("Keep job running while closing interpreter: " + interpreter.getClassName());
+      LOGGER.info("Keep job running while closing interpreter: {}", interpreter.getClassName());
     }
 
     try {
-      LOGGER.info("Trying to close interpreter " + interpreter.getClassName());
+      LOGGER.info("Trying to close interpreter {}", interpreter.getClassName());
       interpreter.close();
     } catch (InterpreterException e) {
-      LOGGER.warn("Fail to close interpreter " + interpreter.getClassName(), e);
+      LOGGER.warn("Fail to close interpreter {}", interpreter.getClassName(), e);
     }
 
     //TODO(zjffdu) move the close of schedule to Interpreter
diff --git a/zeppelin-zengine/src/main/java/org/apache/zeppelin/interpreter/RemoteInterpreterEventServer.java b/zeppelin-zengine/src/main/java/org/apache/zeppelin/interpreter/RemoteInterpreterEventServer.java
index b0be31a..f24e477 100644
--- a/zeppelin-zengine/src/main/java/org/apache/zeppelin/interpreter/RemoteInterpreterEventServer.java
+++ b/zeppelin-zengine/src/main/java/org/apache/zeppelin/interpreter/RemoteInterpreterEventServer.java
@@ -57,6 +57,7 @@ import org.slf4j.LoggerFactory;
 
 import java.io.IOException;
 import java.nio.ByteBuffer;
+import java.util.Collections;
 import java.util.LinkedList;
 import java.util.List;
 import java.util.Map;
@@ -262,10 +263,9 @@ public class RemoteInterpreterEventServer implements RemoteInterpreterEventServi
       listener.runParagraphs(event.getNoteId(), event.getParagraphIndices(),
           event.getParagraphIds(), event.getCurParagraphId());
       if (InterpreterContext.get() != null) {
-        LOGGER.info("complete runParagraphs." + InterpreterContext.get().getParagraphId() + " "
-          + event);
+        LOGGER.info("complete runParagraphs.{} {}", InterpreterContext.get().getParagraphId(), event);
       } else {
-        LOGGER.info("complete runParagraphs." + event);
+        LOGGER.info("complete runParagraphs.{}", event);
       }
     } catch (IOException e) {
       throw new TException(e);
@@ -274,12 +274,12 @@ public class RemoteInterpreterEventServer implements RemoteInterpreterEventServi
 
   @Override
   public void addAngularObject(String intpGroupId, String json) throws TException {
-    LOGGER.debug("Add AngularObject, interpreterGroupId: " + intpGroupId + ", json: " + json);
-    AngularObject angularObject = AngularObject.fromJson(json);
+    LOGGER.debug("Add AngularObject, interpreterGroupId: {}, json: {}", intpGroupId, json);
+    AngularObject<?> angularObject = AngularObject.fromJson(json);
     InterpreterGroup interpreterGroup =
         interpreterSettingManager.getInterpreterGroupById(intpGroupId);
     if (interpreterGroup == null) {
-      LOGGER.warn("Invalid InterpreterGroupId: " + intpGroupId);
+      LOGGER.warn("Invalid InterpreterGroupId: {}", intpGroupId);
       return;
     }
     interpreterGroup.getAngularObjectRegistry().add(angularObject.getName(),
@@ -300,7 +300,7 @@ public class RemoteInterpreterEventServer implements RemoteInterpreterEventServi
 
   @Override
   public void updateAngularObject(String intpGroupId, String json) throws TException {
-    AngularObject angularObject = AngularObject.fromJson(json);
+    AngularObject<?> angularObject = AngularObject.fromJson(json);
     InterpreterGroup interpreterGroup =
         interpreterSettingManager.getInterpreterGroupById(intpGroupId);
     if (interpreterGroup == null) {
@@ -346,7 +346,7 @@ public class RemoteInterpreterEventServer implements RemoteInterpreterEventServi
         Note note = interpreterSettingManager.getNotebook().getNote(noteId);
         note.deleteAngularObject(intpGroupId, noteId, paragraphId, name);
       } catch (IOException e) {
-        LOGGER.warn("Fail to get note: " + noteId, e);
+        LOGGER.warn("Fail to get note: {}", noteId, e);
       }
     }
   }
@@ -425,8 +425,7 @@ public class RemoteInterpreterEventServer implements RemoteInterpreterEventServi
   @Override
   public List<ParagraphInfo> getParagraphList(String user, String noteId)
       throws TException, ServiceException {
-    LOGGER.info("get paragraph list from remote interpreter noteId: " + noteId
-        + ", user = " + user);
+    LOGGER.info("get paragraph list from remote interpreter noteId: {}, user = {}",noteId, user);
 
     if (user != null && noteId != null) {
       List<ParagraphInfo> paragraphInfos = null;
@@ -438,7 +437,7 @@ public class RemoteInterpreterEventServer implements RemoteInterpreterEventServi
       return paragraphInfos;
     } else {
       LOGGER.error("user or noteId is null!");
-      return null;
+      return Collections.emptyList();
     }
   }
 
@@ -508,8 +507,7 @@ public class RemoteInterpreterEventServer implements RemoteInterpreterEventServi
                 resourceId.getName()));
 
     try {
-      Object o = Resource.deserializeObject(buffer);
-      return o;
+      return Resource.deserializeObject(buffer);
     } catch (Exception e) {
       LOGGER.error(e.getMessage(), e);
     }
diff --git a/zeppelin-zengine/src/main/java/org/apache/zeppelin/interpreter/SessionConfInterpreter.java b/zeppelin-zengine/src/main/java/org/apache/zeppelin/interpreter/SessionConfInterpreter.java
index a5f580f..514ecdd 100644
--- a/zeppelin-zengine/src/main/java/org/apache/zeppelin/interpreter/SessionConfInterpreter.java
+++ b/zeppelin-zengine/src/main/java/org/apache/zeppelin/interpreter/SessionConfInterpreter.java
@@ -47,7 +47,7 @@ public class SessionConfInterpreter extends ConfInterpreter {
       Properties updatedProperties = new Properties();
       updatedProperties.load(new StringReader(st));
       finalProperties.putAll(updatedProperties);
-      LOGGER.debug("Properties for Session: " + sessionId + ": " + finalProperties);
+      LOGGER.debug("Properties for Session: {}:{}", sessionId, finalProperties);
 
       List<Interpreter> interpreters =
           interpreterSetting.getInterpreterGroup(interpreterGroupId).get(sessionId);
diff --git a/zeppelin-zengine/src/main/java/org/apache/zeppelin/interpreter/YarnAppMonitor.java b/zeppelin-zengine/src/main/java/org/apache/zeppelin/interpreter/YarnAppMonitor.java
index 8f4980b..d84092b 100644
--- a/zeppelin-zengine/src/main/java/org/apache/zeppelin/interpreter/YarnAppMonitor.java
+++ b/zeppelin-zengine/src/main/java/org/apache/zeppelin/interpreter/YarnAppMonitor.java
@@ -28,7 +28,6 @@ import org.apache.zeppelin.scheduler.SchedulerThreadFactory;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import java.util.HashMap;
 import java.util.Iterator;
 import java.util.Map;
 import java.util.concurrent.ConcurrentHashMap;
@@ -82,11 +81,11 @@ public class YarnAppMonitor {
                       String yarnDiagnostics = appReport.getDiagnostics();
                       interpreterManagedProcess.processStopped("Yarn diagnostics: " + yarnDiagnostics);
                       iter.remove();
-                      LOGGER.info("Remove " + appId + " from YarnAppMonitor, because its state is " +
+                      LOGGER.info("Remove {} from YarnAppMonitor, because its state is {}", appId ,
                               appReport.getYarnApplicationState());
                     } else if (appReport.getYarnApplicationState() == YarnApplicationState.FINISHED) {
                       iter.remove();
-                      LOGGER.info("Remove " + appId + " from YarnAppMonitor, because its state is " +
+                      LOGGER.info("Remove {} from YarnAppMonitor, because its state is ", appId,
                               appReport.getYarnApplicationState());
                     }
                   }
@@ -105,7 +104,7 @@ public class YarnAppMonitor {
   }
 
   public void addYarnApp(ApplicationId appId, RemoteInterpreterManagedProcess interpreterManagedProcess) {
-    LOGGER.info("Add " + appId + " to YarnAppMonitor");
+    LOGGER.info("Add {} to YarnAppMonitor", appId);
     this.apps.put(appId, interpreterManagedProcess);
   }
 }
diff --git a/zeppelin-zengine/src/main/java/org/apache/zeppelin/interpreter/install/InstallInterpreter.java b/zeppelin-zengine/src/main/java/org/apache/zeppelin/interpreter/install/InstallInterpreter.java
index 13ecb3f..d9e902b 100644
--- a/zeppelin-zengine/src/main/java/org/apache/zeppelin/interpreter/install/InstallInterpreter.java
+++ b/zeppelin-zengine/src/main/java/org/apache/zeppelin/interpreter/install/InstallInterpreter.java
@@ -28,6 +28,7 @@ import org.eclipse.aether.RepositoryException;
 import java.io.File;
 import java.io.IOException;
 import java.net.URL;
+import java.nio.charset.StandardCharsets;
 import java.util.LinkedList;
 import java.util.List;
 import java.util.Locale;
@@ -82,7 +83,7 @@ public class InstallInterpreter {
       System.err.println("Can't find interpreter list " + interpreterListFile.getAbsolutePath());
       return;
     }
-    String text = FileUtils.readFileToString(interpreterListFile);
+    String text = FileUtils.readFileToString(interpreterListFile, StandardCharsets.UTF_8);
     String[] lines = text.split("\n");
 
     Pattern pattern = Pattern.compile("(\\S+)\\s+(\\S+)\\s+(.*)");
diff --git a/zeppelin-zengine/src/main/java/org/apache/zeppelin/interpreter/launcher/SparkInterpreterLauncher.java b/zeppelin-zengine/src/main/java/org/apache/zeppelin/interpreter/launcher/SparkInterpreterLauncher.java
index e25e7da..526e22a 100644
--- a/zeppelin-zengine/src/main/java/org/apache/zeppelin/interpreter/launcher/SparkInterpreterLauncher.java
+++ b/zeppelin-zengine/src/main/java/org/apache/zeppelin/interpreter/launcher/SparkInterpreterLauncher.java
@@ -22,6 +22,8 @@ import java.io.FilenameFilter;
 import java.io.IOException;
 import java.net.URL;
 import java.net.URLClassLoader;
+import java.nio.charset.StandardCharsets;
+import java.nio.file.DirectoryStream;
 import java.nio.file.Files;
 import java.nio.file.Path;
 import java.nio.file.Paths;
@@ -110,16 +112,16 @@ public class SparkInterpreterLauncher extends StandardInterpreterLauncher {
     if (isYarnMode()
         && getDeployMode().equals("cluster")) {
       try {
-        List<String> additionalJars = new ArrayList();
+        List<String> additionalJars = new ArrayList<>();
         Path localRepoPath =
                 Paths.get(zConf.getInterpreterLocalRepoPath(), context.getInterpreterSettingId());
         if (Files.exists(localRepoPath) && Files.isDirectory(localRepoPath)) {
-          List<String> localRepoJars = StreamSupport.stream(
-                  Files.newDirectoryStream(localRepoPath, entry -> Files.isRegularFile(entry))
-                          .spliterator(),
+          try (DirectoryStream<Path> localRepoStream = Files.newDirectoryStream(localRepoPath, Files::isRegularFile)) {
+            List<String> localRepoJars = StreamSupport.stream(localRepoStream.spliterator(),
                   false)
                   .map(jar -> jar.toAbsolutePath().toString()).collect(Collectors.toList());
-          additionalJars.addAll(localRepoJars);
+            additionalJars.addAll(localRepoJars);
+          }
         }
 
         String scalaVersion = detectSparkScalaVersion(properties.getProperty("SPARK_HOME"));
@@ -127,30 +129,29 @@ public class SparkInterpreterLauncher extends StandardInterpreterLauncher {
         if (!scalaFolder.toFile().exists()) {
           throw new IOException("spark scala folder " + scalaFolder.toFile() + " doesn't exist");
         }
-        List<String> scalaJars = StreamSupport.stream(
-                Files.newDirectoryStream(scalaFolder, entry -> Files.isRegularFile(entry))
-                        .spliterator(),
+        try (DirectoryStream<Path> scalaStream = Files.newDirectoryStream(scalaFolder, Files::isRegularFile)) {
+          List<String> scalaJars = StreamSupport.stream(scalaStream.spliterator(),
                 false)
                 .map(jar -> jar.toAbsolutePath().toString()).collect(Collectors.toList());
-        additionalJars.addAll(scalaJars);
-
+          additionalJars.addAll(scalaJars);
+        }
         // add zeppelin-interpreter-shaded
         Path interpreterFolder = Paths.get(zConf.getZeppelinHome(), "/interpreter");
-        List<String> interpreterJars = StreamSupport.stream(
-                Files.newDirectoryStream(interpreterFolder, entry -> Files.isRegularFile(entry))
-                        .spliterator(),
+        try (DirectoryStream<Path> interpreterStream = Files.newDirectoryStream(interpreterFolder, Files::isRegularFile)) {
+          List<String> interpreterJars = StreamSupport.stream(interpreterStream.spliterator(),
                 false)
                 .filter(jar -> jar.toFile().getName().startsWith("zeppelin-interpreter-shaded")
                         && jar.toFile().getName().endsWith(".jar"))
                 .map(jar -> jar.toAbsolutePath().toString())
                 .collect(Collectors.toList());
-        if (interpreterJars.isEmpty()) {
-          throw new IOException("zeppelin-interpreter-shaded jar is not found");
-        } else if (interpreterJars.size() > 1) {
-          throw new IOException("more than 1 zeppelin-interpreter-shaded jars are found: "
-                  + StringUtils.join(interpreterJars, ","));
+          if (interpreterJars.isEmpty()) {
+            throw new IOException("zeppelin-interpreter-shaded jar is not found");
+          } else if (interpreterJars.size() > 1) {
+            throw new IOException("more than 1 zeppelin-interpreter-shaded jars are found: "
+                    + StringUtils.join(interpreterJars, ","));
+          }
+          additionalJars.addAll(interpreterJars);
         }
-        additionalJars.addAll(interpreterJars);
 
         if (sparkProperties.containsKey("spark.jars")) {
           sparkProperties.put("spark.jars", sparkProperties.getProperty("spark.jars") + "," +
@@ -195,8 +196,7 @@ public class SparkInterpreterLauncher extends StandardInterpreterLauncher {
     if (!StringUtils.isBlank(keytab) && !StringUtils.isBlank(principal)) {
       env.put("ZEPPELIN_SERVER_KERBEROS_KEYTAB", keytab);
       env.put("ZEPPELIN_SERVER_KERBEROS_PRINCIPAL", principal);
-      LOGGER.info("Run Spark under secure mode with keytab: " + keytab +
-          ", principal: " + principal);
+      LOGGER.info("Run Spark under secure mode with keytab: {}, principal: {}",keytab, principal);
     } else {
       LOGGER.info("Run Spark under non-secure mode as no keytab and principal is specified");
     }
@@ -232,7 +232,7 @@ public class SparkInterpreterLauncher extends StandardInterpreterLauncher {
     builder.redirectError(processOutputFile);
     Process process = builder.start();
     process.waitFor();
-    String processOutput = IOUtils.toString(new FileInputStream(processOutputFile));
+    String processOutput = IOUtils.toString(new FileInputStream(processOutputFile), StandardCharsets.UTF_8);
     Pattern pattern = Pattern.compile(".*Using Scala version (.*),.*");
     Matcher matcher = pattern.matcher(processOutput);
     if (matcher.find()) {
@@ -267,8 +267,7 @@ public class SparkInterpreterLauncher extends StandardInterpreterLauncher {
       if (sparkAssemblyJars.length > 1) {
         throw new Exception("Multiple spark assembly file found in SPARK_HOME: " + sparkHome);
       }
-      URLClassLoader urlClassLoader = new URLClassLoader(new URL[]{sparkAssemblyJars[0].toURI().toURL()});
-      try {
+      try (URLClassLoader urlClassLoader = new URLClassLoader(new URL[]{sparkAssemblyJars[0].toURI().toURL()});){
         urlClassLoader.loadClass("org.apache.spark.repl.SparkCommandLine");
         return "2.10";
       } catch (ClassNotFoundException e) {
diff --git a/zeppelin-zengine/src/main/java/org/apache/zeppelin/interpreter/launcher/StandardInterpreterLauncher.java b/zeppelin-zengine/src/main/java/org/apache/zeppelin/interpreter/launcher/StandardInterpreterLauncher.java
index aff3840..d52276d 100644
--- a/zeppelin-zengine/src/main/java/org/apache/zeppelin/interpreter/launcher/StandardInterpreterLauncher.java
+++ b/zeppelin-zengine/src/main/java/org/apache/zeppelin/interpreter/launcher/StandardInterpreterLauncher.java
@@ -46,7 +46,7 @@ public class StandardInterpreterLauncher extends InterpreterLauncher {
 
   @Override
   public InterpreterClient launchDirectly(InterpreterLaunchContext context) throws IOException {
-    LOGGER.info("Launching new interpreter process of " + context.getInterpreterSettingGroup());
+    LOGGER.info("Launching new interpreter process of {}", context.getInterpreterSettingGroup());
     this.properties = context.getProperties();
     InterpreterOption option = context.getOption();
     InterpreterRunner runner = context.getRunner();
@@ -81,7 +81,7 @@ public class StandardInterpreterLauncher extends InterpreterLauncher {
 
   public Map<String, String> buildEnvFromProperties(InterpreterLaunchContext context) throws IOException {
     Map<String, String> env = EnvironmentUtils.getProcEnvironment();
-    for (Map.Entry entry : context.getProperties().entrySet()) {
+    for (Map.Entry<Object,Object> entry : context.getProperties().entrySet()) {
       String key = (String) entry.getKey();
       String value = (String) entry.getValue();
       if (RemoteInterpreterUtils.isEnvString(key) && !StringUtils.isBlank(value)) {
diff --git a/zeppelin-zengine/src/main/java/org/apache/zeppelin/interpreter/recovery/StopInterpreter.java b/zeppelin-zengine/src/main/java/org/apache/zeppelin/interpreter/recovery/StopInterpreter.java
index 2eb0b04..2659e53 100644
--- a/zeppelin-zengine/src/main/java/org/apache/zeppelin/interpreter/recovery/StopInterpreter.java
+++ b/zeppelin-zengine/src/main/java/org/apache/zeppelin/interpreter/recovery/StopInterpreter.java
@@ -18,7 +18,7 @@ import java.util.Map;
  */
 public class StopInterpreter {
 
-  private static Logger LOGGER = LoggerFactory.getLogger(StopInterpreter.class);
+  private static final Logger LOGGER = LoggerFactory.getLogger(StopInterpreter.class);
 
   public static void main(String[] args) throws IOException {
     ZeppelinConfiguration zConf = ZeppelinConfiguration.create();
@@ -29,11 +29,11 @@ public class StopInterpreter {
         new Class[] {ZeppelinConfiguration.class, InterpreterSettingManager.class},
         new Object[] {zConf, interpreterSettingManager});
 
-    LOGGER.info("Using RecoveryStorage: " + recoveryStorage.getClass().getName());
+    LOGGER.info("Using RecoveryStorage: {}", recoveryStorage.getClass().getName());
     Map<String, InterpreterClient> restoredClients = recoveryStorage.restore();
     if (restoredClients != null) {
       for (InterpreterClient client : restoredClients.values()) {
-        LOGGER.info("Stop Interpreter Process: " + client.getHost() + ":" + client.getPort());
+        LOGGER.info("Stop Interpreter Process: {}:{}", client.getHost(), client.getPort());
         client.stop();
       }
     }
diff --git a/zeppelin-zengine/src/main/java/org/apache/zeppelin/interpreter/remote/AppendOutputRunner.java b/zeppelin-zengine/src/main/java/org/apache/zeppelin/interpreter/remote/AppendOutputRunner.java
index 2a88dc2..6877411 100644
--- a/zeppelin-zengine/src/main/java/org/apache/zeppelin/interpreter/remote/AppendOutputRunner.java
+++ b/zeppelin-zengine/src/main/java/org/apache/zeppelin/interpreter/remote/AppendOutputRunner.java
@@ -24,6 +24,7 @@ import java.util.HashMap;
 import java.util.LinkedList;
 import java.util.List;
 import java.util.Map;
+import java.util.Map.Entry;
 import java.util.concurrent.BlockingQueue;
 import java.util.concurrent.LinkedBlockingQueue;
 
@@ -35,7 +36,7 @@ import java.util.concurrent.LinkedBlockingQueue;
  */
 public class AppendOutputRunner implements Runnable {
 
-  private static final Logger logger =
+  private static final Logger LOGGER =
       LoggerFactory.getLogger(AppendOutputRunner.class);
   public static final Long BUFFER_TIME_MS = new Long(100);
   private static final Long SAFE_PROCESSING_TIME = new Long(10);
@@ -65,7 +66,7 @@ public class AppendOutputRunner implements Runnable {
     try {
       list.add(queue.take());
     } catch (InterruptedException e) {
-      logger.error("Wait for OutputBuffer queue interrupted: " + e.getMessage());
+      LOGGER.error("Wait for OutputBuffer queue interrupted: {}", e.getMessage());
     }
     Long processingStartTime = System.currentTimeMillis();
     queue.drainTo(list);
@@ -85,27 +86,24 @@ public class AppendOutputRunner implements Runnable {
     Long processingTime = System.currentTimeMillis() - processingStartTime;
 
     if (processingTime > SAFE_PROCESSING_TIME) {
-      logger.warn("Processing time for buffered append-output is high: " +
-          processingTime + " milliseconds.");
+      LOGGER.warn("Processing time for buffered append-output is high: {} milliseconds.", processingTime);
     } else {
-      logger.debug("Processing time for append-output took "
-          + processingTime + " milliseconds");
+      LOGGER.debug("Processing time for append-output took {} milliseconds", processingTime);
     }
 
     Long sizeProcessed = new Long(0);
-    for (String stringBufferKey : stringBufferMap.keySet()) {
-      StringBuilder buffer = stringBufferMap.get(stringBufferKey);
+    for (Entry<String, StringBuilder> stringBufferMapEntry : stringBufferMap.entrySet()) {
+      String stringBufferKey = stringBufferMapEntry.getKey();
+      StringBuilder buffer = stringBufferMapEntry.getValue();
       sizeProcessed += buffer.length();
       String[] keys = stringBufferKey.split(":");
       listener.onOutputAppend(keys[0], keys[1], Integer.parseInt(keys[2]), buffer.toString());
     }
 
     if (sizeProcessed > SAFE_PROCESSING_STRING_SIZE) {
-      logger.warn("Processing size for buffered append-output is high: " +
-          sizeProcessed + " characters.");
+      LOGGER.warn("Processing size for buffered append-output is high: {} characters.", sizeProcessed);
     } else {
-      logger.debug("Processing size for append-output is " +
-          sizeProcessed + " characters");
+      LOGGER.debug("Processing size for append-output is {} characters", sizeProcessed);
     }
   }
 
diff --git a/zeppelin-zengine/src/main/java/org/apache/zeppelin/interpreter/remote/RemoteAngularObjectRegistry.java b/zeppelin-zengine/src/main/java/org/apache/zeppelin/interpreter/remote/RemoteAngularObjectRegistry.java
index 58d544e..f4f77f4 100644
--- a/zeppelin-zengine/src/main/java/org/apache/zeppelin/interpreter/remote/RemoteAngularObjectRegistry.java
+++ b/zeppelin-zengine/src/main/java/org/apache/zeppelin/interpreter/remote/RemoteAngularObjectRegistry.java
@@ -22,16 +22,12 @@ import org.apache.zeppelin.display.AngularObject;
 import org.apache.zeppelin.display.AngularObjectRegistry;
 import org.apache.zeppelin.display.AngularObjectRegistryListener;
 import org.apache.zeppelin.interpreter.ManagedInterpreterGroup;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
 import java.util.List;
 
 /**
  * Proxy for AngularObjectRegistry that exists in remote interpreter process
  */
 public class RemoteAngularObjectRegistry extends AngularObjectRegistry {
-  private static final Logger LOGGER = LoggerFactory.getLogger(RemoteAngularObjectRegistry.class);
   private static final Gson GSON = new Gson();
 
   private ManagedInterpreterGroup interpreterGroup;
@@ -96,7 +92,7 @@ public class RemoteAngularObjectRegistry extends AngularObjectRegistry {
 
     return super.remove(name, noteId, paragraphId);
   }
-  
+
   public void removeAllAndNotifyRemoteProcess(String noteId, String paragraphId) {
     List<AngularObject> all = getAll(noteId, paragraphId);
     for (AngularObject ao : all) {
diff --git a/zeppelin-zengine/src/main/java/org/apache/zeppelin/interpreter/remote/RemoteInterpreter.java b/zeppelin-zengine/src/main/java/org/apache/zeppelin/interpreter/remote/RemoteInterpreter.java
index 754c4ae..a26360f 100644
--- a/zeppelin-zengine/src/main/java/org/apache/zeppelin/interpreter/remote/RemoteInterpreter.java
+++ b/zeppelin-zengine/src/main/java/org/apache/zeppelin/interpreter/remote/RemoteInterpreter.java
@@ -105,6 +105,7 @@ public class RemoteInterpreter extends Interpreter {
     return interpreterProcess;
   }
 
+  @Override
   public ManagedInterpreterGroup getInterpreterGroup() {
     return (ManagedInterpreterGroup) super.getInterpreterGroup();
   }
@@ -182,7 +183,7 @@ public class RemoteInterpreter extends Interpreter {
       });
       isOpened = false;
     } else {
-      LOGGER.warn("close is called when RemoterInterpreter is not opened for " + className);
+      LOGGER.warn("close is called when RemoterInterpreter is not opened for {}", className);
     }
   }
 
@@ -234,8 +235,7 @@ public class RemoteInterpreter extends Interpreter {
             currentParams.putAll(remoteParams);
           }
 
-          InterpreterResult result = convert(remoteResult);
-          return result;
+          return convert(remoteResult);
         }
     );
 
@@ -244,7 +244,7 @@ public class RemoteInterpreter extends Interpreter {
   @Override
   public void cancel(final InterpreterContext context) throws InterpreterException {
     if (!isOpened) {
-      LOGGER.warn("Cancel is called when RemoterInterpreter is not opened for " + className);
+      LOGGER.warn("Cancel is called when RemoterInterpreter is not opened for {}", className);
       return;
     }
     RemoteInterpreterProcess interpreterProcess = null;
@@ -278,18 +278,17 @@ public class RemoteInterpreter extends Interpreter {
       throw new InterpreterException(e);
     }
 
-    FormType type = interpreterProcess.callRemoteFunction(client -> {
+    return interpreterProcess.callRemoteFunction(client -> {
           formType = FormType.valueOf(client.getFormType(sessionId, className));
           return formType;
     });
-    return type;
   }
 
 
   @Override
   public int getProgress(final InterpreterContext context) throws InterpreterException {
     if (!isOpened) {
-      LOGGER.warn("getProgress is called when RemoterInterpreter is not opened for " + className);
+      LOGGER.warn("getProgress is called when RemoterInterpreter is not opened for {}", className);
       return 0;
     }
     RemoteInterpreterProcess interpreterProcess = null;
@@ -322,7 +321,7 @@ public class RemoteInterpreter extends Interpreter {
 
   public String getStatus(final String jobId) {
     if (!isOpened) {
-      LOGGER.warn("getStatus is called when RemoteInterpreter is not opened for " + className);
+      LOGGER.warn("getStatus is called when RemoteInterpreter is not opened for {}", className);
       return Job.Status.UNKNOWN.name();
     }
     RemoteInterpreterProcess interpreterProcess = null;
diff --git a/zeppelin-zengine/src/main/java/org/apache/zeppelin/interpreter/remote/RemoteInterpreterManagedProcess.java b/zeppelin-zengine/src/main/java/org/apache/zeppelin/interpreter/remote/RemoteInterpreterManagedProcess.java
index e9af2e1..2436000 100644
--- a/zeppelin-zengine/src/main/java/org/apache/zeppelin/interpreter/remote/RemoteInterpreterManagedProcess.java
+++ b/zeppelin-zengine/src/main/java/org/apache/zeppelin/interpreter/remote/RemoteInterpreterManagedProcess.java
@@ -129,12 +129,13 @@ public class RemoteInterpreterManagedProcess extends RemoteInterpreterProcess {
       Matcher m = YARN_APP_PATTER.matcher(launchOutput);
       if (m.find()) {
         String appId = m.group(1);
-        LOGGER.info("Detected yarn app: " + appId + ", add it to YarnAppMonitor");
+        LOGGER.info("Detected yarn app: {}, add it to YarnAppMonitor", appId);
         YarnAppMonitor.get().addYarnApp(ConverterUtils.toApplicationId(appId), this);
       }
     }
   }
 
+  @Override
   public void stop() {
     if (isRunning()) {
       LOGGER.info("Kill interpreter process for interpreter group: {}", getInterpreterGroupId());
@@ -184,6 +185,7 @@ public class RemoteInterpreterManagedProcess extends RemoteInterpreterProcess {
     return interpreterDir;
   }
 
+  @Override
   public String getInterpreterSettingName() {
     return interpreterSettingName;
   }
@@ -203,6 +205,7 @@ public class RemoteInterpreterManagedProcess extends RemoteInterpreterProcess {
     return isUserImpersonated;
   }
 
+  @Override
   public boolean isRunning() {
     return interpreterProcessLauncher != null && interpreterProcessLauncher.isRunning()
             && errorMessage == null;
diff --git a/zeppelin-zengine/src/main/java/org/apache/zeppelin/interpreter/remote/RemoteInterpreterProcess.java b/zeppelin-zengine/src/main/java/org/apache/zeppelin/interpreter/remote/RemoteInterpreterProcess.java
index 9d5897e..19088f2 100644
--- a/zeppelin-zengine/src/main/java/org/apache/zeppelin/interpreter/remote/RemoteInterpreterProcess.java
+++ b/zeppelin-zengine/src/main/java/org/apache/zeppelin/interpreter/remote/RemoteInterpreterProcess.java
@@ -37,8 +37,6 @@ import java.util.Date;
 public abstract class RemoteInterpreterProcess implements InterpreterClient {
   private static final Logger LOGGER = LoggerFactory.getLogger(RemoteInterpreterProcess.class);
   private static final Gson GSON = new Gson();
-  private static final SimpleDateFormat START_TIME_FORMATTER =
-          new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
 
   private int connectTimeout;
   protected String intpEventServerHost;
@@ -53,8 +51,8 @@ public abstract class RemoteInterpreterProcess implements InterpreterClient {
     this.connectTimeout = connectTimeout;
     this.intpEventServerHost = intpEventServerHost;
     this.intpEventServerPort = intpEventServerPort;
-    this.startTime = START_TIME_FORMATTER.format(new Date());
-    this.remoteClient = new PooledRemoteClient<Client>(() -> {
+    this.startTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date());
+    this.remoteClient = new PooledRemoteClient<>(() -> {
       TSocket transport = new TSocket(getHost(), getPort());
       try {
         transport.open();
@@ -90,7 +88,7 @@ public abstract class RemoteInterpreterProcess implements InterpreterClient {
                                         String noteId,
                                         String paragraphId,
                                         Object o) {
-    remoteClient.callRemoteFunction((PooledRemoteClient.RemoteFunction<Void, Client>) client -> {
+    remoteClient.callRemoteFunction(client -> {
        client.angularObjectUpdate(name, noteId, paragraphId, GSON.toJson(o));
        return null;
     });
diff --git a/zeppelin-zengine/src/main/java/org/apache/zeppelin/interpreter/remote/RemoteInterpreterRunningProcess.java b/zeppelin-zengine/src/main/java/org/apache/zeppelin/interpreter/remote/RemoteInterpreterRunningProcess.java
index c956323..85ed68f 100644
--- a/zeppelin-zengine/src/main/java/org/apache/zeppelin/interpreter/remote/RemoteInterpreterRunningProcess.java
+++ b/zeppelin-zengine/src/main/java/org/apache/zeppelin/interpreter/remote/RemoteInterpreterRunningProcess.java
@@ -16,7 +16,6 @@
  */
 package org.apache.zeppelin.interpreter.remote;
 
-import org.apache.zeppelin.interpreter.thrift.RemoteInterpreterService;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
diff --git a/zeppelin-zengine/src/main/java/org/apache/zeppelin/notebook/ApplicationState.java b/zeppelin-zengine/src/main/java/org/apache/zeppelin/notebook/ApplicationState.java
index bc71d89..6969c5b 100644
--- a/zeppelin-zengine/src/main/java/org/apache/zeppelin/notebook/ApplicationState.java
+++ b/zeppelin-zengine/src/main/java/org/apache/zeppelin/notebook/ApplicationState.java
@@ -26,13 +26,13 @@ public class ApplicationState {
   /**
    * Status of Application
    */
-  public static enum Status {
+  public enum Status {
     LOADING,
     LOADED,
     UNLOADING,
     UNLOADED,
     ERROR
-  };
+  }
 
   Status status = Status.UNLOADED;
 
@@ -59,11 +59,10 @@ public class ApplicationState {
 
   @Override
   public boolean equals(Object o) {
-    String compareName;
     if (o instanceof ApplicationState) {
       return pkg.equals(((ApplicationState) o).getHeliumPackage());
     } else if (o instanceof HeliumPackage) {
-      return pkg.equals((HeliumPackage) o);
+      return pkg.equals(o);
     } else {
       return false;
     }
diff --git a/zeppelin-zengine/src/main/java/org/apache/zeppelin/notebook/AuthorizationService.java b/zeppelin-zengine/src/main/java/org/apache/zeppelin/notebook/AuthorizationService.java
index 8272c6d..93797a7 100644
--- a/zeppelin-zengine/src/main/java/org/apache/zeppelin/notebook/AuthorizationService.java
+++ b/zeppelin-zengine/src/main/java/org/apache/zeppelin/notebook/AuthorizationService.java
@@ -223,7 +223,7 @@ public class AuthorizationService implements ClusterEventListener {
   public Set<String> getOwners(String noteId) {
     NoteAuth noteAuth = notesAuth.get(noteId);
     if (noteAuth == null) {
-      LOGGER.warn("No noteAuth found for noteId: " + noteId);
+      LOGGER.warn("No noteAuth found for noteId: {}", noteId);
       return EMPTY_SET;
     }
     return noteAuth.getOwners();
@@ -232,7 +232,7 @@ public class AuthorizationService implements ClusterEventListener {
   public Set<String> getReaders(String noteId) {
     NoteAuth noteAuth = notesAuth.get(noteId);
     if (noteAuth == null) {
-      LOGGER.warn("No noteAuth found for noteId: " + noteId);
+      LOGGER.warn("No noteAuth found for noteId: {}", noteId);
       return EMPTY_SET;
     }
     return noteAuth.getReaders();
@@ -241,7 +241,7 @@ public class AuthorizationService implements ClusterEventListener {
   public Set<String> getRunners(String noteId) {
     NoteAuth noteAuth = notesAuth.get(noteId);
     if (noteAuth == null) {
-      LOGGER.warn("No noteAuth found for noteId: " + noteId);
+      LOGGER.warn("No noteAuth found for noteId: {}", noteId);
       return EMPTY_SET;
     }
     return noteAuth.getRunners();
@@ -250,7 +250,7 @@ public class AuthorizationService implements ClusterEventListener {
   public Set<String> getWriters(String noteId) {
     NoteAuth noteAuth = notesAuth.get(noteId);
     if (noteAuth == null) {
-      LOGGER.warn("No noteAuth found for noteId: " + noteId);
+      LOGGER.warn("No noteAuth found for noteId: {}", noteId);
       return EMPTY_SET;
     }
     return noteAuth.getWriters();
diff --git a/zeppelin-zengine/src/main/java/org/apache/zeppelin/notebook/FileSystemStorage.java b/zeppelin-zengine/src/main/java/org/apache/zeppelin/notebook/FileSystemStorage.java
index 40e7113..00446c3 100644
--- a/zeppelin-zengine/src/main/java/org/apache/zeppelin/notebook/FileSystemStorage.java
+++ b/zeppelin-zengine/src/main/java/org/apache/zeppelin/notebook/FileSystemStorage.java
@@ -15,7 +15,6 @@ import org.slf4j.LoggerFactory;
 
 import java.io.ByteArrayInputStream;
 import java.io.ByteArrayOutputStream;
-import java.io.FilePermission;
 import java.io.IOException;
 import java.io.InputStream;
 import java.net.URI;
@@ -33,7 +32,7 @@ import java.util.Set;
  */
 public class FileSystemStorage {
 
-  private static Logger LOGGER = LoggerFactory.getLogger(FileSystemStorage.class);
+  private static final Logger LOGGER = LoggerFactory.getLogger(FileSystemStorage.class);
   private static final String S3A = "s3a";
   private static final String FS_DEFAULTFS = "fs.defaultFS";
 
@@ -129,9 +128,9 @@ public class FileSystemStorage {
       public Void call() throws IOException {
         if (!fs.exists(dir)) {
           fs.mkdirs(dir);
-          LOGGER.info("Create dir {} in hdfs", dir.toString());
+          LOGGER.info("Create dir {} in hdfs", dir);
         }
-        if (fs.isFile(dir)) {
+        if (fs.getFileStatus(dir).isFile()) {
           throw new IOException(dir.toString() + " is file instead of directory, please remove " +
               "it or specify another directory");
         }
@@ -174,7 +173,7 @@ public class FileSystemStorage {
             if (path.getPath().getName().endsWith(".zpln")) {
               noteFiles.add(path.getPath());
             } else {
-              LOGGER.warn("Unknown file: " + path.getPath());
+              LOGGER.warn("Unknown file: {}", path.getPath());
             }
           }
         }
@@ -195,11 +194,10 @@ public class FileSystemStorage {
     return callHdfsOperation(new HdfsOperation<String>() {
       @Override
       public String call() throws IOException {
-        LOGGER.debug("Read from file: " + file);
+        LOGGER.debug("Read from file: {}", file);
         ByteArrayOutputStream noteBytes = new ByteArrayOutputStream();
         IOUtils.copyBytes(fs.open(file), noteBytes, hadoopConf);
-        return new String(noteBytes.toString(
-            zConf.getString(ZeppelinConfiguration.ConfVars.ZEPPELIN_ENCODING)));
+        return noteBytes.toString(zConf.getString(ZeppelinConfiguration.ConfVars.ZEPPELIN_ENCODING));
       }
     });
   }
diff --git a/zeppelin-zengine/src/main/java/org/apache/zeppelin/notebook/Note.java b/zeppelin-zengine/src/main/java/org/apache/zeppelin/notebook/Note.java
index 2a87da6..08bad00 100644
--- a/zeppelin-zengine/src/main/java/org/apache/zeppelin/notebook/Note.java
+++ b/zeppelin-zengine/src/main/java/org/apache/zeppelin/notebook/Note.java
@@ -221,8 +221,8 @@ public class Note implements JsonSerializable {
   }
 
   public void setPersonalizedMode(Boolean value) {
-    String valueString = StringUtils.EMPTY;
-    if (value) {
+    String valueString;
+    if (value.booleanValue()) {
       valueString = "true";
     } else {
       valueString = "false";
@@ -381,7 +381,9 @@ public class Note implements JsonSerializable {
       // Delete existing AngularObject
       Iterator<AngularObject> iter = angularObjectList.iterator();
       while(iter.hasNext()){
-        String noteId = "", paragraphId = "", name = "";
+        String noteId = "";
+        String paragraphId = "";
+        String name = "";
         Object object = iter.next();
         if (object instanceof AngularObject) {
           AngularObject ao = (AngularObject)object;
@@ -412,9 +414,7 @@ public class Note implements JsonSerializable {
    */
   public void deleteAngularObject(String intpGroupId, String noteId, String paragraphId, String name) {
     List<AngularObject> angularObjectList;
-    if (!angularObjects.containsKey(intpGroupId)) {
-      return;
-    } else {
+    if (angularObjects.containsKey(intpGroupId)) {
       angularObjectList = angularObjects.get(intpGroupId);
 
       // Delete existing AngularObject
@@ -467,7 +467,7 @@ public class Note implements JsonSerializable {
     Map<String, Object> param = srcParagraph.settings.getParams();
     Map<String, Input> form = srcParagraph.settings.getForms();
 
-    LOGGER.debug("srcParagraph user: " + srcParagraph.getUser());
+    LOGGER.debug("srcParagraph user: {}", srcParagraph.getUser());
 
     newParagraph.setAuthenticationInfo(subject);
     newParagraph.setConfig(config);
@@ -476,7 +476,7 @@ public class Note implements JsonSerializable {
     newParagraph.setText(srcParagraph.getText());
     newParagraph.setTitle(srcParagraph.getTitle());
 
-    LOGGER.debug("newParagraph user: " + newParagraph.getUser());
+    LOGGER.debug("newParagraph user: {}", newParagraph.getUser());
 
     try {
       String resultJson = GSON.toJson(srcParagraph.getReturn());
@@ -484,8 +484,7 @@ public class Note implements JsonSerializable {
       newParagraph.setReturn(result, null);
     } catch (Exception e) {
       // 'result' part of Note consists of exception, instead of actual interpreter results
-      LOGGER.warn(
-          "Paragraph " + srcParagraph.getId() + " has a result with exception. " + e.getMessage());
+      LOGGER.warn("Paragraph {} has a result with exception. {}", srcParagraph.getId(), e.getMessage());
     }
 
     synchronized (paragraphs) {
@@ -720,7 +719,7 @@ public class Note implements JsonSerializable {
   }
 
   private void setParagraphMagic(Paragraph p, int index) {
-    if (paragraphs.size() > 0) {
+    if (!paragraphs.isEmpty()) {
       String replName;
       if (index == 0) {
         replName = paragraphs.get(0).getIntpText();
@@ -766,7 +765,7 @@ public class Note implements JsonSerializable {
         try {
           runAllSync(authInfo, isolated, params);
         } catch (Exception e) {
-          LOGGER.warn("Fail to run note: " + id, e);
+          LOGGER.warn("Fail to run note: {}", id, e);
         } finally {
           setRunning(false);
           setIsolatedMode(false);
@@ -929,7 +928,7 @@ public class Note implements JsonSerializable {
     angularObjects = new HashMap<>();
 
     List<InterpreterSetting> settings = getBindedInterpreterSettings(Lists.newArrayList(user));
-    if (settings == null || settings.size() == 0) {
+    if (settings == null || settings.isEmpty()) {
       return;
     }
 
@@ -1136,7 +1135,7 @@ public class Note implements JsonSerializable {
       note.postProcessParagraphs();
       return note;
     } catch (Exception e) {
-      LOGGER.error("Fail to parse note json: " + e.toString());
+      LOGGER.error("Fail to parse note json: {}", e.toString());
       throw new IOException("Fail to parse note json: " + json, e);
     }
   }
diff --git a/zeppelin-zengine/src/main/java/org/apache/zeppelin/notebook/NoteAuth.java b/zeppelin-zengine/src/main/java/org/apache/zeppelin/notebook/NoteAuth.java
index 7f6c84b..20e46e7 100644
--- a/zeppelin-zengine/src/main/java/org/apache/zeppelin/notebook/NoteAuth.java
+++ b/zeppelin-zengine/src/main/java/org/apache/zeppelin/notebook/NoteAuth.java
@@ -116,7 +116,7 @@ public class NoteAuth {
    */
   private Set<String> checkCaseAndConvert(Set<String> entities) {
     if (ZeppelinConfiguration.create().isUsernameForceLowerCase()) {
-      Set<String> set2 = new HashSet<String>();
+      Set<String> set2 = new HashSet<>();
       for (String name : entities) {
         set2.add(name.toLowerCase());
       }
diff --git a/zeppelin-zengine/src/main/java/org/apache/zeppelin/notebook/NoteManager.java b/zeppelin-zengine/src/main/java/org/apache/zeppelin/notebook/NoteManager.java
index 15ec674..80eb37d 100644
--- a/zeppelin-zengine/src/main/java/org/apache/zeppelin/notebook/NoteManager.java
+++ b/zeppelin-zengine/src/main/java/org/apache/zeppelin/notebook/NoteManager.java
@@ -30,9 +30,9 @@ import javax.inject.Singleton;
 import java.io.IOException;
 import java.util.ArrayList;
 import java.util.HashMap;
-import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
+import java.util.Objects;
 import java.util.stream.Collectors;
 import java.util.stream.Stream;
 
@@ -53,7 +53,7 @@ import java.util.stream.Stream;
 @Singleton
 public class NoteManager {
   private static final Logger LOGGER = LoggerFactory.getLogger(NoteManager.class);
-  public static String TRASH_FOLDER = "~Trash";
+  public static final String TRASH_FOLDER = "~Trash";
   private Folder root;
   private Folder trash;
 
@@ -72,7 +72,7 @@ public class NoteManager {
   // build the tree structure of notes
   private void init() throws IOException {
     this.notesInfo = notebookRepo.list(AuthenticationInfo.ANONYMOUS).values().stream()
-        .collect(Collectors.toMap(noteInfo -> noteInfo.getId(), notesInfo -> notesInfo.getPath()));
+        .collect(Collectors.toMap(NoteInfo::getId, NoteInfo::getPath));
     this.notesInfo.entrySet().stream()
         .forEach(entry ->
         {
@@ -99,11 +99,11 @@ public class NoteManager {
               try {
                 return getNoteNode(notePath).getNote();
               } catch (Exception e) {
-                LOGGER.warn("Fail to load note: " + notePath, e);
+                LOGGER.warn("Fail to load note: {}", notePath, e);
                 return null;
               }
             })
-            .filter(note -> note != null);
+            .filter(Objects::nonNull);
   }
 
   /**
@@ -490,12 +490,12 @@ public class NoteManager {
     }
 
     public List<NoteNode> getNoteNodeRecursively() {
-      List<NoteNode> notes = new ArrayList<>();
-      notes.addAll(this.notes.values());
+      List<NoteNode> noteNodeRecursively = new ArrayList<>();
+      noteNodeRecursively.addAll(this.notes.values());
       for (Folder folder : subFolders.values()) {
-        notes.addAll(folder.getNoteNodeRecursively());
+        noteNodeRecursively.addAll(folder.getNoteNodeRecursively());
       }
-      return notes;
+      return noteNodeRecursively;
     }
 
     public Map<String, NoteNode> getNotes() {
diff --git a/zeppelin-zengine/src/main/java/org/apache/zeppelin/notebook/Notebook.java b/zeppelin-zengine/src/main/java/org/apache/zeppelin/notebook/Notebook.java
index 12faca3..39dea80 100644
--- a/zeppelin-zengine/src/main/java/org/apache/zeppelin/notebook/Notebook.java
+++ b/zeppelin-zengine/src/main/java/org/apache/zeppelin/notebook/Notebook.java
@@ -26,6 +26,7 @@ import java.util.HashMap;
 import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
+import java.util.Map.Entry;
 import java.util.Set;
 import java.util.function.Function;
 import java.util.stream.Collectors;
@@ -135,14 +136,14 @@ public class Notebook {
             note.unLoad();
           }
         } catch (Exception e) {
-          LOGGER.warn("Fail to recovery note: " + note.getPath(), e);
+          LOGGER.warn("Fail to recovery note: {}", note.getPath(), e);
         }
       });
     });
     thread.setName("Recovering-Thread");
     thread.start();
     LOGGER.info("Start paragraph recovering thread");
-    
+
     try {
       thread.join();
     } catch (InterruptedException e) {
@@ -388,17 +389,17 @@ public class Notebook {
   }
 
   public void moveNote(String noteId, String newNotePath, AuthenticationInfo subject) throws IOException {
-    LOGGER.info("Move note " + noteId + " to " + newNotePath);
+    LOGGER.info("Move note {} to {}", noteId, newNotePath);
     noteManager.moveNote(noteId, newNotePath, subject);
   }
 
   public void moveFolder(String folderPath, String newFolderPath, AuthenticationInfo subject) throws IOException {
-    LOGGER.info("Move folder from " + folderPath + " to " + newFolderPath);
+    LOGGER.info("Move folder from {} to {}", folderPath, newFolderPath);
     noteManager.moveFolder(folderPath, newFolderPath, subject);
   }
 
   public void removeFolder(String folderPath, AuthenticationInfo subject) throws IOException {
-    LOGGER.info("Remove folder " + folderPath);
+    LOGGER.info("Remove folder {}", folderPath);
     // TODO(zjffdu) NotebookRepo.remove is called twice here
     List<Note> notes = noteManager.removeFolder(folderPath, subject);
     for (Note note : notes) {
@@ -477,7 +478,7 @@ public class Notebook {
     try {
       note = noteManager.getNote(id);
     } catch (IOException e) {
-      LOGGER.error("Fail to get note: " + id, e);
+      LOGGER.error("Fail to get note: {}", id, e);
       return null;
     }
     if (note == null) {
@@ -511,8 +512,9 @@ public class Notebook {
     Map<String, List<AngularObject>> savedObjects = note.getAngularObjects();
 
     if (savedObjects != null) {
-      for (String intpGroupName : savedObjects.keySet()) {
-        List<AngularObject> objectList = savedObjects.get(intpGroupName);
+      for (Entry<String, List<AngularObject>> intpGroupNameEntry : savedObjects.entrySet()) {
+        String intpGroupName = intpGroupNameEntry.getKey();
+        List<AngularObject> objectList = intpGroupNameEntry.getValue();
 
         for (AngularObject object : objectList) {
           SnapshotAngularObject snapshot = angularObjectSnapshot.get(object.getName());
@@ -526,8 +528,9 @@ public class Notebook {
 
     note.setNoteEventListeners(this.noteEventListeners);
 
-    for (String name : angularObjectSnapshot.keySet()) {
-      SnapshotAngularObject snapshot = angularObjectSnapshot.get(name);
+    for (Entry<String, SnapshotAngularObject> angularObjectSnapshotEntry : angularObjectSnapshot.entrySet()) {
+      String name = angularObjectSnapshotEntry.getKey();
+      SnapshotAngularObject snapshot = angularObjectSnapshotEntry.getValue();
       List<InterpreterSetting> settings = interpreterSettingManager.get();
       for (InterpreterSetting setting : settings) {
         InterpreterGroup intpGroup = setting.getInterpreterGroup(
diff --git a/zeppelin-zengine/src/main/java/org/apache/zeppelin/notebook/Paragraph.java b/zeppelin-zengine/src/main/java/org/apache/zeppelin/notebook/Paragraph.java
index 66535ff..d6f92a6 100644
--- a/zeppelin-zengine/src/main/java/org/apache/zeppelin/notebook/Paragraph.java
+++ b/zeppelin-zengine/src/main/java/org/apache/zeppelin/notebook/Paragraph.java
@@ -72,8 +72,8 @@ import com.google.common.collect.Maps;
 public class Paragraph extends JobWithProgressPoller<InterpreterResult> implements Cloneable,
     JsonSerializable {
 
-  private static Logger LOGGER = LoggerFactory.getLogger(Paragraph.class);
-  private static Pattern REPL_PATTERN =
+  private static final Logger LOGGER = LoggerFactory.getLogger(Paragraph.class);
+  private static final Pattern REPL_PATTERN =
       Pattern.compile("(\\s*)%([\\w\\.]+)(\\(.*?\\))?.*", Pattern.DOTALL);
 
   private String title;
diff --git a/zeppelin-zengine/src/main/java/org/apache/zeppelin/notebook/ParagraphTextParser.java b/zeppelin-zengine/src/main/java/org/apache/zeppelin/notebook/ParagraphTextParser.java
index 59c990e..e534c32 100644
--- a/zeppelin-zengine/src/main/java/org/apache/zeppelin/notebook/ParagraphTextParser.java
+++ b/zeppelin-zengine/src/main/java/org/apache/zeppelin/notebook/ParagraphTextParser.java
@@ -67,7 +67,7 @@ public class ParagraphTextParser {
     }
   }
 
-  private static Pattern REPL_PATTERN = Pattern.compile("^(\\s*)%(\\w+(?:\\.\\w+)*)");
+  private static final Pattern REPL_PATTERN = Pattern.compile("^(\\s*)%(\\w+(?:\\.\\w+)*)");
 
   private static int parseLocalProperties(
           final String text, int startPos,
diff --git a/zeppelin-zengine/src/main/java/org/apache/zeppelin/notebook/repo/NotebookRepoSync.java b/zeppelin-zengine/src/main/java/org/apache/zeppelin/notebook/repo/NotebookRepoSync.java
index 805a848..7aa5fa6 100644
--- a/zeppelin-zengine/src/main/java/org/apache/zeppelin/notebook/repo/NotebookRepoSync.java
+++ b/zeppelin-zengine/src/main/java/org/apache/zeppelin/notebook/repo/NotebookRepoSync.java
@@ -21,7 +21,6 @@ import com.google.common.collect.Lists;
 import org.apache.zeppelin.conf.ZeppelinConfiguration;
 import org.apache.zeppelin.conf.ZeppelinConfiguration.ConfVars;
 import org.apache.zeppelin.notebook.Note;
-import org.apache.zeppelin.notebook.NoteAuth;
 import org.apache.zeppelin.notebook.NoteInfo;
 import org.apache.zeppelin.notebook.OldNoteInfo;
 import org.apache.zeppelin.notebook.Paragraph;
@@ -45,10 +44,10 @@ import java.util.Map;
  */
 public class NotebookRepoSync implements NotebookRepoWithVersionControl {
   private static final Logger LOGGER = LoggerFactory.getLogger(NotebookRepoSync.class);
-  private static final int maxRepoNum = 2;
-  private static final String pushKey = "pushNoteIds";
-  private static final String pullKey = "pullNoteIds";
-  private static final String delDstKey = "delDstNoteIds";
+  private static final int MAX_REPO_NUM = 2;
+  private static final String PUSH_KEY = "pushNoteIds";
+  private static final String PULL_KEY = "pullNoteIds";
+  private static final String DEL_DST_KEY = "delDstNoteIds";
 
   private static final String DEFAULT_STORAGE = "org.apache.zeppelin.notebook.repo.GitNotebookRepo";
 
@@ -64,6 +63,7 @@ public class NotebookRepoSync implements NotebookRepoWithVersionControl {
     init(conf);
   }
 
+  @Override
   public void init(ZeppelinConfiguration conf) throws IOException {
     oneWaySync = conf.getBoolean(ConfVars.ZEPPELIN_NOTEBOOK_ONE_WAY_SYNC);
     String allStorageClassNames = conf.getNotebookStorageClass().trim();
@@ -113,8 +113,8 @@ public class NotebookRepoSync implements NotebookRepoWithVersionControl {
               PluginManager.get().loadOldNotebookRepo(newNotebookRepo.getClass().getCanonicalName());
       oldNotebookRepo.init(conf);
       List<OldNoteInfo> oldNotesInfo = oldNotebookRepo.list(AuthenticationInfo.ANONYMOUS);
-      LOGGER.info("Convert old note file to new style, note count: " + oldNotesInfo.size());
-      LOGGER.info("Delete old note: " + deleteOld);
+      LOGGER.info("Convert old note file to new style, note count: {}", oldNotesInfo.size());
+      LOGGER.info("Delete old note: {}", deleteOld);
       for (OldNoteInfo oldNoteInfo : oldNotesInfo) {
         LOGGER.info("Converting note, id: {}", oldNoteInfo.getId());
         Note note = oldNotebookRepo.get(oldNoteInfo.getId(), AuthenticationInfo.ANONYMOUS);
@@ -130,7 +130,7 @@ public class NotebookRepoSync implements NotebookRepoWithVersionControl {
         }
         if (deleteOld) {
           oldNotebookRepo.remove(note.getId(), AuthenticationInfo.ANONYMOUS);
-          LOGGER.info("Remote old note: " + note.getId());
+          LOGGER.info("Remote old note: {}", note.getId());
           // TODO(zjffdu) no commit when deleting note, This is an issue of
           // NotebookRepoWithVersionControl
           /**
@@ -217,7 +217,7 @@ public class NotebookRepoSync implements NotebookRepoWithVersionControl {
         getRepo(1).save(note, subject);
       }
       catch (IOException e) {
-        LOGGER.info(e.getMessage() + ": Failed to write to secondary storage");
+        LOGGER.info("{}: Failed to write to secondary storage", e.getMessage());
       }
     }
   }
@@ -236,7 +236,7 @@ public class NotebookRepoSync implements NotebookRepoWithVersionControl {
         getRepo(1).move(noteId, notePath, newNotePath, subject);
       }
       catch (IOException e) {
-        LOGGER.info(e.getMessage() + ": Failed to write to secondary storage");
+        LOGGER.info("{}: Failed to write to secondary storage", e.getMessage());
       }
     }
   }
@@ -282,14 +282,14 @@ public class NotebookRepoSync implements NotebookRepoWithVersionControl {
 
     Map<String, List<NoteInfo>> noteIds = notesCheckDiff(srcNotes, srcRepo, dstNotes, dstRepo,
         subject);
-    List<NoteInfo> pushNoteIds = noteIds.get(pushKey);
-    List<NoteInfo> pullNoteIds = noteIds.get(pullKey);
-    List<NoteInfo> delDstNoteIds = noteIds.get(delDstKey);
+    List<NoteInfo> pushNoteIds = noteIds.get(PUSH_KEY);
+    List<NoteInfo> pullNoteIds = noteIds.get(PULL_KEY);
+    List<NoteInfo> delDstNoteIds = noteIds.get(DEL_DST_KEY);
 
     if (!pushNoteIds.isEmpty()) {
       LOGGER.info("The following notes will be pushed");
       for (NoteInfo noteInfo : pushNoteIds) {
-        LOGGER.info("Note : " + noteIds);
+        LOGGER.info("Note : {}", noteInfo.getId());
       }
       pushNotes(subject, pushNoteIds, srcRepo, dstRepo);
     } else {
@@ -299,7 +299,7 @@ public class NotebookRepoSync implements NotebookRepoWithVersionControl {
     if (!pullNoteIds.isEmpty()) {
       LOGGER.info("The following notes will be pulled");
       for (NoteInfo noteInfo : pullNoteIds) {
-        LOGGER.info("Note : " + noteInfo);
+        LOGGER.info("Note : {}", noteInfo);
       }
       pushNotes(subject, pullNoteIds, dstRepo, srcRepo);
     } else {
@@ -309,7 +309,7 @@ public class NotebookRepoSync implements NotebookRepoWithVersionControl {
     if (!delDstNoteIds.isEmpty()) {
       LOGGER.info("The following notes will be deleted from dest");
       for (NoteInfo noteInfo : delDstNoteIds) {
-        LOGGER.info("Note : " + noteIds);
+        LOGGER.info("Note : {}", noteInfo.getId());
       }
       deleteNotes(subject, delDstNoteIds, dstRepo);
     } else {
@@ -346,7 +346,7 @@ public class NotebookRepoSync implements NotebookRepoWithVersionControl {
   }
 
   int getMaxRepoNum() {
-    return maxRepoNum;
+    return MAX_REPO_NUM;
   }
 
   public NotebookRepo getRepo(int repoIndex) throws IOException {
@@ -383,10 +383,10 @@ public class NotebookRepoSync implements NotebookRepoWithVersionControl {
             /* if source contains more up to date note - push
              * if oneWaySync is enabled, always push no matter who's newer */
             pushIDs.add(snote);
-            LOGGER.info("Modified note is added to push list : " + sdate);
+            LOGGER.info("Modified note is added to push list : {}", sdate);
           } else {
             /* destination contains more up to date note - pull */
-            LOGGER.info("Modified note is added to pull list : " + ddate);
+            LOGGER.info("Modified note is added to pull list : {}", ddate);
             pullIDs.add(snote);
           }
         }
@@ -404,20 +404,20 @@ public class NotebookRepoSync implements NotebookRepoWithVersionControl {
         /* note exists in destination storage, and absent in source */
         if (oneWaySync) {
           /* if oneWaySync is enabled, delete the note from destination */
-          LOGGER.info("Extraneous note is added to delete dest list : " + note.getId());
+          LOGGER.info("Extraneous note is added to delete dest list : {}", note.getId());
           delDstIDs.add(note);
         } else {
           /* if oneWaySync is disabled, pull the note from destination */
-          LOGGER.info("Missing note is added to pull list : " + note.getId());
+          LOGGER.info("Missing note is added to pull list : {}", note.getId());
           pullIDs.add(note);
         }
       }
     }
 
     Map<String, List<NoteInfo>> map = new HashMap<>();
-    map.put(pushKey, pushIDs);
-    map.put(pullKey, pullIDs);
-    map.put(delDstKey, delDstIDs);
+    map.put(PUSH_KEY, pushIDs);
+    map.put(PULL_KEY, pullIDs);
+    map.put(DEL_DST_KEY, delDstIDs);
     return map;
   }
 
@@ -463,11 +463,11 @@ public class NotebookRepoSync implements NotebookRepoWithVersionControl {
     }
   }
 
-  public Boolean isRevisionSupportedInDefaultRepo() {
+  public boolean isRevisionSupportedInDefaultRepo() {
     return isRevisionSupportedInRepo(0);
   }
 
-  public Boolean isRevisionSupportedInRepo(int repoIndex) {
+  public boolean isRevisionSupportedInRepo(int repoIndex) {
     try {
       if (getRepo(repoIndex) instanceof NotebookRepoWithVersionControl) {
         return true;
@@ -485,7 +485,7 @@ public class NotebookRepoSync implements NotebookRepoWithVersionControl {
     int repoCount = getRepoCount();
     int repoBound = Math.min(repoCount, getMaxRepoNum());
     int errorCount = 0;
-    String errorMessage = "";
+    StringBuilder errorMessage = new StringBuilder("");
     List<Revision> allRepoCheckpoints = new ArrayList<>();
     Revision rev = null;
     for (int i = 0; i < repoBound; i++) {
@@ -497,17 +497,17 @@ public class NotebookRepoSync implements NotebookRepoWithVersionControl {
         }
       } catch (IOException e) {
         LOGGER.warn("Couldn't checkpoint in {} storage with index {} for note {}",
-          getRepo(i).getClass().toString(), i, noteId);
-        errorMessage += "Error on storage class " + getRepo(i).getClass().toString() +
-          " with index " + i + " : " + e.getMessage() + "\n";
+          getRepo(i).getClass(), i, noteId);
+        errorMessage.append("Error on storage class " + getRepo(i).getClass().toString() +
+          " with index " + i + " : " + e.getMessage() + "\n");
         errorCount++;
       }
     }
     // throw exception if failed to commit for all initialized repos
     if (errorCount == repoBound) {
-      throw new IOException(errorMessage);
+      throw new IOException(errorMessage.toString());
     }
-    if (allRepoCheckpoints.size() > 0) {
+    if (!allRepoCheckpoints.isEmpty()) {
       rev = allRepoCheckpoints.get(0);
       // if failed to checkpoint on first storage, then return result on second
       if (allRepoCheckpoints.size() > 1 && rev == null) {
@@ -571,7 +571,8 @@ public class NotebookRepoSync implements NotebookRepoWithVersionControl {
       throws IOException {
     int repoCount = getRepoCount();
     int repoBound = Math.min(repoCount, getMaxRepoNum());
-    Note currentNote = null, revisionNote = null;
+    Note currentNote = null;
+    Note revisionNote = null;
     for (int i = 0; i < repoBound; i++) {
       try {
         if (isRevisionSupportedInRepo(i)) {
diff --git a/zeppelin-zengine/src/main/java/org/apache/zeppelin/notebook/repo/NotebookRepoWithVersionControl.java b/zeppelin-zengine/src/main/java/org/apache/zeppelin/notebook/repo/NotebookRepoWithVersionControl.java
index d9a31b3..e41e8ff 100644
--- a/zeppelin-zengine/src/main/java/org/apache/zeppelin/notebook/repo/NotebookRepoWithVersionControl.java
+++ b/zeppelin-zengine/src/main/java/org/apache/zeppelin/notebook/repo/NotebookRepoWithVersionControl.java
@@ -20,12 +20,10 @@ package org.apache.zeppelin.notebook.repo;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.zeppelin.annotation.ZeppelinApi;
 import org.apache.zeppelin.notebook.Note;
-import org.apache.zeppelin.notebook.NoteInfo;
 import org.apache.zeppelin.user.AuthenticationInfo;
 
 import java.io.IOException;
 import java.util.List;
-import java.util.Map;
 
 /**
  * Notebook repository (persistence layer) abstraction
@@ -47,7 +45,7 @@ public interface NotebookRepoWithVersionControl extends NotebookRepo {
 
   /**
    * Get particular revision of the Notebook.
-   * 
+   *
    * @param noteId Id of the note
    * @param notePath path of the note
    * @param revId revision of the Notebook
@@ -59,7 +57,7 @@ public interface NotebookRepoWithVersionControl extends NotebookRepo {
 
   /**
    * List of revisions of the given Notebook.
-   * 
+   *
    * @param noteId id of the note
    * @param notePath path of the note
    * @param subject
@@ -71,7 +69,7 @@ public interface NotebookRepoWithVersionControl extends NotebookRepo {
 
   /**
    * Set note to particular revision.
-   * 
+   *
    * @param noteId Id of the Notebook
    * @param notePath path of the note
    * @param revId revision of the Notebook
@@ -86,11 +84,11 @@ public interface NotebookRepoWithVersionControl extends NotebookRepo {
    */
   class Revision {
     public static final Revision EMPTY = new Revision(StringUtils.EMPTY, StringUtils.EMPTY, 0);
-    
+
     public String id;
     public String message;
     public int time;
-    
+
     public Revision(String revId, String message, int time) {
       this.id = revId;
       this.message = message;
diff --git a/zeppelin-zengine/src/main/java/org/apache/zeppelin/notebook/repo/OldNotebookRepo.java b/zeppelin-zengine/src/main/java/org/apache/zeppelin/notebook/repo/OldNotebookRepo.java
index 63f0026..38c3f90 100644
--- a/zeppelin-zengine/src/main/java/org/apache/zeppelin/notebook/repo/OldNotebookRepo.java
+++ b/zeppelin-zengine/src/main/java/org/apache/zeppelin/notebook/repo/OldNotebookRepo.java
@@ -20,7 +20,6 @@ package org.apache.zeppelin.notebook.repo;
 import org.apache.zeppelin.annotation.ZeppelinApi;
 import org.apache.zeppelin.conf.ZeppelinConfiguration;
 import org.apache.zeppelin.notebook.Note;
-import org.apache.zeppelin.notebook.NoteInfo;
 import org.apache.zeppelin.notebook.OldNoteInfo;
 import org.apache.zeppelin.user.AuthenticationInfo;
 
diff --git a/zeppelin-zengine/src/main/java/org/apache/zeppelin/notebook/repo/OldVFSNotebookRepo.java b/zeppelin-zengine/src/main/java/org/apache/zeppelin/notebook/repo/OldVFSNotebookRepo.java
index 9c4e1f0..dfabd96 100644
--- a/zeppelin-zengine/src/main/java/org/apache/zeppelin/notebook/repo/OldVFSNotebookRepo.java
+++ b/zeppelin-zengine/src/main/java/org/apache/zeppelin/notebook/repo/OldVFSNotebookRepo.java
@@ -64,7 +64,7 @@ public class OldVFSNotebookRepo implements OldNotebookRepo {
 
   protected void setNotebookDirectory(String notebookDirPath) throws IOException {
     try {
-      LOG.info("Using notebookDir: " + notebookDirPath);
+      LOG.info("Using notebookDir: {}", notebookDirPath);
       if (conf.isWindowsPath(notebookDirPath)) {
         filesystemRoot = new File(notebookDirPath).toURI();
       } else {
@@ -88,7 +88,7 @@ public class OldVFSNotebookRepo implements OldNotebookRepo {
   }
 
   private String getNotebookDirPath() {
-    return filesystemRoot.getPath().toString();
+    return filesystemRoot.getPath();
   }
 
   private String getPath(String path) {
@@ -103,12 +103,10 @@ public class OldVFSNotebookRepo implements OldNotebookRepo {
   }
 
   private boolean isDirectory(FileObject fo) throws IOException {
-    if (fo == null) return false;
-    if (fo.getType() == FileType.FOLDER) {
-      return true;
-    } else {
+    if (fo == null) {
       return false;
     }
+    return fo.getType() == FileType.FOLDER;
   }
 
   @Override
@@ -142,7 +140,7 @@ public class OldVFSNotebookRepo implements OldNotebookRepo {
           infos.add(info);
         }
       } catch (Exception e) {
-        LOG.error("Can't read note " + f.getName().toString());
+        LOG.error("Can't read note {}", f.getName());
       }
     }
 
@@ -158,7 +156,7 @@ public class OldVFSNotebookRepo implements OldNotebookRepo {
     if (!noteJson.exists()) {
       throw new IOException(noteJson.getName().toString() + " not found");
     }
-    
+
     FileContent content = noteJson.getContent();
     InputStream ins = content.getInputStream();
     String json = IOUtils.toString(ins, conf.getString(ConfVars.ZEPPELIN_ENCODING));
@@ -196,7 +194,7 @@ public class OldVFSNotebookRepo implements OldNotebookRepo {
 
   @Override
   public synchronized void save(Note note, AuthenticationInfo subject) throws IOException {
-    LOG.info("Saving note:" + note.getId());
+    LOG.info("Saving note: {}", note.getId());
     String json = note.toJson();
 
     FileObject rootDir = getRootDir();
@@ -238,7 +236,7 @@ public class OldVFSNotebookRepo implements OldNotebookRepo {
 
   @Override
   public void close() {
-    //no-op    
+    //no-op
   }
 
   @Override
diff --git a/zeppelin-zengine/src/main/java/org/apache/zeppelin/notebook/repo/VFSNotebookRepo.java b/zeppelin-zengine/src/main/java/org/apache/zeppelin/notebook/repo/VFSNotebookRepo.java
index 018d192..e5c1366 100644
--- a/zeppelin-zengine/src/main/java/org/apache/zeppelin/notebook/repo/VFSNotebookRepo.java
+++ b/zeppelin-zengine/src/main/java/org/apache/zeppelin/notebook/repo/VFSNotebookRepo.java
@@ -66,7 +66,7 @@ public class VFSNotebookRepo implements NotebookRepo {
   protected void setNotebookDirectory(String notebookDirPath) throws IOException {
     URI filesystemRoot = null;
     try {
-      LOGGER.info("Using notebookDir: " + notebookDirPath);
+      LOGGER.info("Using notebookDir: {}", notebookDirPath);
       if (conf.isWindowsPath(notebookDirPath)) {
         filesystemRoot = new File(notebookDirPath).toURI();
       } else {
@@ -104,7 +104,7 @@ public class VFSNotebookRepo implements NotebookRepo {
     Map<String, NoteInfo> noteInfos = new HashMap<>();
     if (fileObject.isFolder()) {
       if (fileObject.getName().getBaseName().startsWith(".")) {
-        LOGGER.warn("Skip hidden folder: " + fileObject.getName().getPath());
+        LOGGER.warn("Skip hidden folder: {}", fileObject.getName().getPath());
         return noteInfos;
       }
       for (FileObject child : fileObject.getChildren()) {
@@ -141,7 +141,7 @@ public class VFSNotebookRepo implements NotebookRepo {
 
   @Override
   public synchronized void save(Note note, AuthenticationInfo subject) throws IOException {
-    LOGGER.info("Saving note " + note.getId() + " to " + buildNoteFileName(note));
+    LOGGER.info("Saving note {} to {}", note.getId(), buildNoteFileName(note));
     // write to tmp file first, then rename it to the {note_name}_{note_id}.zpln
     FileObject noteJson = rootNotebookFileObject.resolveFile(
         buildNoteTempFileName(note), NameScope.DESCENDENT);
@@ -163,7 +163,7 @@ public class VFSNotebookRepo implements NotebookRepo {
                    String notePath,
                    String newNotePath,
                    AuthenticationInfo subject) throws IOException {
-    LOGGER.info("Move note " + noteId + " from " + notePath + " to " + newNotePath);
+    LOGGER.info("Move note {} from {} to {}", noteId, notePath, newNotePath);
     FileObject fileObject = rootNotebookFileObject.resolveFile(
         buildNoteFileName(noteId, notePath), NameScope.DESCENDENT);
     FileObject destFileObject = rootNotebookFileObject.resolveFile(
@@ -176,7 +176,7 @@ public class VFSNotebookRepo implements NotebookRepo {
   @Override
   public void move(String folderPath, String newFolderPath,
                    AuthenticationInfo subject) throws IOException{
-    LOGGER.info("Move folder from " + folderPath + " to " + newFolderPath);
+    LOGGER.info("Move folder from {} to {}", folderPath, newFolderPath);
     FileObject fileObject = rootNotebookFileObject.resolveFile(
         folderPath.substring(1), NameScope.DESCENDENT);
     FileObject destFileObject = rootNotebookFileObject.resolveFile(
@@ -189,7 +189,7 @@ public class VFSNotebookRepo implements NotebookRepo {
   @Override
   public void remove(String noteId, String notePath, AuthenticationInfo subject)
       throws IOException {
-    LOGGER.info("Remove note: " + noteId + ", notePath: " + notePath);
+    LOGGER.info("Remove note: {}, notePath: {}", noteId, notePath);
     FileObject noteFile = rootNotebookFileObject.resolveFile(
         buildNoteFileName(noteId, notePath), NameScope.DESCENDENT);
     noteFile.delete(Selectors.SELECT_SELF);
@@ -197,7 +197,7 @@ public class VFSNotebookRepo implements NotebookRepo {
 
   @Override
   public void remove(String folderPath, AuthenticationInfo subject) throws IOException {
-    LOGGER.info("Remove folder: " + folderPath);
+    LOGGER.info("Remove folder: {}", folderPath);
     FileObject folderObject = rootNotebookFileObject.resolveFile(
         folderPath.substring(1), NameScope.DESCENDENT);
     folderObject.deleteAll();
@@ -205,7 +205,7 @@ public class VFSNotebookRepo implements NotebookRepo {
 
   @Override
   public void close() {
-    //no-op    
+    //no-op
   }
 
   @Override
diff --git a/zeppelin-zengine/src/main/java/org/apache/zeppelin/notebook/repo/zeppelinhub/websocket/ZeppelinClient.java b/zeppelin-zengine/src/main/java/org/apache/zeppelin/notebook/repo/zeppelinhub/websocket/ZeppelinClient.java
index 6e90204..6ee95c3 100644
--- a/zeppelin-zengine/src/main/java/org/apache/zeppelin/notebook/repo/zeppelinhub/websocket/ZeppelinClient.java
+++ b/zeppelin-zengine/src/main/java/org/apache/zeppelin/notebook/repo/zeppelinhub/websocket/ZeppelinClient.java
@@ -67,7 +67,7 @@ public class ZeppelinClient {
   private static final int MIN = 60;
   private static final String ORIGIN = "Origin";
 
-  private static final Set<String> actionable = new  HashSet<String>(Arrays.asList(
+  private static final Set<String> actionable = new  HashSet<>(Arrays.asList(
       // running events
       "ANGULAR_OBJECT_UPDATE",
       "PROGRESS",
diff --git a/zeppelin-zengine/src/main/java/org/apache/zeppelin/notebook/repo/zeppelinhub/websocket/ZeppelinhubClient.java b/zeppelin-zengine/src/main/java/org/apache/zeppelin/notebook/repo/zeppelinhub/websocket/ZeppelinhubClient.java
index 3674e0e..94262a5 100644
--- a/zeppelin-zengine/src/main/java/org/apache/zeppelin/notebook/repo/zeppelinhub/websocket/ZeppelinhubClient.java
+++ b/zeppelin-zengine/src/main/java/org/apache/zeppelin/notebook/repo/zeppelinhub/websocket/ZeppelinhubClient.java
@@ -55,7 +55,7 @@ import com.google.gson.reflect.TypeToken;
  * Manage a zeppelinhub websocket connection.
  */
 public class ZeppelinhubClient {
-  private static final Logger LOG = LoggerFactory.getLogger(ZeppelinhubClient.class);
+  private static final Logger LOGGER = LoggerFactory.getLogger(ZeppelinhubClient.class);
 
   private final WebSocketClient client;
   private final URI zeppelinhubWebsocketUrl;
@@ -64,11 +64,11 @@ public class ZeppelinhubClient {
   private static final String TOKEN_HEADER = "X-Zeppelin-Token";
   private static final long CONNECTION_IDLE_TIME = TimeUnit.SECONDS.toMillis(30);
   private static ZeppelinhubClient instance = null;
-  private static Gson gson;
-  
+  private static final Gson gson = new Gson();
+
   private SchedulerService schedulerService;
-  private Map<String, ZeppelinhubSession> sessionMap = 
-      new ConcurrentHashMap<String, ZeppelinhubSession>();
+  private Map<String, ZeppelinhubSession> sessionMap =
+      new ConcurrentHashMap<>();
 
   public static ZeppelinhubClient initialize(String zeppelinhubUrl, String token) {
     if (instance == null) {
@@ -86,8 +86,7 @@ public class ZeppelinhubClient {
     client = createNewWebsocketClient();
     zeppelinhubToken = token;
     schedulerService = SchedulerService.create(10);
-    gson = new Gson();
-    LOG.info("Initialized ZeppelinHub websocket client on {}", zeppelinhubWebsocketUrl);
+    LOGGER.info("Initialized ZeppelinHub websocket client on {}", zeppelinhubWebsocketUrl);
   }
 
   public void start() {
@@ -95,21 +94,21 @@ public class ZeppelinhubClient {
       client.start();
       addRoutines();
     } catch (Exception e) {
-      LOG.error("Cannot connect to zeppelinhub via websocket", e);
+      LOGGER.error("Cannot connect to zeppelinhub via websocket", e);
     }
   }
-  
+
   public void initUser(String token) {
-    
+
   }
 
   public void stop() {
-    LOG.info("Stopping Zeppelinhub websocket client");
+    LOGGER.info("Stopping Zeppelinhub websocket client");
     try {
       schedulerService.close();
       client.stop();
     } catch (Exception e) {
-      LOG.error("Cannot stop zeppelinhub websocket client", e);
+      LOGGER.error("Cannot stop zeppelinhub websocket client", e);
     }
   }
 
@@ -120,27 +119,27 @@ public class ZeppelinhubClient {
   public String getToken() {
     return this.zeppelinhubToken;
   }
-  
+
   public void send(String msg, String token) {
     ZeppelinhubSession zeppelinhubSession = getSession(token);
     if (!isConnectedToZeppelinhub(zeppelinhubSession)) {
-      LOG.info("Zeppelinhub connection is not open, opening it");
+      LOGGER.info("Zeppelinhub connection is not open, opening it");
       zeppelinhubSession = connect(token);
       if (zeppelinhubSession == ZeppelinhubSession.EMPTY) {
-        LOG.warn("While connecting to ZeppelinHub received empty session, cannot send the message");
+        LOGGER.warn("While connecting to ZeppelinHub received empty session, cannot send the message");
         return;
       }
     }
     zeppelinhubSession.sendByFuture(msg);
   }
-  
+
   private boolean isConnectedToZeppelinhub(ZeppelinhubSession zeppelinhubSession) {
     return (zeppelinhubSession != null && zeppelinhubSession.isSessionOpen());
   }
 
   private ZeppelinhubSession connect(String token) {
     if (StringUtils.isBlank(token)) {
-      LOG.debug("Can't connect with empty token");
+      LOGGER.debug("Can't connect with empty token");
       return ZeppelinhubSession.EMPTY;
     }
     ZeppelinhubSession zeppelinhubSession;
@@ -152,7 +151,7 @@ public class ZeppelinhubClient {
       zeppelinhubSession = ZeppelinhubSession.createInstance(session, token);
       setSession(token, zeppelinhubSession);
     } catch (IOException | InterruptedException | ExecutionException e) {
-      LOG.info("Couldnt connect to zeppelinhub", e);
+      LOGGER.info("Couldnt connect to zeppelinhub", e);
       zeppelinhubSession = ZeppelinhubSession.EMPTY;
     }
     return zeppelinhubSession;
@@ -180,7 +179,7 @@ public class ZeppelinhubClient {
     request.setCookies(Lists.newArrayList(new HttpCookie(TOKEN_HEADER, token)));
     return request;
   }
-  
+
   private WebSocketClient createNewWebsocketClient() {
     SslContextFactory sslContextFactory = new SslContextFactory();
     WebSocketClient client = new WebSocketClient(sslContextFactory);
@@ -189,7 +188,7 @@ public class ZeppelinhubClient {
     client.setMaxIdleTimeout(CONNECTION_IDLE_TIME);
     return client;
   }
-  
+
   private void addRoutines() {
     schedulerService.add(ZeppelinHubHeartbeat.newInstance(this), 10, 23);
   }
@@ -197,14 +196,14 @@ public class ZeppelinhubClient {
   public void handleMsgFromZeppelinHub(String message) {
     ZeppelinhubMessage hubMsg = ZeppelinhubMessage.fromJson(message);
     if (hubMsg.equals(ZeppelinhubMessage.EMPTY)) {
-      LOG.error("Cannot handle ZeppelinHub message is empty");
+      LOGGER.error("Cannot handle ZeppelinHub message is empty");
       return;
     }
     String op = StringUtils.EMPTY;
     if (hubMsg.op instanceof String) {
       op = (String) hubMsg.op;
     } else {
-      LOG.error("Message OP from ZeppelinHub isn't string {}", hubMsg.op);
+      LOGGER.error("Message OP from ZeppelinHub isn't string {}", hubMsg.op);
       return;
     }
     if (ZeppelinhubUtils.isZeppelinHubOp(op)) {
@@ -216,7 +215,7 @@ public class ZeppelinhubClient {
 
   private void handleZeppelinHubOpMsg(ZeppelinHubOp op, ZeppelinhubMessage hubMsg, String msg) {
     if (op == null || msg.equals(ZeppelinhubMessage.EMPTY)) {
-      LOG.error("Cannot handle empty op or msg");
+      LOGGER.error("Cannot handle empty op or msg");
       return;
     }
     switch (op) {
@@ -224,7 +223,7 @@ public class ZeppelinhubClient {
         runAllParagraph(hubMsg.meta.get("noteId"), msg);
         break;
       default:
-        LOG.debug("Received {} from ZeppelinHub, not handled", op);
+        LOGGER.debug("Received {} from ZeppelinHub, not handled", op);
         break;
     }
   }
@@ -233,7 +232,7 @@ public class ZeppelinhubClient {
   private void forwardToZeppelin(Message.OP op, ZeppelinhubMessage hubMsg) {
     Message zeppelinMsg = new Message(op);
     if (!(hubMsg.data instanceof Map)) {
-      LOG.error("Data field of message from ZeppelinHub isn't in correct Map format");
+      LOGGER.error("Data field of message from ZeppelinHub isn't in correct Map format");
       return;
     }
     zeppelinMsg.data = (Map<String, Object>) hubMsg.data;
@@ -241,23 +240,23 @@ public class ZeppelinhubClient {
     zeppelinMsg.ticket = TicketContainer.instance.getTicket(zeppelinMsg.principal);
     Client client = Client.getInstance();
     if (client == null) {
-      LOG.warn("Base client isn't initialized, returning");
+      LOGGER.warn("Base client isn't initialized, returning");
       return;
     }
     client.relayToZeppelin(zeppelinMsg, hubMsg.meta.get("noteId"));
   }
 
   boolean runAllParagraph(String noteId, String hubMsg) {
-    LOG.info("Running paragraph with noteId {}", noteId);
+    LOGGER.info("Running paragraph with noteId {}", noteId);
     try {
       JSONObject data = new JSONObject(hubMsg);
       if (data.equals(JSONObject.NULL) || !(data.get("data") instanceof JSONArray)) {
-        LOG.error("Wrong \"data\" format for RUN_NOTEBOOK");
+        LOGGER.error("Wrong \"data\" format for RUN_NOTEBOOK");
         return false;
       }
       Client client = Client.getInstance();
       if (client == null) {
-        LOG.warn("Base client isn't initialized, returning");
+        LOGGER.warn("Base client isn't initialized, returning");
         return false;
       }
       Message zeppelinMsg = new Message(OP.RUN_PARAGRAPH);
@@ -266,18 +265,18 @@ public class ZeppelinhubClient {
       String principal = data.getJSONObject("meta").getString("owner");
       for (int i = 0; i < paragraphs.length(); i++) {
         if (!(paragraphs.get(i) instanceof JSONObject)) {
-          LOG.warn("Wrong \"paragraph\" format for RUN_NOTEBOOK");
+          LOGGER.warn("Wrong \"paragraph\" format for RUN_NOTEBOOK");
           continue;
         }
-        zeppelinMsg.data = gson.fromJson(paragraphs.getString(i), 
+        zeppelinMsg.data = gson.fromJson(paragraphs.getString(i),
             new TypeToken<Map<String, Object>>(){}.getType());
         zeppelinMsg.principal = principal;
         zeppelinMsg.ticket = TicketContainer.instance.getTicket(principal);
         client.relayToZeppelin(zeppelinMsg, noteId);
-        LOG.info("\nSending RUN_PARAGRAPH message to Zeppelin ");
+        LOGGER.info("\nSending RUN_PARAGRAPH message to Zeppelin ");
       }
     } catch (JSONException e) {
-      LOG.error("Failed to parse RUN_NOTEBOOK message from ZeppelinHub ", e);
+      LOGGER.error("Failed to parse RUN_NOTEBOOK message from ZeppelinHub ", e);
       return false;
     }
     return true;
diff --git a/zeppelin-zengine/src/main/java/org/apache/zeppelin/notebook/repo/zeppelinhub/websocket/listener/ZeppelinWebsocket.java b/zeppelin-zengine/src/main/java/org/apache/zeppelin/notebook/repo/zeppelinhub/websocket/listener/ZeppelinWebsocket.java
index fa6ade8..8cfb6cf 100644
--- a/zeppelin-zengine/src/main/java/org/apache/zeppelin/notebook/repo/zeppelinhub/websocket/listener/ZeppelinWebsocket.java
+++ b/zeppelin-zengine/src/main/java/org/apache/zeppelin/notebook/repo/zeppelinhub/websocket/listener/ZeppelinWebsocket.java
@@ -27,7 +27,7 @@ import org.slf4j.LoggerFactory;
  *
  */
 public class ZeppelinWebsocket implements WebSocketListener {
-  private static final Logger LOG = LoggerFactory.getLogger(ZeppelinWebsocket.class);
+  private static final Logger LOGGER = LoggerFactory.getLogger(ZeppelinWebsocket.class);
   public Session connection;
   public String noteId;
 
@@ -42,25 +42,25 @@ public class ZeppelinWebsocket implements WebSocketListener {
 
   @Override
   public void onWebSocketClose(int code, String message) {
-    LOG.info("Zeppelin connection closed with code: {}, message: {}", code, message);
+    LOGGER.info("Zeppelin connection closed with code: {}, message: {}", code, message);
     ZeppelinClient.getInstance().removeNoteConnection(noteId);
   }
 
   @Override
   public void onWebSocketConnect(Session session) {
-    LOG.info("Zeppelin connection opened");
+    LOGGER.info("Zeppelin connection opened");
     this.connection = session;
   }
 
   @Override
   public void onWebSocketError(Throwable e) {
-    LOG.warn("Zeppelin socket connection error ", e);
+    LOGGER.warn("Zeppelin socket connection error ", e);
     ZeppelinClient.getInstance().removeNoteConnection(noteId);
   }
 
   @Override
   public void onWebSocketText(String data) {
-    LOG.debug("Zeppelin client received Message: " + data);
+    LOGGER.debug("Zeppelin client received Message: {}", data);
     // propagate to ZeppelinHub
     try {
       ZeppelinClient zeppelinClient = ZeppelinClient.getInstance();
@@ -68,7 +68,7 @@ public class ZeppelinWebsocket implements WebSocketListener {
         zeppelinClient.handleMsgFromZeppelin(data, noteId);
       }
     } catch (Exception e) {
-      LOG.error("Failed to send message to ZeppelinHub: {}", e.toString());
+      LOGGER.error("Failed to send message to ZeppelinHub: {}", e.toString());
     }
   }
 
diff --git a/zeppelin-zengine/src/main/java/org/apache/zeppelin/notebook/repo/zeppelinhub/websocket/listener/ZeppelinhubWebsocket.java b/zeppelin-zengine/src/main/java/org/apache/zeppelin/notebook/repo/zeppelinhub/websocket/listener/ZeppelinhubWebsocket.java
index 216c307..fbd23bf 100644
--- a/zeppelin-zengine/src/main/java/org/apache/zeppelin/notebook/repo/zeppelinhub/websocket/listener/ZeppelinhubWebsocket.java
+++ b/zeppelin-zengine/src/main/java/org/apache/zeppelin/notebook/repo/zeppelinhub/websocket/listener/ZeppelinhubWebsocket.java
@@ -27,10 +27,10 @@ import org.slf4j.LoggerFactory;
  * Zeppelinhub websocket handler.
  */
 public class ZeppelinhubWebsocket implements WebSocketListener {
-  private Logger LOG = LoggerFactory.getLogger(ZeppelinhubWebsocket.class);
+  private static final Logger LOGGER = LoggerFactory.getLogger(ZeppelinhubWebsocket.class);
   private Session zeppelinHubSession;
   private final String token;
-  
+
   private ZeppelinhubWebsocket(String token) {
     this.token = token;
   }
@@ -38,27 +38,27 @@ public class ZeppelinhubWebsocket implements WebSocketListener {
   public static ZeppelinhubWebsocket newInstance(String token) {
     return new ZeppelinhubWebsocket(token);
   }
-  
+
   @Override
   public void onWebSocketBinary(byte[] payload, int offset, int len) {}
 
   @Override
   public void onWebSocketClose(int statusCode, String reason) {
-    LOG.info("Closing websocket connection [{}] : {}", statusCode, reason);
+    LOGGER.info("Closing websocket connection [{}] : {}", statusCode, reason);
     send(ZeppelinhubUtils.deadMessage(token));
     this.zeppelinHubSession = null;
   }
 
   @Override
   public void onWebSocketConnect(Session session) {
-    LOG.info("Opening a new session to Zeppelinhub {}", session.hashCode());
+    LOGGER.info("Opening a new session to Zeppelinhub {}", session.hashCode());
     this.zeppelinHubSession = session;
     send(ZeppelinhubUtils.liveMessage(token));
   }
 
   @Override
   public void onWebSocketError(Throwable cause) {
-    LOG.error("Remote websocket error");
+    LOGGER.error("Remote websocket error");
   }
 
   @Override
@@ -73,7 +73,7 @@ public class ZeppelinhubWebsocket implements WebSocketListener {
   private boolean isSessionOpen() {
     return ((zeppelinHubSession != null) && (zeppelinHubSession.isOpen())) ? true : false;
   }
-  
+
   private void send(String msg) {
     if (isSessionOpen()) {
       zeppelinHubSession.getRemote().sendStringByFuture(msg);
diff --git a/zeppelin-zengine/src/main/java/org/apache/zeppelin/notebook/repo/zeppelinhub/websocket/protocol/ZeppelinhubMessage.java b/zeppelin-zengine/src/main/java/org/apache/zeppelin/notebook/repo/zeppelinhub/websocket/protocol/ZeppelinhubMessage.java
index cd4763f..4a8fa15 100644
--- a/zeppelin-zengine/src/main/java/org/apache/zeppelin/notebook/repo/zeppelinhub/websocket/protocol/ZeppelinhubMessage.java
+++ b/zeppelin-zengine/src/main/java/org/apache/zeppelin/notebook/repo/zeppelinhub/websocket/protocol/ZeppelinhubMessage.java
@@ -22,8 +22,6 @@ import org.apache.commons.lang3.StringUtils;
 import org.apache.zeppelin.common.JsonSerializable;
 import org.apache.zeppelin.common.Message;
 import org.apache.zeppelin.common.Message.OP;
-import org.apache.zeppelin.notebook.repo.zeppelinhub.websocket.Client;
-
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -37,24 +35,24 @@ import com.google.gson.JsonSyntaxException;
  */
 public class ZeppelinhubMessage implements JsonSerializable {
   private static final Gson gson = new Gson();
-  private static final Logger LOG = LoggerFactory.getLogger(Client.class);
+  private static final Logger LOGGER = LoggerFactory.getLogger(ZeppelinhubMessage.class);
   public static final ZeppelinhubMessage EMPTY = new ZeppelinhubMessage();
 
   public Object op;
   public Object data;
   public Map<String, String> meta = Maps.newHashMap();
-  
+
   private ZeppelinhubMessage() {
     this.op = OP.LIST_NOTES;
     this.data = null;
   }
-  
+
   private ZeppelinhubMessage(Object op, Object data, Map<String, String> meta) {
     this.op = op;
     this.data = data;
     this.meta = meta;
   }
-  
+
   public static ZeppelinhubMessage newMessage(Object op, Object data, Map<String, String> meta) {
     return new ZeppelinhubMessage(op, data, meta);
   }
@@ -66,6 +64,7 @@ public class ZeppelinhubMessage implements JsonSerializable {
     return new ZeppelinhubMessage(zeppelinMsg.op, zeppelinMsg.data, meta);
   }
 
+  @Override
   public String toJson() {
     return gson.toJson(this, ZeppelinhubMessage.class);
   }
@@ -78,10 +77,10 @@ public class ZeppelinhubMessage implements JsonSerializable {
     try {
       msg = gson.fromJson(zeppelinhubMessage, ZeppelinhubMessage.class);
     } catch (JsonSyntaxException ex) {
-      LOG.error("Cannot fromJson zeppelinhub message", ex);
+      LOGGER.error("Cannot fromJson zeppelinhub message", ex);
       msg = EMPTY;
     }
     return msg;
   }
-  
+
 }
diff --git a/zeppelin-zengine/src/main/java/org/apache/zeppelin/notebook/repo/zeppelinhub/websocket/scheduler/ZeppelinHeartbeat.java b/zeppelin-zengine/src/main/java/org/apache/zeppelin/notebook/repo/zeppelinhub/websocket/scheduler/ZeppelinHeartbeat.java
index 11cfa45..b7e3e19 100644
--- a/zeppelin-zengine/src/main/java/org/apache/zeppelin/notebook/repo/zeppelinhub/websocket/scheduler/ZeppelinHeartbeat.java
+++ b/zeppelin-zengine/src/main/java/org/apache/zeppelin/notebook/repo/zeppelinhub/websocket/scheduler/ZeppelinHeartbeat.java
@@ -25,20 +25,20 @@ import org.slf4j.LoggerFactory;
  *
  */
 public class ZeppelinHeartbeat implements Runnable {
-  private static final Logger LOG = LoggerFactory.getLogger(ZeppelinHubHeartbeat.class);
+  private static final Logger LOGGER = LoggerFactory.getLogger(ZeppelinHeartbeat.class);
   private ZeppelinClient client;
-  
+
   public static ZeppelinHeartbeat newInstance(ZeppelinClient client) {
     return new ZeppelinHeartbeat(client);
   }
-  
+
   private ZeppelinHeartbeat(ZeppelinClient client) {
     this.client = client;
   }
 
   @Override
   public void run() {
-    LOG.debug("Sending PING to Zeppelin Websocket Server");
+    LOGGER.debug("Sending PING to Zeppelin Websocket Server");
     client.ping();
   }
 }
diff --git a/zeppelin-zengine/src/main/java/org/apache/zeppelin/notebook/repo/zeppelinhub/websocket/scheduler/ZeppelinHubHeartbeat.java b/zeppelin-zengine/src/main/java/org/apache/zeppelin/notebook/repo/zeppelinhub/websocket/scheduler/ZeppelinHubHeartbeat.java
index 2282147..ef08b64 100644
--- a/zeppelin-zengine/src/main/java/org/apache/zeppelin/notebook/repo/zeppelinhub/websocket/scheduler/ZeppelinHubHeartbeat.java
+++ b/zeppelin-zengine/src/main/java/org/apache/zeppelin/notebook/repo/zeppelinhub/websocket/scheduler/ZeppelinHubHeartbeat.java
@@ -27,7 +27,7 @@ import org.slf4j.LoggerFactory;
  *
  */
 public class ZeppelinHubHeartbeat implements Runnable {
-  private static final Logger LOG = LoggerFactory.getLogger(ZeppelinHubHeartbeat.class);
+  private static final Logger LOGGER = LoggerFactory.getLogger(ZeppelinHubHeartbeat.class);
   private ZeppelinhubClient client;
   
   public static ZeppelinHubHeartbeat newInstance(ZeppelinhubClient client) {
@@ -40,7 +40,7 @@ public class ZeppelinHubHeartbeat implements Runnable {
   
   @Override
   public void run() {
-    LOG.debug("Sending PING to zeppelinhub token");
+    LOGGER.debug("Sending PING to zeppelinhub token");
     for (String token: UserTokenContainer.getInstance().getAllTokens()) {
       client.send(ZeppelinhubUtils.pingMessage(token), token);
     }
diff --git a/zeppelin-zengine/src/main/java/org/apache/zeppelin/notebook/repo/zeppelinhub/websocket/session/ZeppelinhubSession.java b/zeppelin-zengine/src/main/java/org/apache/zeppelin/notebook/repo/zeppelinhub/websocket/session/ZeppelinhubSession.java
index 568c398..39cb724 100644
--- a/zeppelin-zengine/src/main/java/org/apache/zeppelin/notebook/repo/zeppelinhub/websocket/session/ZeppelinhubSession.java
+++ b/zeppelin-zengine/src/main/java/org/apache/zeppelin/notebook/repo/zeppelinhub/websocket/session/ZeppelinhubSession.java
@@ -25,7 +25,7 @@ import org.slf4j.LoggerFactory;
  * Zeppelinhub session.
  */
 public class ZeppelinhubSession {
-  private static final Logger LOG = LoggerFactory.getLogger(ZeppelinhubSession.class);
+  private static final Logger LOGGER = LoggerFactory.getLogger(ZeppelinhubSession.class);
   private Session session;
   private final String token;
   
@@ -52,12 +52,12 @@ public class ZeppelinhubSession {
   
   public void sendByFuture(String msg) {
     if (StringUtils.isBlank(msg)) {
-      LOG.error("Cannot send event to Zeppelinhub, msg is empty");
+      LOGGER.error("Cannot send event to Zeppelinhub, msg is empty");
     }
     if (isSessionOpen()) {
       session.getRemote().sendStringByFuture(msg);
     } else {
-      LOG.error("Cannot send event to Zeppelinhub, session is close");
+      LOGGER.error("Cannot send event to Zeppelinhub, session is close");
     }
   }
 }
diff --git a/zeppelin-zengine/src/main/java/org/apache/zeppelin/notebook/repo/zeppelinhub/websocket/utils/ZeppelinhubUtils.java b/zeppelin-zengine/src/main/java/org/apache/zeppelin/notebook/repo/zeppelinhub/websocket/utils/ZeppelinhubUtils.java
index 83ca1ee..9bf3fb6 100644
--- a/zeppelin-zengine/src/main/java/org/apache/zeppelin/notebook/repo/zeppelinhub/websocket/utils/ZeppelinhubUtils.java
+++ b/zeppelin-zengine/src/main/java/org/apache/zeppelin/notebook/repo/zeppelinhub/websocket/utils/ZeppelinhubUtils.java
@@ -33,41 +33,41 @@ import org.slf4j.LoggerFactory;
  *
  */
 public class ZeppelinhubUtils {
-  private static final Logger LOG = LoggerFactory.getLogger(ZeppelinhubUtils.class);
+  private static final Logger LOGGER = LoggerFactory.getLogger(ZeppelinhubUtils.class);
 
   public static String liveMessage(String token) {
     if (StringUtils.isBlank(token)) {
-      LOG.error("Cannot create Live message: token is null or empty");
+      LOGGER.error("Cannot create Live message: token is null or empty");
       return ZeppelinhubMessage.EMPTY.toJson();
     }
     HashMap<String, Object> data = new HashMap<>();
     data.put("token", token);
     return ZeppelinhubMessage
-             .newMessage(ZeppelinHubOp.LIVE, data, new HashMap<String, String>())
+             .newMessage(ZeppelinHubOp.LIVE, data, new HashMap<>())
              .toJson();
   }
-  
+
   public static String deadMessage(String token) {
     if (StringUtils.isBlank(token)) {
-      LOG.error("Cannot create Dead message: token is null or empty");
+      LOGGER.error("Cannot create Dead message: token is null or empty");
       return ZeppelinhubMessage.EMPTY.toJson();
     }
     HashMap<String, Object> data = new HashMap<>();
     data.put("token", token);
     return ZeppelinhubMessage
-             .newMessage(ZeppelinHubOp.DEAD, data, new HashMap<String, String>())
+             .newMessage(ZeppelinHubOp.DEAD, data, new HashMap<>())
              .toJson();
   }
-  
+
   public static String pingMessage(String token) {
     if (StringUtils.isBlank(token)) {
-      LOG.error("Cannot create Ping message: token is null or empty");
+      LOGGER.error("Cannot create Ping message: token is null or empty");
       return ZeppelinhubMessage.EMPTY.toJson();
     }
     HashMap<String, Object> data = new HashMap<>();
     data.put("token", token);
     return ZeppelinhubMessage
-             .newMessage(ZeppelinHubOp.PING, data, new HashMap<String, String>())
+             .newMessage(ZeppelinHubOp.PING, data, new HashMap<>())
              .toJson();
   }
 
@@ -82,7 +82,7 @@ public class ZeppelinhubUtils {
   }
 
   public static boolean isZeppelinHubOp(String text) {
-    return (toZeppelinHubOp(text) != null); 
+    return (toZeppelinHubOp(text) != null);
   }
 
   public static Message.OP toZeppelinOp(String text) {
@@ -96,33 +96,33 @@ public class ZeppelinhubUtils {
   }
 
   public static boolean isZeppelinOp(String text) {
-    return (toZeppelinOp(text) != null); 
+    return (toZeppelinOp(text) != null);
   }
-  
+
   public static void userLoginRoutine(String username) {
-    LOG.debug("Executing user login routine");
+    LOGGER.debug("Executing user login routine");
     String token = UserTokenContainer.getInstance().getUserToken(username);
     UserTokenContainer.getInstance().setUserToken(username, token);
     String msg = ZeppelinhubUtils.liveMessage(token);
     ZeppelinhubClient.getInstance()
         .send(msg, token);
   }
-  
+
   public static void userLogoutRoutine(String username) {
-    LOG.debug("Executing user logout routine");
+    LOGGER.debug("Executing user logout routine");
     String token = UserTokenContainer.getInstance().removeUserToken(username);
     String msg = ZeppelinhubUtils.deadMessage(token);
     ZeppelinhubClient.getInstance()
         .send(msg, token);
     ZeppelinhubClient.getInstance().removeSession(token);
   }
-  
+
   public static void userSwitchTokenRoutine(String username, String originToken,
       String targetToken) {
     String offMsg = ZeppelinhubUtils.deadMessage(originToken);
     ZeppelinhubClient.getInstance().send(offMsg, originToken);
     ZeppelinhubClient.getInstance().removeSession(originToken);
-    
+
     String onMsg = ZeppelinhubUtils.liveMessage(targetToken);
     ZeppelinhubClient.getInstance().send(onMsg, targetToken);
   }
diff --git a/zeppelin-zengine/src/main/java/org/apache/zeppelin/notebook/scheduler/CronJob.java b/zeppelin-zengine/src/main/java/org/apache/zeppelin/notebook/scheduler/CronJob.java
index c03ee7c..c410ddc 100644
--- a/zeppelin-zengine/src/main/java/org/apache/zeppelin/notebook/scheduler/CronJob.java
+++ b/zeppelin-zengine/src/main/java/org/apache/zeppelin/notebook/scheduler/CronJob.java
@@ -18,9 +18,6 @@
 package org.apache.zeppelin.notebook.scheduler;
 
 import org.apache.commons.lang3.StringUtils;
-import org.apache.zeppelin.interpreter.ExecutionContext;
-import org.apache.zeppelin.interpreter.ExecutionContextBuilder;
-import org.apache.zeppelin.interpreter.InterpreterSetting;
 import org.apache.zeppelin.notebook.Note;
 import org.apache.zeppelin.user.AuthenticationInfo;
 import org.quartz.JobDataMap;
@@ -38,7 +35,7 @@ public class CronJob implements org.quartz.Job {
   public void execute(JobExecutionContext context) {
     JobDataMap jobDataMap = context.getJobDetail().getJobDataMap();
     Note note = (Note) jobDataMap.get("note");
-    LOGGER.info("Start cron job of note: " + note.getId());
+    LOGGER.info("Start cron job of note: {}", note.getId());
     if (note.haveRunningOrPendingParagraphs()) {
       LOGGER.warn(
           "execution of the cron job is skipped because there is a running or pending "
@@ -60,7 +57,7 @@ public class CronJob implements org.quartz.Job {
     try {
       note.runAll(authenticationInfo, true, true, new HashMap<>());
     } catch (Exception e) {
-      LOGGER.warn("Fail to run note: " + note.getName(), e);
+      LOGGER.warn("Fail to run note: {}", note.getName(), e);
     }
   }
 }
diff --git a/zeppelin-zengine/src/main/java/org/apache/zeppelin/notebook/scheduler/QuartzSchedulerService.java b/zeppelin-zengine/src/main/java/org/apache/zeppelin/notebook/scheduler/QuartzSchedulerService.java
index f2874b3..0211e0e 100644
--- a/zeppelin-zengine/src/main/java/org/apache/zeppelin/notebook/scheduler/QuartzSchedulerService.java
+++ b/zeppelin-zengine/src/main/java/org/apache/zeppelin/notebook/scheduler/QuartzSchedulerService.java
@@ -108,7 +108,7 @@ public class QuartzSchedulerService implements SchedulerService {
     try {
       note = notebook.getNote(noteId);
     } catch (IOException e) {
-      LOGGER.warn("Skip refresh cron of note: " + noteId + " because fail to get it", e);
+      LOGGER.warn("Skip refresh cron of note: {} because fail to get it", noteId, e);
       return false;
     }
     if (note == null) {
@@ -157,7 +157,7 @@ public class QuartzSchedulerService implements SchedulerService {
               .forJob(noteId, "note")
               .build();
     } catch (Exception e) {
-      LOGGER.error("Fail to create cron trigger for note: " + note.getName(), e);
+      LOGGER.error("Fail to create cron trigger for note: {}", note.getName(), e);
       info.put("cron", e.getMessage());
       return false;
     }
@@ -167,7 +167,7 @@ public class QuartzSchedulerService implements SchedulerService {
       scheduler.scheduleJob(newJob, trigger);
       return true;
     } catch (SchedulerException e) {
-      LOGGER.error("Fail to schedule cron job for note: " + note.getName(), e);
+      LOGGER.error("Fail to schedule cron job for note: {}", note.getName(), e);
       info.put("cron", "Scheduler Exception");
       return false;
     }
@@ -187,7 +187,7 @@ public class QuartzSchedulerService implements SchedulerService {
     try {
       scheduler.deleteJob(new JobKey(id, "note"));
     } catch (SchedulerException e) {
-      LOGGER.error("Can't remove quertz " + id, e);
+      LOGGER.error("Can't remove quertz {}", id, e);
     }
   }
 }
diff --git a/zeppelin-zengine/src/main/java/org/apache/zeppelin/plugin/PluginManager.java b/zeppelin-zengine/src/main/java/org/apache/zeppelin/plugin/PluginManager.java
index 056b93e..5f3324d 100644
--- a/zeppelin-zengine/src/main/java/org/apache/zeppelin/plugin/PluginManager.java
+++ b/zeppelin-zengine/src/main/java/org/apache/zeppelin/plugin/PluginManager.java
@@ -75,13 +75,11 @@ public class PluginManager {
   }
 
   public NotebookRepo loadNotebookRepo(String notebookRepoClassName) throws IOException {
-    LOGGER.info("Loading NotebookRepo Plugin: " + notebookRepoClassName);
+    LOGGER.info("Loading NotebookRepo Plugin: {}", notebookRepoClassName);
     if (builtinNotebookRepoClassNames.contains(notebookRepoClassName) ||
             Boolean.parseBoolean(System.getProperty("zeppelin.isTest", "false"))) {
       try {
-        NotebookRepo notebookRepo = (NotebookRepo)
-                (Class.forName(notebookRepoClassName).newInstance());
-        return notebookRepo;
+        return (NotebookRepo) (Class.forName(notebookRepoClassName).newInstance());
       } catch (InstantiationException | IllegalAccessException | ClassNotFoundException e) {
         throw new IOException("Fail to instantiate notebookrepo from classpath directly:"
                 + notebookRepoClassName, e);
@@ -118,13 +116,11 @@ public class PluginManager {
    */
   public OldNotebookRepo loadOldNotebookRepo(String notebookRepoClassName) throws IOException {
     String oldNotebookRepoClassName = getOldNotebookRepoClassName(notebookRepoClassName);
-    LOGGER.info("Loading OldNotebookRepo Plugin: " + oldNotebookRepoClassName);
+    LOGGER.info("Loading OldNotebookRepo Plugin: {}", oldNotebookRepoClassName);
     if (builtinOldNotebookRepoClassNames.contains(oldNotebookRepoClassName) ||
             Boolean.parseBoolean(System.getProperty("zeppelin.isTest", "false"))) {
       try {
-        OldNotebookRepo notebookRepo = (OldNotebookRepo)
-                (Class.forName(oldNotebookRepoClassName).newInstance());
-        return notebookRepo;
+        return (OldNotebookRepo) (Class.forName(oldNotebookRepoClassName).newInstance());
       } catch (InstantiationException | IllegalAccessException | ClassNotFoundException e) {
         throw new IOException("Fail to instantiate notebookrepo from classpath directly:"
                 + oldNotebookRepoClassName);
@@ -155,16 +151,15 @@ public class PluginManager {
       return cachedLaunchers.get(launcherPlugin);
     }
     String launcherClassName = "org.apache.zeppelin.interpreter.launcher." + launcherPlugin;
-    LOGGER.info("Loading Interpreter Launcher Plugin: " + launcherClassName);
+    LOGGER.info("Loading Interpreter Launcher Plugin: {}", launcherClassName);
 
     if (builtinLauncherClassNames.contains(launcherClassName) ||
             Boolean.parseBoolean(System.getProperty("zeppelin.isTest", "false"))) {
       try {
-        InterpreterLauncher launcher = (InterpreterLauncher)
+        return (InterpreterLauncher)
                 (Class.forName(launcherClassName))
                         .getConstructor(ZeppelinConfiguration.class, RecoveryStorage.class)
                         .newInstance(zConf, recoveryStorage);
-        return launcher;
       } catch (InstantiationException | IllegalAccessException | ClassNotFoundException
               | NoSuchMethodException | InvocationTargetException e) {
         throw new IOException("Fail to instantiate InterpreterLauncher from classpath directly:"
@@ -194,19 +189,16 @@ public class PluginManager {
 
     File pluginFolder = new File(pluginsDir + "/" + pluginType + "/" + pluginName);
     if (!pluginFolder.exists() || pluginFolder.isFile()) {
-      LOGGER.warn("PluginFolder " + pluginFolder.getAbsolutePath() +
-          " doesn't exist or is not a directory");
+      LOGGER.warn("PluginFolder {} doesn't exist or is not a directory", pluginFolder.getAbsolutePath());
       return null;
     }
     List<URL> urls = new ArrayList<>();
     for (File file : pluginFolder.listFiles()) {
-      LOGGER.debug("Add file " + file.getAbsolutePath() + " to classpath of plugin: "
-          + pluginName);
+      LOGGER.debug("Add file {} to classpath of plugin: {}", file.getAbsolutePath(),  pluginName);
       urls.add(file.toURI().toURL());
     }
     if (urls.isEmpty()) {
-      LOGGER.warn("Can not load plugin " + pluginName +
-          ", because the plugin folder " + pluginFolder + " is empty.");
+      LOGGER.warn("Can not load plugin {}, because the plugin folder {} is empty.", pluginName , pluginFolder);
       return null;
     }
     return new URLClassLoader(urls.toArray(new URL[0]));
diff --git a/zeppelin-zengine/src/main/java/org/apache/zeppelin/search/LuceneSearch.java b/zeppelin-zengine/src/main/java/org/apache/zeppelin/search/LuceneSearch.java
index 2b3a24c..f0ccce0 100644
--- a/zeppelin-zengine/src/main/java/org/apache/zeppelin/search/LuceneSearch.java
+++ b/zeppelin-zengine/src/main/java/org/apache/zeppelin/search/LuceneSearch.java
@@ -71,7 +71,7 @@ import org.slf4j.LoggerFactory;
  * thread-safe.
  */
 public class LuceneSearch extends SearchService {
-  private static final Logger logger = LoggerFactory.getLogger(LuceneSearch.class);
+  private static final Logger LOGGER = LoggerFactory.getLogger(LuceneSearch.class);
 
   private static final String SEARCH_FIELD_TEXT = "contents";
   private static final String SEARCH_FIELD_TITLE = "header";
@@ -92,7 +92,7 @@ public class LuceneSearch extends SearchService {
       try {
         this.indexPath = Paths.get(conf.getZeppelinSearchIndexPath());
         this.indexDirectory = FSDirectory.open(indexPath);
-        logger.info("Use {} for storing lucene search index", this.indexPath);
+        LOGGER.info("Use {} for storing lucene search index", this.indexPath);
       } catch (IOException e) {
         throw new RuntimeException(
             "Failed to create index directory for search service. Use memory instead", e);
@@ -105,7 +105,7 @@ public class LuceneSearch extends SearchService {
     try {
       this.indexWriter = new IndexWriter(indexDirectory, indexWriterConfig);
     } catch (IOException e) {
-      logger.error("Failed to create new IndexWriter", e);
+      LOGGER.error("Failed to create new IndexWriter", e);
     }
   }
 
@@ -126,16 +126,16 @@ public class LuceneSearch extends SearchService {
           new MultiFieldQueryParser(new String[] {SEARCH_FIELD_TEXT, SEARCH_FIELD_TITLE}, analyzer);
 
       Query query = parser.parse(queryStr);
-      logger.debug("Searching for: " + query.toString(SEARCH_FIELD_TEXT));
+      LOGGER.debug("Searching for: {}", query.toString(SEARCH_FIELD_TEXT));
 
       SimpleHTMLFormatter htmlFormatter = new SimpleHTMLFormatter();
       Highlighter highlighter = new Highlighter(htmlFormatter, new QueryScorer(query));
 
       result = doSearch(indexSearcher, query, analyzer, highlighter);
     } catch (IOException e) {
-      logger.error("Failed to open index dir {}, make sure indexing finished OK", indexDirectory, e);
+      LOGGER.error("Failed to open index dir {}, make sure indexing finished OK", indexDirectory, e);
     } catch (ParseException e) {
-      logger.error("Failed to parse query " + queryStr, e);
+      LOGGER.error("Failed to parse query {}", queryStr, e);
     }
     return result;
   }
@@ -147,16 +147,16 @@ public class LuceneSearch extends SearchService {
     try {
       hits = searcher.search(query, 20).scoreDocs;
       for (int i = 0; i < hits.length; i++) {
-        logger.debug("doc={} score={}", hits[i].doc, hits[i].score);
+        LOGGER.debug("doc={} score={}", hits[i].doc, hits[i].score);
 
         int id = hits[i].doc;
         Document doc = searcher.doc(id);
         String path = doc.get(ID_FIELD);
         if (path != null) {
-          logger.debug((i + 1) + ". " + path);
+          LOGGER.debug( "{}. {}", (i + 1), path);
           String title = doc.get("title");
           if (title != null) {
-            logger.debug("   Title: {}", doc.get("title"));
+            LOGGER.debug("   Title: {}", doc.get("title"));
           }
 
           String text = doc.get(SEARCH_FIELD_TEXT);
@@ -168,10 +168,10 @@ public class LuceneSearch extends SearchService {
                 TokenSources.getTokenStream(
                     searcher.getIndexReader(), id, SEARCH_FIELD_TEXT, analyzer);
             TextFragment[] frag = highlighter.getBestTextFragments(tokenStream, text, true, 3);
-            logger.debug("    {} fragments found for query '{}'", frag.length, query);
+            LOGGER.debug("    {} fragments found for query '{}'", frag.length, query);
             for (int j = 0; j < frag.length; j++) {
               if ((frag[j] != null) && (frag[j].getScore() > 0)) {
-                logger.debug("    Fragment: {}", frag[j].toString());
+                LOGGER.debug("    Fragment: {}", frag[j].toString());
               }
             }
             fragment = (frag != null && frag.length > 0) ? frag[0].toString() : "";
@@ -191,11 +191,11 @@ public class LuceneSearch extends SearchService {
                   "id", path, // <noteId>/paragraph/<paragraphId>
                   "name", title, "snippet", fragment, "text", text, "header", header));
         } else {
-          logger.info("{}. No {} for this document", i + 1, ID_FIELD);
+          LOGGER.info("{}. No {} for this document", i + 1, ID_FIELD);
         }
       }
     } catch (IOException | InvalidTokenOffsetsException e) {
-      logger.error("Exception on searching for {}", query, e);
+      LOGGER.error("Exception on searching for {}", query, e);
     }
     return matchingParagraphs;
   }
@@ -214,9 +214,9 @@ public class LuceneSearch extends SearchService {
   private void updateIndexNoteName(Note note) throws IOException {
     String noteName = note.getName();
     String noteId = note.getId();
-    logger.debug("Indexing Notebook {}, '{}'", noteId, noteName);
+    LOGGER.debug("Indexing Notebook {}, '{}'", noteId, noteName);
     if (null == noteName || noteName.isEmpty()) {
-      logger.debug("Skipping empty notebook name");
+      LOGGER.debug("Skipping empty notebook name");
       return;
     }
     updateDoc(noteId, noteName, null);
@@ -224,7 +224,7 @@ public class LuceneSearch extends SearchService {
 
   private void updateIndexParagraph(Note note, Paragraph p) throws IOException {
     if (p.getText() == null) {
-      logger.debug("Skipping empty paragraph");
+      LOGGER.debug("Skipping empty paragraph");
       return;
     }
     updateDoc(note.getId(), note.getName(), p);
@@ -246,7 +246,7 @@ public class LuceneSearch extends SearchService {
       indexWriter.updateDocument(new Term(ID_FIELD, id), doc);
       indexWriter.commit();
     } catch (IOException e) {
-      logger.error("Failed to update index of notebook {}", noteId, e);
+      LOGGER.error("Failed to update index of notebook {}", noteId, e);
     }
   }
 
@@ -313,15 +313,15 @@ public class LuceneSearch extends SearchService {
         docsIndexed++;
       }
     } catch (IOException e) {
-      logger.error("Failed to index all Notebooks", e);
+      LOGGER.error("Failed to index all Notebooks", e);
     } finally {
       try { // save what's been indexed, even if not full collection
         indexWriter.commit();
       } catch (IOException e) {
-        logger.error("Failed to save index", e);
+        LOGGER.error("Failed to save index", e);
       }
       long end = System.nanoTime();
-      logger.info(
+      LOGGER.info(
           "Indexing {} notebooks took {}ms",
           docsIndexed,
           TimeUnit.NANOSECONDS.toMillis(end - start));
@@ -337,7 +337,7 @@ public class LuceneSearch extends SearchService {
       addIndexDocAsync(note);
       indexWriter.commit();
     } catch (IOException e) {
-      logger.error("Failed to add note {} to index", note, e);
+      LOGGER.error("Failed to add note {} to index", note, e);
     }
   }
 
@@ -351,7 +351,7 @@ public class LuceneSearch extends SearchService {
     indexNoteName(indexWriter, note.getId(), note.getName());
     for (Paragraph doc : note.getParagraphs()) {
       if (doc.getText() == null) {
-        logger.debug("Skipping empty paragraph");
+        LOGGER.debug("Skipping empty paragraph");
         continue;
       }
       indexDoc(indexWriter, note.getId(), note.getName(), doc);
@@ -377,14 +377,14 @@ public class LuceneSearch extends SearchService {
 
   private void deleteDoc(String noteId, Paragraph p) {
     String fullNoteOrJustParagraph = formatDeleteId(noteId, p);
-    logger.debug("Deleting note {}, out of: {}", noteId, indexWriter.numDocs());
+    LOGGER.debug("Deleting note {}, out of: {}", noteId, indexWriter.numDocs());
     try {
       indexWriter.deleteDocuments(new WildcardQuery(new Term(ID_FIELD, fullNoteOrJustParagraph)));
       indexWriter.commit();
     } catch (IOException e) {
-      logger.error("Failed to delete {} from index by '{}'", noteId, fullNoteOrJustParagraph, e);
+      LOGGER.error("Failed to delete {} from index by '{}'", noteId, fullNoteOrJustParagraph, e);
     }
-    logger.debug("Done, index contains {} docs now" + indexWriter.numDocs());
+    LOGGER.debug("Done, index contains {} docs now {}", indexWriter.numDocs());
   }
 
   /* (non-Javadoc)
@@ -395,7 +395,7 @@ public class LuceneSearch extends SearchService {
     try {
       indexWriter.close();
     } catch (IOException e) {
-      logger.error("Failed to .close() the notebook index", e);
+      LOGGER.error("Failed to .close() the notebook index", e);
     }
   }
 
@@ -405,9 +405,9 @@ public class LuceneSearch extends SearchService {
    * @throws IOException
    */
   private void indexNoteName(IndexWriter w, String noteId, String noteName) throws IOException {
-    logger.debug("Indexing Notebook {}, '{}'", noteId, noteName);
+    LOGGER.debug("Indexing Notebook {}, '{}'", noteId, noteName);
     if (null == noteName || noteName.isEmpty()) {
-      logger.debug("Skipping empty notebook name");
+      LOGGER.debug("Skipping empty notebook name");
       return;
     }
     indexDoc(w, noteId, noteName, null);
@@ -424,12 +424,12 @@ public class LuceneSearch extends SearchService {
   @Override
   public void startRebuildIndex(Stream<Note> notes) {
     Thread thread = new Thread(() -> {
-      logger.info("Starting rebuild index");
+      LOGGER.info("Starting rebuild index");
       notes.forEach(note -> {
         addIndexDoc(note);
         note.unLoad();
       });
-      logger.info("Finish rebuild index");
+      LOGGER.info("Finish rebuild index");
     });
     thread.setName("LuceneSearch-RebuildIndex-Thread");
     thread.start();
diff --git a/zeppelin-zengine/src/main/java/org/apache/zeppelin/storage/ConfigStorage.java b/zeppelin-zengine/src/main/java/org/apache/zeppelin/storage/ConfigStorage.java
index f4a4f3e..da6f20e 100644
--- a/zeppelin-zengine/src/main/java/org/apache/zeppelin/storage/ConfigStorage.java
+++ b/zeppelin-zengine/src/main/java/org/apache/zeppelin/storage/ConfigStorage.java
@@ -79,8 +79,7 @@ public abstract class ConfigStorage {
 
   protected InterpreterInfoSaving buildInterpreterInfoSaving(String json) {
     //TODO(zjffdu) This kind of post processing is ugly.
-    JsonParser jsonParser = new JsonParser();
-    JsonObject jsonObject = jsonParser.parse(json).getAsJsonObject();
+    JsonObject jsonObject = JsonParser.parseString(json).getAsJsonObject();
     InterpreterInfoSaving infoSaving = InterpreterInfoSaving.fromJson(json);
     for (InterpreterSetting interpreterSetting : infoSaving.interpreterSettings.values()) {
       // Always use separate interpreter process
diff --git a/zeppelin-zengine/src/main/java/org/apache/zeppelin/user/Credentials.java b/zeppelin-zengine/src/main/java/org/apache/zeppelin/user/Credentials.java
index fd2a9d2..51b3d62 100644
--- a/zeppelin-zengine/src/main/java/org/apache/zeppelin/user/Credentials.java
+++ b/zeppelin-zengine/src/main/java/org/apache/zeppelin/user/Credentials.java
@@ -36,7 +36,7 @@ import com.google.gson.GsonBuilder;
  */
 public class Credentials {
 
-  private static final Logger LOG = LoggerFactory.getLogger(Credentials.class);
+  private static final Logger LOGGER = LoggerFactory.getLogger(Credentials.class);
 
   private ConfigStorage storage;
   private Map<String, UserCredentials> credentialsMap;
@@ -64,7 +64,7 @@ public class Credentials {
         gson = builder.create();
         loadFromFile();
       } catch (IOException e) {
-        LOG.error("Fail to create ConfigStorage for Credentials. Persistenz will be disabled", e);
+        LOGGER.error("Fail to create ConfigStorage for Credentials. Persistenz will be disabled", e);
         encryptor = null;
         storage = null;
         gson = null;
diff --git a/zeppelin-zengine/src/main/java/org/apache/zeppelin/user/CredentialsInfoSaving.java b/zeppelin-zengine/src/main/java/org/apache/zeppelin/user/CredentialsInfoSaving.java
index 48bb24d..e2af406 100644
--- a/zeppelin-zengine/src/main/java/org/apache/zeppelin/user/CredentialsInfoSaving.java
+++ b/zeppelin-zengine/src/main/java/org/apache/zeppelin/user/CredentialsInfoSaving.java
@@ -26,15 +26,15 @@ import java.util.Map;
  * Helper class to save credentials
  */
 public class CredentialsInfoSaving implements JsonSerializable {
-  private static final Gson gson = new Gson();
+  private static final Gson GSON = new Gson();
 
   public Map<String, UserCredentials> credentialsMap;
 
   public String toJson() {
-    return gson.toJson(this);
+    return GSON.toJson(this);
   }
 
   public static CredentialsInfoSaving fromJson(String json) {
-    return gson.fromJson(json, CredentialsInfoSaving.class);
+    return GSON.fromJson(json, CredentialsInfoSaving.class);
   }
 }
diff --git a/zeppelin-zengine/src/main/java/org/apache/zeppelin/util/FileUtils.java b/zeppelin-zengine/src/main/java/org/apache/zeppelin/util/FileUtils.java
index 1248d7e..2698ffc 100644
--- a/zeppelin-zengine/src/main/java/org/apache/zeppelin/util/FileUtils.java
+++ b/zeppelin-zengine/src/main/java/org/apache/zeppelin/util/FileUtils.java
@@ -23,6 +23,7 @@ import java.io.File;
 import java.io.FileInputStream;
 import java.io.FileOutputStream;
 import java.io.IOException;
+import java.nio.charset.StandardCharsets;
 import java.nio.file.FileSystem;
 import java.nio.file.FileSystems;
 import java.nio.file.Files;
@@ -33,6 +34,10 @@ import java.util.Set;
 
 public class FileUtils {
 
+  private FileUtils() {
+    throw new IllegalStateException("Utility class");
+  }
+
   public static void atomicWriteToFile(String content, File file, Set<PosixFilePermission> permissions) throws IOException {
     FileSystem defaultFileSystem = FileSystems.getDefault();
     Path destinationFilePath = defaultFileSystem.getPath(file.getCanonicalPath());
@@ -43,7 +48,7 @@ public class FileUtils {
       Files.setPosixFilePermissions(tempFile.toPath(), permissions);
     }
     try (FileOutputStream out = new FileOutputStream(tempFile)) {
-      IOUtils.write(content, out);
+      IOUtils.write(content, out, StandardCharsets.UTF_8);
     } catch (IOException iox) {
       if (!tempFile.delete()) {
         tempFile.deleteOnExit();
@@ -68,7 +73,7 @@ public class FileUtils {
 
   public static String readFromFile(File file) throws IOException {
     try (FileInputStream is = new FileInputStream(file)) {
-      return IOUtils.toString(is);
+      return IOUtils.toString(is, StandardCharsets.UTF_8);
     }
   }
 }
diff --git a/zeppelin-zengine/src/main/java/org/apache/zeppelin/util/ReflectionUtils.java b/zeppelin-zengine/src/main/java/org/apache/zeppelin/util/ReflectionUtils.java
index ca09992..2c9f48f 100644
--- a/zeppelin-zengine/src/main/java/org/apache/zeppelin/util/ReflectionUtils.java
+++ b/zeppelin-zengine/src/main/java/org/apache/zeppelin/util/ReflectionUtils.java
@@ -27,8 +27,12 @@ import java.lang.reflect.InvocationTargetException;
  */
 public class ReflectionUtils {
 
+  private ReflectionUtils() {
+    throw new IllegalStateException("Utility class");
+  }
+
   public static Class<?> getClazz(String className) throws IOException {
-    Class clazz = null;
+    Class<?> clazz = null;
     try {
       clazz = Class.forName(className, true, Thread.currentThread().getContextClassLoader());
     } catch (ClassNotFoundException e) {
@@ -42,10 +46,7 @@ public class ReflectionUtils {
     T instance;
     try {
       instance = clazz.newInstance();
-    } catch (InstantiationException e) {
-      throw new IOException(
-          "Unable to instantiate class with 0 arguments: " + clazz.getName(), e);
-    } catch (IllegalAccessException e) {
+    } catch (InstantiationException | IllegalAccessException e) {
       throw new IOException(
           "Unable to instantiate class with 0 arguments: " + clazz.getName(), e);
     }
@@ -60,19 +61,7 @@ public class ReflectionUtils {
     try {
       Constructor<T> constructor = clazz.getConstructor(parameterTypes);
       instance = constructor.newInstance(parameters);
-    } catch (InstantiationException e) {
-      throw new IOException(
-          "Unable to instantiate class with " + parameters.length + " arguments: " +
-              clazz.getName(), e);
-    } catch (IllegalAccessException e) {
-      throw new IOException(
-          "Unable to instantiate class with " + parameters.length + " arguments: " +
-              clazz.getName(), e);
-    } catch (NoSuchMethodException e) {
-      throw new IOException(
-          "Unable to instantiate class with " + parameters.length + " arguments: " +
-              clazz.getName(), e);
-    } catch (InvocationTargetException e) {
+    } catch (InstantiationException | IllegalAccessException | NoSuchMethodException | InvocationTargetException e) {
       throw new IOException(
           "Unable to instantiate class with " + parameters.length + " arguments: " +
               clazz.getName(), e);
diff --git a/zeppelin-zengine/src/test/java/org/apache/zeppelin/helium/HeliumApplicationFactoryTest.java b/zeppelin-zengine/src/test/java/org/apache/zeppelin/helium/HeliumApplicationFactoryTest.java
index de2a331..50c58dc 100644
--- a/zeppelin-zengine/src/test/java/org/apache/zeppelin/helium/HeliumApplicationFactoryTest.java
+++ b/zeppelin-zengine/src/test/java/org/apache/zeppelin/helium/HeliumApplicationFactoryTest.java
@@ -221,9 +221,8 @@ public class HeliumApplicationFactoryTest extends AbstractInterpreterTest {
     p1.setText("%fake ");
 
     // make sure that p1's repl is null
-    Interpreter intp = null;
     try {
-      intp = p1.getBindedInterpreter();
+      p1.getBindedInterpreter();
       fail("Should throw InterpreterNotFoundException");
     } catch (InterpreterNotFoundException e) {
 
diff --git a/zeppelin-zengine/src/test/java/org/apache/zeppelin/interpreter/InterpreterSettingManagerTest.java b/zeppelin-zengine/src/test/java/org/apache/zeppelin/interpreter/InterpreterSettingManagerTest.java
index bf7b048..af90220 100644
--- a/zeppelin-zengine/src/test/java/org/apache/zeppelin/interpreter/InterpreterSettingManagerTest.java
+++ b/zeppelin-zengine/src/test/java/org/apache/zeppelin/interpreter/InterpreterSettingManagerTest.java
@@ -35,7 +35,6 @@ import java.util.Map;
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNull;
 import static org.junit.Assert.assertTrue;
 import static org.junit.Assert.fail;
 import static org.mockito.Mockito.mock;
diff --git a/zeppelin-zengine/src/test/java/org/apache/zeppelin/interpreter/ManagedInterpreterGroupTest.java b/zeppelin-zengine/src/test/java/org/apache/zeppelin/interpreter/ManagedInterpreterGroupTest.java
index 974ddc2..fd417cf 100644
--- a/zeppelin-zengine/src/test/java/org/apache/zeppelin/interpreter/ManagedInterpreterGroupTest.java
+++ b/zeppelin-zengine/src/test/java/org/apache/zeppelin/interpreter/ManagedInterpreterGroupTest.java
@@ -19,8 +19,6 @@ package org.apache.zeppelin.interpreter;
 
 import org.junit.Before;
 import org.junit.Test;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 import org.eclipse.aether.RepositoryException;
 
 import java.io.IOException;
@@ -33,8 +31,6 @@ import static org.junit.Assert.assertEquals;
 
 public class ManagedInterpreterGroupTest {
 
-  private static final Logger LOGGER = LoggerFactory.getLogger(ManagedInterpreterGroupTest.class);
-
   private InterpreterSetting interpreterSetting;
 
   @Before
diff --git a/zeppelin-zengine/src/test/java/org/apache/zeppelin/interpreter/install/InstallInterpreterTest.java b/zeppelin-zengine/src/test/java/org/apache/zeppelin/interpreter/install/InstallInterpreterTest.java
index e934f1a..04161b9 100644
--- a/zeppelin-zengine/src/test/java/org/apache/zeppelin/interpreter/install/InstallInterpreterTest.java
+++ b/zeppelin-zengine/src/test/java/org/apache/zeppelin/interpreter/install/InstallInterpreterTest.java
@@ -8,6 +8,7 @@ import org.junit.Test;
 
 import java.io.File;
 import java.io.IOException;
+import java.nio.charset.StandardCharsets;
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertTrue;
@@ -52,7 +53,7 @@ public class InstallInterpreterTest {
     interpreterList += "intp1   org.apache.commons:commons-csv:1.1   test interpreter 1\n";
     interpreterList += "intp2   org.apache.commons:commons-math3:3.6.1 test interpreter 2\n";
 
-    FileUtils.writeStringToFile(new File(tmpDir, "conf/interpreter-list"), interpreterList);
+    FileUtils.writeStringToFile(new File(tmpDir, "conf/interpreter-list"), interpreterList, StandardCharsets.UTF_8);
 
     installer = new InstallInterpreter(interpreterListFile, interpreterBaseDir, localRepoDir
         .getAbsolutePath());
diff --git a/zeppelin-zengine/src/test/java/org/apache/zeppelin/interpreter/integration/DownloadUtils.java b/zeppelin-zengine/src/test/java/org/apache/zeppelin/interpreter/integration/DownloadUtils.java
index 4e6211c..49d3785 100644
--- a/zeppelin-zengine/src/test/java/org/apache/zeppelin/interpreter/integration/DownloadUtils.java
+++ b/zeppelin-zengine/src/test/java/org/apache/zeppelin/interpreter/integration/DownloadUtils.java
@@ -20,7 +20,6 @@ package org.apache.zeppelin.interpreter.integration;
 import org.apache.commons.io.FileUtils;
 import org.apache.commons.io.IOUtils;
 import org.apache.commons.lang3.StringUtils;
-import org.apache.zeppelin.interpreter.InterpreterException;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -30,6 +29,7 @@ import java.io.IOException;
 import java.io.InputStream;
 import java.io.InputStreamReader;
 import java.net.URL;
+import java.nio.charset.StandardCharsets;
 
 /**
  * Utility class for downloading spark/flink. This is used for spark/flink integration test.
@@ -104,7 +104,7 @@ public class DownloadUtils {
   private static void download(String project, String version, String postFix, String projectPath) {
     String projectDownloadFolder = downloadFolder + "/" + project;
     try {
-      String preferredMirror = IOUtils.toString(new URL("https://www.apache.org/dyn/closer.lua?preferred=true"));
+      String preferredMirror = IOUtils.toString(new URL("https://www.apache.org/dyn/closer.lua?preferred=true"), StandardCharsets.UTF_8);
       File downloadFile = new File(projectDownloadFolder + "/" + project + "-" + version + postFix);
       String downloadURL = preferredMirror + "/" + projectPath + "/" + project + "-" + version + "/" + project + "-" + version + postFix;
       runShellCommand(new String[]{"wget", downloadURL, "-P", projectDownloadFolder});
@@ -153,6 +153,7 @@ public class DownloadUtils {
       this.is = is;
     }
 
+    @Override
     public void run() {
       try {
         InputStreamReader isr = new InputStreamReader(is);
diff --git a/zeppelin-zengine/src/test/java/org/apache/zeppelin/interpreter/lifecycle/TimeoutLifecycleManagerTest.java b/zeppelin-zengine/src/test/java/org/apache/zeppelin/interpreter/lifecycle/TimeoutLifecycleManagerTest.java
index a902d23..8aa8232 100644
--- a/zeppelin-zengine/src/test/java/org/apache/zeppelin/interpreter/lifecycle/TimeoutLifecycleManagerTest.java
+++ b/zeppelin-zengine/src/test/java/org/apache/zeppelin/interpreter/lifecycle/TimeoutLifecycleManagerTest.java
@@ -28,7 +28,6 @@ import org.apache.zeppelin.scheduler.Job;
 import org.junit.Test;
 
 import java.io.File;
-import java.io.FileWriter;
 import java.io.IOException;
 import java.util.Map;
 
@@ -85,7 +84,7 @@ public class TimeoutLifecycleManagerTest extends AbstractInterpreterTest {
     final RemoteInterpreter remoteInterpreter = (RemoteInterpreter) interpreterFactory.getInterpreter("test.sleep", new ExecutionContextBuilder().setUser("user1").setNoteId("note1").setDefaultInterpreterGroup("test").createExecutionContext());
 
     // simulate how zeppelin submit paragraph
-    remoteInterpreter.getScheduler().submit(new Job("test-job", null) {
+    remoteInterpreter.getScheduler().submit(new Job<Object>("test-job", null) {
       @Override
       public Object getReturn() {
         return null;
diff --git a/zeppelin-zengine/src/test/java/org/apache/zeppelin/interpreter/remote/AppendOutputRunnerTest.java b/zeppelin-zengine/src/test/java/org/apache/zeppelin/interpreter/remote/AppendOutputRunnerTest.java
index 7bbd2b8..e245b24 100644
--- a/zeppelin-zengine/src/test/java/org/apache/zeppelin/interpreter/remote/AppendOutputRunnerTest.java
+++ b/zeppelin-zengine/src/test/java/org/apache/zeppelin/interpreter/remote/AppendOutputRunnerTest.java
@@ -33,7 +33,7 @@ import java.util.concurrent.ScheduledExecutorService;
 import java.util.concurrent.ScheduledFuture;
 import java.util.concurrent.TimeUnit;
 
-import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.fail;
 import static org.mockito.Matchers.any;
 import static org.mockito.Matchers.anyInt;
@@ -158,7 +158,7 @@ public class AppendOutputRunnerTest {
 
     String loggerString = "Processing size for buffered append-output is high: " +
         (data.length() * numEvents) + " characters.";
-    assertTrue(loggerString.equals(sizeWarnLogEntry.getMessage()));
+    assertEquals(loggerString, sizeWarnLogEntry.getMessage());
   }
 
   private class BombardEvents implements Runnable {
diff --git a/zeppelin-zengine/src/test/java/org/apache/zeppelin/interpreter/remote/RemoteInterpreterTest.java b/zeppelin-zengine/src/test/java/org/apache/zeppelin/interpreter/remote/RemoteInterpreterTest.java
index 63e0bdc..1759595 100644
--- a/zeppelin-zengine/src/test/java/org/apache/zeppelin/interpreter/remote/RemoteInterpreterTest.java
+++ b/zeppelin-zengine/src/test/java/org/apache/zeppelin/interpreter/remote/RemoteInterpreterTest.java
@@ -377,7 +377,7 @@ public class RemoteInterpreterTest extends AbstractInterpreterTest {
         new OptionInput.ParamOption("value1", "param1"),
         new OptionInput.ParamOption("value2", "param2")
     };
-    List<Object> defaultValues = new ArrayList();
+    List<Object> defaultValues = new ArrayList<>();
     defaultValues.add("default1");
     defaultValues.add("default2");
     gui.checkbox("checkbox_id", paramOptions, defaultValues);
diff --git a/zeppelin-zengine/src/test/java/org/apache/zeppelin/notebook/NotebookTest.java b/zeppelin-zengine/src/test/java/org/apache/zeppelin/notebook/NotebookTest.java
index 9554dcf..b8415c6 100644
--- a/zeppelin-zengine/src/test/java/org/apache/zeppelin/notebook/NotebookTest.java
+++ b/zeppelin-zengine/src/test/java/org/apache/zeppelin/notebook/NotebookTest.java
@@ -277,7 +277,7 @@ public class NotebookTest extends AbstractInterpreterTest implements ParagraphJo
     Note note = notebook.createNote("note1", anonymous);
     // run with default repl
     Paragraph p1 = note.addNewParagraph(AuthenticationInfo.ANONYMOUS);
-    Map config = p1.getConfig();
+    Map<String, Object> config = p1.getConfig();
     config.put("enabled", true);
     p1.setConfig(config);
     p1.setText("%mock1 hello world");
@@ -330,7 +330,7 @@ public class NotebookTest extends AbstractInterpreterTest implements ParagraphJo
     Note copiedNote = notebookRepo.get(note2.getId(), note2.getPath(), anonymous);
     notebook.reloadAllNotes(anonymous);
     List<Note> notes = notebook.getAllNotes();
-    assertEquals(notes.size(), 2);
+    assertEquals(2 , notes.size());
     assertEquals(notes.get(0).getId(), copiedNote.getId());
     assertEquals(notes.get(0).getName(), copiedNote.getName());
     // format has make some changes due to
@@ -347,7 +347,7 @@ public class NotebookTest extends AbstractInterpreterTest implements ParagraphJo
     // delete notebook from notebook list when reloadAllNotes() is called
     notebook.reloadAllNotes(anonymous);
     notes = notebook.getAllNotes();
-    assertEquals(notes.size(), 2);
+    assertEquals(2, notes.size());
   }
 
   @Test
@@ -357,7 +357,7 @@ public class NotebookTest extends AbstractInterpreterTest implements ParagraphJo
       assertEquals(0, notebook.getAllNotes().size());
       note = notebook.createNote("note1", anonymous);
       Paragraph p1 = note.addNewParagraph(AuthenticationInfo.ANONYMOUS);
-      Map config = p1.getConfig();
+      Map<String, Object> config = p1.getConfig();
       config.put("enabled", true);
       p1.setConfig(config);
       p1.setText("hello world");
@@ -375,7 +375,7 @@ public class NotebookTest extends AbstractInterpreterTest implements ParagraphJo
 
     // run with default repl
     Paragraph p1 = note.addNewParagraph(AuthenticationInfo.ANONYMOUS);
-    Map config = p1.getConfig();
+    Map<String, Object> config = p1.getConfig();
     config.put("enabled", true);
     p1.setConfig(config);
     p1.setText("hello world");
@@ -407,7 +407,7 @@ public class NotebookTest extends AbstractInterpreterTest implements ParagraphJo
   public void testClearParagraphOutput() throws IOException, SchedulerException {
     Note note = notebook.createNote("note1", anonymous);
     Paragraph p1 = note.addNewParagraph(AuthenticationInfo.ANONYMOUS);
-    Map config = p1.getConfig();
+    Map<String, Object> config = p1.getConfig();
     config.put("enabled", true);
     p1.setConfig(config);
     p1.setText("%mock1 hello world");
@@ -432,7 +432,7 @@ public class NotebookTest extends AbstractInterpreterTest implements ParagraphJo
     note.run(p1.getId());
 
     Thread.sleep(2 * 1000);
-    assertEquals(p1.getStatus(), Status.FINISHED);
+    assertEquals(Status.FINISHED, p1.getStatus());
     assertNull(p1.getDateStarted());
     notebook.removeNote(note, anonymous);
   }
@@ -445,7 +445,7 @@ public class NotebookTest extends AbstractInterpreterTest implements ParagraphJo
       Note note = notebook.createNote("note1", anonymous);
       int mock1ProcessNum = interpreterSettingManager.getByName("mock1").getAllInterpreterGroups().size();
       Paragraph p = note.addNewParagraph(AuthenticationInfo.ANONYMOUS);
-      Map config = new HashMap<>();
+      Map<String, Object> config = new HashMap<>();
       p.setConfig(config);
       p.setText("%mock1 sleep 100000");
       p.execute(false);
@@ -479,7 +479,7 @@ public class NotebookTest extends AbstractInterpreterTest implements ParagraphJo
     note.run(p1.getId());
 
     Thread.sleep(2 * 1000);
-    assertEquals(p1.getStatus(), Status.ERROR);
+    assertEquals(Status.ERROR, p1.getStatus());
     InterpreterResult result = p1.getReturn();
     assertEquals(InterpreterResult.Code.ERROR, result.code());
     assertEquals("Interpreter invalid not found", result.message().get(0).getData());
@@ -493,14 +493,14 @@ public class NotebookTest extends AbstractInterpreterTest implements ParagraphJo
 
     // p1
     Paragraph p1 = note.addNewParagraph(AuthenticationInfo.ANONYMOUS);
-    Map config1 = p1.getConfig();
+    Map<String, Object> config1 = p1.getConfig();
     config1.put("enabled", true);
     p1.setConfig(config1);
     p1.setText("%mock1 p1");
 
     // p2
     Paragraph p2 = note.addNewParagraph(AuthenticationInfo.ANONYMOUS);
-    Map config2 = p2.getConfig();
+    Map<String, Object> config2 = p2.getConfig();
     config2.put("enabled", false);
     p2.setConfig(config2);
     p2.setText("%mock1 p2");
@@ -524,7 +524,7 @@ public class NotebookTest extends AbstractInterpreterTest implements ParagraphJo
     // create a note and a paragraph
     Note note = notebook.createNote("note1", anonymous);
     Paragraph p = note.addNewParagraph(AuthenticationInfo.ANONYMOUS);
-    Map config = new HashMap<>();
+    Map<String, Object> config = new HashMap<>();
     p.setConfig(config);
     p.setText("p1");
     Date dateFinished = p.getDateFinished();
@@ -557,7 +557,7 @@ public class NotebookTest extends AbstractInterpreterTest implements ParagraphJo
     // append running and pending paragraphs to the note
     for (Status status : new Status[]{Status.RUNNING, Status.PENDING}) {
       Paragraph p = note.addNewParagraph(AuthenticationInfo.ANONYMOUS);
-      Map config = new HashMap<>();
+      Map<String, Object> config = new HashMap<>();
       p.setConfig(config);
       p.setText("p");
       p.setStatus(status);
@@ -565,7 +565,7 @@ public class NotebookTest extends AbstractInterpreterTest implements ParagraphJo
     }
 
     // set cron scheduler, once a second
-    Map config = note.getConfig();
+    Map<String, Object> config = note.getConfig();
     config.put("enabled", true);
     config.put("cron", "* * * * * ?");
     note.setConfig(config);
@@ -597,7 +597,7 @@ public class NotebookTest extends AbstractInterpreterTest implements ParagraphJo
     executeNewParagraphByCron(note, everySecondCron);
     afterStatusChangedListener = new StatusChangedListener() {
       @Override
-      public void onStatusChanged(Job job, Status before, Status after) {
+      public void onStatusChanged(Job<?> job, Status before, Status after) {
         if (after == Status.FINISHED) {
           jobsToExecuteCount.countDown();
         }
@@ -633,7 +633,7 @@ public class NotebookTest extends AbstractInterpreterTest implements ParagraphJo
       executeNewParagraphByCron(note, everySecondCron);
       afterStatusChangedListener = new StatusChangedListener() {
         @Override
-        public void onStatusChanged(Job job, Status before, Status after) {
+        public void onStatusChanged(Job<?> job, Status before, Status after) {
           if (after == Status.FINISHED) {
             jobsToExecuteCount.countDown();
           }
@@ -663,7 +663,7 @@ public class NotebookTest extends AbstractInterpreterTest implements ParagraphJo
       executeNewParagraphByCron(note, everySecondCron);
       afterStatusChangedListener = new StatusChangedListener() {
         @Override
-        public void onStatusChanged(Job job, Status before, Status after) {
+        public void onStatusChanged(Job<?> job, Status before, Status after) {
           if (after == Status.FINISHED) {
             jobsToExecuteCount.countDown();
           }
@@ -682,7 +682,7 @@ public class NotebookTest extends AbstractInterpreterTest implements ParagraphJo
       executeNewParagraphByCron(noteNameSystem, everySecondCron);
       afterStatusChangedListener = new StatusChangedListener() {
         @Override
-        public void onStatusChanged(Job job, Status before, Status after) {
+        public void onStatusChanged(Job<?> job, Status before, Status after) {
           if (after == Status.FINISHED) {
             jobsToExecuteCountNameSystem.countDown();
           }
@@ -712,7 +712,7 @@ public class NotebookTest extends AbstractInterpreterTest implements ParagraphJo
     Note note = notebook.createNote("note1", anonymous);
 
     Paragraph p = note.addNewParagraph(AuthenticationInfo.ANONYMOUS);
-    Map config = new HashMap<>();
+    Map<String, Object> config = new HashMap<>();
     p.setConfig(config);
     p.setText("%mock1 sleep 1000");
 
@@ -759,24 +759,19 @@ public class NotebookTest extends AbstractInterpreterTest implements ParagraphJo
       throws IOException, InterruptedException, InterpreterNotFoundException {
     // create a cron scheduled note.
     Note cronNote = notebook.createNote("note1", anonymous);
-
-    cronNote.setConfig(new HashMap() {
-      {
-        put("cron", "1/5 * * * * ?");
-        put("cronExecutingUser", anonymous.getUser());
-        put("releaseresource", true);
-      }
-    });
+    Map<String, Object> config = new HashMap<>();
+    config.put("cron", "1/5 * * * * ?");
+    config.put("cronExecutingUser", anonymous.getUser());
+    config.put("releaseresource", true);
+    cronNote.setConfig(config);
     RemoteInterpreter cronNoteInterpreter =
         (RemoteInterpreter) interpreterFactory.getInterpreter("mock1", new ExecutionContextBuilder().setUser(anonymous.getUser()).setNoteId(cronNote.getId()).setDefaultInterpreterGroup("test").createExecutionContext());
 
     // create a paragraph of the cron scheduled note.
     Paragraph cronNoteParagraph = cronNote.addNewParagraph(AuthenticationInfo.ANONYMOUS);
-    cronNoteParagraph.setConfig(new HashMap() {
-      {
-        put("enabled", true);
-      }
-    });
+    config = new HashMap<>();
+    config.put("enabled", true);
+    cronNoteParagraph.setConfig(config);
     cronNoteParagraph.setText("%mock1 sleep 1000");
 
     // create another note
@@ -787,11 +782,9 @@ public class NotebookTest extends AbstractInterpreterTest implements ParagraphJo
 
     // create a paragraph of another note
     Paragraph anotherNoteParagraph = anotherNote.addNewParagraph(AuthenticationInfo.ANONYMOUS);
-    anotherNoteParagraph.setConfig(new HashMap() {
-      {
-        put("enabled", true);
-      }
-    });
+    config = new HashMap<>();
+    config.put("enabled", true);
+    anotherNoteParagraph.setConfig(config);
     anotherNoteParagraph.setText("%mock2 echo 1");
 
     // run the paragraph of another note
@@ -821,13 +814,11 @@ public class NotebookTest extends AbstractInterpreterTest implements ParagraphJo
     assertTrue(anotherNoteInterpreter.isOpened());
 
     // remove cron scheduler
-    cronNote.setConfig(new HashMap() {
-      {
-        put("cron", null);
-        put("cronExecutingUser", null);
-        put("releaseresource", null);
-      }
-    });
+    config = new HashMap<>();
+    config.put("cron", null);
+    config.put("cronExecutingUser", null);
+    config.put("releaseresource", null);
+    cronNote.setConfig(config);
     schedulerService.refreshCron(cronNote.getId());
 
     // remove notebooks
@@ -901,7 +892,7 @@ public class NotebookTest extends AbstractInterpreterTest implements ParagraphJo
     p.setStatus(Status.RUNNING);
     Note cloneNote = notebook.cloneNote(note.getId(), "clone note", anonymous);
     Paragraph cp = cloneNote.getParagraph(0);
-    assertEquals(cp.getStatus(), Status.READY);
+    assertEquals(Status.READY, cp.getStatus());
 
     // Keep same ParagraphId
     assertEquals(cp.getId(), p.getId());
@@ -1039,14 +1030,14 @@ public class NotebookTest extends AbstractInterpreterTest implements ParagraphJo
     // create a note and a paragraph
     Note note = notebook.createNote("note1", anonymous);
     // empty owners, readers or writers means note is public
-    assertEquals(authorizationService.isOwner(note.getId(),
-        new HashSet<>(Arrays.asList("user2"))), true);
-    assertEquals(authorizationService.isReader(note.getId(),
-        new HashSet<>(Arrays.asList("user2"))), true);
-    assertEquals(authorizationService.isRunner(note.getId(),
-        new HashSet<>(Arrays.asList("user2"))), true);
-    assertEquals(authorizationService.isWriter(note.getId(),
-        new HashSet<>(Arrays.asList("user2"))), true);
+    assertTrue(authorizationService.isOwner(note.getId(),
+        new HashSet<>(Arrays.asList("user2"))));
+    assertTrue(authorizationService.isReader(note.getId(),
+        new HashSet<>(Arrays.asList("user2"))));
+    assertTrue(authorizationService.isRunner(note.getId(),
+        new HashSet<>(Arrays.asList("user2"))));
+    assertTrue(authorizationService.isWriter(note.getId(),
+        new HashSet<>(Arrays.asList("user2"))));
 
     authorizationService.setOwners(note.getId(),
         new HashSet<>(Arrays.asList("user1")));
@@ -1057,32 +1048,32 @@ public class NotebookTest extends AbstractInterpreterTest implements ParagraphJo
     authorizationService.setWriters(note.getId(),
         new HashSet<>(Arrays.asList("user1")));
 
-    assertEquals(authorizationService.isOwner(note.getId(),
-        new HashSet<>(Arrays.asList("user2"))), false);
-    assertEquals(authorizationService.isOwner(note.getId(),
-        new HashSet<>(Arrays.asList("user1"))), true);
+    assertFalse(authorizationService.isOwner(note.getId(),
+        new HashSet<>(Arrays.asList("user2"))));
+    assertTrue(authorizationService.isOwner(note.getId(),
+        new HashSet<>(Arrays.asList("user1"))));
 
-    assertEquals(authorizationService.isReader(note.getId(),
-        new HashSet<>(Arrays.asList("user4"))), false);
-    assertEquals(authorizationService.isReader(note.getId(),
-        new HashSet<>(Arrays.asList("user2"))), true);
+    assertFalse(authorizationService.isReader(note.getId(),
+        new HashSet<>(Arrays.asList("user4"))));
+    assertTrue(authorizationService.isReader(note.getId(),
+        new HashSet<>(Arrays.asList("user2"))));
 
-    assertEquals(authorizationService.isRunner(note.getId(),
-        new HashSet<>(Arrays.asList("user3"))), true);
-    assertEquals(authorizationService.isRunner(note.getId(),
-        new HashSet<>(Arrays.asList("user2"))), false);
+    assertTrue(authorizationService.isRunner(note.getId(),
+        new HashSet<>(Arrays.asList("user3"))));
+    assertFalse(authorizationService.isRunner(note.getId(),
+        new HashSet<>(Arrays.asList("user2"))));
 
-    assertEquals(authorizationService.isWriter(note.getId(),
-        new HashSet<>(Arrays.asList("user2"))), false);
-    assertEquals(authorizationService.isWriter(note.getId(),
-        new HashSet<>(Arrays.asList("user1"))), true);
+    assertFalse(authorizationService.isWriter(note.getId(),
+        new HashSet<>(Arrays.asList("user2"))));
+    assertTrue(authorizationService.isWriter(note.getId(),
+        new HashSet<>(Arrays.asList("user1"))));
 
     // Test clearing of permissions
     authorizationService.setReaders(note.getId(), Sets.<String>newHashSet());
-    assertEquals(authorizationService.isReader(note.getId(),
-        new HashSet<>(Arrays.asList("user2"))), true);
-    assertEquals(authorizationService.isReader(note.getId(),
-        new HashSet<>(Arrays.asList("user4"))), true);
+    assertTrue(authorizationService.isReader(note.getId(),
+        new HashSet<>(Arrays.asList("user2"))));
+    assertTrue(authorizationService.isReader(note.getId(),
+        new HashSet<>(Arrays.asList("user4"))));
 
     notebook.removeNote(note, anonymous);
   }
@@ -1099,37 +1090,37 @@ public class NotebookTest extends AbstractInterpreterTest implements ParagraphJo
     Note note = notebook.createNote("note1", new AuthenticationInfo(user1));
 
     // check that user1 is owner, reader, runner and writer
-    assertEquals(authorizationService.isOwner(note.getId(),
-        Sets.newHashSet(user1)), true);
-    assertEquals(authorizationService.isReader(note.getId(),
-        Sets.newHashSet(user1)), true);
-    assertEquals(authorizationService.isRunner(note.getId(),
-        Sets.newHashSet(user2)), true);
-    assertEquals(authorizationService.isWriter(note.getId(),
-        Sets.newHashSet(user1)), true);
+    assertTrue(authorizationService.isOwner(note.getId(),
+        Sets.newHashSet(user1)));
+    assertTrue(authorizationService.isReader(note.getId(),
+        Sets.newHashSet(user1)));
+    assertTrue(authorizationService.isRunner(note.getId(),
+        Sets.newHashSet(user2)));
+    assertTrue(authorizationService.isWriter(note.getId(),
+        Sets.newHashSet(user1)));
 
     // since user1 and user2 both have admin role, user2 will be reader and writer as well
-    assertEquals(authorizationService.isOwner(note.getId(),
-        Sets.newHashSet(user2)), false);
-    assertEquals(authorizationService.isReader(note.getId(),
-        Sets.newHashSet(user2)), true);
-    assertEquals(authorizationService.isRunner(note.getId(),
-        Sets.newHashSet(user2)), true);
-    assertEquals(authorizationService.isWriter(note.getId(),
-        Sets.newHashSet(user2)), true);
+    assertFalse(authorizationService.isOwner(note.getId(),
+        Sets.newHashSet(user2)));
+    assertTrue(authorizationService.isReader(note.getId(),
+        Sets.newHashSet(user2)));
+    assertTrue(authorizationService.isRunner(note.getId(),
+        Sets.newHashSet(user2)));
+    assertTrue(authorizationService.isWriter(note.getId(),
+        Sets.newHashSet(user2)));
 
     // check that user1 has note listed in his workbench
     Set<String> user1AndRoles = authorizationService.getRoles(user1);
     user1AndRoles.add(user1);
     List<NoteInfo> user1Notes = notebook.getNotesInfo(noteId -> authorizationService.isReader(noteId, user1AndRoles));
-    assertEquals(user1Notes.size(), 1);
+    assertEquals(1, user1Notes.size());
     assertEquals(user1Notes.get(0).getId(), note.getId());
 
     // check that user2 has note listed in his workbench because of admin role
     Set<String> user2AndRoles = authorizationService.getRoles(user2);
     user2AndRoles.add(user2);
     List<NoteInfo> user2Notes = notebook.getNotesInfo(noteId -> authorizationService.isReader(noteId, user2AndRoles));
-    assertEquals(user2Notes.size(), 1);
+    assertEquals(1, user2Notes.size());
     assertEquals(user2Notes.get(0).getId(), note.getId());
   }
 
@@ -1145,9 +1136,9 @@ public class NotebookTest extends AbstractInterpreterTest implements ParagraphJo
     assertTrue(config.containsKey(InterpreterSetting.PARAGRAPH_CONFIG_RUNONSELECTIONCHANGE));
     assertTrue(config.containsKey(InterpreterSetting.PARAGRAPH_CONFIG_TITLE));
     assertTrue(config.containsKey(InterpreterSetting.PARAGRAPH_CONFIG_CHECK_EMTPY));
-    assertEquals(config.get(InterpreterSetting.PARAGRAPH_CONFIG_RUNONSELECTIONCHANGE), false);
-    assertEquals(config.get(InterpreterSetting.PARAGRAPH_CONFIG_TITLE), true);
-    assertEquals(config.get(InterpreterSetting.PARAGRAPH_CONFIG_CHECK_EMTPY), false);
+    assertEquals(false, config.get(InterpreterSetting.PARAGRAPH_CONFIG_RUNONSELECTIONCHANGE));
+    assertEquals(true, config.get(InterpreterSetting.PARAGRAPH_CONFIG_TITLE));
+    assertEquals(false, config.get(InterpreterSetting.PARAGRAPH_CONFIG_CHECK_EMTPY));
 
     // The config_test interpreter sets the default parameters
     // in interpreter/config_test/interpreter-setting.json
@@ -1161,9 +1152,9 @@ public class NotebookTest extends AbstractInterpreterTest implements ParagraphJo
 
     // Check if the config_test interpreter default parameter takes effect
     LOGGER.info("p1.getConfig() =  " + p1.getConfig());
-    assertEquals(config.get(InterpreterSetting.PARAGRAPH_CONFIG_RUNONSELECTIONCHANGE), false);
-    assertEquals(config.get(InterpreterSetting.PARAGRAPH_CONFIG_TITLE), true);
-    assertEquals(config.get(InterpreterSetting.PARAGRAPH_CONFIG_CHECK_EMTPY), false);
+    assertEquals(false, config.get(InterpreterSetting.PARAGRAPH_CONFIG_RUNONSELECTIONCHANGE));
+    assertEquals(true, config.get(InterpreterSetting.PARAGRAPH_CONFIG_TITLE));
+    assertEquals(false, config.get(InterpreterSetting.PARAGRAPH_CONFIG_CHECK_EMTPY));
 
     // The mock1 interpreter does not set default parameters
     p1.setText("%mock1 sleep 1000");
@@ -1171,9 +1162,9 @@ public class NotebookTest extends AbstractInterpreterTest implements ParagraphJo
 
     // mock1 has no config setting in interpreter-setting.json, so keep the previous config
     LOGGER.info("changed intp p1.getConfig() =  " + p1.getConfig());
-    assertEquals(config.get(InterpreterSetting.PARAGRAPH_CONFIG_RUNONSELECTIONCHANGE), false);
-    assertEquals(config.get(InterpreterSetting.PARAGRAPH_CONFIG_TITLE), true);
-    assertEquals(config.get(InterpreterSetting.PARAGRAPH_CONFIG_CHECK_EMTPY), false);
+    assertEquals(false, config.get(InterpreterSetting.PARAGRAPH_CONFIG_RUNONSELECTIONCHANGE));
+    assertEquals(true, config.get(InterpreterSetting.PARAGRAPH_CONFIG_TITLE));
+    assertEquals(false, config.get(InterpreterSetting.PARAGRAPH_CONFIG_CHECK_EMTPY));
 
     // user manually change config
     p1.getConfig().put(InterpreterSetting.PARAGRAPH_CONFIG_RUNONSELECTIONCHANGE, true);
@@ -1183,9 +1174,9 @@ public class NotebookTest extends AbstractInterpreterTest implements ParagraphJo
 
     // manually config change take effect after execution
     LOGGER.info("changed intp p1.getConfig() =  " + p1.getConfig());
-    assertEquals(config.get(InterpreterSetting.PARAGRAPH_CONFIG_RUNONSELECTIONCHANGE), true);
-    assertEquals(config.get(InterpreterSetting.PARAGRAPH_CONFIG_TITLE), false);
-    assertEquals(config.get(InterpreterSetting.PARAGRAPH_CONFIG_CHECK_EMTPY), false);
+    assertEquals(true, config.get(InterpreterSetting.PARAGRAPH_CONFIG_RUNONSELECTIONCHANGE));
+    assertEquals(false, config.get(InterpreterSetting.PARAGRAPH_CONFIG_TITLE));
+    assertEquals(false, config.get(InterpreterSetting.PARAGRAPH_CONFIG_CHECK_EMTPY));
   }
 
   @Test
@@ -1231,7 +1222,7 @@ public class NotebookTest extends AbstractInterpreterTest implements ParagraphJo
 
     // restart interpreter with per user session enabled
     for (InterpreterSetting setting : note1.getBindedInterpreterSettings(new ArrayList<>())) {
-      setting.getOption().setPerNote(setting.getOption().SCOPED);
+      setting.getOption().setPerNote(InterpreterOption.SCOPED);
       notebook.getInterpreterSettingManager().restart(setting.getId());
     }
 
@@ -1290,7 +1281,7 @@ public class NotebookTest extends AbstractInterpreterTest implements ParagraphJo
     while (p1.getStatus() != Status.FINISHED) Thread.yield();
     while (p2.getStatus() != Status.FINISHED) Thread.yield();
 
-    assertNotEquals(p1.getReturn().message(), p2.getReturn().message().get(0).getData());
+    assertNotEquals(p1.getReturn().message().get(0).getData(), p2.getReturn().message().get(0).getData());
 
     notebook.removeNote(note1, anonymous);
     notebook.removeNote(note2, anonymous);
@@ -1456,8 +1447,8 @@ public class NotebookTest extends AbstractInterpreterTest implements ParagraphJo
   public void testGetAllNotesWithDifferentPermissions() throws IOException {
     List<Note> notes1 = notebook.getAllNotes(note -> authorizationService.isReader(note.getId(), Sets.newHashSet("user1")));
     List<Note> notes2 = notebook.getAllNotes(note -> authorizationService.isReader(note.getId(), Sets.newHashSet("user2")));
-    assertEquals(notes1.size(), 0);
-    assertEquals(notes2.size(), 0);
+    assertEquals(0, notes1.size());
+    assertEquals(0, notes2.size());
 
     //creates note and sets user1 owner
     Note note1 = notebook.createNote("note1", new AuthenticationInfo("user1"));
@@ -1465,27 +1456,27 @@ public class NotebookTest extends AbstractInterpreterTest implements ParagraphJo
     // note is public since readers and writers empty
     notes1 = notebook.getAllNotes(note -> authorizationService.isReader(note.getId(), Sets.newHashSet("user1")));
     notes2 = notebook.getAllNotes(note -> authorizationService.isReader(note.getId(), Sets.newHashSet("user2")));
-    assertEquals(notes1.size(), 1);
-    assertEquals(notes2.size(), 1);
+    assertEquals(1, notes1.size());
+    assertEquals(1, notes2.size());
 
     authorizationService.setReaders(note1.getId(), Sets.newHashSet("user1"));
     //note is public since writers empty
     notes1 = notebook.getAllNotes(note -> authorizationService.isReader(note.getId(), Sets.newHashSet("user1")));
     notes2 = notebook.getAllNotes(note -> authorizationService.isReader(note.getId(), Sets.newHashSet("user2")));
-    assertEquals(notes1.size(), 1);
-    assertEquals(notes2.size(), 1);
+    assertEquals(1, notes1.size());
+    assertEquals(1, notes2.size());
 
     authorizationService.setRunners(note1.getId(), Sets.newHashSet("user1"));
     notes1 = notebook.getAllNotes(note -> authorizationService.isReader(note.getId(), Sets.newHashSet("user1")));
     notes2 = notebook.getAllNotes(note -> authorizationService.isReader(note.getId(), Sets.newHashSet("user2")));
-    assertEquals(notes1.size(), 1);
-    assertEquals(notes2.size(), 1);
+    assertEquals(1, notes1.size());
+    assertEquals(1, notes2.size());
 
     authorizationService.setWriters(note1.getId(), Sets.newHashSet("user1"));
     notes1 = notebook.getAllNotes(note -> authorizationService.isReader(note.getId(), Sets.newHashSet("user1")));
     notes2 = notebook.getAllNotes(note -> authorizationService.isReader(note.getId(), Sets.newHashSet("user2")));
-    assertEquals(notes1.size(), 1);
-    assertEquals(notes2.size(), 0);
+    assertEquals(1, notes1.size());
+    assertEquals(0, notes2.size());
   }
 
   @Test
@@ -1496,8 +1487,8 @@ public class NotebookTest extends AbstractInterpreterTest implements ParagraphJo
 
     List<Note> notes1 = notebook.getAllNotes(note -> authorizationService.isReader(note.getId(), Sets.newHashSet("user1")));
     List<Note> notes2 = notebook.getAllNotes(note -> authorizationService.isReader(note.getId(), Sets.newHashSet("user2")));
-    assertEquals(notes1.size(), 0);
-    assertEquals(notes2.size(), 0);
+    assertEquals(0, notes1.size());
+    assertEquals(0, notes2.size());
 
     // user1 creates note
     Note notePublic = notebook.createNote("note1", new AuthenticationInfo("user1"));
@@ -1505,16 +1496,16 @@ public class NotebookTest extends AbstractInterpreterTest implements ParagraphJo
     // both users have note
     notes1 = notebook.getAllNotes(note -> authorizationService.isReader(note.getId(), Sets.newHashSet("user1")));
     notes2 = notebook.getAllNotes(note -> authorizationService.isReader(note.getId(), Sets.newHashSet("user2")));
-    assertEquals(notes1.size(), 1);
-    assertEquals(notes2.size(), 1);
+    assertEquals(1, notes1.size());
+    assertEquals(1, notes2.size());
     assertEquals(notes1.get(0).getId(), notePublic.getId());
     assertEquals(notes2.get(0).getId(), notePublic.getId());
 
     // user1 is only owner
-    assertEquals(authorizationService.getOwners(notePublic.getId()).size(), 1);
-    assertEquals(authorizationService.getReaders(notePublic.getId()).size(), 0);
-    assertEquals(authorizationService.getRunners(notePublic.getId()).size(), 0);
-    assertEquals(authorizationService.getWriters(notePublic.getId()).size(), 0);
+    assertEquals(1, authorizationService.getOwners(notePublic.getId()).size());
+    assertEquals(0, authorizationService.getReaders(notePublic.getId()).size());
+    assertEquals(0, authorizationService.getRunners(notePublic.getId()).size());
+    assertEquals(0, authorizationService.getWriters(notePublic.getId()).size());
 
     // case of private note
     System.setProperty(ConfVars.ZEPPELIN_NOTEBOOK_PUBLIC.getVarName(), "false");
@@ -1526,8 +1517,8 @@ public class NotebookTest extends AbstractInterpreterTest implements ParagraphJo
     // check that still 1 note per user
     notes1 = notebook.getAllNotes(note -> authorizationService.isReader(note.getId(), Sets.newHashSet("user1")));
     notes2 = notebook.getAllNotes(note -> authorizationService.isReader(note.getId(), Sets.newHashSet("user2")));
-    assertEquals(notes1.size(), 1);
-    assertEquals(notes2.size(), 1);
+    assertEquals(1, notes1.size());
+    assertEquals(1, notes2.size());
 
     // create private note
     Note notePrivate = notebook.createNote("note2", new AuthenticationInfo("user1"));
@@ -1535,15 +1526,15 @@ public class NotebookTest extends AbstractInterpreterTest implements ParagraphJo
     // only user1 have notePrivate right after creation
     notes1 = notebook.getAllNotes(note -> authorizationService.isReader(note.getId(), Sets.newHashSet("user1")));
     notes2 = notebook.getAllNotes(note -> authorizationService.isReader(note.getId(), Sets.newHashSet("user2")));
-    assertEquals(notes1.size(), 2);
-    assertEquals(notes2.size(), 1);
+    assertEquals(2, notes1.size());
+    assertEquals(1, notes2.size());
     assertEquals(true, notes1.contains(notePrivate));
 
     // user1 have all rights
-    assertEquals(authorizationService.getOwners(notePrivate.getId()).size(), 1);
-    assertEquals(authorizationService.getReaders(notePrivate.getId()).size(), 1);
-    assertEquals(authorizationService.getRunners(notePrivate.getId()).size(), 1);
-    assertEquals(authorizationService.getWriters(notePrivate.getId()).size(), 1);
+    assertEquals(1, authorizationService.getOwners(notePrivate.getId()).size());
+    assertEquals(1, authorizationService.getReaders(notePrivate.getId()).size());
+    assertEquals(1, authorizationService.getRunners(notePrivate.getId()).size());
+    assertEquals(1, authorizationService.getWriters(notePrivate.getId()).size());
 
     //set back public to true
     System.setProperty(ConfVars.ZEPPELIN_NOTEBOOK_PUBLIC.getVarName(), "true");
@@ -1603,7 +1594,7 @@ public class NotebookTest extends AbstractInterpreterTest implements ParagraphJo
 
 
   private interface StatusChangedListener {
-    void onStatusChanged(Job job, Status before, Status after);
+    void onStatusChanged(Job<?> job, Status before, Status after);
   }
 
 
diff --git a/zeppelin-zengine/src/test/java/org/apache/zeppelin/notebook/ParagraphTest.java b/zeppelin-zengine/src/test/java/org/apache/zeppelin/notebook/ParagraphTest.java
index bc05f7a..4bd41f9 100644
--- a/zeppelin-zengine/src/test/java/org/apache/zeppelin/notebook/ParagraphTest.java
+++ b/zeppelin-zengine/src/test/java/org/apache/zeppelin/notebook/ParagraphTest.java
@@ -24,7 +24,6 @@ import static org.junit.Assert.assertNotNull;
 import static org.mockito.Matchers.any;
 import static org.mockito.Matchers.anyString;
 import static org.mockito.Matchers.eq;
-import static org.mockito.Mockito.doNothing;
 import static org.mockito.Mockito.doReturn;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.spy;
@@ -64,9 +63,6 @@ import org.junit.Rule;
 import org.junit.Test;
 import org.junit.rules.ExpectedException;
 
-import java.util.HashMap;
-import java.util.Map;
-
 import org.mockito.Mockito;
 
 import com.google.common.collect.Lists;
@@ -228,10 +224,10 @@ public class ParagraphTest extends AbstractInterpreterTest {
     final Paragraph paragraph = new Paragraph(note, null);
     final String paragraphId = paragraph.getId();
 
-    final AngularObject nameAO = AngularObjectBuilder.build("name", "DuyHai DOAN", noteId,
+    final AngularObject<String> nameAO = AngularObjectBuilder.build("name", "DuyHai DOAN", noteId,
             paragraphId);
 
-    final AngularObject ageAO = AngularObjectBuilder.build("age", 34, noteId, null);
+    final AngularObject<Integer> ageAO = AngularObjectBuilder.build("age", 34, noteId, null);
 
     when(note.getId()).thenReturn(noteId);
     when(registry.get("name", noteId, paragraphId)).thenReturn(nameAO);
@@ -390,14 +386,14 @@ public class ParagraphTest extends AbstractInterpreterTest {
 
     AuthenticationInfo user1 = new AuthenticationInfo("user1");
     spyParagraph.setAuthenticationInfo(user1);
-    
+
     spyParagraph.setText("val x = \"usr={user.ent}&pass={password.ent}\"");
-    
+
     // Credentials should only be injected when it is enabled for an interpreter or when specified in a local property
     when(mockInterpreter.getProperty(Constants.INJECT_CREDENTIALS, "false")).thenReturn("false");
     spyParagraph.jobRun();
     verify(mockInterpreter).interpret(eq("val x = \"usr={user.ent}&pass={password.ent}\""), any(InterpreterContext.class));
-   
+
     when(mockInterpreter.getProperty(Constants.INJECT_CREDENTIALS, "false")).thenReturn("true");
     mockInterpreter.setProperty(Constants.INJECT_CREDENTIALS, "true");
     spyParagraph.jobRun();
@@ -408,6 +404,6 @@ public class ParagraphTest extends AbstractInterpreterTest {
     spyParagraph.getLocalProperties().put(Constants.INJECT_CREDENTIALS, "true");
     spyParagraph.jobRun();
     verify(mockInterpreter).interpret(eq("val x = \"usr=user&pass=pwd\""), any(InterpreterContext.class));
-    
+
   }
 }
diff --git a/zeppelin-zengine/src/test/java/org/apache/zeppelin/resource/DistributedResourcePoolTest.java b/zeppelin-zengine/src/test/java/org/apache/zeppelin/resource/DistributedResourcePoolTest.java
index 54c09b6..8c07c2e 100644
--- a/zeppelin-zengine/src/test/java/org/apache/zeppelin/resource/DistributedResourcePoolTest.java
+++ b/zeppelin-zengine/src/test/java/org/apache/zeppelin/resource/DistributedResourcePoolTest.java
@@ -20,7 +20,6 @@ import com.google.gson.Gson;
 import org.apache.zeppelin.interpreter.AbstractInterpreterTest;
 import org.apache.zeppelin.interpreter.InterpreterContext;
 import org.apache.zeppelin.interpreter.InterpreterException;
-import org.apache.zeppelin.interpreter.InterpreterOption;
 import org.apache.zeppelin.interpreter.InterpreterResult;
 import org.apache.zeppelin.interpreter.InterpreterSetting;
 import org.apache.zeppelin.interpreter.remote.RemoteInterpreter;
@@ -42,6 +41,7 @@ public class DistributedResourcePoolTest extends AbstractInterpreterTest {
   private InterpreterContext context;
 
 
+  @Override
   @Before
   public void setUp() throws Exception {
     super.setUp();
@@ -59,6 +59,7 @@ public class DistributedResourcePoolTest extends AbstractInterpreterTest {
     intp2.open();
   }
 
+  @Override
   @After
   public void tearDown() throws Exception {
     interpreterSettingManager.close();
@@ -96,7 +97,6 @@ public class DistributedResourcePoolTest extends AbstractInterpreterTest {
         set.addAll(pool3.getAll());
 
         ResourceSet remoteSet = new ResourceSet();
-        Gson gson = new Gson();
         for (Resource s : set) {
           RemoteResource remoteResource = RemoteResource.fromJson(s.toJson());
           remoteResource.setResourcePoolConnector(this);
@@ -150,7 +150,6 @@ public class DistributedResourcePoolTest extends AbstractInterpreterTest {
   @Test
   public void testResourcePoolUtils() throws InterpreterException {
     Gson gson = new Gson();
-    InterpreterResult ret;
 
     // when create some resources
     intp1.interpret("put note1:paragraph1:key1 value1", context);
diff --git a/zeppelin-zengine/src/test/java/org/apache/zeppelin/scheduler/RemoteSchedulerTest.java b/zeppelin-zengine/src/test/java/org/apache/zeppelin/scheduler/RemoteSchedulerTest.java
index 8b84243..1a7baf7 100644
--- a/zeppelin-zengine/src/test/java/org/apache/zeppelin/scheduler/RemoteSchedulerTest.java
+++ b/zeppelin-zengine/src/test/java/org/apache/zeppelin/scheduler/RemoteSchedulerTest.java
@@ -70,7 +70,7 @@ public class RemoteSchedulerTest extends AbstractInterpreterTest
 
     Scheduler scheduler = intpA.getScheduler();
 
-    Job job = new Job("jobId", "jobName", null) {
+    Job<Object> job = new Job<Object>("jobId", "jobName", null) {
       Object results;
 
       @Override
@@ -139,7 +139,7 @@ public class RemoteSchedulerTest extends AbstractInterpreterTest
 
     Scheduler scheduler = intpA.getScheduler();
 
-    Job job1 = new Job("jobId1", "jobName1", null) {
+    Job<Object> job1 = new Job<Object>("jobId1", "jobName1", null) {
       Object results;
       InterpreterContext context = InterpreterContext.builder()
           .setNoteId("noteId")
@@ -186,7 +186,7 @@ public class RemoteSchedulerTest extends AbstractInterpreterTest
       }
     };
 
-    Job job2 = new Job("jobId2", "jobName2", null) {
+    Job<Object> job2 = new Job<Object>("jobId2", "jobName2", null) {
       public Object results;
       InterpreterContext context = InterpreterContext.builder()
           .setNoteId("noteId")
@@ -245,7 +245,7 @@ public class RemoteSchedulerTest extends AbstractInterpreterTest
       cycles++;
     }
     assertTrue(job1.isRunning());
-    assertTrue(job2.getStatus() == Status.PENDING);
+    assertEquals(Status.PENDING, job2.getStatus());
 
     job2.abort();
 
diff --git a/zeppelin-zengine/src/test/java/org/apache/zeppelin/storage/LocalConfigStorageTest.java b/zeppelin-zengine/src/test/java/org/apache/zeppelin/storage/LocalConfigStorageTest.java
index 5352d9b..85763f9 100644
--- a/zeppelin-zengine/src/test/java/org/apache/zeppelin/storage/LocalConfigStorageTest.java
+++ b/zeppelin-zengine/src/test/java/org/apache/zeppelin/storage/LocalConfigStorageTest.java
@@ -25,6 +25,7 @@ import java.io.BufferedWriter;
 import java.io.File;
 import java.io.IOException;
 import java.io.InputStream;
+import java.nio.charset.StandardCharsets;
 import java.nio.file.Files;
 import java.nio.file.Path;
 import java.nio.file.Paths;
@@ -42,7 +43,7 @@ public class LocalConfigStorageTest {
         try {
             FileUtils.atomicWriteToFile(TEST_STRING, destinationFile);
             try (InputStream is = Files.newInputStream(destination)) {
-                String read = IOUtils.toString(is);
+                String read = IOUtils.toString(is, StandardCharsets.UTF_8);
                 assertEquals(TEST_STRING, read);
             }
         } finally {
@@ -59,7 +60,7 @@ public class LocalConfigStorageTest {
         try {
             FileUtils.atomicWriteToFile(TEST_STRING, destinationFile);
             try (InputStream is = Files.newInputStream(destination)) {
-                String read = IOUtils.toString(is);
+                String read = IOUtils.toString(is, StandardCharsets.UTF_8);
                 assertEquals(TEST_STRING, read);
             }
         } finally {